helper.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. #pragma once
  2. #include "SocketInterface.h"
  3. #include "GeneralHelper.h"
  4. #define USER_INFO_MSG (WM_USER + 100)
  5. #define MAX_LOG_RECORD_LENGTH 1000
  6. #define EVT_ON_SEND _T("OnSend")
  7. #define EVT_ON_RECEIVE _T("OnReceive")
  8. #define EVT_ON_CLOSE _T("OnClose")
  9. #define EVT_ON_ERROR _T("OnError")
  10. #define EVT_ON_PREPARE_CONNECT _T("OnPrepareConnect")
  11. #define EVT_ON_PREPARE_LISTEN _T("OnPrepareListen")
  12. #define EVT_ON_ACCEPT _T("OnAccept")
  13. #define EVT_ON_CONNECT _T("OnConnect")
  14. #define EVT_ON_HAND_SHAKE _T("OnHandShake")
  15. #define EVT_ON_SHUTDOWN _T("OnShutdown")
  16. #define EVT_ON_END_TEST _T("END TEST")
  17. #define EVT_ON_MESSAGE_BEGIN _T("OnMessageBegin")
  18. #define EVT_ON_REQUEST_LINE _T("OnRequestLine")
  19. #define EVT_ON_STATUS_LINE _T("OnStatusLine")
  20. #define EVT_ON_HEADER _T("OnHeader")
  21. #define EVT_ON_HEADERS_COMPLETE _T("OnHeadersComplete")
  22. #define EVT_ON_BODY _T("OnBody")
  23. #define EVT_ON_CHUNK_HEADER _T("OnChunkHeader")
  24. #define EVT_ON_CHUNK_COMPLETE _T("OnChunkComplete")
  25. #define EVT_ON_MESSAGE_COMPLETE _T("OnMessageComplete")
  26. #define EVT_ON_UPGRADE _T("OnUpgrade")
  27. #define EVT_ON_PARSE_ERROR _T("OnParseError")
  28. #define MAX_STUDIOID_LENGTH 37
  29. #define MAX_ACCOUNT_LENGTH 17
  30. #define MAX_PASSWORD_LENGTH 17
  31. enum EnAppState
  32. {
  33. ST_STARTING, ST_STARTED, ST_CONNECTING, ST_CONNECTED, ST_STOPPING, ST_STOPPED
  34. };
  35. enum ProtocolCmd
  36. {
  37. //----------------------------:common comand.type: 1~999----------------------------------------------------
  38. CMD_HEART = 1, // 心跳包;
  39. CMD_TOCHAT = 2, // 文字聊天;
  40. CMD_FILEINFO_TRANSFER = 3, // 文件传输-文件信息;
  41. CMD_FILECONT_TRANSFER = 4, // 文件传输-文件内容;
  42. CMD_UPDATA = 5, // 有升级信息(用户终端每次登录时,请求检测是否有新版本可升级的信息);
  43. CMD_DATABASEINFO = 6, // 向请求端返回数据库信息;
  44. CMD_OHTER_INFO = 999, // 其他信息;
  45. //------------------------C2L:consumer terminal to lyfz.service: 1000~1999------------------------------------
  46. C2LCMD_REQ_LOGIN = 1000, // 用户终端请求登录利亚方舟服务端(外网ip+登录信息);
  47. //C2LCMD_GET_DOG_DATA = 1001, // 利亚方舟获取用户终端机器加密狗数据信息;
  48. C2LCMD_DOGINFO = 1001, // 用户终端向利亚方舟发送加密狗信息;
  49. C2LCMD_GET_VAR = 1002, // 请求用户终端的版本号;
  50. C2LCMD_DEAL_ILLEGAL = 1003, // 处理盗版、过期用户:停止用户终端工作、启用定时关机、程序文件自动删除等等操作命令;
  51. C2LCMD_DEAL_SMS = 1004, // 利亚方舟服务端处理用户终端的短信发送工作;
  52. C2LCMD_GET_DBINFO = 1005, // 利亚方舟服务端获取用户终端电脑数据库信息;
  53. // .预留,若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;(Jeff.100%的不建议使用这种方式获取数据,占用太多带宽和资源)
  54. // .若要使用SQL,则只允许SQL的updata、insert、delete、drop……等命令,不允许使用select来返回查询到数据;
  55. C2LCMD_OTHER_INFO = 1999, // 读其它信息;
  56. //------------------------C2C:consumer client to consumer service: 2000~2999--------------------------------
  57. C2CCMD_REQ_LOGIN = 2000, // 客户端请求登录服务器;
  58. C2CCMD_REQ_LOGOUT = 2001, // 客户端注销;
  59. C2CCMD_REQ_DOG_DATA = 2002, // 读软件狗数据;
  60. C2CCMD_AUTO_UPDATA = 2003, // 服务端向所有客户发送自动数据更新命令;
  61. C2CCMD_REQ_SERVER_VAR = 2004, // 请求服务端的版本号;
  62. C2CCMD_GET_DBINFO = 2005, // 利亚方舟服务端获取用户终端电脑数据库信息;
  63. C2CCMD_ORD_PHOTO_BAK = 2006, // 客户端端向备份程序发送订单相片重新备份命令(导片与备份存在写备份无法锁定现象,need to Notify);
  64. //////////////////////////////////////////////////////////////////////////
  65. C2CCMD_NEW_ORDERINFO = 2007, // 开单;
  66. C2CCMD_DEL_ORDERINFO = 2008, // 删除订单;
  67. C2CCMD_MOD_ORDERINFO = 2009, // 修改订单;
  68. C2CCMD_MOD_ORDERINFO2 = 2089, // 修改订单;
  69. C2CCMD_QRY_ORDERINFO = 2010, // 查询订单;
  70. //////////////////////////////////////////////////////////////////////////
  71. C2CCMD_NEW_PRODUCT = 2012, // 添加商品;
  72. C2CCMD_MOD_PRODUCT = 2013, // 修改商品;
  73. C2CCMD_DEL_PRODUCT = 2014, // 删除商品;
  74. C2CCMD_QRY_PRODUCT = 2015, // 查询商品;
  75. //////////////////////////////////////////////////////////////////////////
  76. C2CCMD_NEW_CUSTOMERFROM = 2016, // 添加顾客来源;
  77. C2CCMD_DEL_CUSTOMERFROM = 2017, // 删除顾客来源;
  78. C2CCMD_MOD_CUSTOMERFROM = 2018, // 修改顾客来源;
  79. C2CCMD_QRY_CUSTOMERFROM = 2019, // 查询顾客来源;
  80. //////////////////////////////////////////////////////////////////////////
  81. C2CCMD_NEW_CUSTOMERINFO = 2020, // 添加新顾客信息;
  82. C2CCMD_DEL_CUSTOMERINFO = 2021, // 删除顾客信息;
  83. C2CCMD_MOD_CUSTOMERINFO = 2022, // 修改顾客信息;
  84. C2CCMD_QRY_CUSTOMERINFO = 2023, // 查询顾客信息;
  85. //////////////////////////////////////////////////////////////////////////
  86. C2CCMD_NEW_DEPARTMENT = 2024, // 新增部门信息;
  87. C2CCMD_DEL_DEPARTMENT = 2025, // 删除部门信息;
  88. C2CCMD_MOD_DEPARTMENT = 2026, // 修改部门信息;
  89. C2CCMD_QRY_DEPARTMENT = 2027, // 查询部门信息;
  90. //////////////////////////////////////////////////////////////////////////
  91. C2CCMD_NEW_STAFFINFO = 2028, // 新增员工信息;
  92. C2CCMD_DEL_STAFFINFO = 2029, // 删除员工信息;
  93. C2CCMD_MOD_STAFFINFO = 2030, // 修改员工信息;
  94. C2CCMD_QRY_STAFFINFO = 2031, // 查询员工信息;
  95. //////////////////////////////////////////////////////////////////////////
  96. C2CCMD_NEW_USERINFO = 2032, // 新增用户信息;
  97. C2CCMD_DEL_USERINFO = 2033, // 删除用户信息;
  98. C2CCMD_MOD_USERINFO = 2034, // 修改用户信息;
  99. C2CCMD_QRY_USERINFO = 2035, // 查询用户信息;
  100. //////////////////////////////////////////////////////////////////////////
  101. C2CCMD_NEW_SCENERY = 2036, // 新增景点信息;
  102. C2CCMD_DEL_SCENERY = 2037, // 删除景点信息;
  103. C2CCMD_MOD_SCENERY = 2038, // 修改景点信息;
  104. C2CCMD_QRY_SCENERY = 2039, // 查询景点信息;
  105. //////////////////////////////////////////////////////////////////////////
  106. C2CCMD_NEW_ORDERTYPE = 2040, // 新增订单类型信息;
  107. C2CCMD_DEL_ORDERTYPE = 2041, // 删除订单类型信息;
  108. C2CCMD_MOD_ORDERTYPE = 2042, // 修改订单类型信息;
  109. C2CCMD_QRY_ORDERTYPE = 2043, // 查询订单类型信息;
  110. //////////////////////////////////////////////////////////////////////////
  111. C2CCMD_NEW_PRODUCTTYPE = 2044, // 添加商品类型;
  112. C2CCMD_MOD_PRODUCTTYPE = 2045, // 修改商品类型;
  113. C2CCMD_DEL_PRODUCTTYPE = 2046, // 删除商品类型;
  114. C2CCMD_QRY_PRODUCTTYPE = 2047, // 查询商品类型;
  115. //////////////////////////////////////////////////////////////////////////
  116. C2CCMD_NEW_PACKAGETYPE = 2048, // 添加套系类型;
  117. C2CCMD_DEL_PACKAGETYPE = 2049, // 修改套系类型;
  118. C2CCMD_MOD_PACKAGETYPE = 2050, // 删除套系类型;
  119. C2CCMD_QRY_PACKAGETYPE = 2051, // 查询套系类型;
  120. //////////////////////////////////////////////////////////////////////////
  121. C2CCMD_NEW_PACKAGEINFO = 2052, // 添加套系信息;
  122. C2CCMD_DEL_PACKAGEINFO = 2053, // 删除套系信息;
  123. C2CCMD_MOD_PACKAGEINFO = 2054, // 修改套系信息;
  124. C2CCMD_QRY_PACKAGEINFO = 2055, // 查询套系信息;
  125. //////////////////////////////////////////////////////////////////////////
  126. C2CCMD_NEW_PACKAGEITEM = 2056, // 添加套系项目;
  127. C2CCMD_DEL_PACKAGEITEM = 2057, // 修改套系项目;
  128. C2CCMD_MOD_PACKAGEITEM = 2058, // 删除套系项目;
  129. C2CCMD_QRY_PACKAGEITEM = 2059, // 查询套系项目;
  130. C2CCMD_QRY_PACKAGEITEM_DETAIL = 2072, // 查询套系项目详情;
  131. //////////////////////////////////////////////////////////////////////////
  132. C2CCMD_NEW_ORDERPACKAGEITEM = 2060, // 添加套系项目;
  133. C2CCMD_NEW_ORDERPACKAGEITEM2 = 2087, // 添加订单套餐项目(删除以前的);
  134. C2CCMD_DEL_ORDERPACKAGEITEM = 2061, // 修改套系项目;
  135. C2CCMD_MOD_ORDERPACKAGEITEM = 2062, // 删除套系项目;
  136. C2CCMD_QRY_ORDERPACKAGEITEM = 2063, // 查询套系项目;
  137. //////////////////////////////////////////////////////////////////////////
  138. C2CCMD_NEW_SYSCONFING = 2064, // 添加影楼配置信息;
  139. C2CCMD_DEL_SYSCONFING = 2065, // 删除影楼配置信息;
  140. C2CCMD_MOD_SYSCONFING = 2066, // 修改影楼配置信息;
  141. C2CCMD_QRY_SYSCONFING = 2067, // 查询影楼配置信息;
  142. //////////////////////////////////////////////////////////////////////////
  143. C2CCMD_NEW_STUDIOINFO = 2068, // 添加影楼信息;
  144. C2CCMD_DEL_STUDIOINFO = 2069, // 删除影楼信息;
  145. C2CCMD_MOD_STUDIOINFO = 2070, // 修改影楼信息;
  146. C2CCMD_QRY_STUDIOINFO = 2071, // 查询影楼信息;
  147. // .预留,若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;(Jeff.100%的不建议使用这种方式获取数据,占用太多带宽和资源)
  148. // .若要使用SQL,则只允许SQL的updata、insert、delete、drop……等命令,不允许使用select来返回查询到数据;
  149. //C2CCMD_QRY_PACKAGEITEM_DETAIL = 2072, // 查询套系项详情;
  150. C2CCMD_QRY_PACKAGEITEM_VIEW = 2073, // 查询套系项详情;
  151. C2CCMD_NEW_PACKAGEITEM_MUTI = 2074, // 多个项同时插入到套系中;
  152. C2CCMD_NEW_PACKAGEITEM2 = 2075, // 添加套系项目;
  153. // 订单景点信息;
  154. C2CCMD_NEW_ORDERSCENERY = 2076, // 添加订单景点信息;
  155. C2CCMD_NEW_ORDERSCENERY2 = 2088, // 添加订单景点信息(删除以前的);
  156. C2CCMD_DEL_ORDERSCENERY = 2077, // 删除订单景点信息,使用autoid;
  157. C2CCMD_MOD_ORDERSCENERY = 2078, // 修改订单景点信息;
  158. C2CCMD_QRY_ORDERSCENERY = 2079, // 查询订单景点信息;
  159. C2CCMD_DEL_ORDERSCENERY2 = 2080, // 删除订单景点信息,使用订单号+景点名;
  160. // 订单商品信息;
  161. C2CCMD_NEW_ORDERPRODUCT = 2081, // 添加订单商品信息;
  162. C2CCMD_DEL_ORDERPRODUCT = 2082, // 删除订单商品信息;
  163. C2CCMD_MOD_ORDERPRODUCT = 2083, // 修改订单商品信息;
  164. C2CCMD_QRY_ORDERPRODUCT = 2084, // 查询订单商品信息;
  165. // 获取订单序号;
  166. C2CCMD_GET_ORDER_SERIALNUMBER = 2085, // 获取订单序号;
  167. // 获取打印序号;
  168. C2CCMD_GET_PRINT_SERIALNUMBER = 2086, // 获取打印序号;
  169. C2CCMD_OTHER_INFO = 2999, // 读其它信息;
  170. };
  171. enum PackageFlag
  172. {
  173. PACKAGE_ONESELF = 0, // 协议包-独立;
  174. PACKAGE_MULTIPLE = 1, // 协议包-多个;
  175. };
  176. enum UserLogInStatus
  177. {
  178. USER_LOGIN = 1, // 登录成功;
  179. USER_PW_MISTAKE = 2, // 密码错误;
  180. USER_HAVE_LOGIN = 3, // 用户已经登录;
  181. USER_NULL = 0 // 没有用户;
  182. };
  183. typedef struct __LogInUser__
  184. {
  185. TCHAR szStudioId[MAX_STUDIOID_LENGTH]; // 影楼Guid;
  186. TCHAR szAccount[MAX_ACCOUNT_LENGTH]; // 账号;
  187. TCHAR szPassword[MAX_PASSWORD_LENGTH]; // 密码;
  188. }LogInUser,*pLogInUser;
  189. #pragma pack(push,1)
  190. // 协议头-勿更改;
  191. typedef struct __THEPROPACKAGE__
  192. {
  193. byte flag; // 协议包类型标识;
  194. short nCmd; // 协议携带的命令标识;
  195. //unsigned int nUnCompressLen;
  196. unsigned int nDataLen; // 数据长度,除了头之外的数据;
  197. unsigned int nSubDataLen; // 分包大小;
  198. DWORD dwReserve; // 预留填0;
  199. TCHAR szStudioId[MAX_STUDIOID_LENGTH]; // 影楼Guid;
  200. TCHAR szAccount[MAX_ACCOUNT_LENGTH]; // 账号;
  201. TCHAR szPassword[MAX_PASSWORD_LENGTH]; // 密码;
  202. //BYTE byProp[5];
  203. BYTE byBody[2]; // 包数据;
  204. __THEPROPACKAGE__(){
  205. flag = PACKAGE_ONESELF;
  206. nCmd = 0;
  207. nDataLen = 0;
  208. nSubDataLen = 0;
  209. dwReserve = 0;
  210. memset(byBody, 0, 2);
  211. //memset(byProp, 0, 5);
  212. memset(szStudioId, 0, sizeof(TCHAR)*MAX_STUDIOID_LENGTH);
  213. memset(szAccount, 0, sizeof(TCHAR)*MAX_ACCOUNT_LENGTH);
  214. memset(szPassword, 0, sizeof(TCHAR)*MAX_PASSWORD_LENGTH);
  215. }
  216. }TheProPackage,*pTheProPackage;
  217. #pragma pack(pop)
  218. struct info_msg
  219. {
  220. LPCTSTR name;
  221. CONNID connID;
  222. LPCTSTR evt;
  223. int contentLength;
  224. LPCTSTR content;
  225. static info_msg* Construct(CONNID dwConnID, LPCTSTR lpszEvent, int iContentLength = 0, LPCTSTR lpszContent = nullptr, LPCTSTR lpszName = nullptr);
  226. static void Destruct(info_msg* pMsg);
  227. private:
  228. info_msg(CONNID dwConnID, LPCTSTR lpszEvent, int iContentLength = 0, LPCTSTR lpszContent = nullptr, LPCTSTR lpszName = nullptr);
  229. ~info_msg();
  230. };
  231. struct TPkgHeader
  232. {
  233. DWORD seq;
  234. int body_len;
  235. };
  236. struct TPkgBody
  237. {
  238. char name[30];
  239. short age;
  240. char desc[1];
  241. };
  242. struct TPkgInfo
  243. {
  244. bool is_header;
  245. int length;
  246. TPkgInfo(bool header = true, int len = sizeof(TPkgHeader)) : is_header(header), length(len) {}
  247. void Reset() {is_header = true, length = sizeof(TPkgHeader);}
  248. ~TPkgInfo() {}
  249. };
  250. CBufferPtr* GeneratePkgBuffer(DWORD seq, LPCTSTR lpszName, short age, LPCTSTR lpszDesc);
  251. CBufferPtr* GeneratePkgBuffer(const TPkgHeader& header, const TPkgBody& body);
  252. void SetMainWnd(CWnd* pWnd);
  253. void SetInfoList(CListBox* pInfoList);
  254. void LogServerStart(LPCTSTR lpszAddress, USHORT port, LPCTSTR lpszName = nullptr);
  255. void LogServerStartFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr);
  256. void LogServerStop(LPCTSTR lpszName = nullptr);
  257. void LogServerStopFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr);
  258. void LogClientStart(LPCTSTR lpszAddress, USHORT port, LPCTSTR lpszName = nullptr);
  259. void LogClientStarting(LPCTSTR lpszAddress, USHORT port, LPCTSTR lpszName = nullptr);
  260. void LogClientStartFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr);
  261. void LogClientStopping(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  262. void LogClientStopFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr);
  263. void LogSend(CONNID dwConnID, LPCTSTR lpszContent, LPCTSTR lpszName = nullptr);
  264. void LogClientSendFail(int iSequence, int iSocketIndex, DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr);
  265. void LogSendFail(CONNID dwConnID, DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr);
  266. void LogDisconnect(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  267. void LogDisconnectFail(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  268. void LogRelease(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  269. void LogReleaseFail(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  270. void LogDetect(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  271. void LogDetectFail(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  272. void LogOnConnect(CONNID dwConnID, const CString& strAddress, USHORT usPort);
  273. void LogOnConnect2(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  274. void LogOnHandShake2(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  275. void PostOnSend(CONNID dwConnID, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr);
  276. void PostOnReceive(CONNID dwConnID, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr);
  277. void PostOnReceiveCast(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr);
  278. void PostOnClose(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  279. void PostOnError(CONNID dwConnID, int enOperation, int iErrorCode, LPCTSTR lpszName = nullptr);
  280. void PostOnAccept(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, BOOL bPass, LPCTSTR lpszName = nullptr);
  281. void PostOnAccept2(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  282. void PostOnHandShake(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  283. void PostOnPrepareListen(LPCTSTR lpszAddress, USHORT usPort, LPCTSTR lpszName = nullptr);
  284. void PostOnPrepareConnect(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  285. void PostOnConnect(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, LPCTSTR lpszName = nullptr);
  286. void PostOnConnect2(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, LPCTSTR lpszName = nullptr);
  287. void PostOnConnect3(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  288. void PostOnShutdown(LPCTSTR lpszName = nullptr);
  289. void PostServerStatics(const LONGLONG& llTotalSent, const LONGLONG& llTotalReceived, LPCTSTR lpszName = nullptr);
  290. void PostTimeConsuming(DWORD dwTickCount, LPCTSTR lpszName = nullptr);
  291. void PostOnMessageBegin(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  292. void PostOnRequestLine(CONNID dwConnID, LPCSTR lpszMethod, USHORT usUrlFieldSet, LPCSTR lpszUrl, LPCTSTR lpszName = nullptr);
  293. void PostOnStatusLine(CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc, LPCTSTR lpszName = nullptr);
  294. void PostOnHeader(CONNID dwConnID, LPCSTR lpszHeaderName, LPCSTR lpszHeaderValue, LPCTSTR lpszName = nullptr);
  295. void PostOnHeadersComplete(CONNID dwConnID, LPCSTR lpszSummary, LPCTSTR lpszName = nullptr);
  296. void PostOnBody(CONNID dwConnID, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr);
  297. void PostOnChunkHeader(CONNID dwConnID, int iLength, LPCTSTR lpszName = nullptr);
  298. void PostOnChunkComplete(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  299. void PostOnMessageComplete(CONNID dwConnID, LPCTSTR lpszName = nullptr);
  300. void PostOnUpgrade(CONNID dwConnID, EnHttpUpgradeType enUpgradeType, LPCTSTR lpszName = nullptr);
  301. void PostOnParseError(CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc, LPCTSTR lpszName = nullptr);
  302. void PostInfoMsg(info_msg* msg);
  303. void LogInfoMsg(info_msg* pInfoMsg);
  304. void LogMsg(const CString& msg);
  305. #ifdef _SSL_SUPPORT
  306. extern int g_c_iVerifyMode;
  307. extern BOOL g_c_bNeedClientVerification;
  308. extern LPCTSTR g_c_lpszCAPemCertFileOrPath;
  309. extern LPCTSTR g_c_lpszPemCertFile;
  310. extern LPCTSTR g_c_lpszPemKeyFile;
  311. extern LPCTSTR g_c_lpszKeyPasswod;
  312. extern int g_s_iVerifyMode;
  313. extern BOOL g_s_bNeedClientVerification;
  314. extern LPCTSTR g_s_lpszCAPemCertFileOrPath;
  315. extern LPCTSTR g_s_lpszPemCertFile;
  316. extern LPCTSTR g_s_lpszPemKeyFile;
  317. extern LPCTSTR g_s_lpszKeyPasswod;
  318. #endif