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

Side by Side Diff: net/spdy/hpack/hpack_decoder.cc

Issue 1357953002: Replace the existing SpdyHeaderBlock typedef with a class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add NET_EXPORT to fix compile error on win_chromium_compile_dbg_ng. Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « net/quic/test_tools/quic_test_packet_maker.cc ('k') | net/spdy/hpack/hpack_decoder_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/hpack/hpack_decoder.h" 5 #include "net/spdy/hpack/hpack_decoder.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 if (name.size() > 0) { 68 if (name.size() > 0) {
69 if (name[0] == kPseudoHeaderPrefix) { 69 if (name[0] == kPseudoHeaderPrefix) {
70 if (regular_header_seen_) { 70 if (regular_header_seen_) {
71 return false; 71 return false;
72 } 72 }
73 } else { 73 } else {
74 regular_header_seen_ = true; 74 regular_header_seen_ = true;
75 } 75 }
76 } 76 }
77 77
78 auto it = decoded_block_.find(name.as_string()); 78 auto it = decoded_block_.find(name);
79 if (it == decoded_block_.end()) { 79 if (it == decoded_block_.end()) {
80 // This is a new key. 80 // This is a new key.
81 decoded_block_[name.as_string()].assign(value.data(), value.size()); 81 decoded_block_[name] = value;
82 } else { 82 } else {
83 // The key already exists, append |value| with appropriate delimiter. 83 // The key already exists, append |value| with appropriate delimiter.
84 string& old_value = it->second; 84 string new_value = it->second.as_string();
85 if (name == kCookieKey) { 85 new_value.append((name == kCookieKey) ? "; " : string(1, '\0'));
86 old_value.append("; "); 86 value.AppendToString(&new_value);
87 value.AppendToString(&old_value); 87 decoded_block_.ReplaceOrAppendHeader(name, new_value);
88 } else {
89 old_value.push_back('\0');
90 old_value.insert(old_value.end(), value.begin(), value.end());
91 }
92 } 88 }
93 return true; 89 return true;
94 } 90 }
95 91
96 bool HpackDecoder::DecodeNextOpcode(HpackInputStream* input_stream) { 92 bool HpackDecoder::DecodeNextOpcode(HpackInputStream* input_stream) {
97 // Implements 7.1: Indexed Header Field Representation. 93 // Implements 7.1: Indexed Header Field Representation.
98 if (input_stream->MatchPrefixAndConsume(kIndexedOpcode)) { 94 if (input_stream->MatchPrefixAndConsume(kIndexedOpcode)) {
99 return DecodeNextIndexedHeader(input_stream); 95 return DecodeNextIndexedHeader(input_stream);
100 } 96 }
101 // Implements 7.2.1: Literal Header Field with Incremental Indexing. 97 // Implements 7.2.1: Literal Header Field with Incremental Indexing.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 *output = StringPiece(*buffer); 200 *output = StringPiece(*buffer);
205 return result; 201 return result;
206 } 202 }
207 if (input_stream->MatchPrefixAndConsume(kStringLiteralIdentityEncoded)) { 203 if (input_stream->MatchPrefixAndConsume(kStringLiteralIdentityEncoded)) {
208 return input_stream->DecodeNextIdentityString(output); 204 return input_stream->DecodeNextIdentityString(output);
209 } 205 }
210 return false; 206 return false;
211 } 207 }
212 208
213 } // namespace net 209 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/quic_test_packet_maker.cc ('k') | net/spdy/hpack/hpack_decoder_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698