Lines Matching refs:ctx
778 * ctx->max_dtable_capacity.
780 static int qpack_context_can_reference(nghttp3_qpack_context *ctx,
782 nghttp3_qpack_entry *ent = nghttp3_qpack_context_dtable_get(ctx, absidx);
783 return ctx->dtable_sum - ent->sum <= ctx->max_dtable_capacity;
805 !qpack_context_can_reference(&encoder->ctx, p->absidx)) {
827 * qpack_context_init initializes |ctx|. |hard_max_dtable_capacity|
832 * ctx->max_dtable_capacity and it is initialized to 0.
834 * ctx->max_dtable_capacity.
842 static int qpack_context_init(nghttp3_qpack_context *ctx,
853 rv = nghttp3_ringbuf_init(&ctx->dtable, len2, sizeof(nghttp3_qpack_entry *),
859 ctx->mem = mem;
860 ctx->dtable_size = 0;
861 ctx->dtable_sum = 0;
862 ctx->hard_max_dtable_capacity = hard_max_dtable_capacity;
863 ctx->max_dtable_capacity = 0;
864 ctx->max_blocked_streams = max_blocked_streams;
865 ctx->next_absidx = 0;
866 ctx->bad = 0;
871 static void qpack_context_free(nghttp3_qpack_context *ctx) {
873 size_t i, len = nghttp3_ringbuf_len(&ctx->dtable);
876 ent = *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, i);
878 nghttp3_mem_free(ctx->mem, ent);
880 nghttp3_ringbuf_free(&ctx->dtable);
910 rv = qpack_context_init(&encoder->ctx, hard_max_dtable_capacity, 0, mem);
946 (void *)encoder->ctx.mem);
948 qpack_context_free(&encoder->ctx);
954 nghttp3_min(max_dtable_capacity, encoder->ctx.hard_max_dtable_capacity);
956 if (encoder->ctx.max_dtable_capacity == max_dtable_capacity) {
964 encoder->ctx.max_dtable_capacity = max_dtable_capacity;
971 encoder->ctx.max_blocked_streams = max_blocked_streams;
983 nghttp3_ringbuf *dtable = &encoder->ctx.dtable;
984 const nghttp3_mem *mem = encoder->ctx.mem;
989 if (encoder->ctx.dtable_size <= encoder->ctx.max_dtable_capacity) {
997 for (; encoder->ctx.dtable_size > encoder->ctx.max_dtable_capacity;) {
1004 encoder->ctx.dtable_size -=
1033 const nghttp3_mem *mem = encoder->ctx.mem;
1151 if (encoder->ctx.bad) {
1160 base = encoder->ctx.next_absidx;
1166 blocked_stream || encoder->ctx.max_blocked_streams >
1197 encoder->ctx.bad = 1;
1241 if (encoder->ctx.max_dtable_capacity < encoder->ctx.dtable_size ||
1262 encoder->ctx.max_dtable_capacity = encoder->last_max_dtable_update;
1270 return qpack_write_number(ebuf, 0x20, cap, 5, encoder->ctx.mem);
1326 encoder->ctx.max_dtable_capacity * 3 / 4) {
1344 nghttp3_ringbuf *dtable = &encoder->ctx.dtable;
1346 if (encoder->ctx.max_dtable_capacity > encoder->ctx.dtable_size) {
1347 avail = encoder->ctx.max_dtable_capacity - encoder->ctx.dtable_size;
1359 return encoder->ctx.max_dtable_capacity >= need;
1362 min_ent = nghttp3_qpack_context_dtable_get(&encoder->ctx, min_cnt - 1);
1364 len = nghttp3_ringbuf_len(&encoder->ctx.dtable);
1396 nghttp3_qpack_context_dtable_get(&encoder->ctx, absidx);
1406 static int qpack_context_check_draining(nghttp3_qpack_context *ctx,
1408 const size_t safe = ctx->max_dtable_capacity -
1409 nghttp3_min(512, ctx->max_dtable_capacity * 1 / 8);
1410 nghttp3_qpack_entry *ent = nghttp3_qpack_context_dtable_get(ctx, absidx);
1412 return ctx->dtable_sum - ent->sum > safe;
1471 qpack_context_check_draining(&encoder->ctx, (size_t)dres.index) &&
1485 new_ent = nghttp3_qpack_context_dtable_top(&encoder->ctx);
1508 new_ent = nghttp3_qpack_context_dtable_top(&encoder->ctx);
1544 new_ent = nghttp3_qpack_context_dtable_top(&encoder->ctx);
1570 new_ent = nghttp3_qpack_context_dtable_top(&encoder->ctx);
1769 return qpack_write_number(rbuf, 0xc0, absidx, 6, encoder->ctx.mem);
1782 encoder->ctx.mem);
1785 return qpack_write_number(rbuf, 0x10, absidx - base, 4, encoder->ctx.mem);
1818 rv = reserve_buf(buf, len, encoder->ctx.mem);
1917 rv = reserve_buf(buf, len, encoder->ctx.mem);
1984 encoder, ebuf, 0x80, encoder->ctx.next_absidx - absidx - 1, 6, nv);
1990 uint64_t idx = encoder->ctx.next_absidx - absidx - 1;
1997 rv = reserve_buf(ebuf, len, encoder->ctx.mem);
2021 int nghttp3_qpack_context_dtable_add(nghttp3_qpack_context *ctx,
2026 const nghttp3_mem *mem = ctx->mem;
2033 assert(space <= ctx->max_dtable_capacity);
2035 while (ctx->dtable_size + space > ctx->max_dtable_capacity) {
2036 i = nghttp3_ringbuf_len(&ctx->dtable);
2038 ent = *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, i - 1);
2040 ctx->dtable_size -= table_space(ent->nv.name->len, ent->nv.value->len);
2042 nghttp3_ringbuf_pop_back(&ctx->dtable);
2056 nghttp3_qpack_entry_init(new_ent, qnv, ctx->dtable_sum, ctx->next_absidx++,
2059 if (nghttp3_ringbuf_full(&ctx->dtable)) {
2060 rv = nghttp3_ringbuf_reserve(&ctx->dtable,
2061 nghttp3_ringbuf_len(&ctx->dtable) * 2);
2067 p = nghttp3_ringbuf_push_front(&ctx->dtable);
2074 ctx->dtable_size += space;
2075 ctx->dtable_sum += space;
2092 const nghttp3_mem *mem = encoder->ctx.mem;
2108 rv = nghttp3_qpack_context_dtable_add(&encoder->ctx, &qnv,
2122 const nghttp3_mem *mem = encoder->ctx.mem;
2130 ent = nghttp3_qpack_context_dtable_get(&encoder->ctx, absidx);
2138 rv = nghttp3_qpack_context_dtable_add(&encoder->ctx, &qnv,
2153 ent = nghttp3_qpack_context_dtable_get(&encoder->ctx, absidx);
2159 rv = nghttp3_qpack_context_dtable_add(&encoder->ctx, &qnv,
2172 const nghttp3_mem *mem = encoder->ctx.mem;
2189 rv = nghttp3_qpack_context_dtable_add(&encoder->ctx, &qnv,
2199 nghttp3_qpack_context_dtable_get(nghttp3_qpack_context *ctx, uint64_t absidx) {
2202 assert(ctx->next_absidx > absidx);
2203 assert(ctx->next_absidx - absidx - 1 < nghttp3_ringbuf_len(&ctx->dtable));
2205 relidx = (size_t)(ctx->next_absidx - absidx - 1);
2207 return *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, relidx);
2211 nghttp3_qpack_context_dtable_top(nghttp3_qpack_context *ctx) {
2212 assert(nghttp3_ringbuf_len(&ctx->dtable));
2213 return *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, 0);
2279 const nghttp3_mem *mem = encoder->ctx.mem;
2321 if (n == 0 || encoder->ctx.next_absidx - encoder->krcnt < n) {
2332 encoder->krcnt = encoder->ctx.next_absidx;
2337 (void *)encoder->ctx.mem);
2345 const nghttp3_mem *mem = encoder->ctx.mem;
2369 encoder->ctx.hard_max_dtable_capacity / NGHTTP3_QPACK_ENTRY_OVERHEAD;
2379 ricnt, base, encoder->ctx.next_absidx);
2381 rv = reserve_buf(pbuf, len, encoder->ctx.mem);
2494 if (encoder->ctx.bad) {
2573 encoder->ctx.bad = 1;
2643 rv = qpack_context_init(&decoder->ctx, hard_max_dtable_capacity,
2661 nghttp3_buf_free(&decoder->dbuf, decoder->ctx.mem);
2663 qpack_context_free(&decoder->ctx);
2729 return rstate->absidx < decoder->ctx.next_absidx &&
2730 decoder->ctx.next_absidx - rstate->absidx - 1 <
2731 nghttp3_ringbuf_len(&decoder->ctx.dtable)
2760 const nghttp3_mem *mem = decoder->ctx.mem;
2764 if (decoder->ctx.bad) {
3065 decoder->ctx.bad = 1;
3073 nghttp3_qpack_context *ctx = &decoder->ctx;
3074 const nghttp3_mem *mem = ctx->mem;
3076 if (max_dtable_capacity > decoder->ctx.hard_max_dtable_capacity) {
3080 ctx->max_dtable_capacity = max_dtable_capacity;
3082 while (ctx->dtable_size > max_dtable_capacity) {
3083 i = nghttp3_ringbuf_len(&ctx->dtable);
3085 ent = *(nghttp3_qpack_entry **)nghttp3_ringbuf_get(&ctx->dtable, i - 1);
3087 ctx->dtable_size -= table_space(ent->nv.name->len, ent->nv.value->len);
3089 nghttp3_ringbuf_pop_back(&ctx->dtable);
3118 decoder->ctx.max_dtable_capacity) {
3127 rv = nghttp3_qpack_context_dtable_add(&decoder->ctx, &qnv, NULL, 0);
3139 ent = nghttp3_qpack_context_dtable_get(&decoder->ctx, decoder->rstate.absidx);
3142 decoder->ctx.max_dtable_capacity) {
3153 rv = nghttp3_qpack_context_dtable_add(&decoder->ctx, &qnv, NULL, 0);
3169 ent = nghttp3_qpack_context_dtable_get(&decoder->ctx, decoder->rstate.absidx);
3172 decoder->ctx.max_dtable_capacity) {
3180 rv = nghttp3_qpack_context_dtable_add(&decoder->ctx, &qnv, NULL, 0);
3197 decoder->ctx.max_dtable_capacity) {
3206 rv = nghttp3_qpack_context_dtable_add(&decoder->ctx, &qnv, NULL, 0);
3258 const nghttp3_mem *mem = decoder->ctx.mem;
3260 if (decoder->ctx.bad) {
3326 sctx->ricnt, sctx->base, decoder->ctx.next_absidx);
3328 if (sctx->ricnt > decoder->ctx.next_absidx) {
3641 if (sctx->ricnt > decoder->ctx.next_absidx) {
3672 decoder->ctx.bad = 1;
3694 decoder->ctx.mem);
3715 if (decoder->written_icnt < decoder->ctx.next_absidx) {
3716 n = decoder->ctx.next_absidx - decoder->written_icnt;
3730 if (decoder->written_icnt < decoder->ctx.next_absidx) {
3731 n = decoder->ctx.next_absidx - decoder->written_icnt;
3747 decoder->written_icnt = decoder->ctx.next_absidx;
3764 decoder->ctx.mem);
3786 decoder->ctx.hard_max_dtable_capacity / NGHTTP3_QPACK_ENTRY_OVERHEAD;
3793 max = decoder->ctx.next_absidx + max_ents;
3816 rstate->dynamic, rstate->left, decoder->ctx.next_absidx);
3819 if (decoder->ctx.next_absidx < rstate->left + 1) {
3822 rstate->absidx = decoder->ctx.next_absidx - rstate->left - 1;
3838 rstate->dynamic, rstate->left, sctx->base, decoder->ctx.next_absidx);
3864 rstate->left, sctx->base, decoder->ctx.next_absidx);
3898 nghttp3_qpack_context_dtable_get(&decoder->ctx, sctx->rstate.absidx);
3947 ent = nghttp3_qpack_context_dtable_get(&decoder->ctx, sctx->rstate.absidx);
4027 mem = encoder->ctx.mem;
4093 mem = decoder->ctx.mem;
4100 return decoder->ctx.next_absidx;