📄 cmpp.c
字号:
memcpy(ptr, &var8, len);
ptr += len;
len = (unsigned int)var8;
memcpy(ptr, pBody->Msg_Content, len);
ptr += len;
len = sizeof(pBody->Reserve) - 1;
memcpy(ptr, pBody->Reserve, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppDeliverResp(SOCKET sockfd,
const unsigned long Sequence_Id, const CMPP_BODY_DELIVER_RESP *pBody)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_DELIVER_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var32 = pBody->Msg_Id1;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->Msg_Id2;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var8 = pBody->Result;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppQuery(SOCKET sockfd,
const unsigned long Sequence_Id, const CMPP_BODY_QUERY *pBody)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_QUERY);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
len = sizeof(pBody->Time) - 1;
memcpy(ptr, pBody->Time, len);
ptr += len;
var8 = pBody->Query_Type;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
len = sizeof(pBody->Query_Code) - 1;
memcpy(ptr, pBody->Query_Code, len);
ptr += len;
len = sizeof(pBody->Reserve) - 1;
memcpy(ptr, pBody->Reserve, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppQueryResp(SOCKET sockfd,
const unsigned long Sequence_Id, const CMPP_BODY_QUERY_RESP *pBody)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_QUERY_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
len = sizeof(pBody->Time) - 1;
memcpy(ptr, pBody->Time, len);
ptr += len;
var8 = pBody->Query_Type;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
len = sizeof(pBody->Query_Code) - 1;
memcpy(ptr, pBody->Query_Code, len);
ptr += len;
var32 = pBody->MT_TLMsg;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MT_Tlusr;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MT_Scs;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MT_WT;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MT_FL;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MO_Scs;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MO_WT;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->MO_FL;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppCancel(SOCKET sockfd,
const unsigned long Sequence_Id, const CMPP_BODY_CANCEL *pBody)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_CANCEL);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var32 = pBody->Msg_Id1;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = pBody->Msg_Id2;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppCancelResp(SOCKET sockfd,
const unsigned long Sequence_Id, const CMPP_BODY_CANCEL_RESP *pBody)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_CANCEL_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var8 = pBody->Success_Id;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppActiveTest(SOCKET sockfd,
const unsigned long Sequence_Id)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_ACTIVE_TEST);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
int cmppActiveTestResp(SOCKET sockfd,
const unsigned long Sequence_Id, const CMPP_BODY_ACTIVE_TEST_RESP *pBody)
{
char ppdu[CMPP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(CMPP_ACTIVE_TEST_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(Sequence_Id);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var8 = pBody->Reserve;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
// 修改消息头中长度
len = ptr - ppdu;
var32 = htonl(len);
memcpy(ppdu, &var32, 4);
// 发送数据包
if (send(sockfd, ppdu, (int)len, 0) != (int)len)
{
return -1;
}
return 0;
}
static int cmppDecodeConnect(const char *rawBody, unsigned int len, CMPP_BODY_CONNECT *msgBody)
{
unsigned int sum = 0;
unsigned char var8;
unsigned long var32;
const char *ptr = rawBody;
if (rawBody == NULL || msgBody == NULL)
return -1;
memset(msgBody, 0, sizeof(*msgBody));
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
sum = sizeof(msgBody->Source_Addr) - 1;
memcpy(msgBody->Source_Addr, ptr, sum);
ptr = ptr + sum;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
sum = sizeof(msgBody->AuthenticatorSource) - 1;
memcpy(msgBody->AuthenticatorSource, ptr, sum);
ptr = ptr + sum;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Version = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var32, ptr, 4);
var32 = ntohl(var32);
msgBody->Timestamp = var32;
ptr = ptr + 4;
if ((unsigned int)(ptr - rawBody) > len)
return -1;
return 0;
}
static int cmppDecodeConnectResp(const char *rawBody, unsigned int len, CMPP_BODY_CONNECT_RESP *msgBody)
{
unsigned int sum = 0;
unsigned char var8;
const char *ptr = rawBody;
if (rawBody == NULL || msgBody == NULL)
return -1;
memset(msgBody, 0, sizeof(*msgBody));
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Status = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
sum = sizeof(msgBody->AuthenticatorISMG) - 1;
memcpy(msgBody->AuthenticatorISMG, ptr, sum);
ptr = ptr + sum;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Version = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) > len)
return -1;
return 0;
}
static int cmppDecodeSubmit(const char *rawBody, unsigned int len, CMPP_BODY_SUBMIT *msgBody)
{
unsigned int sum = 0;
unsigned char i, var8;
unsigned long var32;
const char *ptr = rawBody;
if (rawBody == NULL || msgBody == NULL)
return -1;
memset(msgBody, 0, sizeof(*msgBody));
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var32, ptr, 4);
var32 = ntohl(var32);
msgBody->Msg_Id1 = var32;
ptr = ptr + 4;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var32, ptr, 4);
var32 = ntohl(var32);
msgBody->Msg_Id2 = var32;
ptr = ptr + 4;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Pk_total = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Pk_number = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Registered_Delivery = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Msg_level = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
sum = sizeof(msgBody->Service_Id) - 1;
memcpy(msgBody->Service_Id, ptr, sum);
ptr = ptr + sum;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
memcpy(&var8, ptr, 1);
msgBody->Fee_UserType = var8;
ptr = ptr + 1;
if ((unsigned int)(ptr - rawBody) >= len)
return -1;
sum = sizeof(msgBody->Fee_terminal_Id) - 1;
memcpy(msgBody->Fee_terminal_Id, ptr, sum);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -