Lines Matching defs:inflater

725 int nghttp2_hd_inflate_init(nghttp2_hd_inflater *inflater, nghttp2_mem *mem) {
728 rv = hd_context_init(&inflater->ctx, mem);
733 inflater->settings_hd_table_bufsize_max = NGHTTP2_HD_DEFAULT_MAX_BUFFER_SIZE;
734 inflater->min_hd_table_bufsize_max = UINT32_MAX;
736 inflater->nv_name_keep = NULL;
737 inflater->nv_value_keep = NULL;
739 inflater->opcode = NGHTTP2_HD_OPCODE_NONE;
740 inflater->state = NGHTTP2_HD_STATE_INFLATE_START;
742 nghttp2_buf_init(&inflater->namebuf);
743 nghttp2_buf_init(&inflater->valuebuf);
745 inflater->namercbuf = NULL;
746 inflater->valuercbuf = NULL;
748 inflater->huffman_encoded = 0;
749 inflater->index = 0;
750 inflater->left = 0;
751 inflater->shift = 0;
752 inflater->index_required = 0;
753 inflater->no_index = 0;
761 static void hd_inflate_keep_free(nghttp2_hd_inflater *inflater) {
762 nghttp2_rcbuf_decref(inflater->nv_value_keep);
763 nghttp2_rcbuf_decref(inflater->nv_name_keep);
765 inflater->nv_value_keep = NULL;
766 inflater->nv_name_keep = NULL;
773 void nghttp2_hd_inflate_free(nghttp2_hd_inflater *inflater) {
774 hd_inflate_keep_free(inflater);
776 nghttp2_rcbuf_decref(inflater->valuercbuf);
777 nghttp2_rcbuf_decref(inflater->namercbuf);
779 hd_context_free(&inflater->ctx);
1262 nghttp2_hd_inflater *inflater, size_t settings_max_dynamic_table_size) {
1263 switch (inflater->state) {
1271 inflater->settings_hd_table_bufsize_max = settings_max_dynamic_table_size;
1280 if (inflater->ctx.hd_table_bufsize_max > settings_max_dynamic_table_size) {
1281 inflater->state = NGHTTP2_HD_STATE_EXPECT_TABLE_SIZE;
1284 inflater->min_hd_table_bufsize_max = settings_max_dynamic_table_size;
1286 inflater->ctx.hd_table_bufsize_max = settings_max_dynamic_table_size;
1288 hd_context_shrink_table_size(&inflater->ctx, NULL);
1628 static void hd_inflate_set_huffman_encoded(nghttp2_hd_inflater *inflater,
1630 inflater->huffman_encoded = (*in & (1 << 7)) != 0;
1635 * assigned to |inflater->left|. If the |inflater->left| is 0, then
1637 * uses the |inflater->left| as the initial value and continues to
1646 static ssize_t hd_inflate_read_len(nghttp2_hd_inflater *inflater, int *rfin,
1654 rv = decode_length(&out, &inflater->shift, rfin, (uint32_t)inflater->left,
1655 inflater->shift, in, last, prefix);
1667 inflater->left = out;
1675 * Reads |inflater->left| bytes from the range [in, last) and performs
1687 static ssize_t hd_inflate_read_huff(nghttp2_hd_inflater *inflater,
1692 if ((size_t)(last - in) >= inflater->left) {
1693 last = in + inflater->left;
1696 readlen = nghttp2_hd_huff_decode(&inflater->huff_decode_ctx, buf, in,
1703 if (nghttp2_hd_huff_decode_failure_state(&inflater->huff_decode_ctx)) {
1708 inflater->left -= (size_t)readlen;
1713 * Reads |inflater->left| bytes from the range [in, last) and copies
1724 static ssize_t hd_inflate_read(nghttp2_hd_inflater *inflater, nghttp2_buf *buf,
1726 size_t len = nghttp2_min((size_t)(last - in), inflater->left);
1730 inflater->left -= len;
1738 static void hd_inflate_commit_indexed(nghttp2_hd_inflater *inflater,
1740 nghttp2_hd_nv nv = nghttp2_hd_table_get(&inflater->ctx, inflater->index);
1756 static int hd_inflate_commit_newname(nghttp2_hd_inflater *inflater,
1761 if (inflater->no_index) {
1767 nv.name = inflater->namercbuf;
1768 nv.value = inflater->valuercbuf;
1769 nv.token = lookup_token(inflater->namercbuf->base, inflater->namercbuf->len);
1771 if (inflater->index_required) {
1772 rv = add_hd_table_incremental(&inflater->ctx, &nv, NULL, 0);
1781 inflater->nv_name_keep = nv.name;
1782 inflater->nv_value_keep = nv.value;
1784 inflater->namercbuf = NULL;
1785 inflater->valuercbuf = NULL;
1801 static int hd_inflate_commit_indname(nghttp2_hd_inflater *inflater,
1806 nv = nghttp2_hd_table_get(&inflater->ctx, inflater->index);
1808 if (inflater->no_index) {
1816 nv.value = inflater->valuercbuf;
1818 if (inflater->index_required) {
1819 rv = add_hd_table_incremental(&inflater->ctx, &nv, NULL, 0);
1828 inflater->nv_name_keep = nv.name;
1829 inflater->nv_value_keep = nv.value;
1831 inflater->valuercbuf = NULL;
1836 ssize_t nghttp2_hd_inflate_hd(nghttp2_hd_inflater *inflater, nghttp2_nv *nv_out,
1839 return nghttp2_hd_inflate_hd2(inflater, nv_out, inflate_flags, in, inlen,
1843 ssize_t nghttp2_hd_inflate_hd2(nghttp2_hd_inflater *inflater,
1849 rv = nghttp2_hd_inflate_hd_nv(inflater, &hd_nv, inflate_flags, in, inlen,
1869 ssize_t nghttp2_hd_inflate_hd_nv(nghttp2_hd_inflater *inflater,
1880 mem = inflater->ctx.mem;
1882 if (inflater->ctx.bad) {
1886 DEBUGF("inflatehd: start state=%d\n", inflater->state);
1887 hd_inflate_keep_free(inflater);
1891 switch (inflater->state) {
1905 if (inflater->state == NGHTTP2_HD_STATE_OPCODE) {
1911 inflater->opcode = NGHTTP2_HD_OPCODE_INDEXED;
1912 inflater->state = NGHTTP2_HD_STATE_READ_TABLE_SIZE;
1915 inflater->opcode = NGHTTP2_HD_OPCODE_INDEXED;
1916 inflater->state = NGHTTP2_HD_STATE_READ_INDEX;
1920 inflater->opcode = NGHTTP2_HD_OPCODE_NEWNAME;
1921 inflater->state = NGHTTP2_HD_STATE_NEWNAME_CHECK_NAMELEN;
1924 inflater->opcode = NGHTTP2_HD_OPCODE_INDNAME;
1925 inflater->state = NGHTTP2_HD_STATE_READ_INDEX;
1927 inflater->index_required = (*in & 0x40) != 0;
1928 inflater->no_index = (*in & 0xf0u) == 0x10u;
1930 inflater->index_required, inflater->no_index);
1931 if (inflater->opcode == NGHTTP2_HD_OPCODE_NEWNAME) {
1935 inflater->left = 0;
1936 inflater->shift = 0;
1941 inflater, &rfin, in, last, 5,
1942 nghttp2_min(inflater->min_hd_table_bufsize_max,
1943 inflater->settings_hd_table_bufsize_max));
1951 DEBUGF("inflatehd: table_size=%zu\n", inflater->left);
1952 inflater->min_hd_table_bufsize_max = UINT32_MAX;
1953 inflater->ctx.hd_table_bufsize_max = inflater->left;
1954 hd_context_shrink_table_size(&inflater->ctx, NULL);
1955 inflater->state = NGHTTP2_HD_STATE_INFLATE_START;
1960 if (inflater->opcode == NGHTTP2_HD_OPCODE_INDEXED) {
1962 } else if (inflater->index_required) {
1969 rv = hd_inflate_read_len(inflater, &rfin, in, last, prefixlen,
1970 get_max_index(&inflater->ctx));
1981 if (inflater->left == 0) {
1986 DEBUGF("inflatehd: index=%zu\n", inflater->left);
1987 if (inflater->opcode == NGHTTP2_HD_OPCODE_INDEXED) {
1988 inflater->index = inflater->left;
1989 --inflater->index;
1991 hd_inflate_commit_indexed(inflater, nv_out);
1993 inflater->state = NGHTTP2_HD_STATE_OPCODE;
1997 inflater->index = inflater->left;
1998 --inflater->index;
2000 inflater->state = NGHTTP2_HD_STATE_CHECK_VALUELEN;
2005 hd_inflate_set_huffman_encoded(inflater, in);
2006 inflater->state = NGHTTP2_HD_STATE_NEWNAME_READ_NAMELEN;
2007 inflater->left = 0;
2008 inflater->shift = 0;
2009 DEBUGF("inflatehd: huffman encoded=%d\n", inflater->huffman_encoded != 0);
2013 rv = hd_inflate_read_len(inflater, &rfin, in, last, 7, NGHTTP2_HD_MAX_NV);
2020 inflater->left);
2025 if (inflater->huffman_encoded) {
2026 nghttp2_hd_huff_decode_context_init(&inflater->huff_decode_ctx);
2028 inflater->state = NGHTTP2_HD_STATE_NEWNAME_READ_NAMEHUFF;
2030 rv = nghttp2_rcbuf_new(&inflater->namercbuf, inflater->left * 2 + 1,
2033 inflater->state = NGHTTP2_HD_STATE_NEWNAME_READ_NAME;
2034 rv = nghttp2_rcbuf_new(&inflater->namercbuf, inflater->left + 1, mem);
2041 nghttp2_buf_wrap_init(&inflater->namebuf, inflater->namercbuf->base,
2042 inflater->namercbuf->len);
2046 rv = hd_inflate_read_huff(inflater, &inflater->namebuf, in, last);
2055 if (inflater->left) {
2056 DEBUGF("inflatehd: still %zu bytes to go\n", inflater->left);
2061 *inflater->namebuf.last = '\0';
2062 inflater->namercbuf->len = nghttp2_buf_len(&inflater->namebuf);
2064 inflater->state = NGHTTP2_HD_STATE_CHECK_VALUELEN;
2068 rv = hd_inflate_read(inflater, &inflater->namebuf, in, last);
2076 if (inflater->left) {
2077 DEBUGF("inflatehd: still %zu bytes to go\n", inflater->left);
2082 *inflater->namebuf.last = '\0';
2083 inflater->namercbuf->len = nghttp2_buf_len(&inflater->namebuf);
2085 inflater->state = NGHTTP2_HD_STATE_CHECK_VALUELEN;
2089 hd_inflate_set_huffman_encoded(inflater, in);
2090 inflater->state = NGHTTP2_HD_STATE_READ_VALUELEN;
2091 inflater->left = 0;
2092 inflater->shift = 0;
2093 DEBUGF("inflatehd: huffman encoded=%d\n", inflater->huffman_encoded != 0);
2097 rv = hd_inflate_read_len(inflater, &rfin, in, last, 7, NGHTTP2_HD_MAX_NV);
2108 DEBUGF("inflatehd: valuelen=%zu\n", inflater->left);
2110 if (inflater->huffman_encoded) {
2111 nghttp2_hd_huff_decode_context_init(&inflater->huff_decode_ctx);
2113 inflater->state = NGHTTP2_HD_STATE_READ_VALUEHUFF;
2115 rv = nghttp2_rcbuf_new(&inflater->valuercbuf, inflater->left * 2 + 1,
2118 inflater->state = NGHTTP2_HD_STATE_READ_VALUE;
2120 rv = nghttp2_rcbuf_new(&inflater->valuercbuf, inflater->left + 1, mem);
2127 nghttp2_buf_wrap_init(&inflater->valuebuf, inflater->valuercbuf->base,
2128 inflater->valuercbuf->len);
2134 rv = hd_inflate_read_huff(inflater, &inflater->valuebuf, in, last);
2143 if (inflater->left) {
2144 DEBUGF("inflatehd: still %zu bytes to go\n", inflater->left);
2149 *inflater->valuebuf.last = '\0';
2150 inflater->valuercbuf->len = nghttp2_buf_len(&inflater->valuebuf);
2152 if (inflater->opcode == NGHTTP2_HD_OPCODE_NEWNAME) {
2153 rv = hd_inflate_commit_newname(inflater, nv_out);
2155 rv = hd_inflate_commit_indname(inflater, nv_out);
2162 inflater->state = NGHTTP2_HD_STATE_OPCODE;
2167 rv = hd_inflate_read(inflater, &inflater->valuebuf, in, last);
2178 if (inflater->left) {
2179 DEBUGF("inflatehd: still %zu bytes to go\n", inflater->left);
2183 *inflater->valuebuf.last = '\0';
2184 inflater->valuercbuf->len = nghttp2_buf_len(&inflater->valuebuf);
2186 if (inflater->opcode == NGHTTP2_HD_OPCODE_NEWNAME) {
2187 rv = hd_inflate_commit_newname(inflater, nv_out);
2189 rv = hd_inflate_commit_indname(inflater, nv_out);
2196 inflater->state = NGHTTP2_HD_STATE_OPCODE;
2210 if (inflater->state != NGHTTP2_HD_STATE_OPCODE &&
2211 inflater->state != NGHTTP2_HD_STATE_INFLATE_START) {
2212 DEBUGF("inflatehd: unacceptable state=%d\n", inflater->state);
2234 inflater->ctx.bad = 1;
2238 int nghttp2_hd_inflate_end_headers(nghttp2_hd_inflater *inflater) {
2239 hd_inflate_keep_free(inflater);
2240 inflater->state = NGHTTP2_HD_STATE_INFLATE_START;
2251 nghttp2_hd_inflater *inflater;
2257 inflater = nghttp2_mem_malloc(mem, sizeof(nghttp2_hd_inflater));
2259 if (inflater == NULL) {
2263 rv = nghttp2_hd_inflate_init(inflater, mem);
2266 nghttp2_mem_free(mem, inflater);
2271 *inflater_ptr = inflater;
2276 void nghttp2_hd_inflate_del(nghttp2_hd_inflater *inflater) {
2279 mem = inflater->ctx.mem;
2280 nghttp2_hd_inflate_free(inflater);
2282 nghttp2_mem_free(mem, inflater);
2340 size_t nghttp2_hd_inflate_get_num_table_entries(nghttp2_hd_inflater *inflater) {
2341 return get_max_index(&inflater->ctx);
2345 nghttp2_hd_inflate_get_table_entry(nghttp2_hd_inflater *inflater, size_t idx) {
2346 return hd_get_table_entry(&inflater->ctx, idx);
2350 nghttp2_hd_inflate_get_dynamic_table_size(nghttp2_hd_inflater *inflater) {
2351 return inflater->ctx.hd_table_bufsize;
2355 nghttp2_hd_inflate_get_max_dynamic_table_size(nghttp2_hd_inflater *inflater) {
2356 return inflater->ctx.hd_table_bufsize_max;