工具项目

SocketObject4C.h 26KB

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