Index: net/spdy/hpack_encoder.cc |
diff --git a/net/spdy/hpack_encoder.cc b/net/spdy/hpack_encoder.cc |
index 469042687718e25f7a23e689e1fb900688123818..c9f6506529d992a8d0d587832195b3eed045e727 100644 |
--- a/net/spdy/hpack_encoder.cc |
+++ b/net/spdy/hpack_encoder.cc |
@@ -20,7 +20,7 @@ HpackEncoder::~HpackEncoder() {} |
bool HpackEncoder::EncodeHeaderSet(const std::map<string, string>& header_set, |
string* output) { |
// TOOD(jgraettinger): Do more sophisticated encoding. |
- HpackOutputStream output_stream(max_string_literal_size_); |
+ HpackOutputStream output_stream; |
for (std::map<string, string>::const_iterator it = header_set.begin(); |
it != header_set.end(); ++it) { |
// TODO(jgraettinger): HTTP/2 requires strict lowercasing of headers, |
@@ -29,20 +29,29 @@ bool HpackEncoder::EncodeHeaderSet(const std::map<string, string>& header_set, |
std::vector<StringPiece> crumbs; |
CookieToCrumbs(it->second, &crumbs); |
for (size_t i = 0; i != crumbs.size(); i++) { |
- if (!output_stream.AppendLiteralHeaderNoIndexingWithName( |
- it->first, crumbs[i])) { |
- return false; |
- } |
+ EmitNonIndexedLiteral(it->first, crumbs[i], &output_stream); |
} |
- } else if (!output_stream.AppendLiteralHeaderNoIndexingWithName( |
- it->first, it->second)) { |
- return false; |
+ } else { |
+ EmitNonIndexedLiteral(it->first, it->second, &output_stream); |
} |
} |
output_stream.TakeString(output); |
return true; |
} |
+void HpackEncoder::EmitNonIndexedLiteral(StringPiece name, |
+ StringPiece value, |
+ HpackOutputStream* output_stream) { |
+ output_stream->AppendPrefix(kLiteralNoIndexOpcode); |
+ output_stream->AppendUint32(0u); |
+ output_stream->AppendPrefix(kStringLiteralIdentityEncoded); |
+ output_stream->AppendUint32(name.size()); |
+ output_stream->AppendBytes(name); |
+ output_stream->AppendPrefix(kStringLiteralIdentityEncoded); |
+ output_stream->AppendUint32(value.size()); |
+ output_stream->AppendBytes(value); |
+} |
+ |
void HpackEncoder::CookieToCrumbs(StringPiece cookie, |
std::vector<StringPiece>* out) { |
out->clear(); |