HPTypeDef.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /*
  2. * Copyright: JessMA Open Source (ldcsaa@gmail.com)
  3. *
  4. * Version : 3.6.1
  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. /*****************************************************************************************************************************************************/
  26. /**************************************************************** Base Type Definitions **************************************************************/
  27. /*****************************************************************************************************************************************************/
  28. /************************************************************************
  29. 名称:连接 ID 数据类型
  30. 描述:应用程序可以把 CONNID 定义为自身需要的类型(如:ULONG / ULONGLONG)
  31. ************************************************************************/
  32. typedef ULONG_PTR CONNID;
  33. typedef CONNID HP_CONNID;
  34. /************************************************************************
  35. 名称:通信组件服务状态
  36. 描述:应用程序可以通过通信组件的 GetState() 方法获取组件当前服务状态
  37. ************************************************************************/
  38. typedef enum EnServiceState
  39. {
  40. SS_STARTING = 0, // 正在启动
  41. SS_STARTED = 1, // 已经启动
  42. SS_STOPPING = 2, // 正在停止
  43. SS_STOPPED = 3, // 已经停止
  44. } En_HP_ServiceState;
  45. /************************************************************************
  46. 名称:Socket 操作类型
  47. 描述:应用程序的 OnClose() 事件中通过该参数标识是哪种操作导致的错误
  48. ************************************************************************/
  49. typedef enum EnSocketOperation
  50. {
  51. SO_UNKNOWN = 0, // Unknown
  52. SO_ACCEPT = 1, // Acccept
  53. SO_CONNECT = 2, // Connect
  54. SO_SEND = 3, // Send
  55. SO_RECEIVE = 4, // Receive
  56. SO_CLOSE = 5, // Close
  57. } En_HP_SocketOperation;
  58. /************************************************************************
  59. 名称:事件处理结果
  60. 描述:事件的返回值,不同的返回值会影响通信组件的后续行为
  61. ************************************************************************/
  62. typedef enum EnHandleResult
  63. {
  64. HR_OK = 0, // 成功
  65. HR_IGNORE = 1, // 忽略
  66. HR_ERROR = 2, // 错误
  67. } En_HP_HandleResult;
  68. /************************************************************************
  69. 名称:数据抓取结果
  70. 描述:数据抓取操作的返回值
  71. ************************************************************************/
  72. typedef enum EnFetchResult
  73. {
  74. FR_OK = 0, // 成功
  75. FR_LENGTH_TOO_LONG = 1, // 抓取长度过大
  76. FR_DATA_NOT_FOUND = 2, // 找不到 ConnID 对应的数据
  77. } En_HP_FetchResult;
  78. /************************************************************************
  79. 名称:数据发送策略
  80. 描述:Server 组件和 Agent 组件的数据发送策略
  81. * 打包模式(默认) :尽量把多个发送操作的数据组合在一起发送,增加传输效率
  82. * 安全模式 :尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
  83. * 直接模式 :对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
  84. ************************************************************************/
  85. typedef enum EnSendPolicy
  86. {
  87. SP_PACK = 0, // 打包模式(默认)
  88. SP_SAFE = 1, // 安全模式
  89. SP_DIRECT = 2, // 直接模式
  90. } En_HP_SendPolicy;
  91. /************************************************************************
  92. 名称:操作结果代码
  93. 描述:组件 Start() / Stop() 方法执行失败时,可通过 GetLastError() 获取错误代码
  94. ************************************************************************/
  95. typedef enum EnSocketError
  96. {
  97. SE_OK = NO_ERROR, // 成功
  98. SE_ILLEGAL_STATE = 1, // 当前状态不允许操作
  99. SE_INVALID_PARAM = 2, // 非法参数
  100. SE_SOCKET_CREATE = 3, // 创建 SOCKET 失败
  101. SE_SOCKET_BIND = 4, // 绑定 SOCKET 失败
  102. SE_SOCKET_PREPARE = 5, // 设置 SOCKET 失败
  103. SE_SOCKET_LISTEN = 6, // 监听 SOCKET 失败
  104. SE_CP_CREATE = 7, // 创建完成端口失败
  105. SE_WORKER_THREAD_CREATE = 8, // 创建工作线程失败
  106. SE_DETECT_THREAD_CREATE = 9, // 创建监测线程失败
  107. SE_SOCKE_ATTACH_TO_CP = 10, // 绑定完成端口失败
  108. SE_CONNECT_SERVER = 11, // 连接服务器失败
  109. SE_NETWORK = 12, // 网络错误
  110. SE_DATA_PROC = 13, // 数据处理错误
  111. SE_DATA_SEND = 14, // 数据发送失败
  112. /***** SSL Socket 扩展操作结果代码 *****/
  113. SE_SSL_ENV_NOT_READY = 101, // SSL 环境未就绪
  114. } En_HP_SocketError;
  115. /************************************************************************
  116. 名称:播送模式
  117. 描述:UDP 组件的播送模式(组播或广播)
  118. ************************************************************************/
  119. typedef enum EnCastMode
  120. {
  121. CM_MULTICAST = 0, // 组播
  122. CM_BROADCAST = 1, // 广播
  123. } En_HP_CastMode;
  124. /*****************************************************************************************************************************************************/
  125. /**************************************************************** SSL Type Definitions ***************************************************************/
  126. /*****************************************************************************************************************************************************/
  127. #ifdef _SSL_SUPPORT
  128. /************************************************************************
  129. 名称:SSL 工作模式
  130. 描述:标识 SSL 的工作模式,客户端模式或服务端模式
  131. ************************************************************************/
  132. typedef enum EnSSLSessionMode
  133. {
  134. SSL_SM_CLIENT = 0, // 客户端模式
  135. SSL_SM_SERVER = 1, // 服务端模式
  136. } En_HP_SSLSessionMode;
  137. /************************************************************************
  138. 名称:SSL 验证模式
  139. 描述:SSL 验证模式选项,SSL_VM_PEER 可以和后面两个选项组合一起
  140. ************************************************************************/
  141. typedef enum EnSSLVerifyMode
  142. {
  143. SSL_VM_NONE = 0x00, // SSL_VERIFY_NONE
  144. SSL_VM_PEER = 0x01, // SSL_VERIFY_PEER
  145. SSL_VM_FAIL_IF_NO_PEER_CERT = 0x02, // SSL_VERIFY_FAIL_IF_NO_PEER_CERT
  146. SSL_VM_CLIENT_ONCE = 0x04, // SSL_VERIFY_CLIENT_ONCE
  147. } En_HP_SSLVerifyMode;
  148. #endif
  149. /*****************************************************************************************************************************************************/
  150. /**************************************************************** HTTP Type Definitions **************************************************************/
  151. /*****************************************************************************************************************************************************/
  152. /************************************************************************
  153. 名称:HTTP 版本
  154. 描述:低字节:主版本号,高字节:次版本号
  155. ************************************************************************/
  156. typedef enum EnHttpVersion
  157. {
  158. HV_1_0 = MAKEWORD(1, 0), // HTTP/1.0
  159. HV_1_1 = MAKEWORD(1, 1) // HTTP/1.1
  160. } En_HP_HttpVersion;
  161. /************************************************************************
  162. 名称:URL 域
  163. 描述:HTTP 请求行中 URL 段位的域定义
  164. ************************************************************************/
  165. typedef enum EnHttpUrlField
  166. {
  167. HUF_SCHEMA = 0, // Schema
  168. HUF_HOST = 1, // Host
  169. HUF_PORT = 2, // Port
  170. HUF_PATH = 3, // Path
  171. HUF_QUERY = 4, // Query String
  172. HUF_FRAGMENT = 5, // Fragment
  173. HUF_USERINFO = 6, // User Info
  174. HUF_MAX = 7, // (Field Count)
  175. } En_HP_HttpUrlField;
  176. /************************************************************************
  177. 名称:HTTP 解析结果标识
  178. 描述:指示 HTTP 解析器是否继续执行解析操作
  179. ************************************************************************/
  180. typedef enum EnHttpParseResult
  181. {
  182. HPR_OK = 0, // 继续解析
  183. HPR_SKIP_BODY = 1, // 跳过当前请求 BODY(仅用于 OnHeadersComplete 事件)
  184. HPR_UPGRADE = 2, // 升级协议(仅用于 OnHeadersComplete 事件)
  185. HPR_ERROR = -1, // 终止解析,断开连接
  186. } En_HP_HttpParseResult;
  187. /************************************************************************
  188. 名称:HTTP 协议升级类型
  189. 描述:标识 HTTP 升级为哪种协议
  190. ************************************************************************/
  191. typedef enum EnHttpUpgradeType
  192. {
  193. HUT_NONE = 0, // 没有升级
  194. HUT_WEB_SOCKET = 1, // WebSocket
  195. HUT_HTTP_TUNNEL = 2, // HTTP 隧道
  196. HUT_UNKNOWN = -1, // 未知类型
  197. } En_HP_HttpUpgradeType;
  198. /************************************************************************
  199. 名称:HTTP 状态码
  200. 描述:HTTP 标准状态码
  201. ************************************************************************/
  202. typedef enum EnHttpStatusCode
  203. {
  204. HSC_CONTINUE = 100,
  205. HSC_SWITCHING_PROTOCOLS = 101,
  206. HSC_PROCESSING = 102,
  207. HSC_OK = 200,
  208. HSC_CREATED = 201,
  209. HSC_ACCEPTED = 202,
  210. HSC_NON_AUTHORITATIVE_INFORMATION = 203,
  211. HSC_NO_CONTENT = 204,
  212. HSC_RESET_CONTENT = 205,
  213. HSC_PARTIAL_CONTENT = 206,
  214. HSC_MULTI_STATUS = 207,
  215. HSC_MULTIPLE_CHOICES = 300,
  216. HSC_MOVED_PERMANENTLY = 301,
  217. HSC_MOVED_TEMPORARILY = 302,
  218. HSC_SEE_OTHER = 303,
  219. HSC_NOT_MODIFIED = 304,
  220. HSC_USE_PROXY = 305,
  221. HSC_SWITCH_PROXY = 306,
  222. HSC_TEMPORARY_REDIRECT = 307,
  223. HSC_BAD_REQUEST = 400,
  224. HSC_UNAUTHORIZED = 401,
  225. HSC_PAYMENT_REQUIRED = 402,
  226. HSC_FORBIDDEN = 403,
  227. HSC_NOT_FOUND = 404,
  228. HSC_METHOD_NOT_ALLOWED = 405,
  229. HSC_NOT_ACCEPTABLE = 406,
  230. HSC_PROXY_AUTHENTICATION_REQUIRED = 407,
  231. HSC_REQUEST_TIMEOUT = 408,
  232. HSC_CONFLICT = 409,
  233. HSC_GONE = 410,
  234. HSC_LENGTH_REQUIRED = 411,
  235. HSC_PRECONDITION_FAILED = 412,
  236. HSC_REQUEST_ENTITY_TOO_LARGE = 413,
  237. HSC_REQUEST_URI_TOO_LONG = 414,
  238. HSC_UNSUPPORTED_MEDIA_TYPE = 415,
  239. HSC_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
  240. HSC_EXPECTATION_FAILED = 417,
  241. HSC_UNPROCESSABLE_ENTITY = 422,
  242. HSC_LOCKED = 423,
  243. HSC_FAILED_DEPENDENCY = 424,
  244. HSC_UNORDERED_COLLECTION = 425,
  245. HSC_UPGRADE_REQUIRED = 426,
  246. HSC_RETRY_WITH = 449,
  247. HSC_INTERNAL_SERVER_ERROR = 500,
  248. HSC_NOT_IMPLEMENTED = 501,
  249. HSC_BAD_GATEWAY = 502,
  250. HSC_SERVICE_UNAVAILABLE = 503,
  251. HSC_GATEWAY_TIMEOUT = 504,
  252. HSC_HTTP_VERSION_NOT_SUPPORTED = 505,
  253. HSC_VARIANT_ALSO_NEGOTIATES = 506,
  254. HSC_INSUFFICIENT_STORAGE = 507,
  255. HSC_BANDWIDTH_LIMIT_EXCEEDED = 509,
  256. HSC_NOT_EXTENDED = 510,
  257. HSC_UNPARSEABLE_RESPONSE_HEADERS = 600
  258. } En_HP_HttpStatusCode;
  259. /************************************************************************
  260. 名称:Name/Value 结构体
  261. 描述:字符串名值对结构体
  262. ************************************************************************/
  263. typedef struct TNVPair
  264. {
  265. LPCSTR name;
  266. LPCSTR value;
  267. } HP_TNVPair,
  268. TParam, HP_TParam, *LPPARAM, *HP_LPPARAM,
  269. THeader, HP_THeader, *LPHEADER, *HP_LPHEADER,
  270. TCookie, HP_TCookie, *LPCOOKIE, *HP_LPCOOKIE;