From 16cbf3c076a0aca6d47adaf3f719493674cf2363 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Tue, 17 Jan 2017 20:00:00 +0300 Subject: Initial version. --- src/nxt_upstream_source.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/nxt_upstream_source.c (limited to 'src/nxt_upstream_source.c') diff --git a/src/nxt_upstream_source.c b/src/nxt_upstream_source.c new file mode 100644 index 00000000..7b595806 --- /dev/null +++ b/src/nxt_upstream_source.c @@ -0,0 +1,71 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#include + + +static nxt_int_t nxt_upstream_header_hash_test(nxt_lvlhsh_query_t *lhq, + void *data); + + +const nxt_lvlhsh_proto_t nxt_upstream_header_hash_proto nxt_aligned(64) = { + NXT_LVLHSH_DEFAULT, + 0, + nxt_upstream_header_hash_test, + nxt_mem_lvlhsh_alloc, + nxt_mem_lvlhsh_free, +}; + + +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_lvlhsh_query_t lhq; + + while (n != 0) { + lhq.key_hash = nxt_djb_hash(unv->name, unv->len); + lhq.replace = 1; + lhq.key.len = unv->len; + lhq.key.data = (u_char *) unv->name; + lhq.value = (void *) unv; + lhq.proto = &nxt_upstream_header_hash_proto; + lhq.pool = mp; + + if (nxt_lvlhsh_insert(lh, &lhq) != NXT_OK) { + return NXT_ERROR; + } + + unv++; + n--; + } + + return NXT_OK; +} + + +static nxt_int_t +nxt_upstream_header_hash_test(nxt_lvlhsh_query_t *lhq, void *data) +{ + nxt_upstream_name_value_t *unv; + + unv = data; + + if (lhq->key.len == unv->len + && nxt_memcasecmp(lhq->key.data, unv->name, unv->len) == 0) + { + return NXT_OK; + } + + return NXT_DECLINED; +} + + +nxt_int_t +nxt_upstream_name_value_ignore(nxt_upstream_source_t *us, nxt_name_value_t *nv) +{ + return NXT_OK; +} -- cgit