xref: /unit/src/nxt_upstream_source.c (revision 65:10688b89aa16)
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 #include <nxt_main.h>
80Sigor@sysoev.ru 
90Sigor@sysoev.ru 
100Sigor@sysoev.ru static nxt_int_t nxt_upstream_header_hash_test(nxt_lvlhsh_query_t *lhq,
110Sigor@sysoev.ru     void *data);
120Sigor@sysoev.ru 
130Sigor@sysoev.ru 
140Sigor@sysoev.ru const nxt_lvlhsh_proto_t  nxt_upstream_header_hash_proto  nxt_aligned(64) = {
150Sigor@sysoev.ru     NXT_LVLHSH_DEFAULT,
160Sigor@sysoev.ru     0,
170Sigor@sysoev.ru     nxt_upstream_header_hash_test,
180Sigor@sysoev.ru     nxt_mem_lvlhsh_alloc,
190Sigor@sysoev.ru     nxt_mem_lvlhsh_free,
200Sigor@sysoev.ru };
210Sigor@sysoev.ru 
220Sigor@sysoev.ru 
230Sigor@sysoev.ru 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)24*65Sigor@sysoev.ru nxt_upstream_header_hash_add(nxt_mp_t *mp, nxt_lvlhsh_t *lh,
250Sigor@sysoev.ru     const nxt_upstream_name_value_t *unv, nxt_uint_t n)
260Sigor@sysoev.ru {
270Sigor@sysoev.ru     nxt_lvlhsh_query_t  lhq;
280Sigor@sysoev.ru 
290Sigor@sysoev.ru     while (n != 0) {
300Sigor@sysoev.ru         lhq.key_hash = nxt_djb_hash(unv->name, unv->len);
310Sigor@sysoev.ru         lhq.replace = 1;
320Sigor@sysoev.ru         lhq.key.len = unv->len;
330Sigor@sysoev.ru         lhq.key.data = (u_char *) unv->name;
340Sigor@sysoev.ru         lhq.value = (void *) unv;
350Sigor@sysoev.ru         lhq.proto = &nxt_upstream_header_hash_proto;
360Sigor@sysoev.ru         lhq.pool = mp;
370Sigor@sysoev.ru 
380Sigor@sysoev.ru         if (nxt_lvlhsh_insert(lh, &lhq) != NXT_OK) {
390Sigor@sysoev.ru             return NXT_ERROR;
400Sigor@sysoev.ru         }
410Sigor@sysoev.ru 
420Sigor@sysoev.ru         unv++;
430Sigor@sysoev.ru         n--;
440Sigor@sysoev.ru     }
450Sigor@sysoev.ru 
460Sigor@sysoev.ru     return NXT_OK;
470Sigor@sysoev.ru }
480Sigor@sysoev.ru 
490Sigor@sysoev.ru 
500Sigor@sysoev.ru static nxt_int_t
nxt_upstream_header_hash_test(nxt_lvlhsh_query_t * lhq,void * data)510Sigor@sysoev.ru nxt_upstream_header_hash_test(nxt_lvlhsh_query_t *lhq, void *data)
520Sigor@sysoev.ru {
530Sigor@sysoev.ru     nxt_upstream_name_value_t  *unv;
540Sigor@sysoev.ru 
550Sigor@sysoev.ru     unv = data;
560Sigor@sysoev.ru 
570Sigor@sysoev.ru     if (lhq->key.len == unv->len
580Sigor@sysoev.ru         && nxt_memcasecmp(lhq->key.data, unv->name, unv->len) == 0)
590Sigor@sysoev.ru     {
600Sigor@sysoev.ru         return NXT_OK;
610Sigor@sysoev.ru     }
620Sigor@sysoev.ru 
630Sigor@sysoev.ru     return NXT_DECLINED;
640Sigor@sysoev.ru }
650Sigor@sysoev.ru 
660Sigor@sysoev.ru 
670Sigor@sysoev.ru nxt_int_t
nxt_upstream_name_value_ignore(nxt_upstream_source_t * us,nxt_name_value_t * nv)680Sigor@sysoev.ru nxt_upstream_name_value_ignore(nxt_upstream_source_t *us, nxt_name_value_t *nv)
690Sigor@sysoev.ru {
700Sigor@sysoev.ru     return NXT_OK;
710Sigor@sysoev.ru }
72