OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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_headers_stream.h" | 5 #include "net/quic/quic_headers_stream.h" |
6 | 6 |
7 #include "net/quic/quic_session.h" | 7 #include "net/quic/quic_session.h" |
8 | 8 |
9 using base::StringPiece; | 9 using base::StringPiece; |
10 | 10 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 SpdyFrameType type, | 147 SpdyFrameType type, |
148 size_t frame_len) OVERRIDE { | 148 size_t frame_len) OVERRIDE { |
149 if (stream_->IsConnected()) { | 149 if (stream_->IsConnected()) { |
150 stream_->OnCompressedFrameSize(frame_len); | 150 stream_->OnCompressedFrameSize(frame_len); |
151 } | 151 } |
152 } | 152 } |
153 | 153 |
154 private: | 154 private: |
155 void CloseConnection(const string& details) { | 155 void CloseConnection(const string& details) { |
156 if (stream_->IsConnected()) { | 156 if (stream_->IsConnected()) { |
157 stream_->CloseConnectionWithDetails( | 157 stream_->CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, |
158 QUIC_INVALID_HEADERS_STREAM_DATA, details); | 158 details); |
159 } | 159 } |
160 } | 160 } |
161 | 161 |
162 private: | 162 private: |
163 QuicHeadersStream* stream_; | 163 QuicHeadersStream* stream_; |
164 | 164 |
165 DISALLOW_COPY_AND_ASSIGN(SpdyFramerVisitor); | 165 DISALLOW_COPY_AND_ASSIGN(SpdyFramerVisitor); |
166 }; | 166 }; |
167 | 167 |
168 QuicHeadersStream::QuicHeadersStream(QuicSession* session) | 168 QuicHeadersStream::QuicHeadersStream(QuicSession* session) |
169 : ReliableQuicStream(kHeadersStreamId, session), | 169 : ReliableQuicStream(kHeadersStreamId, session), |
170 stream_id_(kInvalidStreamId), | 170 stream_id_(kInvalidStreamId), |
171 fin_(false), | 171 fin_(false), |
172 frame_len_(0), | 172 frame_len_(0), |
173 spdy_framer_(SPDY3), | 173 spdy_framer_(SPDY3), |
174 spdy_framer_visitor_(new SpdyFramerVisitor(this)) { | 174 spdy_framer_visitor_(new SpdyFramerVisitor(this)) { |
175 spdy_framer_.set_visitor(spdy_framer_visitor_.get()); | 175 spdy_framer_.set_visitor(spdy_framer_visitor_.get()); |
176 spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get()); | 176 spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get()); |
177 DisableFlowControl(); | 177 DisableFlowControl(); |
178 } | 178 } |
179 | 179 |
180 QuicHeadersStream::~QuicHeadersStream() {} | 180 QuicHeadersStream::~QuicHeadersStream() { |
| 181 } |
181 | 182 |
182 size_t QuicHeadersStream::WriteHeaders( | 183 size_t QuicHeadersStream::WriteHeaders( |
183 QuicStreamId stream_id, | 184 QuicStreamId stream_id, |
184 const SpdyHeaderBlock& headers, | 185 const SpdyHeaderBlock& headers, |
185 bool fin, | 186 bool fin, |
186 QuicAckNotifier::DelegateInterface* ack_notifier_delegate) { | 187 QuicAckNotifier::DelegateInterface* ack_notifier_delegate) { |
187 scoped_ptr<SpdySerializedFrame> frame; | 188 scoped_ptr<SpdySerializedFrame> frame; |
188 if (session()->is_server()) { | 189 if (session()->is_server()) { |
189 SpdySynReplyIR syn_reply(stream_id); | 190 SpdySynReplyIR syn_reply(stream_id); |
190 syn_reply.set_name_value_block(headers); | 191 syn_reply.set_name_value_block(headers); |
191 syn_reply.set_fin(fin); | 192 syn_reply.set_fin(fin); |
192 frame.reset(spdy_framer_.SerializeFrame(syn_reply)); | 193 frame.reset(spdy_framer_.SerializeFrame(syn_reply)); |
193 } else { | 194 } else { |
194 SpdySynStreamIR syn_stream(stream_id); | 195 SpdySynStreamIR syn_stream(stream_id); |
195 syn_stream.set_name_value_block(headers); | 196 syn_stream.set_name_value_block(headers); |
196 syn_stream.set_fin(fin); | 197 syn_stream.set_fin(fin); |
197 frame.reset(spdy_framer_.SerializeFrame(syn_stream)); | 198 frame.reset(spdy_framer_.SerializeFrame(syn_stream)); |
198 } | 199 } |
199 WriteOrBufferData(StringPiece(frame->data(), frame->size()), false, | 200 WriteOrBufferData( |
200 ack_notifier_delegate); | 201 StringPiece(frame->data(), frame->size()), false, ack_notifier_delegate); |
201 return frame->size(); | 202 return frame->size(); |
202 } | 203 } |
203 | 204 |
204 uint32 QuicHeadersStream::ProcessRawData(const char* data, | 205 uint32 QuicHeadersStream::ProcessRawData(const char* data, uint32 data_len) { |
205 uint32 data_len) { | |
206 return spdy_framer_.ProcessInput(data, data_len); | 206 return spdy_framer_.ProcessInput(data, data_len); |
207 } | 207 } |
208 | 208 |
209 QuicPriority QuicHeadersStream::EffectivePriority() const { return 0; } | 209 QuicPriority QuicHeadersStream::EffectivePriority() const { |
| 210 return 0; |
| 211 } |
210 | 212 |
211 void QuicHeadersStream::OnSynStream(SpdyStreamId stream_id, | 213 void QuicHeadersStream::OnSynStream(SpdyStreamId stream_id, |
212 SpdyPriority priority, | 214 SpdyPriority priority, |
213 bool fin) { | 215 bool fin) { |
214 if (!session()->is_server()) { | 216 if (!session()->is_server()) { |
215 CloseConnectionWithDetails( | 217 CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, |
216 QUIC_INVALID_HEADERS_STREAM_DATA, | 218 "SPDY SYN_STREAM frame received at the client"); |
217 "SPDY SYN_STREAM frame received at the client"); | |
218 return; | 219 return; |
219 } | 220 } |
220 DCHECK_EQ(kInvalidStreamId, stream_id_); | 221 DCHECK_EQ(kInvalidStreamId, stream_id_); |
221 stream_id_ = stream_id; | 222 stream_id_ = stream_id; |
222 fin_ = fin; | 223 fin_ = fin; |
223 session()->OnStreamHeadersPriority(stream_id, priority); | 224 session()->OnStreamHeadersPriority(stream_id, priority); |
224 } | 225 } |
225 | 226 |
226 void QuicHeadersStream::OnSynReply(SpdyStreamId stream_id, bool fin) { | 227 void QuicHeadersStream::OnSynReply(SpdyStreamId stream_id, bool fin) { |
227 if (session()->is_server()) { | 228 if (session()->is_server()) { |
228 CloseConnectionWithDetails( | 229 CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, |
229 QUIC_INVALID_HEADERS_STREAM_DATA, | 230 "SPDY SYN_REPLY frame received at the server"); |
230 "SPDY SYN_REPLY frame received at the server"); | |
231 return; | 231 return; |
232 } | 232 } |
233 DCHECK_EQ(kInvalidStreamId, stream_id_); | 233 DCHECK_EQ(kInvalidStreamId, stream_id_); |
234 stream_id_ = stream_id; | 234 stream_id_ = stream_id; |
235 fin_ = fin; | 235 fin_ = fin; |
236 } | 236 } |
237 | 237 |
238 void QuicHeadersStream::OnControlFrameHeaderData(SpdyStreamId stream_id, | 238 void QuicHeadersStream::OnControlFrameHeaderData(SpdyStreamId stream_id, |
239 const char* header_data, | 239 const char* header_data, |
240 size_t len) { | 240 size_t len) { |
(...skipping 15 matching lines...) Expand all Loading... |
256 DCHECK_EQ(kInvalidStreamId, stream_id_); | 256 DCHECK_EQ(kInvalidStreamId, stream_id_); |
257 DCHECK_EQ(0u, frame_len_); | 257 DCHECK_EQ(0u, frame_len_); |
258 frame_len_ = frame_len; | 258 frame_len_ = frame_len; |
259 } | 259 } |
260 | 260 |
261 bool QuicHeadersStream::IsConnected() { | 261 bool QuicHeadersStream::IsConnected() { |
262 return session()->connection()->connected(); | 262 return session()->connection()->connected(); |
263 } | 263 } |
264 | 264 |
265 } // namespace net | 265 } // namespace net |
OLD | NEW |