84 lines
2.2 KiB
C
84 lines
2.2 KiB
C
|
|
/*
|
|
* Copyright (C) Igor Sysoev
|
|
* Copyright (C) NGINX, Inc.
|
|
*/
|
|
|
|
#ifndef _NXT_UPSTREAM_SOURCE_H_INCLUDED_
|
|
#define _NXT_UPSTREAM_SOURCE_H_INCLUDED_
|
|
|
|
|
|
typedef struct {
|
|
uint32_t hash;
|
|
|
|
unsigned value_len:23;
|
|
unsigned skip:1;
|
|
unsigned name_len:8;
|
|
|
|
u_char *value_start;
|
|
u_char *name_start;
|
|
} nxt_name_value_t;
|
|
|
|
|
|
typedef struct {
|
|
nxt_list_t *list;
|
|
nxt_lvlhsh_t hash;
|
|
|
|
uint16_t status; /* 16 bits */
|
|
|
|
nxt_off_t content_length;
|
|
} nxt_upstream_header_in_t;
|
|
|
|
|
|
typedef nxt_int_t (*nxt_upstream_name_value_handler_t)(
|
|
nxt_upstream_source_t *us, nxt_name_value_t *nv);
|
|
|
|
|
|
typedef struct {
|
|
nxt_upstream_name_value_handler_t handler;
|
|
|
|
uint8_t len;
|
|
/*
|
|
* A name is inlined to test it with one memory access.
|
|
* The struct size is aligned to 32 bytes.
|
|
*/
|
|
#if (NXT_64BIT)
|
|
u_char name[23];
|
|
#else
|
|
u_char name[27];
|
|
#endif
|
|
} nxt_upstream_name_value_t;
|
|
|
|
|
|
struct nxt_upstream_source_s {
|
|
nxt_upstream_peer_t *peer;
|
|
|
|
const nxt_upstream_state_t *state;
|
|
|
|
void *protocol_source;
|
|
void *data;
|
|
nxt_work_queue_t *work_queue;
|
|
|
|
nxt_buf_pool_t buffers;
|
|
|
|
nxt_lvlhsh_t header_hash;
|
|
nxt_stream_source_t *stream;
|
|
};
|
|
|
|
|
|
#define NXT_UPSTREAM_NAME_VALUE_MIN_SIZE \
|
|
offsetof(nxt_http_upstream_header_t, name)
|
|
|
|
#define nxt_upstream_name_value(s) sizeof(s) - 1, s
|
|
|
|
|
|
NXT_EXPORT nxt_int_t nxt_upstream_header_hash_add(nxt_mp_t *mp,
|
|
nxt_lvlhsh_t *lh, const nxt_upstream_name_value_t *unv, nxt_uint_t n);
|
|
NXT_EXPORT nxt_int_t nxt_upstream_name_value_ignore(nxt_upstream_source_t *us,
|
|
nxt_name_value_t *nv);
|
|
|
|
NXT_EXPORT extern const nxt_lvlhsh_proto_t nxt_upstream_header_hash_proto;
|
|
|
|
|
|
#endif /* _NXT_UPSTREAM_SOURCE_H_INCLUDED_ */
|