HPTypeDef.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Author : Bruce Liang
  5. * Website : https://github.com/ldcsaa
  6. * Project : https://github.com/ldcsaa/HP-Socket
  7. * Blog : http://www.cnblogs.com/ldcsaa
  8. * Wiki : http://www.oschina.net/p/hp-socket
  9. * QQ Group : 44636872, 75375912
  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 "GlobalDef.h"
  25. /* HP-Socket 版本号 */
  26. #define HP_VERSION_MAJOR 5 // 主版本号
  27. #define HP_VERSION_MINOR 9 // 子版本号
  28. #define HP_VERSION_REVISE 6 // 修正版本号
  29. #define HP_VERSION_BUILD 1 // 构建编号
  30. //#define _UDP_DISABLED // 禁用 UDP
  31. //#define _SSL_DISABLED // 禁用 SSL
  32. //#define _HTTP_DISABLED // 禁用 HTTP
  33. //#define _ZLIB_DISABLED // 禁用 ZLIB
  34. //#define _ICONV_DISABLED // 禁用 ICONV
  35. //#define _BROTLI_DISABLED // 禁用 BROTLI
  36. /* 是否启用 UDP,如果定义了 _UDP_DISABLED 则禁用(默认:启用) */
  37. #if !defined(_UDP_DISABLED)
  38. #ifndef _UDP_SUPPORT
  39. #define _UDP_SUPPORT
  40. #endif
  41. #endif
  42. /* 是否启用 SSL,如果定义了 _SSL_DISABLED 则禁用(默认:启用) */
  43. #if !defined(_SSL_DISABLED)
  44. #ifndef _SSL_SUPPORT
  45. #define _SSL_SUPPORT
  46. #endif
  47. #endif
  48. /* 是否启用 HTTP,如果定义了 _HTTP_DISABLED 则禁用(默认:启用) */
  49. #if !defined(_HTTP_DISABLED)
  50. #ifndef _HTTP_SUPPORT
  51. #define _HTTP_SUPPORT
  52. #endif
  53. #endif
  54. /* 是否启用 ZLIB,如果定义了 _ZLIB_DISABLED 则禁用(默认:启用) */
  55. #if !defined(_ZLIB_DISABLED)
  56. #ifndef _ZLIB_SUPPORT
  57. #define _ZLIB_SUPPORT
  58. #endif
  59. #endif
  60. /* 是否启用 BROTLI,如果定义了 _BROTLI_DISABLED 则禁用(默认:启用) */
  61. #if !defined(_BROTLI_DISABLED)
  62. #ifndef _BROTLI_SUPPORT
  63. #define _BROTLI_SUPPORT
  64. #endif
  65. #endif
  66. /* 是否启用 ICONV,如果定义了 _ICONV_DISABLED 则禁用(默认:启用) */
  67. #if !defined(_ICONV_DISABLED)
  68. #ifndef _ICONV_SUPPORT
  69. #define _ICONV_SUPPORT
  70. #endif
  71. #endif
  72. #define HPSOCKET_API EXTERN_C __attribute__ ((__visibility__("default")))
  73. #define __HP_CALL
  74. /*****************************************************************************************************************************************************/
  75. /**************************************************************** Base Type Definitions **************************************************************/
  76. /*****************************************************************************************************************************************************/
  77. /************************************************************************
  78. 名称:连接 ID 数据类型
  79. 描述:应用程序可以把 CONNID 定义为自身需要的类型(如:ULONG / ULONGLONG)
  80. ************************************************************************/
  81. typedef ULID CONNID, HP_CONNID;
  82. /************************************************************************
  83. 名称:通信组件服务状态
  84. 描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
  85. ************************************************************************/
  86. typedef enum EnServiceState
  87. {
  88. SS_STARTING = 0, // 正在启动
  89. SS_STARTED = 1, // 已经启动
  90. SS_STOPPING = 2, // 正在停止
  91. SS_STOPPED = 3, // 已经停止
  92. } En_HP_ServiceState;
  93. /************************************************************************
  94. 名称:Socket 操作类型
  95. 描述:应用程序的 OnClose() 事件中通过该参数标识是哪种操作导致的错误
  96. ************************************************************************/
  97. typedef enum EnSocketOperation
  98. {
  99. SO_UNKNOWN = 0, // Unknown
  100. SO_ACCEPT = 1, // Acccept
  101. SO_CONNECT = 2, // Connect
  102. SO_SEND = 3, // Send
  103. SO_RECEIVE = 4, // Receive
  104. SO_CLOSE = 5, // Close
  105. } En_HP_SocketOperation;
  106. /************************************************************************
  107. 名称:事件处理结果
  108. 描述:事件的返回值,不同的返回值会影响通信组件的后续行为
  109. ************************************************************************/
  110. typedef enum EnHandleResult
  111. {
  112. HR_OK = 0, // 成功
  113. HR_IGNORE = 1, // 忽略
  114. HR_ERROR = 2, // 错误
  115. } En_HP_HandleResult;
  116. /************************************************************************
  117. 名称:数据抓取结果
  118. 描述:数据抓取操作的返回值
  119. ************************************************************************/
  120. typedef enum EnFetchResult
  121. {
  122. FR_OK = 0, // 成功
  123. FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
  124. FR_DATA_NOT_FOUND = 2, // 找不到 ConnID 对应的数据
  125. } En_HP_FetchResult;
  126. /************************************************************************
  127. 名称:数据发送策略
  128. 描述:Server 组件和 Agent 组件的数据发送策略
  129. * 打包发送策略(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
  130. * 安全发送策略 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
  131. * 直接发送策略 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
  132. ************************************************************************/
  133. typedef enum EnSendPolicy
  134. {
  135. SP_PACK = 0, // 打包模式(默认)
  136. SP_SAFE = 1, // 安全模式
  137. SP_DIRECT = 2, // 直接模式
  138. } En_HP_SendPolicy;
  139. /************************************************************************
  140. 名称:OnSend 事件同步策略
  141. 描述:Server 组件和 Agent 组件的 OnSend 事件同步策略
  142. * 不同步(默认) :不同步 OnSend 事件,可能同时触发 OnReceive 和 OnClose 事件
  143. * 同步 OnClose :只同步 OnClose 事件,可能同时触发 OnReceive 事件
  144. * 同步 OnReceive :(只用于 TCP 组件)同步 OnReceive 和 OnClose 事件,不可能同时触发 OnReceive 或 OnClose 事件
  145. ************************************************************************/
  146. typedef enum EnOnSendSyncPolicy
  147. {
  148. OSSP_NONE = 0, // 不同步(默认)
  149. OSSP_CLOSE = 1, // 同步 OnClose
  150. OSSP_RECEIVE = 2, // 同步 OnReceive(只用于 TCP 组件)
  151. } En_HP_OnSendSyncPolicy;
  152. /************************************************************************
  153. 名称:地址重用选项
  154. 描述:通信组件底层 socket 的地址重用选项
  155. ************************************************************************/
  156. typedef enum EnReuseAddressPolicy
  157. {
  158. RAP_NONE = 0, // 不重用
  159. RAP_ADDR_ONLY = 1, // 仅重用地址
  160. RAP_ADDR_AND_PORT = 2, // 重用地址和端口
  161. } En_HP_ReuseAddressPolicy;
  162. /************************************************************************
  163. 名称:操作结果代码
  164. 描述:组件 Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
  165. ************************************************************************/
  166. typedef enum EnSocketError
  167. {
  168. SE_OK = NO_ERROR, // 成功
  169. SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
  170. SE_INVALID_PARAM = 2, // 非法参数
  171. SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
  172. SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
  173. SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
  174. SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
  175. SE_CP_CREATE = 7, // 创建完成端口失败
  176. SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
  177. SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
  178. SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
  179. SE_CONNECT_SERVER = 11, // 连接服务器失败
  180. SE_NETWORK = 12, // 网络错误
  181. SE_DATA_PROC = 13, // 数据处理错误
  182. SE_DATA_SEND = 14, // 数据发送失败
  183. /***** SSL Socket 扩展操作结果代码 *****/
  184. SE_SSL_ENV_NOT_READY = 101, // SSL 环境未就绪
  185. } En_HP_SocketError;
  186. /************************************************************************
  187. 名称:播送模式
  188. 描述:UDP 组件的播送模式(组播或广播)
  189. ************************************************************************/
  190. typedef enum EnCastMode
  191. {
  192. CM_UNICAST = -1, // 单播
  193. CM_MULTICAST = 0, // 组播
  194. CM_BROADCAST = 1, // 广播
  195. } En_HP_CastMode;
  196. /************************************************************************
  197. 名称:IP 地址类型
  198. 描述:IP 地址类型枚举值
  199. ************************************************************************/
  200. typedef enum EnIPAddrType
  201. {
  202. IPT_ALL = 0, // 所有
  203. IPT_IPV4 = 1, // IPv4
  204. IPT_IPV6 = 2, // IPv6
  205. } En_HP_IPAddrType;
  206. /************************************************************************
  207. 名称:IP 地址条目结构体
  208. 描述:IP 地址的地址簇/地址值结构体
  209. ************************************************************************/
  210. typedef struct TIPAddr
  211. {
  212. En_HP_IPAddrType type;
  213. LPCTSTR address;
  214. } *LPTIPAddr, HP_TIPAddr, *HP_LPTIPAddr;
  215. /************************************************************************
  216. 名称:缓冲区结构体
  217. 描述:数据缓冲区
  218. ************************************************************************/
  219. typedef struct _WSABUF
  220. {
  221. UINT len;
  222. LPBYTE buf;
  223. } WSABUF, *PWSABUF, *LPWSABUF;
  224. /************************************************************************
  225. 名称:拒绝策略
  226. 描述:调用被拒绝后的处理策略
  227. ************************************************************************/
  228. typedef enum EnRejectedPolicy
  229. {
  230. TRP_CALL_FAIL = 0, // 立刻返回失败
  231. TRP_WAIT_FOR = 1, // 等待(直到成功、超时或线程池关闭等原因导致失败)
  232. TRP_CALLER_RUN = 2, // 调用者线程直接执行
  233. } En_HP_RejectedPolicy;
  234. /************************************************************************
  235. 名称:任务缓冲区类型
  236. 描述:TSockeTask 对象创建和销毁时,根据不同类型的缓冲区类型作不同的处理
  237. ************************************************************************/
  238. typedef enum EnTaskBufferType
  239. {
  240. TBT_COPY = 0, // 深拷贝
  241. TBT_REFER = 1, // 浅拷贝
  242. TBT_ATTACH = 2, // 附属(不负责创建,但负责销毁)
  243. } En_HP_TaskBufferType;
  244. /************************************************************************
  245. 名称:任务处理函数
  246. 描述:任务处理入口函数
  247. 参数:pvArg -- 自定义参数
  248. 返回值:(无)
  249. ************************************************************************/
  250. typedef VOID (__HP_CALL *Fn_TaskProc)(PVOID pvArg);
  251. typedef Fn_TaskProc HP_Fn_TaskProc;
  252. struct TSocketTask;
  253. /************************************************************************
  254. 名称:Socket 任务处理函数
  255. 描述:Socket 任务处理入口函数
  256. 参数:pTask -- Socket 任务结构体指针
  257. 返回值:(无)
  258. ************************************************************************/
  259. typedef VOID (__HP_CALL *Fn_SocketTaskProc)(struct TSocketTask* pTask);
  260. typedef Fn_SocketTaskProc HP_Fn_SocketTaskProc;
  261. /************************************************************************
  262. 名称:Socket 任务结构体
  263. 描述:封装 Socket 任务相关数据结构
  264. ************************************************************************/
  265. typedef struct TSocketTask
  266. {
  267. HP_Fn_SocketTaskProc fn; // 任务处理函数
  268. PVOID sender; // 发起对象
  269. CONNID connID; // 连接 ID
  270. LPCBYTE buf; // 数据缓冲区
  271. INT bufLen; // 数据缓冲区长度
  272. En_HP_TaskBufferType bufType; // 缓冲区类型
  273. WPARAM wparam; // 自定义参数
  274. LPARAM lparam; // 自定义参数
  275. } *LPTSocketTask, HP_TSocketTask, *HP_LPTSocketTask;
  276. /************************************************************************
  277. 名称:获取 HPSocket 版本号
  278. 描述:版本号(4 个字节分别为:主版本号,子版本号,修正版本号,构建编号)
  279. ************************************************************************/
  280. inline DWORD GetHPSocketVersion()
  281. {
  282. return (HP_VERSION_MAJOR << 24) | (HP_VERSION_MINOR << 16) | (HP_VERSION_REVISE << 8) | HP_VERSION_BUILD;
  283. }
  284. /*****************************************************************************************************************************************************/
  285. /**************************************************************** SSL Type Definitions ***************************************************************/
  286. /*****************************************************************************************************************************************************/
  287. #ifdef _SSL_SUPPORT
  288. /************************************************************************
  289. 名称:SSL 工作模式
  290. 描述:标识 SSL 的工作模式,客户端模式或服务端模式
  291. ************************************************************************/
  292. typedef enum EnSSLSessionMode
  293. {
  294. SSL_SM_CLIENT = 0, // 客户端模式
  295. SSL_SM_SERVER = 1, // 服务端模式
  296. } En_HP_SSLSessionMode;
  297. /************************************************************************
  298. 名称:SSL 验证模式
  299. 描述:SSL 验证模式选项,SSL_VM_PEER 可以和后面两个选项组合一起
  300. ************************************************************************/
  301. typedef enum EnSSLVerifyMode
  302. {
  303. SSL_VM_NONE = 0x00, // SSL_VERIFY_NONE
  304. SSL_VM_PEER = 0x01, // SSL_VERIFY_PEER
  305. SSL_VM_FAIL_IF_NO_PEER_CERT = 0x02, // SSL_VERIFY_FAIL_IF_NO_PEER_CERT
  306. SSL_VM_CLIENT_ONCE = 0x04, // SSL_VERIFY_CLIENT_ONCE
  307. } En_HP_SSLVerifyMode;
  308. /************************************************************************
  309. 名称:SSL Session 信息类型
  310. 描述:用于 GetSSLSessionInfo(),标识输出的 Session 信息类型
  311. ************************************************************************/
  312. typedef enum EnSSLSessionInfo
  313. {
  314. SSL_SSI_MIN = 0, //
  315. SSL_SSI_CTX = 0, // SSL CTX (输出类型:SSL_CTX*)
  316. SSL_SSI_CTX_METHOD = 1, // SSL CTX Mehtod (输出类型:SSL_METHOD*)
  317. SSL_SSI_CTX_CIPHERS = 2, // SSL CTX Ciphers (输出类型:STACK_OF(SSL_CIPHER)*)
  318. SSL_SSI_CTX_CERT_STORE = 3, // SSL CTX Cert Store (输出类型:X509_STORE*)
  319. SSL_SSI_SERVER_NAME_TYPE = 4, // Server Name Type (输出类型:int)
  320. SSL_SSI_SERVER_NAME = 5, // Server Name (输出类型:LPCSTR)
  321. SSL_SSI_VERSION = 6, // SSL Version (输出类型:LPCSTR)
  322. SSL_SSI_METHOD = 7, // SSL Method (输出类型:SSL_METHOD*)
  323. SSL_SSI_CERT = 8, // SSL Cert (输出类型:X509*)
  324. SSL_SSI_PKEY = 9, // SSL Private Key (输出类型:EVP_PKEY*)
  325. SSL_SSI_CURRENT_CIPHER = 10, // SSL Current Cipher (输出类型:SSL_CIPHER*)
  326. SSL_SSI_CIPHERS = 11, // SSL Available Ciphers(输出类型:STACK_OF(SSL_CIPHER)*)
  327. SSL_SSI_CLIENT_CIPHERS = 12, // SSL Client Ciphers (输出类型:STACK_OF(SSL_CIPHER)*)
  328. SSL_SSI_PEER_CERT = 13, // SSL Peer Cert (输出类型:X509*)
  329. SSL_SSI_PEER_CERT_CHAIN = 14, // SSL Peer Cert Chain (输出类型:STACK_OF(X509)*)
  330. SSL_SSI_VERIFIED_CHAIN = 15, // SSL Verified Chain (输出类型:STACK_OF(X509)*)
  331. SSL_SSI_MAX = 15, //
  332. } En_HP_SSLSessionInfo;
  333. /************************************************************************
  334. 名称:SNI 服务名称回调函数
  335. 描述:根据服务器名称选择 SSL 证书
  336. 参数:
  337. lpszServerName -- 服务器名称(域名)
  338. 返回值:
  339. 0 -- 成功,使用默认 SSL 证书索引
  340. 正数 -- 成功,使用返回值对应的 SNI 主机证书索引
  341. 负数 -- 失败,中断 SSL 握手
  342. ************************************************************************/
  343. typedef int (__HP_CALL *Fn_SNI_ServerNameCallback)(LPCTSTR lpszServerName, PVOID pContext);
  344. typedef Fn_SNI_ServerNameCallback HP_Fn_SNI_ServerNameCallback;
  345. #endif
  346. /*****************************************************************************************************************************************************/
  347. /**************************************************************** HTTP Type Definitions **************************************************************/
  348. /*****************************************************************************************************************************************************/
  349. #ifdef _HTTP_SUPPORT
  350. /************************************************************************
  351. 名称:HTTP 版本
  352. 描述:低字节:主版本号,高字节:次版本号
  353. ************************************************************************/
  354. typedef enum EnHttpVersion
  355. {
  356. HV_1_0 = MAKEWORD(1, 0), // HTTP/1.0
  357. HV_1_1 = MAKEWORD(1, 1) // HTTP/1.1
  358. } En_HP_HttpVersion;
  359. /************************************************************************
  360. 名称:URL 域
  361. 描述:HTTP 请求行中 URL 段位的域定义
  362. ************************************************************************/
  363. typedef enum EnHttpUrlField
  364. {
  365. HUF_SCHEMA = 0, // Schema
  366. HUF_HOST = 1, // Host
  367. HUF_PORT = 2, // Port
  368. HUF_PATH = 3, // Path
  369. HUF_QUERY = 4, // Query String
  370. HUF_FRAGMENT = 5, // Fragment
  371. HUF_USERINFO = 6, // User Info
  372. HUF_MAX = 7, // (Field Count)
  373. } En_HP_HttpUrlField;
  374. /************************************************************************
  375. 名称:HTTP 解析结果标识
  376. 描述:指示 HTTP 解析器是否继续执行解析操作
  377. ************************************************************************/
  378. typedef enum EnHttpParseResult
  379. {
  380. HPR_OK = 0, // 解析成功
  381. HPR_SKIP_BODY = 1, // 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)
  382. HPR_UPGRADE = 2, // 升级协议(仅用于 OnHeadersComplete 事件)
  383. HPR_ERROR = -1, // 解析错误,终止解析,断开连接
  384. } En_HP_HttpParseResult;
  385. /************************************************************************
  386. 名称:HTTP 协议升级类型
  387. 描述:标识 HTTP 升级为哪种协议
  388. ************************************************************************/
  389. typedef enum EnHttpUpgradeType
  390. {
  391. HUT_NONE = 0, // 没有升级
  392. HUT_WEB_SOCKET = 1, // WebSocket
  393. HUT_HTTP_TUNNEL = 2, // HTTP 隧道
  394. HUT_UNKNOWN = -1, // 未知类型
  395. } En_HP_HttpUpgradeType;
  396. /************************************************************************
  397. 名称:HTTP 状态码
  398. 描述:HTTP 标准状态码
  399. ************************************************************************/
  400. typedef enum EnHttpStatusCode
  401. {
  402. HSC_CONTINUE = 100,
  403. HSC_SWITCHING_PROTOCOLS = 101,
  404. HSC_PROCESSING = 102,
  405. HSC_EARLY_HINTS = 103,
  406. HSC_RESPONSE_IS_STALE = 110,
  407. HSC_REVALIDATION_FAILED = 111,
  408. HSC_DISCONNECTED_OPERATION = 112,
  409. HSC_HEURISTIC_EXPIRATION = 113,
  410. HSC_MISCELLANEOUS_WARNING = 199,
  411. HSC_OK = 200,
  412. HSC_CREATED = 201,
  413. HSC_ACCEPTED = 202,
  414. HSC_NON_AUTHORITATIVE_INFORMATION = 203,
  415. HSC_NO_CONTENT = 204,
  416. HSC_RESET_CONTENT = 205,
  417. HSC_PARTIAL_CONTENT = 206,
  418. HSC_MULTI_STATUS = 207,
  419. HSC_ALREADY_REPORTED = 208,
  420. HSC_TRANSFORMATION_APPLIED = 214,
  421. HSC_IM_USED = 226,
  422. HSC_MISCELLANEOUS_PERSISTENT_WARNING = 299,
  423. HSC_MULTIPLE_CHOICES = 300,
  424. HSC_MOVED_PERMANENTLY = 301,
  425. HSC_MOVED_TEMPORARILY = 302,
  426. HSC_SEE_OTHER = 303,
  427. HSC_NOT_MODIFIED = 304,
  428. HSC_USE_PROXY = 305,
  429. HSC_SWITCH_PROXY = 306,
  430. HSC_TEMPORARY_REDIRECT = 307,
  431. HSC_PERMANENT_REDIRECT = 308,
  432. HSC_BAD_REQUEST = 400,
  433. HSC_UNAUTHORIZED = 401,
  434. HSC_PAYMENT_REQUIRED = 402,
  435. HSC_FORBIDDEN = 403,
  436. HSC_NOT_FOUND = 404,
  437. HSC_METHOD_NOT_ALLOWED = 405,
  438. HSC_NOT_ACCEPTABLE = 406,
  439. HSC_PROXY_AUTHENTICATION_REQUIRED = 407,
  440. HSC_REQUEST_TIMEOUT = 408,
  441. HSC_CONFLICT = 409,
  442. HSC_GONE = 410,
  443. HSC_LENGTH_REQUIRED = 411,
  444. HSC_PRECONDITION_FAILED = 412,
  445. HSC_REQUEST_ENTITY_TOO_LARGE = 413,
  446. HSC_REQUEST_URI_TOO_LONG = 414,
  447. HSC_UNSUPPORTED_MEDIA_TYPE = 415,
  448. HSC_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
  449. HSC_EXPECTATION_FAILED = 417,
  450. HSC_IM_A_TEAPOT = 418,
  451. HSC_PAGE_EXPIRED = 419,
  452. HSC_ENHANCE_YOUR_CALM = 420,
  453. HSC_MISDIRECTED_REQUEST = 421,
  454. HSC_UNPROCESSABLE_ENTITY = 422,
  455. HSC_LOCKED = 423,
  456. HSC_FAILED_DEPENDENCY = 424,
  457. HSC_UNORDERED_COLLECTION = 425,
  458. HSC_UPGRADE_REQUIRED = 426,
  459. HSC_PRECONDITION_REQUIRED = 428,
  460. HSC_TOO_MANY_REQUESTS = 429,
  461. HSC_REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL = 430,
  462. HSC_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
  463. HSC_LOGIN_TIMEOUT = 440,
  464. HSC_NO_RESPONSE = 444,
  465. HSC_RETRY_WITH = 449,
  466. HSC_BLOCKED_BY_PARENTAL_CONTROL = 450,
  467. HSC_UNAVAILABLE_FOR_LEGAL_REASONS = 451,
  468. HSC_CLIENT_CLOSED_LOAD_BALANCED_REQUEST = 460,
  469. HSC_INVALID_X_FORWARDED_FOR = 463,
  470. HSC_REQUEST_HEADER_TOO_LARGE = 494,
  471. HSC_SSL_CERTIFICATE_ERROR = 495,
  472. HSC_SSL_CERTIFICATE_REQUIRED = 496,
  473. HSC_HTTP_REQUEST_SENT_TO_HTTPS_PORT = 497,
  474. HSC_INVALID_TOKEN = 498,
  475. HSC_CLIENT_CLOSED_REQUEST = 499,
  476. HSC_INTERNAL_SERVER_ERROR = 500,
  477. HSC_NOT_IMPLEMENTED = 501,
  478. HSC_BAD_GATEWAY = 502,
  479. HSC_SERVICE_UNAVAILABLE = 503,
  480. HSC_GATEWAY_TIMEOUT = 504,
  481. HSC_HTTP_VERSION_NOT_SUPPORTED = 505,
  482. HSC_VARIANT_ALSO_NEGOTIATES = 506,
  483. HSC_INSUFFICIENT_STORAGE = 507,
  484. HSC_LOOP_DETECTED = 508,
  485. HSC_BANDWIDTH_LIMIT_EXCEEDED = 509,
  486. HSC_NOT_EXTENDED = 510,
  487. HSC_NETWORK_AUTHENTICATION_REQUIRED = 511,
  488. HSC_WEB_SERVER_UNKNOWN_ERROR = 520,
  489. HSC_WEB_SERVER_IS_DOWN = 521,
  490. HSC_CONNECTION_TIMEOUT = 522,
  491. HSC_ORIGIN_IS_UNREACHABLE = 523,
  492. HSC_TIMEOUT_OCCURED = 524,
  493. HSC_SSL_HANDSHAKE_FAILED = 525,
  494. HSC_INVALID_SSL_CERTIFICATE = 526,
  495. HSC_RAILGUN_ERROR = 527,
  496. HSC_SITE_IS_OVERLOADED = 529,
  497. HSC_SITE_IS_FROZEN = 530,
  498. HSC_IDENTITY_PROVIDER_AUTHENTICATION_ERROR = 561,
  499. HSC_NETWORK_READ_TIMEOUT = 598,
  500. HSC_NETWORK_CONNECT_TIMEOUT = 599,
  501. HSC_UNPARSEABLE_RESPONSE_HEADERS = 600
  502. } En_HP_HttpStatusCode;
  503. /************************************************************************
  504. 名称:Name/Value 结构体
  505. 描述:字符串名值对结构体
  506. ************************************************************************/
  507. typedef struct TNVPair
  508. {
  509. LPCSTR name;
  510. LPCSTR value;
  511. } HP_TNVPair,
  512. TParam, HP_TParam, *LPPARAM, *HP_LPPARAM,
  513. THeader, HP_THeader, *LPHEADER, *HP_LPHEADER,
  514. TCookie, HP_TCookie, *LPCOOKIE, *HP_LPCOOKIE;
  515. #endif
  516. /*****************************************************************************************************************************************************/
  517. /********************************************************** Compress / Decompress Definitions ********************************************************/
  518. /*****************************************************************************************************************************************************/
  519. /************************************************************************
  520. 名称:数据回调函数
  521. 描述:回调处理过程中产生的数据输出
  522. 参数:
  523. pData -- 数据缓冲区
  524. iLength -- 数据长度
  525. pContext -- 回调上下文
  526. 返回值:
  527. TRUE -- 成功
  528. FALSE -- 失败
  529. ************************************************************************/
  530. typedef BOOL (__HP_CALL *Fn_DataCallback)(const BYTE* pData, int iLength, PVOID pContext);
  531. typedef Fn_DataCallback Fn_CompressDataCallback;
  532. typedef Fn_DataCallback Fn_DecompressDataCallback;
  533. typedef Fn_DataCallback HP_Fn_DataCallback;
  534. typedef Fn_DataCallback HP_Fn_CompressDataCallback;
  535. typedef Fn_DataCallback HP_Fn_DecompressDataCallback;