Lines Matching defs:dyn
362 struct hpack_dynamic_table *dyn;
372 dyn = &wsi->h2.h2n->hpack_dyn_table;
388 if (!dyn) {
393 if (index >= (int)LWS_ARRAY_SIZE(static_token) + dyn->used_entries) {
395 (int)LWS_ARRAY_SIZE(static_token) + dyn->used_entries);
402 index = lws_safe_modulo(dyn->pos - 1 - index, dyn->num_entries);
404 index += dyn->num_entries;
406 lwsl_header("%s: dyn index %d, tok %d\n", __func__, index,
407 dyn->entries[index].lws_hdr_idx);
410 *arg = dyn->entries[index].value;
411 *len = dyn->entries[index].value_len;
415 *hdr_len = dyn->entries[index].hdr_len;
417 return dyn->entries[index].lws_hdr_idx;
425 struct hpack_dynamic_table *dyn;
431 dyn = &nwsi->h2.h2n->hpack_dyn_table;
433 lwsl_header("Dump dyn table for nwsi %s (%d / %d members, pos = %d, "
435 dyn->used_entries, dyn->num_entries, dyn->pos,
437 dyn->virtual_payload_usage, dyn->virtual_payload_max);
439 for (n = 0; n < dyn->used_entries; n++) {
440 m = lws_safe_modulo(dyn->pos - 1 - n, dyn->num_entries);
442 m += dyn->num_entries;
443 if (dyn->entries[m].lws_hdr_idx != LWS_HPACK_IGNORE_ENTRY)
445 dyn->entries[m].lws_hdr_idx);
450 dyn->entries[m].hdr_len, dyn->entries[m].value ?
451 dyn->entries[m].value : "null");
458 lws_dynamic_free(struct hpack_dynamic_table *dyn, int idx)
461 dyn->virtual_payload_usage = (uint32_t)((unsigned int)dyn->virtual_payload_usage - (unsigned int)(dyn->entries[idx].value_len +
462 dyn->entries[idx].hdr_len));
463 lws_free_set_NULL(dyn->entries[idx].value);
464 dyn->entries[idx].value = NULL;
465 dyn->entries[idx].value_len = 0;
466 dyn->entries[idx].hdr_len = 0;
467 dyn->entries[idx].lws_hdr_idx = LWS_HPACK_IGNORE_ENTRY;
468 dyn->used_entries--;
476 * The internal ringbuffer wraps as we keep filling it, dyn->pos points to
489 struct hpack_dynamic_table *dyn;
496 dyn = &wsi->h2.h2n->hpack_dyn_table;
498 if (!dyn->entries) {
499 lwsl_err("%s: unsized dyn table\n", __func__);
505 new_index = lws_safe_modulo(dyn->pos, dyn->num_entries);
506 if (dyn->num_entries && dyn->used_entries == dyn->num_entries) {
507 if (dyn->virtual_payload_usage < dyn->virtual_payload_max)
510 lws_dynamic_free(dyn, new_index);
519 while (dyn->virtual_payload_usage &&
520 dyn->used_entries &&
521 dyn->virtual_payload_usage + (unsigned int)hdr_len + len >
522 dyn->virtual_payload_max + 1024) {
523 int n = lws_safe_modulo(dyn->pos - dyn->used_entries,
524 dyn->num_entries);
526 n += dyn->num_entries;
527 lws_dynamic_free(dyn, n);
530 if (dyn->used_entries < dyn->num_entries)
531 dyn->used_entries++;
533 dyn->entries[new_index].value_len = 0;
536 if (dyn->entries[new_index].value)
537 lws_free_set_NULL(dyn->entries[new_index].value);
538 dyn->entries[new_index].value =
539 lws_malloc(len + 1, "hpack dyn");
540 if (!dyn->entries[new_index].value)
543 memcpy(dyn->entries[new_index].value, arg, len);
544 dyn->entries[new_index].value[len] = '\0';
545 dyn->entries[new_index].value_len = (uint16_t)len;
547 dyn->entries[new_index].value = NULL;
549 dyn->entries[new_index].lws_hdr_idx = (uint16_t)lws_hdr_index;
550 dyn->entries[new_index].hdr_len = (uint16_t)hdr_len;
552 dyn->virtual_payload_usage = (uint32_t)(dyn->virtual_payload_usage +
557 lws_hdr_index, hdr_len, dyn->entries[new_index].value ?
558 dyn->entries[new_index].value : "null", (int)len);
560 dyn->pos = (uint16_t)lws_safe_modulo(dyn->pos + 1, dyn->num_entries);
570 struct hpack_dynamic_table *dyn;
583 * entry in the dyn table as a placeholder.
595 dyn = &nwsi->h2.h2n->hpack_dyn_table;
597 (int)dyn->num_entries, size,
601 size = dyn->num_entries * 8;
606 lwsl_info("rejecting hpack dyn size %u vs %u\n", size,
621 dyn->virtual_payload_max = (uint32_t)size;
625 if (min > dyn->used_entries)
626 min = dyn->used_entries;
628 if (size == dyn->num_entries)
631 if (dyn->num_entries < min)
632 min = dyn->num_entries;
640 while (dyn->virtual_payload_usage && dyn->used_entries &&
641 dyn->virtual_payload_usage > dyn->virtual_payload_max) {
642 n = lws_safe_modulo(dyn->pos - dyn->used_entries, dyn->num_entries);
644 n += dyn->num_entries;
645 lws_dynamic_free(dyn, n);
648 if (min > dyn->used_entries)
649 min = dyn->used_entries;
651 if (dyn->entries) {
653 m = (dyn->pos - dyn->used_entries + n) %
654 dyn->num_entries;
656 m += dyn->num_entries;
657 dte[n] = dyn->entries[m];
660 lws_free(dyn->entries);
663 dyn->entries = dte;
664 dyn->num_entries = (uint16_t)size;
665 dyn->used_entries = (uint16_t)min;
667 dyn->pos = (uint16_t)lws_safe_modulo(min, size);
669 dyn->pos = 0;
684 struct hpack_dynamic_table *dyn;
690 dyn = &wsi->h2.h2n->hpack_dyn_table;
692 if (!dyn->entries)
695 for (n = 0; n < dyn->num_entries; n++)
696 if (dyn->entries[n].value)
697 lws_free_set_NULL(dyn->entries[n].value);
699 lws_free_set_NULL(dyn->entries);
724 lwsl_header("%s: dyn: idx %d '%s' tok %d\n", __func__, idx, arg,