10Sigor@sysoev.ru 20Sigor@sysoev.ru /* 30Sigor@sysoev.ru * Copyright (C) Igor Sysoev 40Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 50Sigor@sysoev.ru */ 60Sigor@sysoev.ru 70Sigor@sysoev.ru #ifndef _NXT_UPSTREAM_SOURCE_H_INCLUDED_ 80Sigor@sysoev.ru #define _NXT_UPSTREAM_SOURCE_H_INCLUDED_ 90Sigor@sysoev.ru 100Sigor@sysoev.ru 110Sigor@sysoev.ru typedef struct { 120Sigor@sysoev.ru uint32_t hash; 130Sigor@sysoev.ru 140Sigor@sysoev.ru unsigned value_len:23; 150Sigor@sysoev.ru unsigned skip:1; 160Sigor@sysoev.ru unsigned name_len:8; 170Sigor@sysoev.ru 180Sigor@sysoev.ru u_char *value_start; 190Sigor@sysoev.ru u_char *name_start; 200Sigor@sysoev.ru } nxt_name_value_t; 210Sigor@sysoev.ru 220Sigor@sysoev.ru 230Sigor@sysoev.ru typedef struct { 240Sigor@sysoev.ru nxt_list_t *list; 250Sigor@sysoev.ru nxt_lvlhsh_t hash; 260Sigor@sysoev.ru 270Sigor@sysoev.ru uint16_t status; /* 16 bits */ 280Sigor@sysoev.ru 290Sigor@sysoev.ru nxt_off_t content_length; 300Sigor@sysoev.ru } nxt_upstream_header_in_t; 310Sigor@sysoev.ru 320Sigor@sysoev.ru 330Sigor@sysoev.ru typedef nxt_int_t (*nxt_upstream_name_value_handler_t)( 340Sigor@sysoev.ru nxt_upstream_source_t *us, nxt_name_value_t *nv); 350Sigor@sysoev.ru 360Sigor@sysoev.ru 370Sigor@sysoev.ru typedef struct { 380Sigor@sysoev.ru nxt_upstream_name_value_handler_t handler; 390Sigor@sysoev.ru 400Sigor@sysoev.ru uint8_t len; 410Sigor@sysoev.ru /* 420Sigor@sysoev.ru * A name is inlined to test it with one memory access. 430Sigor@sysoev.ru * The struct size is aligned to 32 bytes. 440Sigor@sysoev.ru */ 450Sigor@sysoev.ru #if (NXT_64BIT) 460Sigor@sysoev.ru u_char name[23]; 470Sigor@sysoev.ru #else 480Sigor@sysoev.ru u_char name[27]; 490Sigor@sysoev.ru #endif 500Sigor@sysoev.ru } nxt_upstream_name_value_t; 510Sigor@sysoev.ru 520Sigor@sysoev.ru 530Sigor@sysoev.ru struct nxt_upstream_source_s { 540Sigor@sysoev.ru nxt_upstream_peer_t *peer; 550Sigor@sysoev.ru 560Sigor@sysoev.ru const nxt_upstream_state_t *state; 570Sigor@sysoev.ru 580Sigor@sysoev.ru void *protocol_source; 590Sigor@sysoev.ru void *data; 600Sigor@sysoev.ru nxt_work_queue_t *work_queue; 610Sigor@sysoev.ru 620Sigor@sysoev.ru nxt_buf_pool_t buffers; 630Sigor@sysoev.ru 640Sigor@sysoev.ru nxt_lvlhsh_t header_hash; 650Sigor@sysoev.ru nxt_stream_source_t *stream; 660Sigor@sysoev.ru }; 670Sigor@sysoev.ru 680Sigor@sysoev.ru 690Sigor@sysoev.ru #define NXT_UPSTREAM_NAME_VALUE_MIN_SIZE \ 700Sigor@sysoev.ru offsetof(nxt_http_upstream_header_t, name) 710Sigor@sysoev.ru 72*703Svbart@nginx.com #define nxt_upstream_name_value(s) nxt_length(s), s 730Sigor@sysoev.ru 740Sigor@sysoev.ru 7565Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_upstream_header_hash_add(nxt_mp_t *mp, 760Sigor@sysoev.ru nxt_lvlhsh_t *lh, const nxt_upstream_name_value_t *unv, nxt_uint_t n); 770Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_upstream_name_value_ignore(nxt_upstream_source_t *us, 780Sigor@sysoev.ru nxt_name_value_t *nv); 790Sigor@sysoev.ru 800Sigor@sysoev.ru NXT_EXPORT extern const nxt_lvlhsh_proto_t nxt_upstream_header_hash_proto; 810Sigor@sysoev.ru 820Sigor@sysoev.ru 830Sigor@sysoev.ru #endif /* _NXT_UPSTREAM_SOURCE_H_INCLUDED_ */ 84