ClientComm.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // ClientComm.h: interface for the CClientComm class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_CLIENTCOMM_H__12A1FE2E_023E_4CB8_99C5_E3AF870A5007__INCLUDED_)
  5. #define AFX_CLIENTCOMM_H__12A1FE2E_023E_4CB8_99C5_E3AF870A5007__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. // 调整了位置,解决出现编译错误 error C2011: “sockaddr”:“struct”类型重定义 2020年1月21日
  10. #include <winpr/winsock.h>
  11. #include "RVCComm.h"
  12. #include "AutoLock.h"
  13. class CClientComm : public IClientCommFunc
  14. {
  15. public:
  16. CClientComm(CSecureClientBase *pCallback);
  17. virtual ~CClientComm();
  18. bool IsConnectionOK();
  19. bool IsSecureConnection();
  20. // 创建连接,@option:1、重新鉴权新建会话密钥;2、通过握手使用缓存会话密钥;3、不使用会话密钥,即非安全通道
  21. // 4、不协商,直接使用共享会话密钥
  22. bool Connect(const char *pServerAddr, int nPort, int nOption);
  23. void Close();
  24. string SendPackage(const CSmartPointer<IPackage>& pSendPkg);
  25. CSmartPointer<IPackage> ReceivePackage(int nWaitSecond);
  26. CSmartPointer<IPackage> CreateNewPackage(const char *pServiceCode);
  27. CSmartPointer<IPackage> CreateReplyPackage(const CSmartPointer<IPackage>& pRecvPkg);
  28. //void SetSessionKey(BYTE arrSessionKey[16]);
  29. private:
  30. static DWORD RecvThreadFunc(void *pArg);
  31. void RecvThreadProcess();
  32. //void ReceivePackageData();
  33. void SetSocketOption();
  34. int GetPackageLenFromRecvBuf();
  35. bool SendAuthReqPackage();
  36. bool HandleAuthRetPackage(const CSmartPointer<IPackage> &pRetPkg);
  37. bool SendShakeReqPackage();
  38. bool HandleShakeRetPackage(const CSmartPointer<IPackage> &pRetPkg);
  39. bool SendUseSharedSKPackage();
  40. bool HandleUseSharedSKRetPackage(const CSmartPointer<IPackage> &pRetPkg);
  41. bool SendHelloReqPackage();
  42. bool HandleHelloRetPackage(const CSmartPointer<IPackage> &pRetPkg);
  43. private:
  44. enum ConnStateEnum
  45. {
  46. State_None = 0,
  47. State_Connecting,
  48. State_OK,
  49. State_Closed,
  50. State_Disconnected,
  51. State_Error,
  52. };
  53. CSecureClientBase *m_pCallback;
  54. SOCKET m_hSocket;
  55. HANDLE m_hWorkThread;
  56. CLockObject m_LockObject;
  57. ConnStateEnum m_eState;
  58. bool m_bNeedAuth;
  59. std::vector<IPackage*> m_RecvPackages;
  60. HANDLE m_hRecvEvent;
  61. volatile LONG m_nSyncWaitResult;
  62. const int SOCKET_RECV_BUF_LEN;
  63. BYTE *m_pRecvBuf;
  64. int m_nRecvBufLen;
  65. int m_nHasRecvLen;
  66. DWORD m_dwSessionID;
  67. DWORD m_dwTokenHash;
  68. BYTE m_arrSessionKey[16];
  69. // 缓存上次会话标识
  70. static DWORD s_dwSessionID;
  71. static DWORD s_dwTokenHash;
  72. static BYTE s_arrSessionKey[16];
  73. };
  74. #endif // !defined(AFX_CLIENTCOMM_H__12A1FE2E_023E_4CB8_99C5_E3AF870A5007__INCLUDED_)