FXSend/Cmpp3/Cmpp3.h

377 lines
12 KiB
C
Raw Normal View History

2025-02-28 17:05:50 +08:00
// Cmpp3.h: interface for the CCmpp3 class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CMPP3_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_)
#define AFX_CMPP3_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define CMPP3_3_0 //cmpp<70><70><EFBFBD><EFBFBD>3.0
/*
#include "Winsock2.h"
#pragma comment(lib, "Ws2_32.lib")
*/
#pragma pack( push )
#pragma pack( 1 )
typedef struct _Cmpp3_Data_Recv
{
ULONG lDataLen; //Ӧ<><D3A6><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
ULONG lRecvLen; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
BOOL bRecvFrame; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Frame;
BYTE * pRecvFrame; //<2F>յ<EFBFBD><D5B5><EFBFBD>Frame
}Cmpp3_Data_Recv;
typedef struct _Cmpp3_Head
{
ULONG Total_Length;
ULONG Command_Id;
ULONG Sequence_Id;
}Cmpp3_Head;
typedef struct _Cmpp3_Connect
{
char Source_Addr[6];
UCHAR AuthenticatorSource[16];
UCHAR Version;
ULONG Timestamp;
}Cmpp3_Connect;
typedef struct _Cmpp3_Connect_Resp
{
#ifdef CMPP3_3_0
ULONG Status;
#else
UCHAR Status;
#endif
UCHAR AuthenticatorSource[16];
UCHAR Version;
}Cmpp3_Connect_Resp;
typedef struct _Cmpp3_Submit
{
LONGLONG Msg_ID;
UCHAR Pk_total;
UCHAR Pk_number;
UCHAR Registered_Delivery;
UCHAR Msg_level;
UCHAR Service_Id[10];
UCHAR Fee_UserType;
#ifdef CMPP3_3_0
UCHAR Fee_terminal_Id[32];
UCHAR Fee_terminal_Type;
#else
UCHAR Fee_terminal_Id[21];
#endif
UCHAR TP_pId;
UCHAR TP_udhi;
UCHAR Msg_Fmt;
UCHAR Msg_src[6];
UCHAR FeeType[2];
UCHAR FeeCode[6];
UCHAR ValId_Time[17];
UCHAR At_Time[17];
UCHAR Src_Id[21];
UCHAR DestUsr_tl;
#ifdef CMPP3_3_0
UCHAR Dest_terminal_Id[32];
UCHAR Dest_terminal_Type;
#else
UCHAR Dest_terminal_Id[21];
#endif
UCHAR Msg_Length;
}Cmpp3_Submit;
typedef struct _Cmpp3_Submit_Resp
{
LONGLONG Msg_ID;
#ifdef CMPP3_3_0
ULONG Result;
#else
UCHAR Result;
#endif
}Cmpp3_Submit_Resp;
typedef struct _Cmpp3_Send_List
{
ULONG lSendID; //<2F><><EFBFBD>ݿ<EFBFBD><DDBF>м<EFBFBD>¼<EFBFBD><C2BC>SendID
ULONG lSeq; //<2F><><EFBFBD><EFBFBD>cmpp<70><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG lCmpp3Seq; //ʹ<><CAB9>cmppת<70>ӵ<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
ULONG lSendTime; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD>ʱ<EFBFBD><CAB1>
ULONG lReSendCount; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6>ٴ<EFBFBD>
UCHAR Msg[512]; //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
Cmpp3_Submit Submit;
}Cmpp3_Send_List;
//<2F><><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>״̬
typedef struct _Cmpp3_Send_Resp
{
ULONG lSendID; //<2F><><EFBFBD>ݿ<EFBFBD><DDBF>м<EFBFBD>¼<EFBFBD><C2BC>SendID
ULONG lResult; //<2F><><EFBFBD><EFBFBD>״̬
ULONG lReSendCount; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6>ٴ<EFBFBD>
LONGLONG lMsgID; //<2F><><EFBFBD>ͳɹ<CDB3>ʱ<EFBFBD>д˷<D0B4><CBB7><EFBFBD>
}Cmpp3_Send_Resp;
typedef struct _Cmpp3_Deliver
{
LONGLONG Msg_ID;
UCHAR Dest_Id[21];
UCHAR Service_Id[10];
UCHAR TP_pid;
UCHAR TP_udhi;
UCHAR Msg_Fmt;
#ifdef CMPP3_3_0
UCHAR Src_terminal_Id[32];
UCHAR Src_terminal_Type;
#else
UCHAR Src_terminal_Id[21];
#endif
UCHAR Registered_Delivery;
UCHAR Msg_Length;
}Cmpp3_Deliver;
typedef struct _Cmpp3_Status
{
LONGLONG Msg_ID;
UCHAR Stat[7];
UCHAR Submit_time[10];
UCHAR Done_time[10];
#ifdef CMPP3_3_0
UCHAR Dest_terminal_Id[32];
#else
UCHAR Dest_terminal_Id[21];
#endif
ULONG SMSC_sequence;
}Cmpp3_Status;
typedef struct _Cmpp3_Deliver_Resp
{
LONGLONG Msg_ID;
#ifdef CMPP3_3_0
ULONG Result;
#else
UCHAR Result;
#endif
}Cmpp3_Deliver_Resp;
typedef struct _Cmpp3_Deliver_List
{
ULONG lSendID;
Cmpp3_Deliver deliver;
Cmpp3_Status status;
UCHAR szMsg[512];
}Cmpp3_Deliver_List;
#define MAX_CMPP3EXCHANGE 50
typedef struct _Cmpp3Exchange
{
char szNum[32]; //<2F>˿ں<CBBF>
SOCKET sock; //Socket<65>ӿ<EFBFBD>
long lIndex; //<2F><><EFBFBD><EFBFBD>
ULONG lID; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
long lSendCount; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>
long lSendRetCount; //<2F><><EFBFBD>ͷ<EFBFBD><CDB7>ؼ<EFBFBD><D8BC><EFBFBD>
ULONG lExID; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
char szIP[32];
ULONG lNodeID;
ULONG Sequence_Id;
}Cmpp3Exchange;
typedef struct _Cmpp3ExchangeResp
{
long lType; //0 Submit rest , 1 deliver
long lSendID; //<2F><><EFBFBD><EFBFBD>ID , lType==0ʱ<30><CAB1>Ч
char szNum[32]; //Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, lType==1ʱ<31><CAB1>Ч
long lExNum; //adc<64><63><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʱ<EFBFBD>õ<EFBFBD>
long lLen;
ULONG lCmd;
ULONG lSeq;
BYTE Data[512];
}Cmpp3ExchangeResp;
#pragma pack( pop )
typedef void (*RECVPROC_Cmpp3)(Cmpp3_Data_Recv * pDataRecv);
#define CMPP3_PORT 7890 //cmpp<70>˿ں<CBBF>
#define CMPP3_EXCHANGE_PORT 8910
#define CMPP3_EXCHANGE_PORT2 6666 //adc<64>£<EFBFBD><C2A3><EFBFBD><EFBFBD>ô˶˿<CBB6>
#define CMPP3_CONNECT 0x00000001 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_CONNECT_RESP 0x80000001 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_TERMINATE 0x00000002 //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
#define CMPP3_TERMINATE_RESP 0x80000002 //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_SUBMIT 0x00000004 //<2F><EFBFBD><E1BDBB><EFBFBD><EFBFBD>
#define CMPP3_SUBMIT_RESP 0x80000004 //<2F><EFBFBD><E1BDBB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_DELIVER 0x00000005 //<2F><><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>
#define CMPP3_DELIVER_RESP 0x80000005 //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_QUERY 0x00000006 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>״̬<D7B4><CCAC>ѯ
#define CMPP3_QUERY_RESP 0x80000006 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>״̬<D7B4><CCAC>ѯӦ<D1AF><D3A6>
#define CMPP3_CANCEL 0x00000007 //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_CANCEL_RESP 0x80000007 //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_ACTIVE_TEST 0x00000008 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_ACTIVE_TEST_RESP 0x80000008 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_FWD 0x00000009 //<2F><>Ϣǰת
#define CMPP3_FWD_RESP 0x80000009 //<2F><>ϢǰתӦ<D7AA><D3A6>
#define CMPP3_MT_ROUTE 0x00000010 //MT·<54><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_MT_ROUTE_RESP 0x80000010 //MT·<54><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_MO_ROUTE 0x00000011 //MO·<4F><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_MO_ROUTE_RESP 0x80000011 //MO·<4F><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_GET_ROUTE 0x00000012 //<2F><>ȡ·<C8A1><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_GET_ROUTE_RESP 0x80000012 //<2F><>ȡ·<C8A1><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_MT_ROUTE_UPDATE 0x00000013 //MT·<54>ɸ<EFBFBD><C9B8><EFBFBD>
#define CMPP3_MT_ROUTE_UPDATE_RESP 0x80000013 //MT·<54>ɸ<EFBFBD><C9B8><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_MO_ROUTE_UPDATE 0x00000014 //MO·<4F>ɸ<EFBFBD><C9B8><EFBFBD>
#define CMPP3_MO_ROUTE_UPDATE_RESP 0x80000014 //MO·<4F>ɸ<EFBFBD><C9B8><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_PUSH_MT_ROUTE_UPDATE 0x00000015 //MT·<54>ɸ<EFBFBD><C9B8><EFBFBD>
#define CMPP3_PUSH_MT_ROUTE_UPDATE_RESP 0x80000015 //MT·<54>ɸ<EFBFBD><C9B8><EFBFBD>Ӧ<EFBFBD><D3A6>
#define CMPP3_PUSH_MO_ROUTE_UPDATE 0x00000016 //MO·<4F>ɸ<EFBFBD><C9B8><EFBFBD>
#define CMPP3_PUSH_MO_ROUTE_UPDATE_RESP 0x80000016 //MO·<4F>ɸ<EFBFBD><C9B8><EFBFBD>Ӧ<EFBFBD><D3A6>
#ifdef CMPP3_3_0
#define CMPP3_SMS_MAX_LIST 512 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#else
#define CMPP3_SMS_MAX_LIST 512 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#endif
#define CMPP3_SMS_MAX_RESP 2048 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_SMS_MAX_DELIVER 2048 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_SMS_MAX_STATUS 2048 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_SMS_MAX_CMPP3EXCHANGERESP 2048 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_ACTIVE_TESTTIME 30000 //<2F>೤ʱ<E0B3A4><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
#define CMPP3_ACTIVE_TIMEOUT 20000 //<2F><>·<EFBFBD><C2B7><EFBFBD>ⳬʱʱ<CAB1><CAB1>
#define CMPP3_ACTIVE_COUNTOUT 3 //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><E2B3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CMPP3_SENDSMS_TIMEOUT 20000 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6>ų<EFBFBD>ʱʱ<CAB1><CAB1>
#define CMPP3_SENDSMS_RECOUNT 1 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
//typedef CList<Send_List , Send_List&> CSendList;
typedef CTypedPtrList<CPtrList, Cmpp3_Send_List*> CSendList_Cmpp3;
//typedef CTypedPtrList<CPtrList, Cmpp3_Send_Resp*> CSendResp;
//typedef CTypedPtrList<CPtrList, Cmpp3_Deliver_List*> CDeliverList;
class CCmpp3
{
public:
SOCKET m_hSocket;
char m_szIP[64];
long m_lPort;
BOOL m_bQuitThread;
DWORD m_dwEndSendTime;
DWORD m_dwEndRecvTime;
DWORD m_dwTestCount;
BOOL m_bRecvFrame;
BOOL m_bConnect;
long m_bLoginCmpp3;
//CSendList_Cmpp3 m_SendList;
//CSendResp m_SendResp;
//CDeliverList m_DeliverList;
ULONG m_lSendID;
Cmpp3_Send_List * m_pSendList;
Cmpp3_Send_Resp * m_pRespList;
Cmpp3_Deliver_List* m_pDeliverList;
Cmpp3_Deliver_List* m_pStatusList;
Cmpp3ExchangeResp * m_pCmpp3ExchangeResp;
CmppExchange * m_pCmppExchange;
long m_lCmppExchange;
long m_lSendList;
long m_lRespList;
long m_lDeliverList;
long m_lStatusList;
long m_lCmpp3ExchangeRespList;
char m_szCmpp3IP[32];
char m_szCmpp3User[32];
char m_szCmpp3Passwd[32];
char m_szCmpp3CorpID[32];
BOOL m_bInitCmpp3;
CRITICAL_SECTION m_CriSendSms;
CRITICAL_SECTION m_CriRespList;
CRITICAL_SECTION m_CriDeliverList;
CRITICAL_SECTION m_CriStatusList;
CRITICAL_SECTION m_CriCmpp3ExchangeResp;
CRITICAL_SECTION m_CriSendFrame;
BOOL m_bAdc;
ULONG m_lID;
ULONG m_lID_Begin;
2025-02-28 17:05:50 +08:00
RECVPROC_Cmpp3 m_pRecvProc;
//<2F><><EFBFBD>ڿ<EFBFBD><DABF>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
DWORD m_dwEndSocketSendTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long m_lSendInterval; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ʱ<EFBFBD><CAB1>
long m_lSendIntervalCount; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long m_lSendIntervalIndex; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ͳ<EFBFBD><CDB3>
HANDLE m_hThread;
HANDLE m_hThread_Send;
CRITICAL_SECTION m_CriErrMsg;
CString m_strErrMsg;
public:
BOOL Sms_Get(Cmpp3_Send_List*& pSms);
BOOL Sms_Add(Cmpp3_Send_List sms);
BOOL isConnectGateWay();
void SetErrMsg(CString str);
CString GetErrMsg();
long GetReportSms();
long GetWFSms();
void SetSendSpeed(long lSpeed);
void SetCmpp3ExchangeNum(CmppExchange * pCmppExchange , long lCmppExchange);
BOOL Cmpp3ExchangeResp_Add(Cmpp3ExchangeResp resp);
BOOL GetCmpp3ExchangeResp(Cmpp3ExchangeResp &resp);
long Cmpp3_GetReport(TCHAR * No ,TCHAR * Stat , TCHAR * Done_time,TCHAR * MsgID );
long Cmpp3_Get(TCHAR *SendNo,TCHAR * RecvNo, BYTE *Msg, TCHAR *Msg_Fmt, TCHAR *Msg_Length,long & lLongMsgRand,long & lLongMsgAll ,long & lLongMsgIndex);
BOOL Status_Add(Cmpp3_Deliver_List Deliver);
BOOL GetStatus(Cmpp3_Deliver_List &deliver);
int CharHex(char ch);
void AsciiToHex(const char *pszOrgRandom , TCHAR *pszDesRandom , long lLen);
void ExchangeUniCode( char * pData );
void HexToAscii(const char *pszOrgRandom , char *pszDesRandom );
long UCS2ToAscii( const WCHAR * pUCS2 , char * pAscii);
long AsciiToUCS2(const char * pAscii , WCHAR * pUCS2);
BOOL isChinese(const TCHAR *pSrc, long lSrcLen);
unsigned char GetMobilePhoneTON(const char *pSrc, char *pOrg);
long Cmpp3_SendSms(const char * SendNo , const char * RecvNo,long Msg_Fmt,long udhi,long Msg_Length,BOOL bHandFree,const BYTE * Msg ,const char * Service_Id,long Fee_UserType,const char * FeeType, const char * FeeCode ,long Registered_Delivery,const char *ValId_Time,const char *At_Time,long lSendID,char * MsgID, BOOL bNo86);
BOOL Deliver_Add(Cmpp3_Deliver_List Deliver);
BOOL SendResp_Add(Cmpp3_Send_Resp resp);
void UCS2ToAscii2( char * pUCS2 , char * pAscii , long lSrcLen );
BOOL Cmpp3_Exit();
BOOL GetDeliver(Cmpp3_Deliver_List &deliver);
long Process_Deliver(Cmpp3_Head head,BYTE *pData, long lLen);
long Process_Active(Cmpp3_Head head,BYTE *pData, long lLen);
BOOL GetSendResp( Cmpp3_Send_Resp & resp );
long Process_Submit(Cmpp3_Head head,BYTE *pData, long lLen);
BOOL Socket_SendSms(Cmpp3_Send_List * pSend );
long Back_Send();
BOOL InitCmpp32();
BOOL SendSms(Cmpp3_Send_List sms );
long Process_Connect(Cmpp3_Head head, BYTE * pData , long lLen );
static long SendFrame(SOCKET sock,ULONG &lID,DWORD &dwEndSendTime,ULONG lCommandID,UCHAR * pData , long lDataLen,ULONG & lSeq );
long Cmpp3_Init( const char * pIP,long lPort,const char * pUser,const char * pPasswd,const char * pCorpID );
BOOL RecvFrame(Cmpp3_Data_Recv &Drecv);
static BOOL ReadFrame(SOCKET s, Cmpp3_Data_Recv *pRecv);
void SetRecvProc(RECVPROC_Cmpp3 proc);
static DWORD WINAPI SocketRecv( LPVOID lParam );
static DWORD WINAPI SocketSend( LPVOID lParam );
static long Send(SOCKET sock,BYTE *pData, long lLen);
void Close();
static BOOL isSocketClose(SOCKET s);
void Stop();
BOOL isConnect();
BOOL Connect2();
BOOL Connect( const char * pAddr , long lPort , BOOL bReConnect = true );
CCmpp3();
virtual ~CCmpp3();
};
#endif // !defined(AFX_CMPP3_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_)