📄 sgip.c
字号:
#include "sgip.h"
int sgipBind(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_BIND *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_BIND);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var8 = pBody->LoginType;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
len = sizeof(pBody->LoginName) - 1;
memcpy(ptr, pBody->LoginName, len);
ptr += len;
len = sizeof(pBody->LoginPassword) - 1;
memcpy(ptr, pBody->LoginPassword, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipBindResp(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_BIND_RESP *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_BIND_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var8 = pBody->Result;
len = 1;
memcpy(ptr, &var8, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipUnbind(SOCKET sockfd,
const unsigned long *SequenceNumber)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_UNBIND);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipUnbindResp(SOCKET sockfd,
const unsigned long *SequenceNumber)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_UNBIND_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipSubmit(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_SUBMIT *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char i, var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_SUBMIT);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
len = sizeof(pBody->SPNumber) - 1;
memcpy(ptr, pBody->SPNumber, len);
ptr += len;
len = sizeof(pBody->ChargeNumber) - 1;
memcpy(ptr, pBody->ChargeNumber, len);
ptr += len;
var8 = pBody->UserCount;
if (var8 < 1 || var8 > 100)
return -1;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
for (i = 0; i < var8; i++)
{
len = sizeof(pBody->UserNumber[i]) - 1;
memcpy(ptr, pBody->UserNumber[i], len);
ptr += len;
}
len = sizeof(pBody->CorpId) - 1;
memcpy(ptr, pBody->CorpId, len);
ptr += len;
len = sizeof(pBody->ServiceType) - 1;
memcpy(ptr, pBody->ServiceType, len);
ptr += len;
var8 = pBody->FeeType;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
len = sizeof(pBody->FeeValue) - 1;
memcpy(ptr, pBody->FeeValue, len);
ptr += len;
len = sizeof(pBody->GivenValue) - 1;
memcpy(ptr, pBody->GivenValue, len);
ptr += len;
var8 = pBody->AgentFlag;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->MOrelatetoMTFlag;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->Priority;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
len = sizeof(pBody->ExpireTime) - 1;
memcpy(ptr, pBody->ExpireTime, len);
ptr += len;
len = sizeof(pBody->ScheduleTime) - 1;
memcpy(ptr, pBody->ScheduleTime, len);
ptr += len;
var8 = pBody->ReportFlag;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->TP_pid;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->TP_udhi;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->MessageCoding;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->MessageType;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var32 = pBody->MessageLength;
if (var32 > (sizeof(pBody->MessageContent) - 1))
var32 = sizeof(pBody->MessageContent) - 1;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = ntohl(var32);
len = var32;
memcpy(ptr, pBody->MessageContent, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipSubmitResp(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_SUBMIT_RESP *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_SUBMIT_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var8 = pBody->Result;
len = 1;
memcpy(ptr, &var8, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipDeliver(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_DELIVER *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_DELIVER);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
len = sizeof(pBody->UserNumber) - 1;
memcpy(ptr, pBody->UserNumber, len);
ptr += len;
len = sizeof(pBody->SPNumber) - 1;
memcpy(ptr, pBody->SPNumber, len);
ptr += len;
var8 = pBody->TP_pid;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->TP_udhi;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->MessageCoding;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var32 = pBody->MessageLength;
if (var32 > (sizeof(pBody->MessageContent) - 1))
var32 = sizeof(pBody->MessageContent) - 1;
var32 = htonl(var32);
len = 4;
memcpy(ptr, &var32, len);
ptr += len;
var32 = ntohl(var32);
len = var32;
memcpy(ptr, pBody->MessageContent, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipDeliverResp(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_DELIVER_RESP *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_DELIVER_RESP);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var8 = pBody->Result;
len = 1;
memcpy(ptr, &var8, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipReport(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_REPORT *pBody)
{
char ppdu[SGIP_PDU_SIZE], *ptr;
unsigned int len;
unsigned char var8;
unsigned long var32;
if (sockfd == INVALID_SOCKET)
return -1;
if (SequenceNumber == NULL || pBody == NULL)
return -1;
memset(ppdu, 0, sizeof(ppdu));
ptr = ppdu;
// 消息头
ptr += 4;
var32 = htonl(SGIP_REPORT);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(SequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
// 消息体
var32 = htonl(pBody->SubmitSequenceNumber[0]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(pBody->SubmitSequenceNumber[1]);
memcpy(ptr, &var32, 4);
ptr += 4;
var32 = htonl(pBody->SubmitSequenceNumber[2]);
memcpy(ptr, &var32, 4);
ptr += 4;
var8 = pBody->ReportType;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
len = sizeof(pBody->UserNumber) - 1;
memcpy(ptr, pBody->UserNumber, len);
ptr += len;
var8 = pBody->State;
len = 1;
memcpy(ptr, &var8, len);
ptr += len;
var8 = pBody->ErrorCode;
len = 1;
memcpy(ptr, &var8, 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)
{
closesocket(sockfd);
return -1;
}
return 0;
}
int sgipReportResp(SOCKET sockfd,
const unsigned long *SequenceNumber, const SGIP_BODY_REPORT_RESP *pBody)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -