From 6747d36773bc9ec2fd74a575260ad714d226e698 Mon Sep 17 00:00:00 2001 From: "Seth M. Larson" Date: Wed, 5 Jul 2017 12:56:16 -0500 Subject: [PATCH 1/2] Only calculate size of a dynamic table entry once --- hpack/table.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hpack/table.py b/hpack/table.py index 9a89c72..b52ab2e 100644 --- a/hpack/table.py +++ b/hpack/table.py @@ -156,7 +156,7 @@ def add(self, name, value): self._current_size = 0 else: # Add new entry - self.dynamic_entries.appendleft((name, value)) + self.dynamic_entries.appendleft((name, value, size)) self._current_size += size self._shrink() @@ -178,7 +178,7 @@ def search(self, name, value): return i + 1, n, v elif partial is None: partial = (i + 1, n, None) - for (i, (n, v)) in enumerate(self.dynamic_entries): + for (i, (n, v, _)) in enumerate(self.dynamic_entries): if n == name: if v == value: return i + offset, n, v @@ -209,7 +209,7 @@ def _shrink(self): """ cursize = self._current_size while cursize > self._maxsize: - name, value = self.dynamic_entries.pop() - cursize -= table_entry_size(name, value) + name, value, size = self.dynamic_entries.pop() + cursize -= size log.debug("Evicting %s: %s from the header table", name, value) self._current_size = cursize From 1f2fec963eacc7e1d77c48149e79273200f7e843 Mon Sep 17 00:00:00 2001 From: "Seth M. Larson" Date: Wed, 5 Jul 2017 16:36:28 -0500 Subject: [PATCH 2/2] Don't return size from get_by_index() --- hpack/table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hpack/table.py b/hpack/table.py index 28b6fea..705728e 100644 --- a/hpack/table.py +++ b/hpack/table.py @@ -131,7 +131,7 @@ def get_by_index(self, index): index -= HeaderTable.STATIC_TABLE_LENGTH if index < len(self.dynamic_entries): - return self.dynamic_entries[index] + return self.dynamic_entries[index][:2] raise InvalidTableIndex("Invalid table index %d" % original_index)