Mercurial > hg > nginx
comparison src/http/v2/ngx_http_v2_filter_module.c @ 7229:87e9e4aabf1b
HTTP/2: externalized various constants and interfaces.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sat, 17 Mar 2018 23:04:20 +0300 |
parents | 3d2b0b02bd3d |
children | c2a0a838c40f |
comparison
equal
deleted
inserted
replaced
7228:0f811890f2f0 | 7229:87e9e4aabf1b |
---|---|
21 #define ngx_http_v2_integer_octets(v) (1 + (v) / 127) | 21 #define ngx_http_v2_integer_octets(v) (1 + (v) / 127) |
22 | 22 |
23 #define ngx_http_v2_literal_size(h) \ | 23 #define ngx_http_v2_literal_size(h) \ |
24 (ngx_http_v2_integer_octets(sizeof(h) - 1) + sizeof(h) - 1) | 24 (ngx_http_v2_integer_octets(sizeof(h) - 1) + sizeof(h) - 1) |
25 | 25 |
26 #define ngx_http_v2_indexed(i) (128 + (i)) | |
27 #define ngx_http_v2_inc_indexed(i) (64 + (i)) | |
28 | |
29 #define ngx_http_v2_write_name(dst, src, len, tmp) \ | |
30 ngx_http_v2_string_encode(dst, src, len, tmp, 1) | |
31 #define ngx_http_v2_write_value(dst, src, len, tmp) \ | |
32 ngx_http_v2_string_encode(dst, src, len, tmp, 0) | |
33 | |
34 #define NGX_HTTP_V2_ENCODE_RAW 0 | |
35 #define NGX_HTTP_V2_ENCODE_HUFF 0x80 | |
36 | |
37 #define NGX_HTTP_V2_AUTHORITY_INDEX 1 | |
38 #define NGX_HTTP_V2_METHOD_GET_INDEX 2 | |
39 #define NGX_HTTP_V2_PATH_INDEX 4 | |
40 | |
41 #define NGX_HTTP_V2_SCHEME_HTTP_INDEX 6 | |
42 #define NGX_HTTP_V2_SCHEME_HTTPS_INDEX 7 | |
43 | |
44 #define NGX_HTTP_V2_STATUS_INDEX 8 | |
45 #define NGX_HTTP_V2_STATUS_200_INDEX 8 | |
46 #define NGX_HTTP_V2_STATUS_204_INDEX 9 | |
47 #define NGX_HTTP_V2_STATUS_206_INDEX 10 | |
48 #define NGX_HTTP_V2_STATUS_304_INDEX 11 | |
49 #define NGX_HTTP_V2_STATUS_400_INDEX 12 | |
50 #define NGX_HTTP_V2_STATUS_404_INDEX 13 | |
51 #define NGX_HTTP_V2_STATUS_500_INDEX 14 | |
52 | |
53 #define NGX_HTTP_V2_ACCEPT_ENCODING_INDEX 16 | |
54 #define NGX_HTTP_V2_ACCEPT_LANGUAGE_INDEX 17 | |
55 #define NGX_HTTP_V2_CONTENT_LENGTH_INDEX 28 | |
56 #define NGX_HTTP_V2_CONTENT_TYPE_INDEX 31 | |
57 #define NGX_HTTP_V2_DATE_INDEX 33 | |
58 #define NGX_HTTP_V2_LAST_MODIFIED_INDEX 44 | |
59 #define NGX_HTTP_V2_LOCATION_INDEX 46 | |
60 #define NGX_HTTP_V2_SERVER_INDEX 54 | |
61 #define NGX_HTTP_V2_USER_AGENT_INDEX 58 | |
62 #define NGX_HTTP_V2_VARY_INDEX 59 | |
63 | 26 |
64 #define NGX_HTTP_V2_NO_TRAILERS (ngx_http_v2_out_frame_t *) -1 | 27 #define NGX_HTTP_V2_NO_TRAILERS (ngx_http_v2_out_frame_t *) -1 |
65 | 28 |
66 | 29 |
67 typedef struct { | 30 typedef struct { |
91 | 54 |
92 static ngx_int_t ngx_http_v2_push_resources(ngx_http_request_t *r); | 55 static ngx_int_t ngx_http_v2_push_resources(ngx_http_request_t *r); |
93 static ngx_int_t ngx_http_v2_push_resource(ngx_http_request_t *r, | 56 static ngx_int_t ngx_http_v2_push_resource(ngx_http_request_t *r, |
94 ngx_str_t *path, ngx_str_t *binary); | 57 ngx_str_t *path, ngx_str_t *binary); |
95 | 58 |
96 static u_char *ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len, | |
97 u_char *tmp, ngx_uint_t lower); | |
98 static u_char *ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix, | |
99 ngx_uint_t value); | |
100 static ngx_http_v2_out_frame_t *ngx_http_v2_create_headers_frame( | 59 static ngx_http_v2_out_frame_t *ngx_http_v2_create_headers_frame( |
101 ngx_http_request_t *r, u_char *pos, u_char *end, ngx_uint_t fin); | 60 ngx_http_request_t *r, u_char *pos, u_char *end, ngx_uint_t fin); |
102 static ngx_http_v2_out_frame_t *ngx_http_v2_create_push_frame( | 61 static ngx_http_v2_out_frame_t *ngx_http_v2_create_push_frame( |
103 ngx_http_request_t *r, u_char *pos, u_char *end); | 62 ngx_http_request_t *r, u_char *pos, u_char *end); |
104 static ngx_http_v2_out_frame_t *ngx_http_v2_create_trailers_frame( | 63 static ngx_http_v2_out_frame_t *ngx_http_v2_create_trailers_frame( |
1109 | 1068 |
1110 return NGX_ERROR; | 1069 return NGX_ERROR; |
1111 } | 1070 } |
1112 | 1071 |
1113 | 1072 |
1114 static u_char * | |
1115 ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len, u_char *tmp, | |
1116 ngx_uint_t lower) | |
1117 { | |
1118 size_t hlen; | |
1119 | |
1120 hlen = ngx_http_v2_huff_encode(src, len, tmp, lower); | |
1121 | |
1122 if (hlen > 0) { | |
1123 *dst = NGX_HTTP_V2_ENCODE_HUFF; | |
1124 dst = ngx_http_v2_write_int(dst, ngx_http_v2_prefix(7), hlen); | |
1125 return ngx_cpymem(dst, tmp, hlen); | |
1126 } | |
1127 | |
1128 *dst = NGX_HTTP_V2_ENCODE_RAW; | |
1129 dst = ngx_http_v2_write_int(dst, ngx_http_v2_prefix(7), len); | |
1130 | |
1131 if (lower) { | |
1132 ngx_strlow(dst, src, len); | |
1133 return dst + len; | |
1134 } | |
1135 | |
1136 return ngx_cpymem(dst, src, len); | |
1137 } | |
1138 | |
1139 | |
1140 static u_char * | |
1141 ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix, ngx_uint_t value) | |
1142 { | |
1143 if (value < prefix) { | |
1144 *pos++ |= value; | |
1145 return pos; | |
1146 } | |
1147 | |
1148 *pos++ |= prefix; | |
1149 value -= prefix; | |
1150 | |
1151 while (value >= 128) { | |
1152 *pos++ = value % 128 + 128; | |
1153 value /= 128; | |
1154 } | |
1155 | |
1156 *pos++ = (u_char) value; | |
1157 | |
1158 return pos; | |
1159 } | |
1160 | |
1161 | |
1162 static ngx_http_v2_out_frame_t * | 1073 static ngx_http_v2_out_frame_t * |
1163 ngx_http_v2_create_headers_frame(ngx_http_request_t *r, u_char *pos, | 1074 ngx_http_v2_create_headers_frame(ngx_http_request_t *r, u_char *pos, |
1164 u_char *end, ngx_uint_t fin) | 1075 u_char *end, ngx_uint_t fin) |
1165 { | 1076 { |
1166 u_char type, flags; | 1077 u_char type, flags; |