开源的socket服务端客户端,支持C# C++

SocketObject4C.h 26KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Version : 4.1.3
  5. * Author : Bruce Liang
  6. * Website : http://www.jessma.org
  7. * Project : https://github.com/ldcsaa
  8. * Blog : http://www.cnblogs.com/ldcsaa
  9. * Wiki : http://www.oschina.net/p/hp-socket
  10. * QQ Group : 75375912
  11. *
  12. * Licensed under the Apache License, Version 2.0 (the "License");
  13. * you may not use this file except in compliance with the License.
  14. * You may obtain a copy of the License at
  15. *
  16. * http://www.apache.org/licenses/LICENSE-2.0
  17. *
  18. * Unless required by applicable law or agreed to in writing, software
  19. * distributed under the License is distributed on an "AS IS" BASIS,
  20. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  21. * See the License for the specific language governing permissions and
  22. * limitations under the License.
  23. */
  24. #pragma once
  25. #include "HPSocket4C.h"
  26. #include "SocketInterface.h"
  27. class C_HP_Object
  28. {
  29. public:
  30. template<class T> static inline HP_Object FromFirst(T* pFirst)
  31. {
  32. return (HP_Object)((char*)pFirst - first);
  33. }
  34. template<class T> static inline T* ToFirst(HP_Object pObject)
  35. {
  36. return (T*)((char*)pObject + first);
  37. }
  38. template<size_t offset, class T> static inline HP_Object FromSecond(T* pSecond)
  39. {
  40. return (C_HP_Object*)((char*)pSecond - first - offset);
  41. /*
  42. C_HP_Object* pObj = (C_HP_Object*)((char*)pSecond - first - offset);
  43. if(pObj->second != first)
  44. {
  45. pObj = (C_HP_Object*)((char*)pObj - sizeof(HP_Object));
  46. ASSERT(pObj->second == first + sizeof(HP_Object));
  47. }
  48. return (HP_Object)pObj;
  49. */
  50. }
  51. template<class T> static inline T* ToSecond(HP_Object pObject)
  52. {
  53. return (T*)((char*)pObject + ((C_HP_Object*)pObject)->second);
  54. }
  55. public:
  56. C_HP_Object(int offset = 0) : second(first + offset) {}
  57. virtual ~C_HP_Object() {}
  58. private:
  59. static const size_t first = (sizeof(PVOID) + sizeof(size_t));
  60. size_t second;
  61. };
  62. template<class T, class L, int offset = 0> class C_HP_ObjectT : private C_HP_Object, public T
  63. {
  64. public:
  65. C_HP_ObjectT(L* pListener) : C_HP_Object(offset), T(pListener) {}
  66. C_HP_ObjectT() : C_HP_Object(offset), T() {}
  67. };
  68. template<class T, class L, size_t offset = 0> class C_HP_ServerListenerT : public L
  69. {
  70. public:
  71. virtual EnHandleResult OnPrepareListen(T* pSender, SOCKET soListen)
  72. {
  73. return (m_fnOnPrepareListen)
  74. ? m_fnOnPrepareListen(C_HP_Object::FromSecond<offset>(pSender), soListen)
  75. : HR_IGNORE;
  76. }
  77. virtual EnHandleResult OnAccept(T* pSender, CONNID dwConnID, UINT_PTR soClient)
  78. {
  79. return (m_fnOnAccept)
  80. ? m_fnOnAccept(C_HP_Object::FromSecond<offset>(pSender), dwConnID, soClient)
  81. : HR_IGNORE;
  82. }
  83. virtual EnHandleResult OnHandShake(T* pSender, CONNID dwConnID)
  84. {
  85. return (m_fnOnHandShake)
  86. ? m_fnOnHandShake(C_HP_Object::FromSecond<offset>(pSender), dwConnID)
  87. : HR_IGNORE;
  88. }
  89. virtual EnHandleResult OnSend(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  90. {
  91. return (m_fnOnSend)
  92. ? m_fnOnSend(C_HP_Object::FromSecond<offset>(pSender), dwConnID, pData, iLength)
  93. : HR_IGNORE;
  94. }
  95. virtual EnHandleResult OnReceive(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  96. {
  97. ASSERT(m_fnOnReceive);
  98. return (m_fnOnReceive)
  99. ? m_fnOnReceive(C_HP_Object::FromSecond<offset>(pSender), dwConnID, pData, iLength)
  100. : HR_IGNORE;
  101. }
  102. virtual EnHandleResult OnReceive(T* pSender, CONNID dwConnID, int iLength)
  103. {
  104. ASSERT(m_fnOnPullReceive);
  105. return (m_fnOnPullReceive)
  106. ? m_fnOnPullReceive(C_HP_Object::FromSecond<offset>(pSender), dwConnID, iLength)
  107. : HR_IGNORE;
  108. }
  109. virtual EnHandleResult OnClose(T* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
  110. {
  111. ASSERT(m_fnOnClose);
  112. return (m_fnOnClose)
  113. ? m_fnOnClose(C_HP_Object::FromSecond<offset>(pSender), dwConnID, enOperation, iErrorCode)
  114. : HR_IGNORE;
  115. }
  116. virtual EnHandleResult OnShutdown(T* pSender)
  117. {
  118. return (m_fnOnShutdown)
  119. ? m_fnOnShutdown(C_HP_Object::FromSecond<offset>(pSender))
  120. : HR_IGNORE;
  121. }
  122. public:
  123. C_HP_ServerListenerT()
  124. : m_fnOnPrepareListen (nullptr)
  125. , m_fnOnAccept (nullptr)
  126. , m_fnOnHandShake (nullptr)
  127. , m_fnOnSend (nullptr)
  128. , m_fnOnReceive (nullptr)
  129. , m_fnOnPullReceive (nullptr)
  130. , m_fnOnClose (nullptr)
  131. , m_fnOnShutdown (nullptr)
  132. {
  133. }
  134. public:
  135. HP_FN_Server_OnPrepareListen m_fnOnPrepareListen ;
  136. HP_FN_Server_OnAccept m_fnOnAccept ;
  137. HP_FN_Server_OnHandShake m_fnOnHandShake ;
  138. HP_FN_Server_OnSend m_fnOnSend ;
  139. HP_FN_Server_OnReceive m_fnOnReceive ;
  140. HP_FN_Server_OnPullReceive m_fnOnPullReceive ;
  141. HP_FN_Server_OnClose m_fnOnClose ;
  142. HP_FN_Server_OnShutdown m_fnOnShutdown ;
  143. };
  144. template<class T, class L, size_t offset = 0> class C_HP_AgentListenerT : public L
  145. {
  146. public:
  147. virtual EnHandleResult OnPrepareConnect(T* pSender, CONNID dwConnID, SOCKET socket)
  148. {
  149. return (m_fnOnPrepareConnect)
  150. ? m_fnOnPrepareConnect(C_HP_Object::FromSecond<offset>(pSender), dwConnID, socket)
  151. : HR_IGNORE;
  152. }
  153. virtual EnHandleResult OnConnect(T* pSender, CONNID dwConnID)
  154. {
  155. return (m_fnOnConnect)
  156. ? m_fnOnConnect(C_HP_Object::FromSecond<offset>(pSender), dwConnID)
  157. : HR_IGNORE;
  158. }
  159. virtual EnHandleResult OnHandShake(T* pSender, CONNID dwConnID)
  160. {
  161. return (m_fnOnHandShake)
  162. ? m_fnOnHandShake(C_HP_Object::FromSecond<offset>(pSender), dwConnID)
  163. : HR_IGNORE;
  164. }
  165. virtual EnHandleResult OnSend(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  166. {
  167. return (m_fnOnSend)
  168. ? m_fnOnSend(C_HP_Object::FromSecond<offset>(pSender), dwConnID, pData, iLength)
  169. : HR_IGNORE;
  170. }
  171. virtual EnHandleResult OnReceive(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  172. {
  173. ASSERT(m_fnOnReceive);
  174. return (m_fnOnReceive)
  175. ? m_fnOnReceive(C_HP_Object::FromSecond<offset>(pSender), dwConnID, pData, iLength)
  176. : HR_IGNORE;
  177. }
  178. virtual EnHandleResult OnReceive(T* pSender, CONNID dwConnID, int iLength)
  179. {
  180. ASSERT(m_fnOnPullReceive);
  181. return (m_fnOnPullReceive)
  182. ? m_fnOnPullReceive(C_HP_Object::FromSecond<offset>(pSender), dwConnID, iLength)
  183. : HR_IGNORE;
  184. }
  185. virtual EnHandleResult OnClose(T* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
  186. {
  187. ASSERT(m_fnOnClose);
  188. return (m_fnOnClose)
  189. ? m_fnOnClose(C_HP_Object::FromSecond<offset>(pSender), dwConnID, enOperation, iErrorCode)
  190. : HR_IGNORE;
  191. }
  192. virtual EnHandleResult OnShutdown(T* pSender)
  193. {
  194. return (m_fnOnShutdown)
  195. ? m_fnOnShutdown(C_HP_Object::FromSecond<offset>(pSender))
  196. : HR_IGNORE;
  197. }
  198. public:
  199. C_HP_AgentListenerT()
  200. : m_fnOnPrepareConnect (nullptr)
  201. , m_fnOnConnect (nullptr)
  202. , m_fnOnHandShake (nullptr)
  203. , m_fnOnSend (nullptr)
  204. , m_fnOnReceive (nullptr)
  205. , m_fnOnPullReceive (nullptr)
  206. , m_fnOnClose (nullptr)
  207. , m_fnOnShutdown (nullptr)
  208. {
  209. }
  210. public:
  211. HP_FN_Agent_OnPrepareConnect m_fnOnPrepareConnect;
  212. HP_FN_Agent_OnConnect m_fnOnConnect ;
  213. HP_FN_Agent_OnHandShake m_fnOnHandShake ;
  214. HP_FN_Agent_OnSend m_fnOnSend ;
  215. HP_FN_Agent_OnReceive m_fnOnReceive ;
  216. HP_FN_Agent_OnPullReceive m_fnOnPullReceive ;
  217. HP_FN_Agent_OnClose m_fnOnClose ;
  218. HP_FN_Agent_OnShutdown m_fnOnShutdown ;
  219. };
  220. template<class T, class L, size_t offset = 0> class C_HP_ClientListenerT : public L
  221. {
  222. public:
  223. virtual EnHandleResult OnPrepareConnect(T* pSender, CONNID dwConnID, SOCKET socket)
  224. {
  225. return (m_fnOnPrepareConnect)
  226. ? m_fnOnPrepareConnect(C_HP_Object::FromSecond<offset>(pSender), dwConnID, socket)
  227. : HR_IGNORE;
  228. }
  229. virtual EnHandleResult OnConnect(T* pSender, CONNID dwConnID)
  230. {
  231. return (m_fnOnConnect)
  232. ? m_fnOnConnect(C_HP_Object::FromSecond<offset>(pSender), dwConnID)
  233. : HR_IGNORE;
  234. }
  235. virtual EnHandleResult OnHandShake(T* pSender, CONNID dwConnID)
  236. {
  237. return (m_fnOnHandShake)
  238. ? m_fnOnHandShake(C_HP_Object::FromSecond<offset>(pSender), dwConnID)
  239. : HR_IGNORE;
  240. }
  241. virtual EnHandleResult OnSend(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  242. {
  243. return (m_fnOnSend)
  244. ? m_fnOnSend(C_HP_Object::FromSecond<offset>(pSender), dwConnID, pData, iLength)
  245. : HR_IGNORE;
  246. }
  247. virtual EnHandleResult OnReceive(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  248. {
  249. ASSERT(m_fnOnReceive);
  250. return (m_fnOnReceive)
  251. ? m_fnOnReceive(C_HP_Object::FromSecond<offset>(pSender), dwConnID, pData, iLength)
  252. : HR_IGNORE;
  253. }
  254. virtual EnHandleResult OnReceive(T* pSender, CONNID dwConnID, int iLength)
  255. {
  256. ASSERT(m_fnOnPullReceive);
  257. return (m_fnOnPullReceive)
  258. ? m_fnOnPullReceive(C_HP_Object::FromSecond<offset>(pSender), dwConnID, iLength)
  259. : HR_IGNORE;
  260. }
  261. virtual EnHandleResult OnClose(T* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
  262. {
  263. ASSERT(m_fnOnClose);
  264. return (m_fnOnClose)
  265. ? m_fnOnClose(C_HP_Object::FromSecond<offset>(pSender), dwConnID, enOperation, iErrorCode)
  266. : HR_IGNORE;
  267. }
  268. public:
  269. C_HP_ClientListenerT()
  270. : m_fnOnPrepareConnect (nullptr)
  271. , m_fnOnConnect (nullptr)
  272. , m_fnOnHandShake (nullptr)
  273. , m_fnOnSend (nullptr)
  274. , m_fnOnReceive (nullptr)
  275. , m_fnOnPullReceive (nullptr)
  276. , m_fnOnClose (nullptr)
  277. {
  278. }
  279. public:
  280. HP_FN_Client_OnPrepareConnect m_fnOnPrepareConnect;
  281. HP_FN_Client_OnConnect m_fnOnConnect ;
  282. HP_FN_Client_OnHandShake m_fnOnHandShake ;
  283. HP_FN_Client_OnSend m_fnOnSend ;
  284. HP_FN_Client_OnReceive m_fnOnReceive ;
  285. HP_FN_Client_OnPullReceive m_fnOnPullReceive ;
  286. HP_FN_Client_OnClose m_fnOnClose ;
  287. };
  288. typedef C_HP_ServerListenerT<ITcpServer, ITcpServerListener> C_HP_TcpServerListener;
  289. typedef C_HP_ServerListenerT<ITcpServer, ITcpServerListener, sizeof(IPullSocket)> C_HP_TcpPullServerListener;
  290. typedef C_HP_ServerListenerT<ITcpServer, ITcpServerListener, sizeof(IPackSocket)> C_HP_TcpPackServerListener;
  291. typedef C_HP_AgentListenerT<ITcpAgent, ITcpAgentListener> C_HP_TcpAgentListener;
  292. typedef C_HP_AgentListenerT<ITcpAgent, ITcpAgentListener, sizeof(IPullSocket)> C_HP_TcpPullAgentListener;
  293. typedef C_HP_AgentListenerT<ITcpAgent, ITcpAgentListener, sizeof(IPackSocket)> C_HP_TcpPackAgentListener;
  294. typedef C_HP_ClientListenerT<ITcpClient, ITcpClientListener> C_HP_TcpClientListener;
  295. typedef C_HP_ClientListenerT<ITcpClient, ITcpClientListener, sizeof(IPullClient)> C_HP_TcpPullClientListener;
  296. typedef C_HP_ClientListenerT<ITcpClient, ITcpClientListener, sizeof(IPackClient)> C_HP_TcpPackClientListener;
  297. typedef C_HP_ServerListenerT<IUdpServer, IUdpServerListener> C_HP_UdpServerListener;
  298. typedef C_HP_ClientListenerT<IUdpClient, IUdpClientListener> C_HP_UdpClientListener;
  299. typedef C_HP_ClientListenerT<IUdpCast, IUdpCastListener> C_HP_UdpCastListener;
  300. template<class T> class C_HP_HttpListenerT : public IHttpListenerT<T>
  301. {
  302. public:
  303. virtual EnHttpParseResult OnMessageBegin(T* pSender, CONNID dwConnID)
  304. {
  305. return (m_fnOnMessageBegin)
  306. ? m_fnOnMessageBegin(C_HP_Object::FromFirst(pSender), dwConnID)
  307. : HPR_OK;
  308. }
  309. virtual EnHttpParseResult OnRequestLine(T* pSender, CONNID dwConnID, LPCSTR lpszMethod, LPCSTR lpszUrl)
  310. {
  311. return (m_fnOnRequestLine)
  312. ? m_fnOnRequestLine(C_HP_Object::FromFirst(pSender), dwConnID, lpszMethod, lpszUrl)
  313. : HPR_OK;
  314. }
  315. virtual EnHttpParseResult OnStatusLine(T* pSender, CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc)
  316. {
  317. return (m_fnOnStatusLine)
  318. ? m_fnOnStatusLine(C_HP_Object::FromFirst(pSender), dwConnID, usStatusCode, lpszDesc)
  319. : HPR_OK;
  320. }
  321. virtual EnHttpParseResult OnHeader(T* pSender, CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue)
  322. {
  323. return (m_fnOnHeader)
  324. ? m_fnOnHeader(C_HP_Object::FromFirst(pSender), dwConnID, lpszName, lpszValue)
  325. : HPR_OK;
  326. }
  327. virtual EnHttpParseResult OnHeadersComplete(T* pSender, CONNID dwConnID)
  328. {
  329. ASSERT(m_fnOnHeadersComplete);
  330. return (m_fnOnHeadersComplete)
  331. ? m_fnOnHeadersComplete(C_HP_Object::FromFirst(pSender), dwConnID)
  332. : HPR_OK;
  333. }
  334. virtual EnHttpParseResult OnBody(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  335. {
  336. ASSERT(m_fnOnBody);
  337. return (m_fnOnBody)
  338. ? m_fnOnBody(C_HP_Object::FromFirst(pSender), dwConnID, pData, iLength)
  339. : HPR_OK;
  340. }
  341. virtual EnHttpParseResult OnChunkHeader(T* pSender, CONNID dwConnID, int iLength)
  342. {
  343. return (m_fnOnChunkHeader)
  344. ? m_fnOnChunkHeader(C_HP_Object::FromFirst(pSender), dwConnID, iLength)
  345. : HPR_OK;
  346. }
  347. virtual EnHttpParseResult OnChunkComplete(T* pSender, CONNID dwConnID)
  348. {
  349. return (m_fnOnChunkComplete)
  350. ? m_fnOnChunkComplete(C_HP_Object::FromFirst(pSender), dwConnID)
  351. : HPR_OK;
  352. }
  353. virtual EnHttpParseResult OnMessageComplete(T* pSender, CONNID dwConnID)
  354. {
  355. ASSERT(m_fnOnMessageComplete);
  356. return (m_fnOnMessageComplete)
  357. ? m_fnOnMessageComplete(C_HP_Object::FromFirst(pSender), dwConnID)
  358. : HPR_OK;
  359. }
  360. virtual EnHttpParseResult OnUpgrade(T* pSender, CONNID dwConnID, EnHttpUpgradeType enUpgradeType)
  361. {
  362. return (m_fnOnUpgrade)
  363. ? m_fnOnUpgrade(C_HP_Object::FromFirst(pSender), dwConnID, enUpgradeType)
  364. : HPR_OK;
  365. }
  366. virtual EnHttpParseResult OnParseError(T* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
  367. {
  368. ASSERT(m_fnOnParseError);
  369. return (m_fnOnParseError)
  370. ? m_fnOnParseError(C_HP_Object::FromFirst(pSender), dwConnID, iErrorCode, lpszErrorDesc)
  371. : HPR_OK;
  372. }
  373. virtual EnHandleResult OnWSMessageHeader(T* pSender, CONNID dwConnID, BOOL bFinal, BYTE iReserved, BYTE iOperationCode, const BYTE lpszMask[4], ULONGLONG ullBodyLen)
  374. {
  375. return (m_fnOnWSMessageHeader)
  376. ? m_fnOnWSMessageHeader(C_HP_Object::FromFirst(pSender), dwConnID, bFinal, iReserved, iOperationCode, lpszMask, ullBodyLen)
  377. : HR_OK;
  378. }
  379. virtual EnHandleResult OnWSMessageBody(T* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  380. {
  381. return (m_fnOnWSMessageBody)
  382. ? m_fnOnWSMessageBody(C_HP_Object::FromFirst(pSender), dwConnID, pData, iLength)
  383. : HR_OK;
  384. }
  385. virtual EnHandleResult OnWSMessageComplete(T* pSender, CONNID dwConnID)
  386. {
  387. return (m_fnOnWSMessageComplete)
  388. ? m_fnOnWSMessageComplete(C_HP_Object::FromFirst(pSender), dwConnID)
  389. : HR_OK;
  390. }
  391. public:
  392. C_HP_HttpListenerT()
  393. : m_fnOnMessageBegin (nullptr)
  394. , m_fnOnRequestLine (nullptr)
  395. , m_fnOnStatusLine (nullptr)
  396. , m_fnOnHeader (nullptr)
  397. , m_fnOnHeadersComplete (nullptr)
  398. , m_fnOnBody (nullptr)
  399. , m_fnOnChunkHeader (nullptr)
  400. , m_fnOnChunkComplete (nullptr)
  401. , m_fnOnMessageComplete (nullptr)
  402. , m_fnOnUpgrade (nullptr)
  403. , m_fnOnParseError (nullptr)
  404. , m_fnOnWSMessageHeader (nullptr)
  405. , m_fnOnWSMessageBody (nullptr)
  406. , m_fnOnWSMessageComplete(nullptr)
  407. {
  408. }
  409. public:
  410. HP_FN_Http_OnMessageBegin m_fnOnMessageBegin ;
  411. HP_FN_Http_OnRequestLine m_fnOnRequestLine ;
  412. HP_FN_Http_OnStatusLine m_fnOnStatusLine ;
  413. HP_FN_Http_OnHeader m_fnOnHeader ;
  414. HP_FN_Http_OnHeadersComplete m_fnOnHeadersComplete ;
  415. HP_FN_Http_OnBody m_fnOnBody ;
  416. HP_FN_Http_OnChunkHeader m_fnOnChunkHeader ;
  417. HP_FN_Http_OnChunkComplete m_fnOnChunkComplete ;
  418. HP_FN_Http_OnMessageComplete m_fnOnMessageComplete ;
  419. HP_FN_Http_OnUpgrade m_fnOnUpgrade ;
  420. HP_FN_Http_OnParseError m_fnOnParseError ;
  421. HP_FN_Http_OnWSMessageHeader m_fnOnWSMessageHeader ;
  422. HP_FN_Http_OnWSMessageBody m_fnOnWSMessageBody ;
  423. HP_FN_Http_OnWSMessageComplete m_fnOnWSMessageComplete ;
  424. };
  425. typedef C_HP_HttpListenerT<IHttpServer> C_HP_HttpServerBaseListener1;
  426. typedef C_HP_HttpListenerT<IHttpAgent> C_HP_HttpAgentBaseListener1;
  427. typedef C_HP_HttpListenerT<IHttpClient> C_HP_HttpClientBaseListener1;
  428. typedef C_HP_ServerListenerT<ITcpServer, ITcpServerListener, sizeof(IComplexHttpResponder)> C_HP_HttpServerBaseListener2;
  429. typedef C_HP_AgentListenerT<ITcpAgent, ITcpAgentListener, sizeof(IComplexHttpRequester)> C_HP_HttpAgentBaseListener2;
  430. typedef C_HP_ClientListenerT<ITcpClient, ITcpClientListener, sizeof(IHttpRequester)> C_HP_HttpClientBaseListener2;
  431. class C_HP_HttpServerListener : public IHttpServerListener
  432. {
  433. public:
  434. virtual EnHttpParseResult OnMessageBegin(IHttpServer* pSender, CONNID dwConnID)
  435. {return m_lsnHttp.OnMessageBegin(pSender, dwConnID);}
  436. virtual EnHttpParseResult OnRequestLine(IHttpServer* pSender, CONNID dwConnID, LPCSTR lpszMethod, LPCSTR lpszUrl)
  437. {return m_lsnHttp.OnRequestLine(pSender, dwConnID, lpszMethod, lpszUrl);}
  438. virtual EnHttpParseResult OnStatusLine(IHttpServer* pSender, CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc)
  439. {return m_lsnHttp.OnStatusLine(pSender, dwConnID, usStatusCode, lpszDesc);}
  440. virtual EnHttpParseResult OnHeader(IHttpServer* pSender, CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue)
  441. {return m_lsnHttp.OnHeader(pSender, dwConnID, lpszName, lpszValue);}
  442. virtual EnHttpParseResult OnHeadersComplete(IHttpServer* pSender, CONNID dwConnID)
  443. {return m_lsnHttp.OnHeadersComplete(pSender, dwConnID);}
  444. virtual EnHttpParseResult OnBody(IHttpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  445. {return m_lsnHttp.OnBody(pSender, dwConnID, pData, iLength);}
  446. virtual EnHttpParseResult OnChunkHeader(IHttpServer* pSender, CONNID dwConnID, int iLength)
  447. {return m_lsnHttp.OnChunkHeader(pSender, dwConnID, iLength);}
  448. virtual EnHttpParseResult OnChunkComplete(IHttpServer* pSender, CONNID dwConnID)
  449. {return m_lsnHttp.OnChunkComplete(pSender, dwConnID);}
  450. virtual EnHttpParseResult OnMessageComplete(IHttpServer* pSender, CONNID dwConnID)
  451. {return m_lsnHttp.OnMessageComplete(pSender, dwConnID);}
  452. virtual EnHttpParseResult OnUpgrade(IHttpServer* pSender, CONNID dwConnID, EnHttpUpgradeType enUpgradeType)
  453. {return m_lsnHttp.OnUpgrade(pSender, dwConnID, enUpgradeType);}
  454. virtual EnHttpParseResult OnParseError(IHttpServer* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
  455. {return m_lsnHttp.OnParseError(pSender, dwConnID, iErrorCode, lpszErrorDesc);}
  456. virtual EnHandleResult OnWSMessageHeader(IHttpServer* pSender, CONNID dwConnID, BOOL bFinal, BYTE iReserved, BYTE iOperationCode, const BYTE lpszMask[4], ULONGLONG ullBodyLen)
  457. {return m_lsnHttp.OnWSMessageHeader(pSender, dwConnID, bFinal, iReserved, iOperationCode, lpszMask, ullBodyLen);}
  458. virtual EnHandleResult OnWSMessageBody(IHttpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  459. {return m_lsnHttp.OnWSMessageBody(pSender, dwConnID, pData, iLength);}
  460. virtual EnHandleResult OnWSMessageComplete(IHttpServer* pSender, CONNID dwConnID)
  461. {return m_lsnHttp.OnWSMessageComplete(pSender, dwConnID);}
  462. virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, UINT_PTR soListen)
  463. {return m_lsnServer.OnPrepareListen(pSender, soListen);}
  464. virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient)
  465. {return m_lsnServer.OnAccept(pSender, dwConnID, soClient);}
  466. virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID)
  467. {return m_lsnServer.OnHandShake(pSender, dwConnID);}
  468. virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  469. {return m_lsnServer.OnSend(pSender, dwConnID, pData, iLength);}
  470. virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  471. {return m_lsnServer.OnReceive(pSender, dwConnID, pData, iLength);}
  472. virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength)
  473. {return m_lsnServer.OnReceive(pSender, dwConnID, iLength);}
  474. virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
  475. {return m_lsnServer.OnClose(pSender, dwConnID, enOperation, iErrorCode);}
  476. virtual EnHandleResult OnShutdown(ITcpServer* pSender)
  477. {return m_lsnServer.OnShutdown(pSender);}
  478. public:
  479. C_HP_HttpServerBaseListener1 m_lsnHttp;
  480. C_HP_HttpServerBaseListener2 m_lsnServer;
  481. };
  482. class C_HP_HttpAgentListener : public IHttpAgentListener
  483. {
  484. public:
  485. virtual EnHttpParseResult OnMessageBegin(IHttpAgent* pSender, CONNID dwConnID)
  486. {return m_lsnHttp.OnMessageBegin(pSender, dwConnID);}
  487. virtual EnHttpParseResult OnRequestLine(IHttpAgent* pSender, CONNID dwConnID, LPCSTR lpszMethod, LPCSTR lpszUrl)
  488. {return m_lsnHttp.OnRequestLine(pSender, dwConnID, lpszMethod, lpszUrl);}
  489. virtual EnHttpParseResult OnStatusLine(IHttpAgent* pSender, CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc)
  490. {return m_lsnHttp.OnStatusLine(pSender, dwConnID, usStatusCode, lpszDesc);}
  491. virtual EnHttpParseResult OnHeader(IHttpAgent* pSender, CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue)
  492. {return m_lsnHttp.OnHeader(pSender, dwConnID, lpszName, lpszValue);}
  493. virtual EnHttpParseResult OnHeadersComplete(IHttpAgent* pSender, CONNID dwConnID)
  494. {return m_lsnHttp.OnHeadersComplete(pSender, dwConnID);}
  495. virtual EnHttpParseResult OnBody(IHttpAgent* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  496. {return m_lsnHttp.OnBody(pSender, dwConnID, pData, iLength);}
  497. virtual EnHttpParseResult OnChunkHeader(IHttpAgent* pSender, CONNID dwConnID, int iLength)
  498. {return m_lsnHttp.OnChunkHeader(pSender, dwConnID, iLength);}
  499. virtual EnHttpParseResult OnChunkComplete(IHttpAgent* pSender, CONNID dwConnID)
  500. {return m_lsnHttp.OnChunkComplete(pSender, dwConnID);}
  501. virtual EnHttpParseResult OnMessageComplete(IHttpAgent* pSender, CONNID dwConnID)
  502. {return m_lsnHttp.OnMessageComplete(pSender, dwConnID);}
  503. virtual EnHttpParseResult OnUpgrade(IHttpAgent* pSender, CONNID dwConnID, EnHttpUpgradeType enUpgradeType)
  504. {return m_lsnHttp.OnUpgrade(pSender, dwConnID, enUpgradeType);}
  505. virtual EnHttpParseResult OnParseError(IHttpAgent* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
  506. {return m_lsnHttp.OnParseError(pSender, dwConnID, iErrorCode, lpszErrorDesc);}
  507. virtual EnHandleResult OnWSMessageHeader(IHttpAgent* pSender, CONNID dwConnID, BOOL bFinal, BYTE iReserved, BYTE iOperationCode, const BYTE lpszMask[4], ULONGLONG ullBodyLen)
  508. {return m_lsnHttp.OnWSMessageHeader(pSender, dwConnID, bFinal, iReserved, iOperationCode, lpszMask, ullBodyLen);}
  509. virtual EnHandleResult OnWSMessageBody(IHttpAgent* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  510. {return m_lsnHttp.OnWSMessageBody(pSender, dwConnID, pData, iLength);}
  511. virtual EnHandleResult OnWSMessageComplete(IHttpAgent* pSender, CONNID dwConnID)
  512. {return m_lsnHttp.OnWSMessageComplete(pSender, dwConnID);}
  513. virtual EnHandleResult OnPrepareConnect(ITcpAgent* pSender, CONNID dwConnID, UINT_PTR socket)
  514. {return m_lsnAgent.OnPrepareConnect(pSender, dwConnID, socket);}
  515. virtual EnHandleResult OnConnect(ITcpAgent* pSender, CONNID dwConnID)
  516. {return m_lsnAgent.OnConnect(pSender, dwConnID);}
  517. virtual EnHandleResult OnHandShake(ITcpAgent* pSender, CONNID dwConnID)
  518. {return m_lsnAgent.OnHandShake(pSender, dwConnID);}
  519. virtual EnHandleResult OnSend(ITcpAgent* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  520. {return m_lsnAgent.OnSend(pSender, dwConnID, pData, iLength);}
  521. virtual EnHandleResult OnReceive(ITcpAgent* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  522. {return m_lsnAgent.OnReceive(pSender, dwConnID, pData, iLength);}
  523. virtual EnHandleResult OnReceive(ITcpAgent* pSender, CONNID dwConnID, int iLength)
  524. {return m_lsnAgent.OnReceive(pSender, dwConnID, iLength);}
  525. virtual EnHandleResult OnClose(ITcpAgent* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
  526. {return m_lsnAgent.OnClose(pSender, dwConnID, enOperation, iErrorCode);}
  527. virtual EnHandleResult OnShutdown(ITcpAgent* pSender)
  528. {return m_lsnAgent.OnShutdown(pSender);}
  529. public:
  530. C_HP_HttpAgentBaseListener1 m_lsnHttp;
  531. C_HP_HttpAgentBaseListener2 m_lsnAgent;
  532. };
  533. class C_HP_HttpClientListener : public IHttpClientListener
  534. {
  535. public:
  536. virtual EnHttpParseResult OnMessageBegin(IHttpClient* pSender, CONNID dwConnID)
  537. {return m_lsnHttp.OnMessageBegin(pSender, dwConnID);}
  538. virtual EnHttpParseResult OnRequestLine(IHttpClient* pSender, CONNID dwConnID, LPCSTR lpszMethod, LPCSTR lpszUrl)
  539. {return m_lsnHttp.OnRequestLine(pSender, dwConnID, lpszMethod, lpszUrl);}
  540. virtual EnHttpParseResult OnStatusLine(IHttpClient* pSender, CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc)
  541. {return m_lsnHttp.OnStatusLine(pSender, dwConnID, usStatusCode, lpszDesc);}
  542. virtual EnHttpParseResult OnHeader(IHttpClient* pSender, CONNID dwConnID, LPCSTR lpszName, LPCSTR lpszValue)
  543. {return m_lsnHttp.OnHeader(pSender, dwConnID, lpszName, lpszValue);}
  544. virtual EnHttpParseResult OnHeadersComplete(IHttpClient* pSender, CONNID dwConnID)
  545. {return m_lsnHttp.OnHeadersComplete(pSender, dwConnID);}
  546. virtual EnHttpParseResult OnBody(IHttpClient* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  547. {return m_lsnHttp.OnBody(pSender, dwConnID, pData, iLength);}
  548. virtual EnHttpParseResult OnChunkHeader(IHttpClient* pSender, CONNID dwConnID, int iLength)
  549. {return m_lsnHttp.OnChunkHeader(pSender, dwConnID, iLength);}
  550. virtual EnHttpParseResult OnChunkComplete(IHttpClient* pSender, CONNID dwConnID)
  551. {return m_lsnHttp.OnChunkComplete(pSender, dwConnID);}
  552. virtual EnHttpParseResult OnMessageComplete(IHttpClient* pSender, CONNID dwConnID)
  553. {return m_lsnHttp.OnMessageComplete(pSender, dwConnID);}
  554. virtual EnHttpParseResult OnUpgrade(IHttpClient* pSender, CONNID dwConnID, EnHttpUpgradeType enUpgradeType)
  555. {return m_lsnHttp.OnUpgrade(pSender, dwConnID, enUpgradeType);}
  556. virtual EnHttpParseResult OnParseError(IHttpClient* pSender, CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc)
  557. {return m_lsnHttp.OnParseError(pSender, dwConnID, iErrorCode, lpszErrorDesc);}
  558. virtual EnHandleResult OnWSMessageHeader(IHttpClient* pSender, CONNID dwConnID, BOOL bFinal, BYTE iReserved, BYTE iOperationCode, const BYTE lpszMask[4], ULONGLONG ullBodyLen)
  559. {return m_lsnHttp.OnWSMessageHeader(pSender, dwConnID, bFinal, iReserved, iOperationCode, lpszMask, ullBodyLen);}
  560. virtual EnHandleResult OnWSMessageBody(IHttpClient* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  561. {return m_lsnHttp.OnWSMessageBody(pSender, dwConnID, pData, iLength);}
  562. virtual EnHandleResult OnWSMessageComplete(IHttpClient* pSender, CONNID dwConnID)
  563. {return m_lsnHttp.OnWSMessageComplete(pSender, dwConnID);}
  564. virtual EnHandleResult OnPrepareConnect(ITcpClient* pSender, CONNID dwConnID, UINT_PTR socket)
  565. {return m_lsnClient.OnPrepareConnect(pSender, dwConnID, socket);}
  566. virtual EnHandleResult OnConnect(ITcpClient* pSender, CONNID dwConnID)
  567. {return m_lsnClient.OnConnect(pSender, dwConnID);}
  568. virtual EnHandleResult OnHandShake(ITcpClient* pSender, CONNID dwConnID)
  569. {return m_lsnClient.OnHandShake(pSender, dwConnID);}
  570. virtual EnHandleResult OnSend(ITcpClient* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  571. {return m_lsnClient.OnSend(pSender, dwConnID, pData, iLength);}
  572. virtual EnHandleResult OnReceive(ITcpClient* pSender, CONNID dwConnID, const BYTE* pData, int iLength)
  573. {return m_lsnClient.OnReceive(pSender, dwConnID, pData, iLength);}
  574. virtual EnHandleResult OnReceive(ITcpClient* pSender, CONNID dwConnID, int iLength)
  575. {return m_lsnClient.OnReceive(pSender, dwConnID, iLength);}
  576. virtual EnHandleResult OnClose(ITcpClient* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
  577. {return m_lsnClient.OnClose(pSender, dwConnID, enOperation, iErrorCode);}
  578. public:
  579. C_HP_HttpClientBaseListener1 m_lsnHttp;
  580. C_HP_HttpClientBaseListener2 m_lsnClient;
  581. };