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;