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
3 // found in the LICENSE file.
5 #include "net/quic/spdy_utils.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "net/spdy/spdy_frame_builder.h"
9 #include "net/spdy/spdy_framer.h"
10 #include "net/spdy/spdy_protocol.h"
17 SpdyMajorVersion
SpdyUtils::GetSpdyVersionForQuicVersion(
18 QuicVersion quic_version
) {
19 if (quic_version
> QUIC_VERSION_24
) {
26 string
SpdyUtils::SerializeUncompressedHeaders(const SpdyHeaderBlock
& headers
,
27 QuicVersion quic_version
) {
28 SpdyMajorVersion spdy_version
= GetSpdyVersionForQuicVersion(quic_version
);
30 int length
= SpdyFramer::GetSerializedLength(spdy_version
, &headers
);
31 SpdyFrameBuilder
builder(length
, kDefaultSpdyMajorVersion
);
32 SpdyFramer::WriteHeaderBlock(&builder
, kDefaultSpdyMajorVersion
, &headers
);
33 scoped_ptr
<SpdyFrame
> block(builder
.take());
34 return string(block
->data(), length
);
38 SpdyHeaderBlock
SpdyUtils::ConvertSpdy3ResponseHeadersToSpdy4(
39 SpdyHeaderBlock response_headers
) {
40 // SPDY/4 headers include neither the version field nor the response details.
41 response_headers
.erase(":version");
42 size_t end_of_code
= response_headers
[":status"].find(' ');
43 if (end_of_code
!= string::npos
) {
44 response_headers
[":status"].erase(end_of_code
);
46 return response_headers
;