📄 wjdpacket.cpp
字号:
// WJDPacket.cpp: implementation of the CWJDPacket class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SGIPGateWay.h"
#include "WJDPacket.h"
#include "systemprofile.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWJDPacket::CWJDPacket()
{
}
CWJDPacket::~CWJDPacket()
{
}
int CWJDPacket::GetPacket(BYTE *lpBuffer, int nCmdType, LPCTSTR strSender, LPCTSTR strSendTo, LPCTSTR strMsg)
{
if( !lpBuffer )
return 0;
MessagePack Pack;
memset(&Pack, 0, sizeof(Pack));
Pack.Protocol[0] =gProfile.mstrProtocol.GetLength();
// memcpy(&Pack.Protocol[1], "GZSMS", 5);
memcpy(&Pack.Protocol[1],gProfile.mstrProtocol, Pack.Protocol[0]);
// Service_Type, Version, Account, CommandType, ComputerName 不需要填
Pack.Sender[0] = strlen(strSender);
memcpy(&Pack.Sender[1], strSender, Pack.Sender[0]);
Pack.Sendto[0] = strlen(strSendTo);
memcpy(&Pack.Sendto[1], strSendTo, Pack.Sendto[0]);
Pack.Msg[0] = strlen(strMsg);
memcpy(&Pack.Msg[1], strMsg, Pack.Msg[0]&0xff);
memcpy(lpBuffer, &Pack, sizeof(Pack));
return sizeof(Pack);
}
void CWJDPacket::ParsePacket(BYTE *lpBuffer, int *pnCmdType, LPTSTR strSender, LPTSTR strSendTo, LPTSTR strMsg)
{
MessagePack Message_info;
memcpy(&Message_info, lpBuffer, sizeof(Message_info));
// 解包
if( pnCmdType )
*pnCmdType = Message_info.CommandType;
if( strSender )
{
memcpy(strSender,&Message_info.Sender[1],Message_info.Sender[0]);
strSender[Message_info.Sender[0]] = 0;
}
if( strSendTo )
{
memcpy(strSendTo, &Message_info.Sendto[1], Message_info.Sendto[0]);
strSendTo[Message_info.Sendto[0]] = 0;
CString str = CHelpFunc::GetRealNumber(strSendTo);
strcpy(strSendTo,str);
}
if( strMsg )
{
memcpy(strMsg,&Message_info.Msg[1], Message_info.Msg[0]&0xff);
strMsg[Message_info.Msg[0]&0xff] = 0;
}
}
void CWJDPacket::GetAccountInfo(BYTE *lpBuffer, int *nFeeType, LPTSTR strServiceCode, LPTSTR strFeeValue)
{
MessagePack Message_info;
memcpy(&Message_info, lpBuffer, sizeof(Message_info));
// 取出计费信息
char *p = Message_info.Account;
char strtmp[20];
memset(strtmp, 0, sizeof(strtmp));
if( strServiceCode )
{
p = Message_info.Account + 7;
memcpy(strtmp, p, 3);
strcpy(strServiceCode, strtmp);
}
if( nFeeType )
{
//p = Message_info.Account + 9;
p = Message_info.Account + 10;
strtmp[0] = *p;
switch(*p)
{
case '0':
*nFeeType = 1;
break;
case '1':
*nFeeType = 2;
break;
case '2':
*nFeeType = 3;
break;
default:
*nFeeType = 4;
break;
}
}
if( strFeeValue )
{
memset(strtmp, 0, sizeof(strtmp));
//strtmp[0] = '0';
//p = Message_info.Account + 10;
p = Message_info.Account + 11;
//memcpy(&strtmp[1], p, 4);
memcpy(strtmp, p, 4);
strcpy(strFeeValue, strtmp);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -