-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhttpparser.h
More file actions
executable file
·107 lines (90 loc) · 2.78 KB
/
httpparser.h
File metadata and controls
executable file
·107 lines (90 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#ifndef _HTTPPARSER_H_
#define _HTTPPARSER_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifndef HTTP_PARSER_STRICT
# define HTTP_PARSER_STRICT 1
#else
# define HTTP_PARSER_STRICT 0
#endif
#define HTTP_MAX_HEADER_SIZE (80*1024)
typedef struct stru_HTTPPARSER{
/** PRIVATE **/
unsigned char ucType : 2;
unsigned char ucFlags : 6;
unsigned char ucState;
unsigned char ucHeaderState;
unsigned int uiIndex;
unsigned int uiNRead;
long long xxlContentSize;
/** READ-ONLY **/
unsigned short usHttpMajor;
unsigned short usHttpMinor;
unsigned short usResponseCode; /* responses only */
unsigned char ucRequestMethod; /* requests only */
/* 1 = Upgrade header was present and the parser has exited because of that.
* 0 = No upgrade header present.
* Should be checked when http_parser_execute() returns in addition to
* error checking.
*/
unsigned char ucUpgrade;
/** PUBLIC **/
void* pvData; /* A pointer to get hook to the "connection" or "socket" object */
}ST_HTTPPARSER;
typedef int(*FUNC_HTTP_DATA_CB) (ST_HTTPPARSER* pstP, unsigned char* pucData, unsigned int uiLen);
typedef int(*FUNC_HTTP_CB) (ST_HTTPPARSER* pstP);
/* Request Methods */
typedef enum enum_HTTP_METHOD
{
EN_HTTP_METHOD_DELETE = 0,
EN_HTTP_METHOD_GET,
EN_HTTP_METHOD_HEAD,
EN_HTTP_METHOD_POST,
EN_HTTP_METHOD_PUT,
/* pathological */
EN_HTTP_METHOD_CONNECT,
EN_HTTP_METHOD_OPTIONS,
EN_HTTP_METHOD_TRACE,
/* webdav */
EN_HTTP_METHOD_COPY,
EN_HTTP_METHOD_LOCK,
EN_HTTP_METHOD_MKCOL,
EN_HTTP_METHOD_MOVE,
EN_HTTP_METHOD_PROPFIND,
EN_HTTP_METHOD_PROPPATCH,
EN_HTTP_METHOD_UNLOCK,
/* subversion */
EN_HTTP_METHOD_REPORT,
EN_HTTP_METHOD_MKACTIVITY,
EN_HTTP_METHOD_CHECKOUT,
EN_HTTP_METHOD_MERGE,
/* upnp */
EN_HTTP_METHOD_MSEARCH,
EN_HTTP_METHOD_NOTIFY,
EN_HTTP_METHOD_SUBSCRIBE,
EN_HTTP_METHOD_UNSUBSCRIBE,
EN_HTTP_METHOD_MAX
}EN_HTTP_METHOD;
typedef enum enum_HTTPPARSER_TYPE{
EN_HTTPPARSER_REQUEST,
EN_HTTPPARSER_RESPONSE,
EN_HTTPPARSER_BOTH
}EN_HTTPPARSER_TYPE;
typedef struct stru_HTTPPARSER_SETTINGS{
FUNC_HTTP_CB pfunc_OnMessageBegin;
FUNC_HTTP_DATA_CB pfunc_OnUrl;
FUNC_HTTP_DATA_CB pfunc_OnHeaderField;
FUNC_HTTP_DATA_CB pfunc_OnHeaderValue;
FUNC_HTTP_CB pfunc_OnHeadersComplete;
FUNC_HTTP_DATA_CB pfunc_OnBody;
FUNC_HTTP_CB pfunc_OnMessageComplete;
}ST_HTTPPARSER_SETTINGS;
_INT HttpParser_Init(ST_HTTPPARSER* pParser, _UI enParserType);
_UI HttpParser_Execute(ST_HTTPPARSER* pParser, ST_HTTPPARSER_SETTINGS* pSettings, _UC* pucData,_UI uiLen);
_INT HttpParser_KeepAlive(ST_HTTPPARSER* pParser);
_UC* HttpParser_MethodToStr(_UI enHttpMethod);
#ifdef __cplusplus
}
#endif
#endif