| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/quic/spdy_utils.h" | 5 #include "net/quic/spdy_utils.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "net/spdy/spdy_frame_builder.h" | 8 #include "net/spdy/spdy_frame_builder.h" |
| 9 #include "net/spdy/spdy_framer.h" | 9 #include "net/spdy/spdy_framer.h" |
| 10 #include "net/spdy/spdy_protocol.h" | 10 #include "net/spdy/spdy_protocol.h" |
| 11 | 11 |
| 12 using std::string; | 12 using std::string; |
| 13 | 13 |
| 14 namespace net { | 14 namespace net { |
| 15 | 15 |
| 16 // static | 16 // static |
| 17 SpdyMajorVersion SpdyUtils::GetSpdyVersionForQuicVersion( | 17 SpdyMajorVersion SpdyUtils::GetSpdyVersionForQuicVersion( |
| 18 QuicVersion quic_version) { | 18 QuicVersion quic_version) { |
| 19 if (quic_version > QUIC_VERSION_24) { | 19 if (quic_version > QUIC_VERSION_24) { |
| 20 return HTTP2; | 20 return HTTP2; |
| 21 } | 21 } |
| 22 return SPDY3; | 22 return SPDY3; |
| 23 } | 23 } |
| 24 | 24 |
| 25 // static | 25 // static |
| 26 SpdyHeaderBlock SpdyUtils::ConvertSpdy3ResponseHeadersToSpdy4( | 26 SpdyHeaderBlock SpdyUtils::ConvertSpdy3ResponseHeadersToSpdy4( |
| 27 SpdyHeaderBlock response_headers) { | 27 SpdyHeaderBlock response_headers) { |
| 28 // SPDY/4 headers include neither the version field nor the response details. | 28 // SPDY/4 headers include neither the version field nor the response details. |
| 29 response_headers.erase(":version"); | 29 response_headers.erase(":version"); |
| 30 size_t end_of_code = response_headers[":status"].find(' '); | 30 StringPiece status_value = response_headers[":status"]; |
| 31 size_t end_of_code = status_value.find(' '); |
| 31 if (end_of_code != string::npos) { | 32 if (end_of_code != string::npos) { |
| 32 response_headers[":status"].erase(end_of_code); | 33 response_headers[":status"] = status_value.substr(0, end_of_code); |
| 33 } | 34 } |
| 34 return response_headers; | 35 return response_headers; |
| 35 } | 36 } |
| 36 | 37 |
| 37 // static | 38 // static |
| 38 string SpdyUtils::SerializeUncompressedHeaders(const SpdyHeaderBlock& headers, | 39 string SpdyUtils::SerializeUncompressedHeaders(const SpdyHeaderBlock& headers, |
| 39 QuicVersion quic_version) { | 40 QuicVersion quic_version) { |
| 40 SpdyMajorVersion spdy_version = GetSpdyVersionForQuicVersion(quic_version); | 41 SpdyMajorVersion spdy_version = GetSpdyVersionForQuicVersion(quic_version); |
| 41 | 42 |
| 42 size_t length = SpdyFramer::GetSerializedLength(spdy_version, &headers); | 43 size_t length = SpdyFramer::GetSerializedLength(spdy_version, &headers); |
| 43 SpdyFrameBuilder builder(length, spdy_version); | 44 SpdyFrameBuilder builder(length, spdy_version); |
| 44 SpdyFramer::WriteHeaderBlock(&builder, spdy_version, &headers); | 45 SpdyFramer::WriteHeaderBlock(&builder, spdy_version, &headers); |
| 45 scoped_ptr<SpdyFrame> block(builder.take()); | 46 scoped_ptr<SpdyFrame> block(builder.take()); |
| 46 return string(block->data(), length); | 47 return string(block->data(), length); |
| 47 } | 48 } |
| 48 | 49 |
| 49 } // namespace net | 50 } // namespace net |
| OLD | NEW |