Commit a3537522 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

net/http: update bundled http2

Updates x/net/http2 to git rev 31df19d6 for changes since Go 1.6.

The main change was https://go-review.googlesource.com/19726 (move
merging of HEADERS and CONTINUATION into Framer), but there were a few
garbage reduction changes too.

Change-Id: I882443d20749f8638f637a2835efe92538c95d31
Reviewed-on: https://go-review.googlesource.com/21365
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
parent 36feb1a0
This diff is collapsed.
...@@ -144,7 +144,7 @@ func (e *Encoder) SetMaxDynamicTableSizeLimit(v uint32) { ...@@ -144,7 +144,7 @@ func (e *Encoder) SetMaxDynamicTableSizeLimit(v uint32) {
// shouldIndex reports whether f should be indexed. // shouldIndex reports whether f should be indexed.
func (e *Encoder) shouldIndex(f HeaderField) bool { func (e *Encoder) shouldIndex(f HeaderField) bool {
return !f.Sensitive && f.size() <= e.dynTab.maxSize return !f.Sensitive && f.Size() <= e.dynTab.maxSize
} }
// appendIndexed appends index i, as encoded in "Indexed Header Field" // appendIndexed appends index i, as encoded in "Indexed Header Field"
......
...@@ -41,6 +41,14 @@ type HeaderField struct { ...@@ -41,6 +41,14 @@ type HeaderField struct {
Sensitive bool Sensitive bool
} }
// IsPseudo reports whether the header field is an http2 pseudo header.
// That is, it reports whether it starts with a colon.
// It is not otherwise guaranteed to be a valid psuedo header field,
// though.
func (hf HeaderField) IsPseudo() bool {
return len(hf.Name) != 0 && hf.Name[0] == ':'
}
func (hf HeaderField) String() string { func (hf HeaderField) String() string {
var suffix string var suffix string
if hf.Sensitive { if hf.Sensitive {
...@@ -49,7 +57,8 @@ func (hf HeaderField) String() string { ...@@ -49,7 +57,8 @@ func (hf HeaderField) String() string {
return fmt.Sprintf("header field %q = %q%s", hf.Name, hf.Value, suffix) return fmt.Sprintf("header field %q = %q%s", hf.Name, hf.Value, suffix)
} }
func (hf *HeaderField) size() uint32 { // Size returns the size of an entry per RFC 7540 section 5.2.
func (hf HeaderField) Size() uint32 {
// http://http2.github.io/http2-spec/compression.html#rfc.section.4.1 // http://http2.github.io/http2-spec/compression.html#rfc.section.4.1
// "The size of the dynamic table is the sum of the size of // "The size of the dynamic table is the sum of the size of
// its entries. The size of an entry is the sum of its name's // its entries. The size of an entry is the sum of its name's
...@@ -171,7 +180,7 @@ func (dt *dynamicTable) setMaxSize(v uint32) { ...@@ -171,7 +180,7 @@ func (dt *dynamicTable) setMaxSize(v uint32) {
func (dt *dynamicTable) add(f HeaderField) { func (dt *dynamicTable) add(f HeaderField) {
dt.ents = append(dt.ents, f) dt.ents = append(dt.ents, f)
dt.size += f.size() dt.size += f.Size()
dt.evict() dt.evict()
} }
...@@ -179,7 +188,7 @@ func (dt *dynamicTable) add(f HeaderField) { ...@@ -179,7 +188,7 @@ func (dt *dynamicTable) add(f HeaderField) {
func (dt *dynamicTable) evict() { func (dt *dynamicTable) evict() {
base := dt.ents // keep base pointer of slice base := dt.ents // keep base pointer of slice
for dt.size > dt.maxSize { for dt.size > dt.maxSize {
dt.size -= dt.ents[0].size() dt.size -= dt.ents[0].Size()
dt.ents = dt.ents[1:] dt.ents = dt.ents[1:]
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment