?? 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 + -