MCPcopy Create free account
hub / github.com/WICG/webpackage / decodeCborHeaders

Function decodeCborHeaders

go/bundle/decoder.go:91–142  ·  view source on GitHub ↗

https://wicg.github.io/webpackage/draft-yasskin-dispatch-bundled-exchanges.html#cbor-headers

(dec *cbor.Decoder)

Source from the content-addressed store, hash-verified

89
90// https://wicg.github.io/webpackage/draft-yasskin-dispatch-bundled-exchanges.html#cbor-headers
91func decodeCborHeaders(dec *cbor.Decoder) (http.Header, map[string]string, error) {
92 n, err := dec.DecodeMapHeader()
93 if err != nil {
94 return nil, nil, fmt.Errorf("Failed to decode request headers map header: %v", err)
95 }
96
97 headers := make(http.Header)
98
99 pseudos := make(map[string]string)
100
101 for j := uint64(0); j < n; j++ {
102 namebs, err := dec.DecodeByteString()
103 if err != nil {
104 return nil, nil, fmt.Errorf("Failed to decode request headers map key: %v", err)
105 }
106 valuebs, err := dec.DecodeByteString()
107 if err != nil {
108 return nil, nil, fmt.Errorf("Failed to decode request headers map value: %v", err)
109 }
110
111 name := string(namebs)
112 value := string(valuebs)
113 if !isAscii(name) {
114 return nil, nil, fmt.Errorf("Failed to decode request headers map key: non-ascii %q", name)
115 }
116 if !isAscii(value) {
117 return nil, nil, fmt.Errorf("Failed to decode request headers map value: non-ascii %q", value)
118 }
119
120 if strings.ToLower(name) != name {
121 return nil, nil, fmt.Errorf("Failed to decode request headers map key: %q contains upper-case.", name)
122 }
123
124 if strings.HasPrefix(name, ":") {
125 if _, exists := pseudos[name]; exists {
126 return nil, nil, fmt.Errorf("Failed to decode request headers map entry. Pseudo %q appeared twice.", name)
127 }
128
129 pseudos[name] = value
130
131 continue
132 }
133
134 if _, exists := headers[name]; exists {
135 return nil, nil, fmt.Errorf("Failed to decode request headers map entry. Header %q appeared twice.", name)
136 }
137
138 headers.Set(name, value)
139 }
140
141 return headers, pseudos, nil
142}
143
144// https://wpack-wg.github.io/bundled-responses/draft-ietf-wpack-bundled-responses.html#name-the-index-section
145func parseIndexSection(sectionContents []byte, sectionsStart uint64, sos []sectionOffset) ([]requestEntryWithOffset, error) {

Callers 1

loadResponseFunction · 0.85

Calls 4

isAsciiFunction · 0.85
DecodeMapHeaderMethod · 0.80
DecodeByteStringMethod · 0.80
SetMethod · 0.45

Tested by

no test coverage detected