123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- // ClientComm.h: interface for the CClientComm class.
- //
- //////////////////////////////////////////////////////////////////////
- #if !defined(AFX_CLIENTCOMM_H__12A1FE2E_023E_4CB8_99C5_E3AF870A5007__INCLUDED_)
- #define AFX_CLIENTCOMM_H__12A1FE2E_023E_4CB8_99C5_E3AF870A5007__INCLUDED_
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- #if defined(_MSC_VER)
- #include "RVCComm.h"
- #include <winsock2.h>
- #else
- // 调整了位置,解决出现编译错误 error C2011: “sockaddr”:“struct”类型重定义 2020年1月21日
- #include <winpr/winsock.h>
- #include "RVCComm.h"
- #endif //_MSC_VER
- #include "AutoLock.h"
- #define CONN_OPT_SHARED_SESSION 4 //不协商,直接使用共享会话密钥
- #define CONN_OPT_NAKED 3 //不使用会话密钥,即非安全通道
- #define CONN_OPT_CACHED_SESSION 2 //通过握手使用缓存会话密钥
- #define CONN_OPT_REDIRECT_SESSION 1 //重新鉴权新建会话密钥
- class CClientComm : public IClientCommFunc
- {
- public:
- CClientComm(CSecureClientBase *pCallback);
- virtual ~CClientComm();
- bool IsConnectionOK();
- bool IsSecureConnection();
- // 创建连接,@option:1、重新鉴权新建会话密钥;2、通过握手使用缓存会话密钥;3、不使用会话密钥,即非安全通道
- // 4、不协商,直接使用共享会话密钥
- bool Connect(const char *pServerAddr, int nPort, int nOption);
- void Close();
- string SendPackage(const CSmartPointer<IPackage>& pSendPkg);
- CSmartPointer<IPackage> ReceivePackage(int nWaitSecond);
- CSmartPointer<IPackage> CreateNewPackage(const char *pServiceCode);
- CSmartPointer<IPackage> CreateReplyPackage(const CSmartPointer<IPackage>& pRecvPkg);
- //void SetSessionKey(BYTE arrSessionKey[16]);
- private:
- #if defined(_MSC_VER)
- static UINT _stdcall RecvThreadFunc(void* pArg);
- #else
- static DWORD RecvThreadFunc(void* pArg);
- #endif //_MSC_VER
- void RecvThreadProcess();
- //void ReceivePackageData();
- void SetSocketOption();
- int GetPackageLenFromRecvBuf();
-
- bool SendAuthReqPackage();
- bool HandleAuthRetPackage(const CSmartPointer<IPackage> &pRetPkg);
- bool SendShakeReqPackage();
- bool HandleShakeRetPackage(const CSmartPointer<IPackage> &pRetPkg);
- bool SendUseSharedSKPackage();
- bool HandleUseSharedSKRetPackage(const CSmartPointer<IPackage> &pRetPkg);
- bool SendHelloReqPackage();
- bool HandleHelloRetPackage(const CSmartPointer<IPackage> &pRetPkg);
-
- private:
- enum ConnStateEnum
- {
- State_None = 0,
- State_Connecting,
- State_OK,
- State_Closed,
- State_Disconnected,
- State_Error,
- };
- CSecureClientBase *m_pCallback;
- SOCKET m_hSocket;
- HANDLE m_hWorkThread;
- CLockObject m_LockObject;
- ConnStateEnum m_eState;
- bool m_bNeedAuth;
-
- std::vector<IPackage*> m_RecvPackages;
- HANDLE m_hRecvEvent;
- volatile LONG m_nSyncWaitResult;
-
- const int SOCKET_RECV_BUF_LEN;
- BYTE *m_pRecvBuf;
- int m_nRecvBufLen;
- int m_nHasRecvLen;
- DWORD m_dwSessionID;
- DWORD m_dwTokenHash;
- BYTE m_arrSessionKey[16];
- // 缓存上次会话标识
- static DWORD s_dwSessionID;
- static DWORD s_dwTokenHash;
- static BYTE s_arrSessionKey[16];
- };
- #endif // !defined(AFX_CLIENTCOMM_H__12A1FE2E_023E_4CB8_99C5_E3AF870A5007__INCLUDED_)
|