| OLD | NEW |
| 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_encoder.h" | 5 #include "net/spdy/hpack_encoder.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "net/spdy/hpack_header_table.h" | 10 #include "net/spdy/hpack_header_table.h" |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 Representations* out) { | 162 Representations* out) { |
| 163 size_t prior_size = out->size(); | 163 size_t prior_size = out->size(); |
| 164 | 164 |
| 165 // See Section 8.1.2.5. "Compressing the Cookie Header Field" in the HTTP/2 | 165 // See Section 8.1.2.5. "Compressing the Cookie Header Field" in the HTTP/2 |
| 166 // specification at https://tools.ietf.org/html/draft-ietf-httpbis-http2-14. | 166 // specification at https://tools.ietf.org/html/draft-ietf-httpbis-http2-14. |
| 167 // Cookie values are split into individually-encoded HPACK representations. | 167 // Cookie values are split into individually-encoded HPACK representations. |
| 168 for (size_t pos = 0;;) { | 168 for (size_t pos = 0;;) { |
| 169 size_t end = cookie.second.find(";", pos); | 169 size_t end = cookie.second.find(";", pos); |
| 170 | 170 |
| 171 if (end == StringPiece::npos) { | 171 if (end == StringPiece::npos) { |
| 172 out->push_back(make_pair( | 172 out->push_back(std::make_pair(cookie.first, cookie.second.substr(pos))); |
| 173 cookie.first, | |
| 174 cookie.second.substr(pos))); | |
| 175 break; | 173 break; |
| 176 } | 174 } |
| 177 out->push_back(make_pair( | 175 out->push_back( |
| 178 cookie.first, | 176 std::make_pair(cookie.first, cookie.second.substr(pos, end - pos))); |
| 179 cookie.second.substr(pos, end - pos))); | |
| 180 | 177 |
| 181 // Consume next space if present. | 178 // Consume next space if present. |
| 182 pos = end + 1; | 179 pos = end + 1; |
| 183 if (pos != cookie.second.size() && cookie.second[pos] == ' ') { | 180 if (pos != cookie.second.size() && cookie.second[pos] == ' ') { |
| 184 pos++; | 181 pos++; |
| 185 } | 182 } |
| 186 } | 183 } |
| 187 // Sort crumbs and remove duplicates. | 184 // Sort crumbs and remove duplicates. |
| 188 std::sort(out->begin() + prior_size, out->end()); | 185 std::sort(out->begin() + prior_size, out->end()); |
| 189 out->erase(std::unique(out->begin() + prior_size, out->end()), | 186 out->erase(std::unique(out->begin() + prior_size, out->end()), |
| 190 out->end()); | 187 out->end()); |
| 191 } | 188 } |
| 192 | 189 |
| 193 // static | 190 // static |
| 194 void HpackEncoder::DecomposeRepresentation(const Representation& header_field, | 191 void HpackEncoder::DecomposeRepresentation(const Representation& header_field, |
| 195 Representations* out) { | 192 Representations* out) { |
| 196 size_t pos = 0; | 193 size_t pos = 0; |
| 197 size_t end = 0; | 194 size_t end = 0; |
| 198 while (end != StringPiece::npos) { | 195 while (end != StringPiece::npos) { |
| 199 end = header_field.second.find('\0', pos); | 196 end = header_field.second.find('\0', pos); |
| 200 out->push_back(make_pair(header_field.first, | 197 out->push_back(std::make_pair(header_field.first, |
| 201 header_field.second.substr(pos, end - pos))); | 198 header_field.second.substr(pos, end - pos))); |
| 202 pos = end + 1; | 199 pos = end + 1; |
| 203 } | 200 } |
| 204 } | 201 } |
| 205 | 202 |
| 206 } // namespace net | 203 } // namespace net |
| OLD | NEW |