⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tap.c

📁 使用TAP的蜂窝型GSM手机短消息服务中心
💻 C
📖 第 1 页 / 共 2 页
字号:
/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */static void TAP_checksum(char *message){	int 	i,		checksum;			checksum  = 0;	for (i=0; i<sms_strlen(message); i++)	{	checksum += message[i];	}	checksum = (checksum & 0x0FFF);	/* Mask low 12Bits */	message[i]   = (((checksum & 0x0F00) >> 8) | 0x30);	message[i+1] = (((checksum & 0x00F0) >> 4) | 0x30);	message[i+2] = (((checksum & 0x000F)     ) | 0x30);	message[i+3] = '\0';}/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */static void TAP_hangup(void){	default_hangup((DRIVER_DEFAULT_ENV *)(&driver_env));}/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */static int TAP_send_disconnect(void){	lprintf(LOG_STANDARD, "Disconnect...\n");		if (TAP_DISCONNECT)	{			twrite(FD, REQ7, sms_strlen(REQ7), WRITETIMEOUT);		if (expstr(FD, buf, ACK8, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)		{			lprintf(LOG_STANDARD, "Disconnected from SMSC\n");		}		else		{	lprintf(LOG_STANDARD, "Failed to disconnect from SMSC\n");					TAP_hangup();			return ETAP_NODISCONNECT;		}	}	return 0;}/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */static int TAP_login(void){	int 	i;	lprintf(LOG_STANDARD, "Login...\n");		/* Resend the S_CR every 2 seconds	*/	/* until ID= received, only try		*/	/* 5 times then give up.		*/	sms_usleep(INITLOGINSLEEP);	for (i=0; i < MAX_TRIES; i++)	{		twrite(FD, REQ1, sms_strlen(REQ1), WRITETIMEOUT);		if (expstr(FD, buf, ACK1, MAX_RESPONSE_BUFSIZE, LOGINTIMEOUT) == 0)		{				lprintf(LOG_STANDARD, "SMSC Acknowledgment received\n");				break;		}		lprintf(LOG_STANDARD, "SMSC Retry for Acknowledgment\n");			sms_usleep(LOGINSLEEP);	}	if (i == MAX_TRIES)	{		lprintf(LOG_STANDARD, "Failed Acknowledgment %ld retries attempted\n", MAX_TRIES);				TAP_hangup();		return ETAP_NOACK;	}		/* Send S_ESC <TAP_SELECT> S_CR and get back	*/	/* the acknowledgement S_ACK S_CR	*/	twrite(FD, REQ2a,      sms_strlen(REQ2a),      WRITETIMEOUT);	twrite(FD, TAP_SELECT, sms_strlen(TAP_SELECT), WRITETIMEOUT);	twrite(FD, REQ2b,      sms_strlen(REQ2b),      WRITETIMEOUT);	if (expstr(FD, buf, ACK2, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)	{		lprintf(LOG_STANDARD, "Login successful\n");	}	else	{	lprintf(LOG_STANDARD, "Login failed\n");			TAP_hangup();		return ETAP_NOLOGIN;	}	if (expstr(FD, buf, ACK3, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)	{		lprintf(LOG_STANDARD, "Ready to receive message\n");	}	else	{	lprintf(LOG_STANDARD, "SMSC NOT Ready to receive message\n");				TAP_hangup();		return ETAP_NOREADY;	}	return 0;}/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */static void TAP_buildmessage(char *tap_message, char *msisdn, char *message){	int 	i;	char	*ptr;	/* ---------------------------- */	tap_message[0] = '\0';		sms_strcat(tap_message, REQ3);	sms_strcat(tap_message, msisdn);	sms_strcat(tap_message, REQ4);		/* Convert message so that it contains	*/	/* only TAP valid characters		*/	/* any invalid characters will be	*/	/* mapped to a SPACE			*/	/* Add to tap_message			*/	ptr = tap_message;	while(*ptr != '\0')	{	ptr++;	}	for (i=0; i<sms_strlen(message) +1; i++)	{	*ptr = TAP_charset[(int)message[i]];		ptr++;	}	*ptr = '\0';	sms_strcat(tap_message, REQ5);	/* Generate TAP checksum. Consisting	*/	/* of 3 characters. Append this to end	*/	/* of tap_message.			*/	TAP_checksum(tap_message);	sms_strcat(tap_message, REQ6);}/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */static int TAP_sendmessage(char *msisdn, char *message){	char 	tap_message[MAX_MESSAGE + MAX_ENVELOPE];	TAP_buildmessage(tap_message, msisdn, message);		twrite(FD, tap_message, sms_strlen(tap_message), WRITETIMEOUT);	if (TAP_RESPONSE)	{			if (expstr(FD, buf, ACK4, MAX_RESPONSE_BUFSIZE, DELIVERTIMEOUT) == 0)		{			lprintf(LOG_STANDARD, "Received Message Response: %s\n", buf);		}		else		{	lprintf(LOG_STANDARD, "No Message Response\n");						TAP_hangup();			return ETAP_NOMESSAGE;		}	}	if (expstr(FD, buf, ACK5, MAX_RESPONSE_BUFSIZE, TIMEOUT) == 0)	{		lprintf(LOG_STANDARD, "Successful message submission\n");	}	else	{ 	if (strncmp(&buf[sms_strlen(buf) - sms_strlen(ACK6)], ACK6, sms_strlen(ACK6)) == 0)		{			lprintf(LOG_STANDARD, "Message submission failed - Transmission incomprehensible\n");		}		else if (strncmp(&buf[sms_strlen(buf) - sms_strlen(ACK7)], ACK7, sms_strlen(ACK7)) == 0)		{			lprintf(LOG_STANDARD, "Message submission failed - Problem with message\n");		}		else		{	lprintf(LOG_STANDARD, "Message submission failed - Reason Unknown\n");		}				TAP_hangup();		return ETAP_NODELIVERY;	}	return 0;}/* -------------------------------------------------------------------- *//* -------------------------------------------------------------------- */DEVICE_ENTRY tap_device = {	"TAP",	resource_list,	(DRIVER_DEFAULT_ENV *)(&driver_env),	default_init,	default_main,	default_validate_numeric_id,	default_dial,	default_hangup,	TAP_send_disconnect,	default_multiple_counted_deliver,	TAP_sendmessage,	TAP_login};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -