160 lines
4.9 KiB
C
160 lines
4.9 KiB
C
|
// QQTX.h: interface for the CQQTX class.
|
|||
|
//
|
|||
|
//////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
#if !defined(AFX_QQTX_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_)
|
|||
|
#define AFX_QQTX_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_
|
|||
|
|
|||
|
#if _MSC_VER > 1000
|
|||
|
#pragma once
|
|||
|
#endif // _MSC_VER > 1000
|
|||
|
|
|||
|
/*
|
|||
|
#include "Winsock2.h"
|
|||
|
#pragma comment(lib, "Ws2_32.lib")
|
|||
|
*/
|
|||
|
|
|||
|
#pragma pack( push )
|
|||
|
#pragma pack( 1 )
|
|||
|
|
|||
|
typedef struct _QQTX_Data_Recv
|
|||
|
{
|
|||
|
ULONG lRecvType; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>0-ͷ<><CDB7>1-<2D><><EFBFBD>ȣ<EFBFBD>2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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
|
|||
|
}QQTX_Data_Recv;
|
|||
|
|
|||
|
typedef struct _QQTX_Head
|
|||
|
{
|
|||
|
BYTE stx;
|
|||
|
ULONG Total_Length;
|
|||
|
ULONG Command_Id;
|
|||
|
ULONG Sequence_Id;
|
|||
|
ULONG Version;
|
|||
|
ULONG Reserved1;
|
|||
|
ULONG Reserved2;
|
|||
|
}QQTX_Head;
|
|||
|
|
|||
|
typedef struct _QQTX_Deliver_List
|
|||
|
{
|
|||
|
long lSendID;
|
|||
|
QQTX_Head head;
|
|||
|
CString strAns;
|
|||
|
}QQTX_Deliver_List;
|
|||
|
|
|||
|
#pragma pack( pop )
|
|||
|
|
|||
|
typedef void (*QQTX_RECVPROC)(QQTX_Data_Recv * pDataRecv);
|
|||
|
|
|||
|
#define QQ_stx 0x02 //<2F><><EFBFBD><EFBFBD>ʼ
|
|||
|
#define QQ_etx 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
#define QQ_CONNECT 0x00000001 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define QQ_CONNECT_RESP 0x80000001 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
#define QQ_ACTIVE_TEST 0x00000002 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define QQ_ACTIVE_TEST_RESP 0x80000002 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
#define QQ_ManageComp 0x00000003 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ
|
|||
|
#define QQ_ManageComp_Resp 0x80000003 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵӦ<D2B5><D3A6>
|
|||
|
#define QQ_ManageCompUser 0x00000004 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>û<EFBFBD>
|
|||
|
#define QQ_ManageCompUser_Resp 0x80000004 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>û<EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
#define QQ_ManageGroup 0x00000005 //<2F><><EFBFBD><EFBFBD>Ⱥ
|
|||
|
#define QQ_ManageGroup_Resp 0x80000005 //<2F><><EFBFBD><EFBFBD>ȺӦ<C8BA><D3A6>
|
|||
|
#define QQ_SendMsg 0x00000006 //<2F><><EFBFBD><EFBFBD>Ϣ
|
|||
|
#define QQ_SendMsg_Resp 0x80000006 //<2F><><EFBFBD><EFBFBD>ϢӦ<CFA2><D3A6>
|
|||
|
#define QQ_GetUserStat 0x00000007 //<2F><>ȡ<EFBFBD>û<EFBFBD>״̬
|
|||
|
#define QQ_GroupChangeNotify 0x00000008 //Ⱥ<><C8BA>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
|||
|
#define QQ_GroupChangeNotify_Resp 0x80000008
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define QQTX_MAX_DELIVER 1024 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
#define QQTX_ACTIVE_TESTTIME 30000 //<2F>ʱ<E0B3A4><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|||
|
#define QQTX_ACTIVE_TIMEOUT 10000 //<2F><>·<EFBFBD><C2B7><EFBFBD>ⳬʱʱ<CAB1><CAB1>
|
|||
|
#define QQTX_ACTIVE_COUNTOUT 1 //<2F><>·<EFBFBD><C2B7><EFBFBD>ⳬ<EFBFBD><E2B3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define QQTX_SENDSMS_TIMEOUT 20000 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6>ų<EFBFBD>ʱʱ<CAB1><CAB1>
|
|||
|
#define QQTX_SENDSMS_RECOUNT 1 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
|||
|
|
|||
|
//typedef CList<QQTX_Send_List , QQTX_Send_List&> CSendList;
|
|||
|
//typedef CTypedPtrList<CPtrList, QQTX_Send_List*> CQQTXSendList;
|
|||
|
//typedef CTypedPtrList<CPtrList, QQTX_Send_Resp*> CSendResp;
|
|||
|
//typedef CTypedPtrList<CPtrList, QQTX_Deliver_List*> CDeliverList;
|
|||
|
class CQQTX
|
|||
|
{
|
|||
|
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_bLoginQQTX;
|
|||
|
|
|||
|
ULONG m_lSendID;
|
|||
|
QQTX_Deliver_List* m_pDeliverList;
|
|||
|
long m_lDeliverList;
|
|||
|
|
|||
|
char m_szQQTXIP[32];
|
|||
|
TCHAR m_szQQTXUser[32];
|
|||
|
TCHAR m_szQQTXPasswd[32];
|
|||
|
TCHAR m_szQQTXKey[32];
|
|||
|
long m_lConnectType;
|
|||
|
|
|||
|
BOOL m_bInitQQTX;
|
|||
|
|
|||
|
CRITICAL_SECTION m_CriDeliverList;
|
|||
|
CRITICAL_SECTION m_CriSendFrame;
|
|||
|
|
|||
|
|
|||
|
ULONG m_lID;
|
|||
|
QQTX_RECVPROC 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>
|
|||
|
|
|||
|
HANDLE m_hThread;
|
|||
|
HANDLE m_hThread_Send;
|
|||
|
|
|||
|
CRITICAL_SECTION m_CriErrMsg;
|
|||
|
CString m_strErrMsg;
|
|||
|
public:
|
|||
|
BOOL isConnectGateWay();
|
|||
|
void SetErrMsg(CString str);
|
|||
|
CString GetErrMsg();
|
|||
|
long GetReportSms();
|
|||
|
long GetWFSms();
|
|||
|
void SetSendSpeed(long lSpeed);
|
|||
|
BOOL Deliver_Add(QQTX_Deliver_List Deliver);
|
|||
|
void UCS2ToAscii2( char * pUCS2 , char * pAscii , long lSrcLen );
|
|||
|
BOOL QQTX_Exit();
|
|||
|
BOOL GetDeliver(QQTX_Deliver_List &deliver);
|
|||
|
long Process_Other(QQTX_Head head,CString strAns);
|
|||
|
long Process_Active(QQTX_Head head, CString strAns);
|
|||
|
BOOL InitQQTX2();
|
|||
|
long Process_Connect(QQTX_Head head, CString strAns );
|
|||
|
long SendFrame(SOCKET sock,ULONG &lID,DWORD &dwEndSendTime,ULONG lCommandID,CString strReq,ULONG & lSeq );
|
|||
|
long QQTX_Init(const TCHAR *pIP,USHORT lPort, const TCHAR *pUser, const TCHAR *pPasswd,const TCHAR * pKey,int lConnectType);
|
|||
|
BOOL RecvFrame(QQTX_Data_Recv &Drecv);
|
|||
|
static BOOL ReadFrame(SOCKET s, QQTX_Data_Recv *pRecv);
|
|||
|
void SetRecvProc(QQTX_RECVPROC 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 );
|
|||
|
CQQTX();
|
|||
|
virtual ~CQQTX();
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
#endif // !defined(AFX_QQTX_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_)
|