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

📄 upmakersppack.cpp

📁 SMS gateway. SMS protocol for CHINA mobile, unicom, lingtong. Using mysql to exchange message.
💻 CPP
字号:
/**********************************************************************  FileName            : UpMakeRspPack.cpp  Description         : 上端应答包构造模块  Version             : 1.0  Date                : 2003年6月19日  Author              : 刘荣辉  Other               : 根据协议类型调用相应协议包构造模块***********************************************************************/#include "UpNode.h"//int MakeSMGPRsp(void *ReqPack, void **RspPack);//int MakeCMPPRsp(void *ReqPack, void **RspPack);//*ReqPack为请求包的指针,在本函数内动态分配内存来存储构造的应答包,//通过指针的指针**RspPack传递应答包的地址//应答包所占内存的释放必须在本函数返回后进行//=====================================================================================int  CUpNode::MakeRspPack(void *ReqPack, void **RspPack){  int RetCode;    if(Protocol==0)  {  	RetCode=MakeCMPPRsp(ReqPack, RspPack);  //形成CMPP应答包,返回值为状态码  			  }  else if(Protocol==1)  {  	RetCode=MakeSMGPRsp(ReqPack, RspPack);  //形成SMGP应答包,返回值为状态码  }  return RetCode;}//=====================================================================================//==================================SMGP应答包构造模块=================================//=====================================================================================int CUpNode::MakeSMGPRsp(void *ReqPack, void **RspPack){  unsigned int PackType;  int Status;  int Result;  char timebuf[16];    Status = 0;	//作为参数值返回,据此来判断是否重连,不重连时其值与Result相同  Result = 0;	//需要返回的应答包的状态码    /*//------------------debug---------------------------  printf("\n===========MakeSMGPRsp============= \n");  unsigned char *ptmp;  ptmp=(unsigned char *)ReqPack;  int len;  len = ntohl(*(int *)ReqPack);  printf("PackLen=[%d]\n",len);  for(int i=0;i<len;i++)  {     printf("%02x ",*(ptmp+i));     if(((i+1)%4)==0) printf("  ");     if((i+1)==12) printf("\n");  }  printf("\n=========================================== \n");  //------------------debug end---------------------------*/    PackType = ntohl(*(unsigned int *)((char *)ReqPack+4));  switch(PackType)  {   case REQUEST_ID_DELIVER:   {   	SMGP_Deliver * tReqPack = (SMGP_Deliver *)ReqPack;   	//数据包(Deliver)合法性检查  	if(ntohl(tReqPack->msgHead.nPacketLength) > sizeof(SMGP_Deliver))  	{  		Result=36;	//非法短消息长度  		Status=999;	//需要重新建立连接  		break;  	}  	//???????其他字段的检查????????  	else if(0)  	{  		  	}  	if((ShowLog==3) || (ShowLog==1))	//显示收到的Deliver包  	{  		WrSystemLog->getTime(timebuf);  		printf("\n===================收到SMGP_Deliver包==================\n");	    printf("接收时间:%s\n用户手机号:%s\n目的号码:%s\n短信内容:%s",timebuf,tReqPack->sSrcTermId,tReqPack->sDestTermId,tReqPack->Deliver_Msg.sMsgContent);	    printf("\n=======================================================\n");  	}	//printf("\n MsgLen=[%d].\n",tReqPack->nMsgLength);	tReqPack->nMsgLength = ntohl(tReqPack->msgHead.nPacketLength) + sizeof(tReqPack->Deliver_Msg) - sizeof(SMGP_Deliver);	//printf("\n MsgLen=[%d].\n",tReqPack->nMsgLength);  	//形成应答包(Deliver_Rsp)  	SMGP_DeliverResp * tRspPack = (SMGP_DeliverResp *)malloc(sizeof(SMGP_DeliverResp));  	tRspPack->msgHead.nPacketLength = htonl(sizeof(SMGP_DeliverResp));  	tRspPack->msgHead.nRequestId = htonl(REQUEST_ID_DELIVER_RESP);  	tRspPack->msgHead.nSequenceId = tReqPack->msgHead.nSequenceId;  	memcpy(tRspPack->sMsgId , tReqPack->sMsgId, sizeof(tRspPack->sMsgId));  	tRspPack->nResult = Status;  	*RspPack = (void *)tRspPack;  	break;   }   case REQUEST_ID_ACTIVE_TEST:   {  	SMGP_Head * tReqPack = (SMGP_Head *)ReqPack;  	//数据包(Deliver)合法性检查  	if(ntohl(tReqPack->nPacketLength) != sizeof(SMGP_Head))  	{  		Result=36;	//非法短消息长度  		Status=999;	//需要重新建立连接  		break;  	}  	//形成应答包(Deliver_Rsp)  	SMGP_Head * tRspPack = (SMGP_Head *)malloc(sizeof(SMGP_Head));  	tRspPack->nPacketLength = htonl(sizeof(SMGP_Head));  	tRspPack->nRequestId = htonl(REQUEST_ID_ACTIVE_TEST_RESP);  	tRspPack->nSequenceId = tReqPack->nSequenceId;    	*RspPack = (void *)tRspPack;	free(ReqPack);	//释放请求包所占内存,Active_Test包至此处理完毕  	Status = 1;	//Active_Test包至此处理完毕,不再放进接收队列中  	break;   }	   case REQUEST_ID_EXIT:  //能否马上返回应答包?????   {	  	  	//*RspPack = (void *)tRspPack;	Status=1000;	//需要重新建立连接	*RspPack = NULL;  	break;   }	   default :   {   	Result=11;	//命令字错   	Status=999;	//需要重新建立连接  	  	//*RspPack = (void *)tRspPack;	*RspPack = NULL;  	break;   }  }//switch()    return Status;}//=====================================================================================//==================================CMPP应答包构造模块=================================//=====================================================================================int CUpNode::MakeCMPPRsp(void *ReqPack, void **RspPack){  unsigned int PackType;  int Status;  int Result;  //char timebuf[16];    Status = 0;	//作为参数值返回,据此来判断是否重连,不重连时其值与Result相同  Result = 0;	//需要返回的应答包的状态码  PackType = ntohl(*(unsigned int *)((char *)ReqPack+4));  switch(PackType)  {   case CMPP_DELIVER:   {   	CMPP_Deliver * tReqPack = (CMPP_Deliver *)ReqPack;   	//数据包(Deliver)合法性检查  	if(ntohl(tReqPack->Head.Total_Length) > sizeof(CMPP_Deliver))  	{  		Result=6;	//超过最大信息长  		Status=999;	//需要重新建立连接  		break;  	}  	//???????其他字段的检查????????  	else if(0)  	{  		  	}	/*  	if((ShowLog==3) || (ShowLog==1))	//显示收到的Deliver包  	{  		WrSystemLog->getTime(timebuf);  		printf("\n===================收到CMPP_Deliver包==================\n");	    printf("接收时间:%s\n用户手机号:%s\n目的号码:%s\n短信内容:%s",timebuf,tReqPack->Src_terminal_Id,tReqPack->Dest_Id,tReqPack->Deliver_Msg.Msg_Content);	    printf("\n=======================================================\n");  	}	*/	//printf("\n UP MsgLen=[%d].\n",tReqPack->Msg_Length);	tReqPack->Msg_Length = ntohl(tReqPack->Head.Total_Length) + sizeof(tReqPack->Deliver_Msg) - sizeof(CMPP_Deliver);	//printf("\n UP MsgLen=[%d].\n",tReqPack->Msg_Length);  	//形成应答包(Deliver_Rsp)  	CMPP_Deliver_Resp * tRspPack = (CMPP_Deliver_Resp *)malloc(sizeof(CMPP_Deliver_Resp));  	tRspPack->Head.Total_Length = htonl(sizeof(CMPP_Deliver_Resp));  	tRspPack->Head.Command_Id = htonl(CMPP_DELIVER_RESP);  	tRspPack->Head.Sequence_Id = tReqPack->Head.Sequence_Id;  	//memcpy(tRspPack->Msg_Id , tReqPack->Msg_Id, sizeof(tRspPack->Msg_Id));	tRspPack->Msg_Id = tReqPack->Msg_Id;  	tRspPack->Result = Status;   	*RspPack = (void *)tRspPack;  	break;   }   case CMPP_ACTIVE_TEST:   {  	CMPP_Active_Test * tReqPack = (CMPP_Active_Test *)ReqPack;  	//数据包(Deliver)合法性检查  	if(ntohl(tReqPack->Total_Length) != sizeof(CMPP_Active_Test))  	{  		Result=4;	//消息长度错  		Status=999;	//需要重新建立连接  		break;  	}  	//形成应答包(Deliver_Rsp)  	CMPP_Active_Test_Resp * tRspPack = (CMPP_Active_Test_Resp *)malloc(sizeof(CMPP_Active_Test_Resp));  	tRspPack->Head.Total_Length = htonl(sizeof(CMPP_Active_Test_Resp));  	tRspPack->Head.Command_Id = htonl(CMPP_ACTIVE_TEST_RESP);  	tRspPack->Head.Sequence_Id = tReqPack->Sequence_Id;  	  	*RspPack = (void *)tRspPack;	free(ReqPack);	//释放请求包所占内存,Active_Test包至此处理完毕  	Status = 1;	//Active_Test包至此处理完毕,不再放进接收队列中	break;   }   case CMPP_TERMINATE:  //能否马上返回应答包?????   {  	  	//*RspPack = (void *)tRspPack;	//printf("\n MakeCMPPRsp: Got a CMPP_TERMINATE! Connection is to be lost!\n");  	Status=1000;	//需要重新建立连接	*RspPack = NULL;  	break;   }   //------------------------来自下节点的请求包------------------------   case CMPP_CONNECT:     {	  	  	//*RspPack = (void *)tRspPack;	*RspPack = NULL;  	break;   }	   case CMPP_SUBMIT:     {	  	  	//*RspPack = (void *)tRspPack;	*RspPack = NULL;  	break;   }   case CMPP_QUERY:  //能否马上返回应答包?????   {	  	  	//*RspPack = (void *)tRspPack;	*RspPack = NULL;  	break;   }	   case CMPP_CANCEL:  //能否马上返回应答包?????   {	  	  	//*RspPack = (void *)tRspPack;	*RspPack = NULL;  	break;   }	   default :   {   	Result=11;	//命令字错  	Status=999;	//需要重新建立连接  	  	//*RspPack = (void *)tRspPack;	*RspPack = NULL;  	break;   }  }//switch()   return Status;}

⌨️ 快捷键说明

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