mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 09:42:39 +08:00
HTTP/2: externalized various constants and interfaces.
This commit is contained in:
parent
b84b67bc0f
commit
c554dd1434
@ -428,6 +428,7 @@ if [ $HTTP = YES ]; then
|
||||
src/http/v2/ngx_http_v2_module.h"
|
||||
ngx_module_srcs="src/http/v2/ngx_http_v2.c \
|
||||
src/http/v2/ngx_http_v2_table.c \
|
||||
src/http/v2/ngx_http_v2_encode.c \
|
||||
src/http/v2/ngx_http_v2_huff_decode.c \
|
||||
src/http/v2/ngx_http_v2_huff_encode.c \
|
||||
src/http/v2/ngx_http_v2_module.c"
|
||||
|
@ -54,8 +54,6 @@ typedef struct {
|
||||
|
||||
#define NGX_HTTP_V2_FRAME_BUFFER_SIZE 24
|
||||
|
||||
#define NGX_HTTP_V2_DEFAULT_FRAME_SIZE (1 << 14)
|
||||
|
||||
#define NGX_HTTP_V2_ROOT (void *) -1
|
||||
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
#define NGX_HTTP_V2_STATE_BUFFER_SIZE 16
|
||||
|
||||
#define NGX_HTTP_V2_DEFAULT_FRAME_SIZE (1 << 14)
|
||||
#define NGX_HTTP_V2_MAX_FRAME_SIZE ((1 << 24) - 1)
|
||||
|
||||
#define NGX_HTTP_V2_INT_OCTETS 4
|
||||
@ -291,6 +292,9 @@ void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc);
|
||||
ngx_int_t ngx_http_v2_send_output_queue(ngx_http_v2_connection_t *h2c);
|
||||
|
||||
|
||||
ngx_str_t *ngx_http_v2_get_static_name(ngx_uint_t index);
|
||||
ngx_str_t *ngx_http_v2_get_static_value(ngx_uint_t index);
|
||||
|
||||
ngx_int_t ngx_http_v2_get_indexed_header(ngx_http_v2_connection_t *h2c,
|
||||
ngx_uint_t index, ngx_uint_t name_only);
|
||||
ngx_int_t ngx_http_v2_add_header(ngx_http_v2_connection_t *h2c,
|
||||
@ -357,4 +361,53 @@ size_t ngx_http_v2_huff_encode(u_char *src, size_t len, u_char *dst,
|
||||
|
||||
#define ngx_http_v2_write_sid ngx_http_v2_write_uint32
|
||||
|
||||
|
||||
#define ngx_http_v2_indexed(i) (128 + (i))
|
||||
#define ngx_http_v2_inc_indexed(i) (64 + (i))
|
||||
|
||||
#define ngx_http_v2_write_name(dst, src, len, tmp) \
|
||||
ngx_http_v2_string_encode(dst, src, len, tmp, 1)
|
||||
#define ngx_http_v2_write_value(dst, src, len, tmp) \
|
||||
ngx_http_v2_string_encode(dst, src, len, tmp, 0)
|
||||
|
||||
#define NGX_HTTP_V2_ENCODE_RAW 0
|
||||
#define NGX_HTTP_V2_ENCODE_HUFF 0x80
|
||||
|
||||
#define NGX_HTTP_V2_AUTHORITY_INDEX 1
|
||||
|
||||
#define NGX_HTTP_V2_METHOD_INDEX 2
|
||||
#define NGX_HTTP_V2_METHOD_GET_INDEX 2
|
||||
#define NGX_HTTP_V2_METHOD_POST_INDEX 3
|
||||
|
||||
#define NGX_HTTP_V2_PATH_INDEX 4
|
||||
#define NGX_HTTP_V2_PATH_ROOT_INDEX 4
|
||||
|
||||
#define NGX_HTTP_V2_SCHEME_HTTP_INDEX 6
|
||||
#define NGX_HTTP_V2_SCHEME_HTTPS_INDEX 7
|
||||
|
||||
#define NGX_HTTP_V2_STATUS_INDEX 8
|
||||
#define NGX_HTTP_V2_STATUS_200_INDEX 8
|
||||
#define NGX_HTTP_V2_STATUS_204_INDEX 9
|
||||
#define NGX_HTTP_V2_STATUS_206_INDEX 10
|
||||
#define NGX_HTTP_V2_STATUS_304_INDEX 11
|
||||
#define NGX_HTTP_V2_STATUS_400_INDEX 12
|
||||
#define NGX_HTTP_V2_STATUS_404_INDEX 13
|
||||
#define NGX_HTTP_V2_STATUS_500_INDEX 14
|
||||
|
||||
#define NGX_HTTP_V2_ACCEPT_ENCODING_INDEX 16
|
||||
#define NGX_HTTP_V2_ACCEPT_LANGUAGE_INDEX 17
|
||||
#define NGX_HTTP_V2_CONTENT_LENGTH_INDEX 28
|
||||
#define NGX_HTTP_V2_CONTENT_TYPE_INDEX 31
|
||||
#define NGX_HTTP_V2_DATE_INDEX 33
|
||||
#define NGX_HTTP_V2_LAST_MODIFIED_INDEX 44
|
||||
#define NGX_HTTP_V2_LOCATION_INDEX 46
|
||||
#define NGX_HTTP_V2_SERVER_INDEX 54
|
||||
#define NGX_HTTP_V2_USER_AGENT_INDEX 58
|
||||
#define NGX_HTTP_V2_VARY_INDEX 59
|
||||
|
||||
|
||||
u_char *ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len,
|
||||
u_char *tmp, ngx_uint_t lower);
|
||||
|
||||
|
||||
#endif /* _NGX_HTTP_V2_H_INCLUDED_ */
|
||||
|
62
src/http/v2/ngx_http_v2_encode.c
Normal file
62
src/http/v2/ngx_http_v2_encode.c
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
/*
|
||||
* Copyright (C) Nginx, Inc.
|
||||
* Copyright (C) Valentin V. Bartenev
|
||||
*/
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_http.h>
|
||||
|
||||
|
||||
static u_char *ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix,
|
||||
ngx_uint_t value);
|
||||
|
||||
|
||||
u_char *
|
||||
ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len, u_char *tmp,
|
||||
ngx_uint_t lower)
|
||||
{
|
||||
size_t hlen;
|
||||
|
||||
hlen = ngx_http_v2_huff_encode(src, len, tmp, lower);
|
||||
|
||||
if (hlen > 0) {
|
||||
*dst = NGX_HTTP_V2_ENCODE_HUFF;
|
||||
dst = ngx_http_v2_write_int(dst, ngx_http_v2_prefix(7), hlen);
|
||||
return ngx_cpymem(dst, tmp, hlen);
|
||||
}
|
||||
|
||||
*dst = NGX_HTTP_V2_ENCODE_RAW;
|
||||
dst = ngx_http_v2_write_int(dst, ngx_http_v2_prefix(7), len);
|
||||
|
||||
if (lower) {
|
||||
ngx_strlow(dst, src, len);
|
||||
return dst + len;
|
||||
}
|
||||
|
||||
return ngx_cpymem(dst, src, len);
|
||||
}
|
||||
|
||||
|
||||
static u_char *
|
||||
ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix, ngx_uint_t value)
|
||||
{
|
||||
if (value < prefix) {
|
||||
*pos++ |= value;
|
||||
return pos;
|
||||
}
|
||||
|
||||
*pos++ |= prefix;
|
||||
value -= prefix;
|
||||
|
||||
while (value >= 128) {
|
||||
*pos++ = value % 128 + 128;
|
||||
value /= 128;
|
||||
}
|
||||
|
||||
*pos++ = (u_char) value;
|
||||
|
||||
return pos;
|
||||
}
|
@ -23,43 +23,6 @@
|
||||
#define ngx_http_v2_literal_size(h) \
|
||||
(ngx_http_v2_integer_octets(sizeof(h) - 1) + sizeof(h) - 1)
|
||||
|
||||
#define ngx_http_v2_indexed(i) (128 + (i))
|
||||
#define ngx_http_v2_inc_indexed(i) (64 + (i))
|
||||
|
||||
#define ngx_http_v2_write_name(dst, src, len, tmp) \
|
||||
ngx_http_v2_string_encode(dst, src, len, tmp, 1)
|
||||
#define ngx_http_v2_write_value(dst, src, len, tmp) \
|
||||
ngx_http_v2_string_encode(dst, src, len, tmp, 0)
|
||||
|
||||
#define NGX_HTTP_V2_ENCODE_RAW 0
|
||||
#define NGX_HTTP_V2_ENCODE_HUFF 0x80
|
||||
|
||||
#define NGX_HTTP_V2_AUTHORITY_INDEX 1
|
||||
#define NGX_HTTP_V2_METHOD_GET_INDEX 2
|
||||
#define NGX_HTTP_V2_PATH_INDEX 4
|
||||
|
||||
#define NGX_HTTP_V2_SCHEME_HTTP_INDEX 6
|
||||
#define NGX_HTTP_V2_SCHEME_HTTPS_INDEX 7
|
||||
|
||||
#define NGX_HTTP_V2_STATUS_INDEX 8
|
||||
#define NGX_HTTP_V2_STATUS_200_INDEX 8
|
||||
#define NGX_HTTP_V2_STATUS_204_INDEX 9
|
||||
#define NGX_HTTP_V2_STATUS_206_INDEX 10
|
||||
#define NGX_HTTP_V2_STATUS_304_INDEX 11
|
||||
#define NGX_HTTP_V2_STATUS_400_INDEX 12
|
||||
#define NGX_HTTP_V2_STATUS_404_INDEX 13
|
||||
#define NGX_HTTP_V2_STATUS_500_INDEX 14
|
||||
|
||||
#define NGX_HTTP_V2_ACCEPT_ENCODING_INDEX 16
|
||||
#define NGX_HTTP_V2_ACCEPT_LANGUAGE_INDEX 17
|
||||
#define NGX_HTTP_V2_CONTENT_LENGTH_INDEX 28
|
||||
#define NGX_HTTP_V2_CONTENT_TYPE_INDEX 31
|
||||
#define NGX_HTTP_V2_DATE_INDEX 33
|
||||
#define NGX_HTTP_V2_LAST_MODIFIED_INDEX 44
|
||||
#define NGX_HTTP_V2_LOCATION_INDEX 46
|
||||
#define NGX_HTTP_V2_SERVER_INDEX 54
|
||||
#define NGX_HTTP_V2_USER_AGENT_INDEX 58
|
||||
#define NGX_HTTP_V2_VARY_INDEX 59
|
||||
|
||||
#define NGX_HTTP_V2_NO_TRAILERS (ngx_http_v2_out_frame_t *) -1
|
||||
|
||||
@ -93,10 +56,6 @@ static ngx_int_t ngx_http_v2_push_resources(ngx_http_request_t *r);
|
||||
static ngx_int_t ngx_http_v2_push_resource(ngx_http_request_t *r,
|
||||
ngx_str_t *path, ngx_str_t *binary);
|
||||
|
||||
static u_char *ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len,
|
||||
u_char *tmp, ngx_uint_t lower);
|
||||
static u_char *ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix,
|
||||
ngx_uint_t value);
|
||||
static ngx_http_v2_out_frame_t *ngx_http_v2_create_headers_frame(
|
||||
ngx_http_request_t *r, u_char *pos, u_char *end, ngx_uint_t fin);
|
||||
static ngx_http_v2_out_frame_t *ngx_http_v2_create_push_frame(
|
||||
@ -1111,54 +1070,6 @@ ngx_http_v2_push_resource(ngx_http_request_t *r, ngx_str_t *path,
|
||||
}
|
||||
|
||||
|
||||
static u_char *
|
||||
ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len, u_char *tmp,
|
||||
ngx_uint_t lower)
|
||||
{
|
||||
size_t hlen;
|
||||
|
||||
hlen = ngx_http_v2_huff_encode(src, len, tmp, lower);
|
||||
|
||||
if (hlen > 0) {
|
||||
*dst = NGX_HTTP_V2_ENCODE_HUFF;
|
||||
dst = ngx_http_v2_write_int(dst, ngx_http_v2_prefix(7), hlen);
|
||||
return ngx_cpymem(dst, tmp, hlen);
|
||||
}
|
||||
|
||||
*dst = NGX_HTTP_V2_ENCODE_RAW;
|
||||
dst = ngx_http_v2_write_int(dst, ngx_http_v2_prefix(7), len);
|
||||
|
||||
if (lower) {
|
||||
ngx_strlow(dst, src, len);
|
||||
return dst + len;
|
||||
}
|
||||
|
||||
return ngx_cpymem(dst, src, len);
|
||||
}
|
||||
|
||||
|
||||
static u_char *
|
||||
ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix, ngx_uint_t value)
|
||||
{
|
||||
if (value < prefix) {
|
||||
*pos++ |= value;
|
||||
return pos;
|
||||
}
|
||||
|
||||
*pos++ |= prefix;
|
||||
value -= prefix;
|
||||
|
||||
while (value >= 128) {
|
||||
*pos++ = value % 128 + 128;
|
||||
value /= 128;
|
||||
}
|
||||
|
||||
*pos++ = (u_char) value;
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
||||
static ngx_http_v2_out_frame_t *
|
||||
ngx_http_v2_create_headers_frame(ngx_http_request_t *r, u_char *pos,
|
||||
u_char *end, ngx_uint_t fin)
|
||||
|
@ -86,6 +86,20 @@ static ngx_http_v2_header_t ngx_http_v2_static_table[] = {
|
||||
/ sizeof(ngx_http_v2_header_t))
|
||||
|
||||
|
||||
ngx_str_t *
|
||||
ngx_http_v2_get_static_name(ngx_uint_t index)
|
||||
{
|
||||
return &ngx_http_v2_static_table[index - 1].name;
|
||||
}
|
||||
|
||||
|
||||
ngx_str_t *
|
||||
ngx_http_v2_get_static_value(ngx_uint_t index)
|
||||
{
|
||||
return &ngx_http_v2_static_table[index - 1].value;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_http_v2_get_indexed_header(ngx_http_v2_connection_t *h2c, ngx_uint_t index,
|
||||
ngx_uint_t name_only)
|
||||
|
Loading…
Reference in New Issue
Block a user