summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_upstream_source.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/nxt_upstream_source.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/nxt_upstream_source.h b/src/nxt_upstream_source.h
new file mode 100644
index 00000000..706cb5c9
--- /dev/null
+++ b/src/nxt_upstream_source.h
@@ -0,0 +1,83 @@
+
+/*
+ * 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_mem_pool_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_ */