-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathhttp.h
164 lines (146 loc) · 5.56 KB
/
http.h
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#ifndef AWS_HTTP_H
#define AWS_HTTP_H
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/common/logging.h>
#include <aws/http/exports.h>
#include <aws/io/io.h>
AWS_PUSH_SANE_WARNING_LEVEL
#define AWS_C_HTTP_PACKAGE_ID 2
enum aws_http_errors {
AWS_ERROR_HTTP_UNKNOWN = AWS_ERROR_ENUM_BEGIN_RANGE(AWS_C_HTTP_PACKAGE_ID),
AWS_ERROR_HTTP_HEADER_NOT_FOUND,
AWS_ERROR_HTTP_INVALID_HEADER_FIELD,
AWS_ERROR_HTTP_INVALID_HEADER_NAME,
AWS_ERROR_HTTP_INVALID_HEADER_VALUE,
AWS_ERROR_HTTP_INVALID_METHOD,
AWS_ERROR_HTTP_INVALID_PATH,
AWS_ERROR_HTTP_INVALID_STATUS_CODE,
AWS_ERROR_HTTP_MISSING_BODY_STREAM,
AWS_ERROR_HTTP_INVALID_BODY_STREAM,
AWS_ERROR_HTTP_CONNECTION_CLOSED,
AWS_ERROR_HTTP_SWITCHED_PROTOCOLS,
AWS_ERROR_HTTP_UNSUPPORTED_PROTOCOL,
AWS_ERROR_HTTP_REACTION_REQUIRED,
AWS_ERROR_HTTP_DATA_NOT_AVAILABLE,
AWS_ERROR_HTTP_OUTGOING_STREAM_LENGTH_INCORRECT,
AWS_ERROR_HTTP_CALLBACK_FAILURE,
AWS_ERROR_HTTP_WEBSOCKET_UPGRADE_FAILURE,
AWS_ERROR_HTTP_WEBSOCKET_CLOSE_FRAME_SENT,
AWS_ERROR_HTTP_WEBSOCKET_IS_MIDCHANNEL_HANDLER,
AWS_ERROR_HTTP_CONNECTION_MANAGER_INVALID_STATE_FOR_ACQUIRE,
AWS_ERROR_HTTP_CONNECTION_MANAGER_VENDED_CONNECTION_UNDERFLOW,
AWS_ERROR_HTTP_SERVER_CLOSED,
AWS_ERROR_HTTP_PROXY_CONNECT_FAILED,
AWS_ERROR_HTTP_CONNECTION_MANAGER_SHUTTING_DOWN,
AWS_ERROR_HTTP_CHANNEL_THROUGHPUT_FAILURE,
AWS_ERROR_HTTP_PROTOCOL_ERROR,
AWS_ERROR_HTTP_STREAM_IDS_EXHAUSTED,
AWS_ERROR_HTTP_GOAWAY_RECEIVED,
AWS_ERROR_HTTP_RST_STREAM_RECEIVED,
AWS_ERROR_HTTP_RST_STREAM_SENT,
AWS_ERROR_HTTP_STREAM_NOT_ACTIVATED,
AWS_ERROR_HTTP_STREAM_HAS_COMPLETED,
AWS_ERROR_HTTP_PROXY_STRATEGY_NTLM_CHALLENGE_TOKEN_MISSING,
AWS_ERROR_HTTP_PROXY_STRATEGY_TOKEN_RETRIEVAL_FAILURE,
AWS_ERROR_HTTP_PROXY_CONNECT_FAILED_RETRYABLE,
AWS_ERROR_HTTP_PROTOCOL_SWITCH_FAILURE,
AWS_ERROR_HTTP_MAX_CONCURRENT_STREAMS_EXCEEDED,
AWS_ERROR_HTTP_STREAM_MANAGER_SHUTTING_DOWN,
AWS_ERROR_HTTP_STREAM_MANAGER_CONNECTION_ACQUIRE_FAILURE,
AWS_ERROR_HTTP_STREAM_MANAGER_UNEXPECTED_HTTP_VERSION,
AWS_ERROR_HTTP_WEBSOCKET_PROTOCOL_ERROR,
AWS_ERROR_HTTP_MANUAL_WRITE_NOT_ENABLED,
AWS_ERROR_HTTP_MANUAL_WRITE_HAS_COMPLETED,
AWS_ERROR_HTTP_RESPONSE_FIRST_BYTE_TIMEOUT,
AWS_ERROR_HTTP_CONNECTION_MANAGER_ACQUISITION_TIMEOUT,
AWS_ERROR_HTTP_CONNECTION_MANAGER_MAX_PENDING_ACQUISITIONS_EXCEEDED,
AWS_ERROR_HTTP_END_RANGE = AWS_ERROR_ENUM_END_RANGE(AWS_C_HTTP_PACKAGE_ID)
};
/* Error codes that may be present in HTTP/2 RST_STREAM and GOAWAY frames (RFC-7540 7). */
enum aws_http2_error_code {
AWS_HTTP2_ERR_NO_ERROR = 0x00,
AWS_HTTP2_ERR_PROTOCOL_ERROR = 0x01,
AWS_HTTP2_ERR_INTERNAL_ERROR = 0x02,
AWS_HTTP2_ERR_FLOW_CONTROL_ERROR = 0x03,
AWS_HTTP2_ERR_SETTINGS_TIMEOUT = 0x04,
AWS_HTTP2_ERR_STREAM_CLOSED = 0x05,
AWS_HTTP2_ERR_FRAME_SIZE_ERROR = 0x06,
AWS_HTTP2_ERR_REFUSED_STREAM = 0x07,
AWS_HTTP2_ERR_CANCEL = 0x08,
AWS_HTTP2_ERR_COMPRESSION_ERROR = 0x09,
AWS_HTTP2_ERR_CONNECT_ERROR = 0x0A,
AWS_HTTP2_ERR_ENHANCE_YOUR_CALM = 0x0B,
AWS_HTTP2_ERR_INADEQUATE_SECURITY = 0x0C,
AWS_HTTP2_ERR_HTTP_1_1_REQUIRED = 0x0D,
AWS_HTTP2_ERR_COUNT,
};
enum aws_http_log_subject {
AWS_LS_HTTP_GENERAL = AWS_LOG_SUBJECT_BEGIN_RANGE(AWS_C_HTTP_PACKAGE_ID),
AWS_LS_HTTP_CONNECTION,
AWS_LS_HTTP_ENCODER,
AWS_LS_HTTP_DECODER,
AWS_LS_HTTP_SERVER,
AWS_LS_HTTP_STREAM,
AWS_LS_HTTP_CONNECTION_MANAGER,
AWS_LS_HTTP_STREAM_MANAGER,
AWS_LS_HTTP_WEBSOCKET,
AWS_LS_HTTP_WEBSOCKET_SETUP,
AWS_LS_HTTP_PROXY_NEGOTIATION,
};
enum aws_http_version {
AWS_HTTP_VERSION_UNKNOWN, /* Invalid version. */
AWS_HTTP_VERSION_1_0,
AWS_HTTP_VERSION_1_1,
AWS_HTTP_VERSION_2,
AWS_HTTP_VERSION_COUNT,
};
AWS_EXTERN_C_BEGIN
/**
* Initializes internal datastructures used by aws-c-http.
* Must be called before using any functionality in aws-c-http.
*/
AWS_HTTP_API
void aws_http_library_init(struct aws_allocator *alloc);
/**
* Clean up internal datastructures used by aws-c-http.
* Must not be called until application is done using functionality in aws-c-http.
*/
AWS_HTTP_API
void aws_http_library_clean_up(void);
/**
* Returns the description of common status codes.
* Ex: 404 -> "Not Found"
* An empty string is returned if the status code is not recognized.
*/
AWS_HTTP_API
const char *aws_http_status_text(int status_code);
/**
* Shortcuts for common HTTP request methods
*/
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_get;
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_head;
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_post;
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_put;
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_delete;
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_connect;
AWS_HTTP_API
extern const struct aws_byte_cursor aws_http_method_options;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_method;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_scheme;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_authority;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_path;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_status;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_scheme_http;
AWS_HTTP_API extern const struct aws_byte_cursor aws_http_scheme_https;
AWS_EXTERN_C_END
AWS_POP_SANE_WARNING_LEVEL
#endif /* AWS_HTTP_H */