📄 nsmgp.c
字号:
// INFO(" sizeof(SMGP3_SUBMIT)=%d\n",sizeof(SMGP3_SUBMIT));
// INFO(" sizeof(TLinkID)=%d\n",sizeof(TLinkID));
// INFO(" sizeof(TSubmitMsgType)=%d\n",sizeof(TSubmitMsgType));
memset( &TLinkID ,0, sizeof(TLinkID));
memset( &TChargeUserType ,0, sizeof(TLV));
memset( &TSubmitMsgType ,0, sizeof(TLV));
memset( &TSpDealResult ,0, sizeof(TLV));
//---------------------------------------------
Total_Length = LEN_SMGP_HEAD +LEN_SMGP_SUBMIT+submit->MsgLength ; //12+135+msg+TLV
// INFO(" before1 : TLV len=%d\n",Total_Length);
Total_Length+=sizeof(TLinkID); //+24
if( subMsgType != 200)
Total_Length+=sizeof(TSubmitMsgType); //+5
if( spDealRes != 200)
Total_Length+=sizeof(TSpDealResult); //+5
// INFO(" after1 : TLV len=%d\n",Total_Length);
//--------------------------
memset(buffer,0,sizeof(buffer));
// Message Header
MakeHead(buffer, Total_Length, Command_ID, SequenceNum);
p = buffer+ LEN_SMGP_HEAD;
//--new structure-------------------------------------------
memcpy(p,submit, sizeof(SMGP3_SUBMIT));
p+=sizeof(SMGP3_SUBMIT) ;
// MsgContent : string
memcpy(p, content , submit->MsgLength);
p += submit->MsgLength;
//---------------------------------------------
// Reserve : String
//-------------------------------------
// strncpy(p, "00000000",8);
p += 8;
//可变参数
//-----------------------------------------------
// TChargeUserType.Paramater_Tag=0x004 ;
// TChargeUserType.Length=1 ;
// TChargeUserType.Value=3 ; //0: 对接收者收费,3: 由ChargeTermID决定.
//-----------------------
var1= 0x003 ;
TLinkID.Tag= htons( var1 ) ;
var1= 20 ;
TLinkID.Length= htons( var1 ) ; //
memcpy( TLinkID.Value,linkid,20);
var1= 0x00B ;
TSubmitMsgType.Paramater_Tag= htons(var1 ) ;
var1= 1;
TSubmitMsgType.Length= htons( var1 ) ;
if( subMsgType==13) var1=13;
if( subMsgType==15) var1=15;
// INFO(" ....A1SubmitMsgType.Value=%d \n", var1);
TSubmitMsgType.Value= subMsgType ;
// INFO(" ....A2SubmitMsgType.Value=%d \n", TSubmitMsgType.Value );
var1= 0x00C ;
TSpDealResult.Paramater_Tag= htons( var1 ) ;
var1= 1;
TSpDealResult.Length= htons( var1 ) ;
// INFO(" ....C1 SpDealResult.Value=%d \n", spDealRes);
TSpDealResult.Value= spDealRes ;
// INFO(" ....C2 SpDealResult.Value=%d \n", htons(spDealRes));
//--------------------------------------
memcpy(p, &TLinkID ,sizeof(TLinkID));
p+=sizeof(TLinkID);
if( subMsgType != 200)
{
memcpy(p, &TSubmitMsgType ,sizeof(TSubmitMsgType));
p+=sizeof(TSubmitMsgType);
}
if( spDealRes != 200)
{
memcpy(p, &TSpDealResult ,sizeof(TSpDealResult));
p+=sizeof(TSpDealResult);
}
//############################################
#if 0
memcpy(p, (unsigned char *)&TLinkID.Tag, 2);
p += 2;
memcpy(p, (unsigned char *)&TLinkID.Length, 2);
p += 2;
memcpy( TLinkID.Value,linkid,20);
p += 20;
if( subMsgType != 200)
{
memcpy(p, (unsigned char *)&TSubmitMsgType.Paramater_Tag, 2);
p += 2;
memcpy(p, (unsigned char *)&TSubmitMsgType.Length, 2);
p += 2;
memcpy(p, (unsigned char *)&TSubmitMsgType.Value, 1);
p += 1;
}
if( spDealRes != 200)
{
memcpy(p, (unsigned char *)&TSpDealResult.Paramater_Tag, 2);
p += 2;
memcpy(p, (unsigned char *)&TSpDealResult.Length, 2);
p += 2;
memcpy(p, (unsigned char *)&TSpDealResult.Value, 1);
p += 1;
}
#endif
//###########################################
//-----------------------------------------------
// memcpy(p, submit->Paramater,submit->ParamaterLen);
// p += submit->ParamaterLen
for (i = 0; i < 30; i++)
{
poll_list.fd = Socket_fd;
poll_list.events = POLLOUT;
res = poll(&poll_list, (unsigned int) 1, 1000);
if (res == 0) {
continue;
} else if (res < 0) {
if (errno == EINTR || errno == EAGAIN)
continue;
else
{
INFO( "[-ERR]: poll(2) () Failed: %s\n", strerror(errno));
return (-1);
}
}
ret = write(Socket_fd, &buffer[bytes_written], Total_Length - bytes_written);
if (ret < 0)
{
if (errno == EINTR || errno == EAGAIN)
continue;
else
{
INFO( "[-ERR]: write(2) ( %d ) Failed: %s\n", Total_Length, strerror(errno));
return (-1);
}
}
bytes_written += ret;
if (bytes_written == Total_Length)
break;
}
if ( bytes_written < Total_Length ){
INFO( "[-ERR]: write(2) ( %d ) Failed: %s\n", Total_Length, strerror(errno));
return (-1);
}
//INFO(" sent bytes :%d\n",bytes_written);
INFO(" SUBMIT01: SequenceID :%ld ,sentBytes :%d\n", SequenceNum,bytes_written);
//------------------------------------------------------------------
memset(dServiceID ,0, sizeof(dServiceID));
memset(dFeeType ,0, sizeof(dFeeType));
memset(dFeeCode ,0, sizeof(dFeeCode));
memset(dFixedFee ,0, sizeof(dFixedFee));
strncpy(dServiceID, submit->ServiceID, sizeof(dServiceID)-1);
strncpy(dFeeType, submit->FeeType, sizeof(dFeeType)-1);
strncpy(dFeeCode, submit->FeeCode, sizeof(dFeeCode)-1);
strncpy(dFixedFee, submit->FixedFee, sizeof(dFixedFee)-1);
memset(dValidTime ,0, sizeof(dValidTime));
memset(dAtTime ,0, sizeof(dAtTime));
strncpy(dValidTime, submit->ValidTime, sizeof(dValidTime)-1);
strncpy(dAtTime, submit->AtTime, sizeof(dAtTime)-1);
memset(dSrcTermID ,0, sizeof(dSrcTermID));
memset(dChargeTermID ,0, sizeof(dChargeTermID));
memset(dDestTermID ,0, sizeof(dDestTermID));
memset(dContent ,0, sizeof(dContent));
strncpy(dContent, content, submit->MsgLength );
// strncpy(dContent, content, strlen(content) );
strncpy(dSrcTermID, submit->SrcTermID, sizeof(dSrcTermID)-1);
strncpy(dChargeTermID,submit->ChargeTermID,sizeof(dChargeTermID)-1);
strncpy(dDestTermID, submit->DestTermID, sizeof(dDestTermID)-1);
INFO( "SEND SUBMIT01: Total_Length:%d,MsgType:%d ,NeedReport:%d ,Priority:%d ,ServiceID:%s\n",
Total_Length,submit->MsgType,submit->NeedReport,submit->Priority,dServiceID);
INFO( " SUBMIT01: FeeType:%s ,FeeCode:%s ,FixedFee:%s ,MsgFormat:%d ,ValidTime:%s,AtTime:%s\n",
dFeeType,dFeeCode,dFixedFee,submit->MsgFormat,dValidTime,dAtTime);
INFO( " SUBMIT01: SrcTermID:%s ,ChargeTermID:%s ,DestTermIDCount:%d ,DestTermID:%s ,MsgLength:%d,Content:%s\n",
dSrcTermID,dChargeTermID,submit->DestTermIDCount,dDestTermID, submit->MsgLength,dContent);
INFO( " SUBMIT01: linkid:%s ,subMsgType:%d ,spDealRes:%d \n",linkid,subMsgType,spDealRes );
return (0);
}
/************************************************************************************/
/* */
/* Recv Submit Resp from SMG */
/* Function name: RecvSubmitResp */
/* */
/* Argument: char *socketbuffer */
/* unsigned int *MsgID */
/* unsigned int *result */
/* Return : int */
/* 0 : right */
/************************************************************************************/
int RecvSubmitResp(char *socketbuffer, unsigned int Body_Length, char *MsgID, unsigned int *result)
{
unsigned char buffer[15];
unsigned int temp;
memset(buffer, 0, sizeof(buffer));
memcpy(buffer, socketbuffer, Body_Length);
memcpy(MsgID,buffer,10);
memcpy((unsigned char*)&temp,buffer+10,4);
*result = ntohl(temp);
return (0);
}
/************************************************************************************/
/* */
/* Recv Deliver Packet from SMG */
/* Function name: DeliverGet */
/* */
/* Argument: int Socket_fd */
/* ....................... */
/* Return : int */
/* 0 : right */
/* -1 : send errror */
/************************************************************************************/
int DeliverGet(char *socketbuffer, SMGP_DELIVER *deliver,unsigned int Body_Length)
//unsigned char *buf,unsigned int *buflen)
{
int res, ret, bytes_read = 0, i;
unsigned char buffer[512];
unsigned char *p;
unsigned int temp = 0;
struct pollfd poll_list;
if(Body_Length >512)
return (-1);
memset(buffer, 0, sizeof(buffer));
memset(deliver ,0,sizeof(SMGP_DELIVER));
memcpy(buffer, socketbuffer, Body_Length);
p = buffer;
/* MsgID : string(10) */
strncpy(deliver->MsgID, p,10);
//printf("Get MsgID:%s\n",deliver->MsgID);
p +=10;
/* IsReport : Integer(1) */
memcpy((unsigned char *)&temp,p,1);
deliver->IsReport = temp;
p += 1;
/* MsgFormat : Integer(1) */
memcpy((unsigned char *)&temp,p,1);
deliver->MsgCoding = temp;
p += 1;
/* RecvTime : string(14) */
memcpy(deliver->RecvTime, p,14);
p += 14;
/* SrcTermID : string(21) */
memcpy(deliver->SrcTermID, p, 21);
p += 21;
/* DestTermID : string(21) */
memcpy(deliver->DestTermID, p, 21);
p += 21;
/* MsgLength : Integer(1) */
memcpy((unsigned char *)&temp,p,1);
deliver->MsgLength = temp;
p += 1;
/* MsgContent : string(Var.) */
if(deliver->IsReport == 0)
{
if(deliver->MsgCoding == 8){
temp = deliver->MsgLength ;
deliver->MsgLength =UNICODE_2_GBK_BE(deliver->MsgContent,p,deliver->MsgLength);
}
else {
temp = deliver->MsgLength ;
memcpy(deliver->MsgContent, p, deliver->MsgLength);
}
}
else
{
memcpy(deliver->MsgContent, p, deliver->MsgLength);
temp = deliver->MsgLength ; //addby
}
p+=temp;
p+=8; //Reserve.
deliver->ParamaterLen = Body_Length-LEN_SMGP_DELIVER- deliver->MsgLength;
if(deliver->ParamaterLen >0 )
{
memcpy(deliver->Paramater,p,deliver->ParamaterLen);
}
INFO( "[DeliverGet]: IsReport:%d, MsgID:%s ,SrcTermID:%s ,DestTermID:%s ,MsgCoding:%d, MsgLength:%d, MsgContent:%s, ParamaterLen:%d\n",
deliver->IsReport , deliver->MsgID,deliver->SrcTermID,deliver->DestTermID ,deliver->MsgCoding, deliver->MsgLength, deliver->MsgContent, deliver->ParamaterLen);
return 0;
}
/************************************************************************************/
/* */
/* Recv Length from SMG */
/* Function name: SMGP_Recv_Length */
/* */
/* Argument: int Socket_fd */
/* unsigned int *MsgID */
/* unsigned int *result */
/* Return : int */
/* 0 : right */
/* -1 : send errror */
/************************************************************************************/
int SMGP_Recv_Length(int Socket_fd,unsigned int Body_Length)
{
unsigned char buffer[512];
memset(buffer, 0, sizeof(buffer));
/* Receive Message Body */
if (read(Socket_fd, buffer, Body_Length) != (int)Body_Length )
return (-1);
/* Result : Integer(1) */
return (0);
}
/************************************************************************************/
/* */
/* Recv DeliverResp from SMG */
/* Function name: DeliverResp */
/* */
/* Argument: int Socket_fd */
/* unsigned int *MsgID */
/* unsigned int *result */
/* Return : int */
/* 0 : right */
/* -1 : send errror */
/************************************************************************************/
int DeliverResp(int Socket_fd, unsigned int Sequence, char *MsgID, int Result)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -