| OLD | NEW |
| (Empty) |
| 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. | |
| 4 | |
| 5 #include "net/quic/quic_spdy_compressor.h" | |
| 6 | |
| 7 #include "base/basictypes.h" | |
| 8 #include "base/memory/scoped_ptr.h" | |
| 9 | |
| 10 using std::string; | |
| 11 | |
| 12 namespace net { | |
| 13 | |
| 14 QuicSpdyCompressor::QuicSpdyCompressor() | |
| 15 : spdy_framer_(3), | |
| 16 header_sequence_id_(1) { | |
| 17 spdy_framer_.set_enable_compression(true); | |
| 18 } | |
| 19 | |
| 20 QuicSpdyCompressor::~QuicSpdyCompressor() { | |
| 21 } | |
| 22 | |
| 23 string QuicSpdyCompressor::CompressHeaders( | |
| 24 const SpdyHeaderBlock& headers) { | |
| 25 // TODO(rch): Modify the SpdyFramer to expose a | |
| 26 // CreateCompressedHeaderBlock method, or some such. | |
| 27 SpdyStreamId stream_id = 3; // unused. | |
| 28 scoped_ptr<SpdyFrame> frame(spdy_framer_.CreateHeaders( | |
| 29 stream_id, CONTROL_FLAG_NONE, true, &headers)); | |
| 30 | |
| 31 // The size of the spdy HEADER frame's fixed prefix which | |
| 32 // needs to be stripped off from the resulting frame. | |
| 33 const size_t header_frame_prefix_len = 12; | |
| 34 string serialized = string(frame->data() + header_frame_prefix_len, | |
| 35 frame->size() - header_frame_prefix_len); | |
| 36 uint32 serialized_len = serialized.length(); | |
| 37 char id_str[sizeof(header_sequence_id_)]; | |
| 38 memcpy(&id_str, &header_sequence_id_, sizeof(header_sequence_id_)); | |
| 39 char len_str[sizeof(serialized_len)]; | |
| 40 memcpy(&len_str, &serialized_len, sizeof(serialized_len)); | |
| 41 string compressed; | |
| 42 compressed.reserve(arraysize(id_str) + arraysize(len_str) + serialized_len); | |
| 43 compressed.append(id_str, arraysize(id_str)); | |
| 44 compressed.append(len_str, arraysize(len_str)); | |
| 45 compressed.append(serialized); | |
| 46 ++header_sequence_id_; | |
| 47 return compressed; | |
| 48 } | |
| 49 | |
| 50 } // namespace net | |
| OLD | NEW |