Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(450)

Unified Diff: net/spdy/hpack_decoder.cc

Issue 448433002: Update HPACK implementation to draft-09 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Generate examples_07.hpack. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/spdy/hpack_decoder.cc
diff --git a/net/spdy/hpack_decoder.cc b/net/spdy/hpack_decoder.cc
index abd579ad007049be6730eccd728e881109da6fa2..0108dde1950ab0ab93a25b50eb58af8230d886f7 100644
--- a/net/spdy/hpack_decoder.cc
+++ b/net/spdy/hpack_decoder.cc
@@ -4,6 +4,8 @@
#include "net/spdy/hpack_decoder.h"
+#include <utility>
Johnny 2014/08/06 15:04:49 I don't see a use of this below?
Bence 2014/08/06 20:20:22 It's for std::pair. git cl lint complains if this
Johnny 2014/08/07 17:02:22 Oh, great. SGTM then.
Bence 2014/08/08 13:57:55 Acknowledged.
+
#include "base/basictypes.h"
#include "base/logging.h"
#include "net/spdy/hpack_constants.h"
@@ -16,10 +18,6 @@ using std::string;
namespace {
-const uint8 kNoState = 0;
-// Set on entries added to the reference set during this decoding.
-const uint8 kReferencedThisEncoding = 1;
-
const char kCookieKey[] = "cookie";
} // namespace
@@ -56,21 +54,6 @@ bool HpackDecoder::HandleControlFrameHeadersComplete(SpdyStreamId id) {
}
headers_block_buffer_.clear();
- // Emit everything in the reference set that hasn't already been emitted.
- // Also clear entry state for the next decoded headers block.
- // TODO(jgraettinger): We may need to revisit the order in which headers
- // are emitted (b/14051713).
- for (HpackHeaderTable::OrderedEntrySet::const_iterator it =
- header_table_.reference_set().begin();
- it != header_table_.reference_set().end(); ++it) {
- HpackEntry* entry = *it;
-
- if (entry->state() == kNoState) {
- HandleHeaderRepresentation(entry->name(), entry->value());
- } else {
- entry->set_state(kNoState);
- }
- }
// Emit the Cookie header, if any crumbles were encountered.
if (!cookie_value_.empty()) {
decoded_block_[kCookieKey] = cookie_value_;
@@ -121,31 +104,24 @@ bool HpackDecoder::DecodeNextOpcode(HpackInputStream* input_stream) {
return DecodeNextLiteralHeader(input_stream, false);
}
// Implements 4.4: Encoding context update.
- if (input_stream->MatchPrefixAndConsume(kEncodingContextOpcode)) {
- return DecodeNextContextUpdate(input_stream);
+ if (input_stream->MatchPrefixAndConsume(kHeaderTableSizeUpdateOpcode)) {
+ return DecodeNextHeaderTableSizeUpdate(input_stream);
}
// Unrecognized opcode.
return false;
}
-bool HpackDecoder::DecodeNextContextUpdate(HpackInputStream* input_stream) {
- if (input_stream->MatchPrefixAndConsume(kEncodingContextEmptyReferenceSet)) {
- header_table_.ClearReferenceSet();
- return true;
+bool HpackDecoder::DecodeNextHeaderTableSizeUpdate(
+ HpackInputStream* input_stream) {
+ uint32 size = 0;
+ if (!input_stream->DecodeNextUint32(&size)) {
+ return false;
}
- if (input_stream->MatchPrefixAndConsume(kEncodingContextNewMaximumSize)) {
- uint32 size = 0;
- if (!input_stream->DecodeNextUint32(&size)) {
- return false;
- }
- if (size > header_table_.settings_size_bound()) {
- return false;
- }
- header_table_.SetMaxSize(size);
- return true;
+ if (size > header_table_.settings_size_bound()) {
+ return false;
}
- // Unrecognized encoding context update.
- return false;
+ header_table_.SetMaxSize(size);
+ return true;
}
bool HpackDecoder::DecodeNextIndexedHeader(HpackInputStream* input_stream) {
@@ -157,22 +133,7 @@ bool HpackDecoder::DecodeNextIndexedHeader(HpackInputStream* input_stream) {
if (entry == NULL)
return false;
- if (entry->IsStatic()) {
- HandleHeaderRepresentation(entry->name(), entry->value());
-
- HpackEntry* new_entry = header_table_.TryAddEntry(
- entry->name(), entry->value());
- if (new_entry) {
- header_table_.Toggle(new_entry);
- new_entry->set_state(kReferencedThisEncoding);
- }
- } else {
- entry->set_state(kNoState);
- if (header_table_.Toggle(entry)) {
- HandleHeaderRepresentation(entry->name(), entry->value());
- entry->set_state(kReferencedThisEncoding);
- }
- }
+ HandleHeaderRepresentation(entry->name(), entry->value());
return true;
}
@@ -191,11 +152,7 @@ bool HpackDecoder::DecodeNextLiteralHeader(HpackInputStream* input_stream,
if (!should_index)
return true;
- HpackEntry* new_entry = header_table_.TryAddEntry(name, value);
- if (new_entry) {
- header_table_.Toggle(new_entry);
- new_entry->set_state(kReferencedThisEncoding);
- }
+ header_table_.TryAddEntry(name, value);
Johnny 2014/08/06 15:04:49 ignore_result
Bence 2014/08/06 20:20:22 Done.
return true;
}

Powered by Google App Engine
This is Rietveld 408576698