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 #ifndef NET_QUIC_QUIC_SPDY_COMPRESSOR_H_ 6 #define NET_QUIC_QUIC_SPDY_COMPRESSOR_H_ 7 8 #include <string> 9 10 #include "net/base/net_export.h" 11 #include "net/quic/quic_protocol.h" 12 #include "net/spdy/spdy_framer.h" 13 14 namespace net { 15 16 // Handles the compression of request/response headers blocks. The 17 // serialized format is: 18 // uint32 - Priority 19 // uint32 - Header ID 20 // uint32 - Compressed header length 21 // ... - Compressed data 22 // 23 class NET_EXPORT_PRIVATE QuicSpdyCompressor { 24 public: 25 QuicSpdyCompressor(); 26 ~QuicSpdyCompressor(); 27 28 // Returns a string comprised of [header_sequence_id, compressed_headers]. 29 std::string CompressHeaders(const SpdyHeaderBlock& headers); 30 31 // Returns a string comprised of 32 // [priority, header_sequence_id, compressed_headers] 33 std::string CompressHeadersWithPriority(QuicPriority priority, 34 const SpdyHeaderBlock& headers); 35 36 private: 37 std::string CompressHeadersInternal(QuicPriority priority, 38 const SpdyHeaderBlock& headers, 39 bool write_priority); 40 41 SpdyFramer spdy_framer_; 42 QuicHeaderId header_sequence_id_; 43 44 DISALLOW_COPY_AND_ASSIGN(QuicSpdyCompressor); 45 }; 46 47 } // namespace net 48 49 #endif // NET_QUIC_QUIC_SPDY_COMPRESSOR_H_ 50