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/quic_spdy_decompressor.h" | 5 #include "net/quic/quic_spdy_decompressor.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 | 10 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 }; | 68 }; |
69 | 69 |
70 bool SpdyFramerVisitor::OnControlFrameHeaderData(SpdyStreamId stream_id, | 70 bool SpdyFramerVisitor::OnControlFrameHeaderData(SpdyStreamId stream_id, |
71 const char* header_data, | 71 const char* header_data, |
72 size_t len) { | 72 size_t len) { |
73 DCHECK(visitor_); | 73 DCHECK(visitor_); |
74 return visitor_->OnDecompressedData(StringPiece(header_data, len)); | 74 return visitor_->OnDecompressedData(StringPiece(header_data, len)); |
75 } | 75 } |
76 | 76 |
77 QuicSpdyDecompressor::QuicSpdyDecompressor() | 77 QuicSpdyDecompressor::QuicSpdyDecompressor() |
78 : spdy_framer_(3), | 78 : spdy_framer_(kSpdyVersion3), |
79 spdy_visitor_(new SpdyFramerVisitor(NULL)), | 79 spdy_visitor_(new SpdyFramerVisitor(NULL)), |
80 current_header_id_(1), | 80 current_header_id_(1), |
81 has_current_compressed_size_(false), | 81 has_current_compressed_size_(false), |
82 current_compressed_size_(0), | 82 current_compressed_size_(0), |
83 compressed_bytes_consumed_(0) { | 83 compressed_bytes_consumed_(0) { |
84 spdy_framer_.set_visitor(spdy_visitor_.get()); | 84 spdy_framer_.set_visitor(spdy_visitor_.get()); |
85 } | 85 } |
86 | 86 |
87 QuicSpdyDecompressor::~QuicSpdyDecompressor() { | 87 QuicSpdyDecompressor::~QuicSpdyDecompressor() { |
88 } | 88 } |
(...skipping 20 matching lines...) Expand all Loading... |
109 compressed_size_buffer_.clear(); | 109 compressed_size_buffer_.clear(); |
110 has_current_compressed_size_ = true; | 110 has_current_compressed_size_ = true; |
111 data = data.substr(missing_size); | 111 data = data.substr(missing_size); |
112 compressed_bytes_consumed_ = 0; | 112 compressed_bytes_consumed_ = 0; |
113 } | 113 } |
114 | 114 |
115 size_t bytes_to_consume = | 115 size_t bytes_to_consume = |
116 min(current_compressed_size_ - compressed_bytes_consumed_, | 116 min(current_compressed_size_ - compressed_bytes_consumed_, |
117 static_cast<uint32>(data.length())); | 117 static_cast<uint32>(data.length())); |
118 if (bytes_to_consume > 0) { | 118 if (bytes_to_consume > 0) { |
119 bool success = spdy_framer_.IncrementallyDecompressControlFrameHeaderData( | 119 if (!spdy_framer_.IncrementallyDecompressControlFrameHeaderData( |
120 current_header_id_, data.data(), bytes_to_consume); | 120 current_header_id_, data.data(), bytes_to_consume)) { |
121 DCHECK(success); | 121 visitor->OnDecompressionError(); |
| 122 return bytes_consumed; |
| 123 } |
122 compressed_bytes_consumed_ += bytes_to_consume; | 124 compressed_bytes_consumed_ += bytes_to_consume; |
123 bytes_consumed += bytes_to_consume; | 125 bytes_consumed += bytes_to_consume; |
124 } | 126 } |
125 if (current_compressed_size_ - compressed_bytes_consumed_ == 0) { | 127 if (current_compressed_size_ - compressed_bytes_consumed_ == 0) { |
126 ResetForNextHeaders(); | 128 ResetForNextHeaders(); |
127 } | 129 } |
128 return bytes_consumed; | 130 return bytes_consumed; |
129 } | 131 } |
130 | 132 |
131 void QuicSpdyDecompressor::ResetForNextHeaders() { | 133 void QuicSpdyDecompressor::ResetForNextHeaders() { |
132 has_current_compressed_size_ = false; | 134 has_current_compressed_size_ = false; |
133 current_compressed_size_ = 0; | 135 current_compressed_size_ = 0; |
134 compressed_bytes_consumed_ = 0; | 136 compressed_bytes_consumed_ = 0; |
135 ++current_header_id_; | 137 ++current_header_id_; |
136 } | 138 } |
137 | 139 |
138 } // namespace net | 140 } // namespace net |
OLD | NEW |