OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
6 #include <iostream> | 6 #include <iostream> |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 explicit DecompressionVisitor(SpdyMajorVersion version) | 75 explicit DecompressionVisitor(SpdyMajorVersion version) |
76 : version_(version), size_(0), finished_(false) {} | 76 : version_(version), size_(0), finished_(false) {} |
77 | 77 |
78 void ResetBuffer() { | 78 void ResetBuffer() { |
79 CHECK(buffer_.get() == NULL); | 79 CHECK(buffer_.get() == NULL); |
80 CHECK_EQ(0u, size_); | 80 CHECK_EQ(0u, size_); |
81 CHECK(!finished_); | 81 CHECK(!finished_); |
82 buffer_.reset(new char[kMaxDecompressedSize]); | 82 buffer_.reset(new char[kMaxDecompressedSize]); |
83 } | 83 } |
84 | 84 |
85 virtual void OnError(SpdyFramer* framer) override { LOG(FATAL); } | 85 void OnError(SpdyFramer* framer) override { LOG(FATAL); } |
86 virtual void OnDataFrameHeader(SpdyStreamId stream_id, | 86 void OnDataFrameHeader(SpdyStreamId stream_id, |
87 size_t length, | 87 size_t length, |
88 bool fin) override { | 88 bool fin) override { |
89 LOG(FATAL) << "Unexpected data frame header"; | 89 LOG(FATAL) << "Unexpected data frame header"; |
90 } | 90 } |
91 virtual void OnStreamFrameData(SpdyStreamId stream_id, | 91 void OnStreamFrameData(SpdyStreamId stream_id, |
92 const char* data, | 92 const char* data, |
93 size_t len, | 93 size_t len, |
94 bool fin) override { | 94 bool fin) override { |
95 LOG(FATAL); | 95 LOG(FATAL); |
96 } | 96 } |
97 | 97 |
98 virtual bool OnControlFrameHeaderData(SpdyStreamId stream_id, | 98 bool OnControlFrameHeaderData(SpdyStreamId stream_id, |
99 const char* header_data, | 99 const char* header_data, |
100 size_t len) override { | 100 size_t len) override { |
101 CHECK(buffer_.get() != NULL); | 101 CHECK(buffer_.get() != NULL); |
102 CHECK_GE(kMaxDecompressedSize, size_ + len); | 102 CHECK_GE(kMaxDecompressedSize, size_ + len); |
103 CHECK(!finished_); | 103 CHECK(!finished_); |
104 if (len != 0) { | 104 if (len != 0) { |
105 memcpy(buffer_.get() + size_, header_data, len); | 105 memcpy(buffer_.get() + size_, header_data, len); |
106 size_ += len; | 106 size_ += len; |
107 } else { | 107 } else { |
108 // Done. | 108 // Done. |
109 finished_ = true; | 109 finished_ = true; |
110 } | 110 } |
111 return true; | 111 return true; |
112 } | 112 } |
113 | 113 |
114 virtual void OnSynStream(SpdyStreamId stream_id, | 114 void OnSynStream(SpdyStreamId stream_id, |
115 SpdyStreamId associated_stream_id, | 115 SpdyStreamId associated_stream_id, |
116 SpdyPriority priority, | 116 SpdyPriority priority, |
117 bool fin, | 117 bool fin, |
118 bool unidirectional) override { | 118 bool unidirectional) override { |
119 SpdyFramer framer(version_); | 119 SpdyFramer framer(version_); |
120 framer.set_enable_compression(false); | 120 framer.set_enable_compression(false); |
121 SpdySynStreamIR syn_stream(stream_id); | 121 SpdySynStreamIR syn_stream(stream_id); |
122 syn_stream.set_associated_to_stream_id(associated_stream_id); | 122 syn_stream.set_associated_to_stream_id(associated_stream_id); |
123 syn_stream.set_priority(priority); | 123 syn_stream.set_priority(priority); |
124 syn_stream.set_fin(fin); | 124 syn_stream.set_fin(fin); |
125 syn_stream.set_unidirectional(unidirectional); | 125 syn_stream.set_unidirectional(unidirectional); |
126 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 126 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
127 ResetBuffer(); | 127 ResetBuffer(); |
128 memcpy(buffer_.get(), frame->data(), framer.GetSynStreamMinimumSize()); | 128 memcpy(buffer_.get(), frame->data(), framer.GetSynStreamMinimumSize()); |
129 size_ += framer.GetSynStreamMinimumSize(); | 129 size_ += framer.GetSynStreamMinimumSize(); |
130 } | 130 } |
131 | 131 |
132 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) override { | 132 void OnSynReply(SpdyStreamId stream_id, bool fin) override { |
133 SpdyFramer framer(version_); | 133 SpdyFramer framer(version_); |
134 framer.set_enable_compression(false); | 134 framer.set_enable_compression(false); |
135 SpdyHeadersIR headers(stream_id); | 135 SpdyHeadersIR headers(stream_id); |
136 headers.set_fin(fin); | 136 headers.set_fin(fin); |
137 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); | 137 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); |
138 ResetBuffer(); | 138 ResetBuffer(); |
139 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); | 139 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); |
140 size_ += framer.GetSynStreamMinimumSize(); | 140 size_ += framer.GetSynStreamMinimumSize(); |
141 } | 141 } |
142 | 142 |
143 virtual void OnRstStream(SpdyStreamId stream_id, | 143 void OnRstStream(SpdyStreamId stream_id, |
144 SpdyRstStreamStatus status) override { | 144 SpdyRstStreamStatus status) override { |
145 LOG(FATAL); | 145 LOG(FATAL); |
146 } | 146 } |
147 virtual void OnSetting(SpdySettingsIds id, | 147 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { |
148 uint8 flags, | |
149 uint32 value) override { | |
150 LOG(FATAL); | 148 LOG(FATAL); |
151 } | 149 } |
152 virtual void OnPing(SpdyPingId unique_id, bool is_ack) override { | 150 void OnPing(SpdyPingId unique_id, bool is_ack) override { LOG(FATAL); } |
153 LOG(FATAL); | 151 void OnSettingsEnd() override { LOG(FATAL); } |
154 } | 152 void OnGoAway(SpdyStreamId last_accepted_stream_id, |
155 virtual void OnSettingsEnd() override { LOG(FATAL); } | 153 SpdyGoAwayStatus status) override { |
156 virtual void OnGoAway(SpdyStreamId last_accepted_stream_id, | |
157 SpdyGoAwayStatus status) override { | |
158 LOG(FATAL); | 154 LOG(FATAL); |
159 } | 155 } |
160 | 156 |
161 virtual void OnHeaders(SpdyStreamId stream_id, | 157 void OnHeaders(SpdyStreamId stream_id, bool fin, bool end) override { |
162 bool fin, | |
163 bool end) override { | |
164 SpdyFramer framer(version_); | 158 SpdyFramer framer(version_); |
165 framer.set_enable_compression(false); | 159 framer.set_enable_compression(false); |
166 SpdyHeadersIR headers(stream_id); | 160 SpdyHeadersIR headers(stream_id); |
167 headers.set_fin(fin); | 161 headers.set_fin(fin); |
168 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); | 162 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers)); |
169 ResetBuffer(); | 163 ResetBuffer(); |
170 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); | 164 memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); |
171 size_ += framer.GetHeadersMinimumSize(); | 165 size_ += framer.GetHeadersMinimumSize(); |
172 } | 166 } |
173 | 167 |
174 virtual void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) { | 168 virtual void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) { |
175 LOG(FATAL); | 169 LOG(FATAL); |
176 } | 170 } |
177 | 171 |
178 virtual void OnPushPromise(SpdyStreamId stream_id, | 172 void OnPushPromise(SpdyStreamId stream_id, |
179 SpdyStreamId promised_stream_id, | 173 SpdyStreamId promised_stream_id, |
180 bool end) override { | 174 bool end) override { |
181 SpdyFramer framer(version_); | 175 SpdyFramer framer(version_); |
182 framer.set_enable_compression(false); | 176 framer.set_enable_compression(false); |
183 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id); | 177 SpdyPushPromiseIR push_promise(stream_id, promised_stream_id); |
184 scoped_ptr<SpdyFrame> frame(framer.SerializePushPromise(push_promise)); | 178 scoped_ptr<SpdyFrame> frame(framer.SerializePushPromise(push_promise)); |
185 ResetBuffer(); | 179 ResetBuffer(); |
186 memcpy(buffer_.get(), frame->data(), framer.GetPushPromiseMinimumSize()); | 180 memcpy(buffer_.get(), frame->data(), framer.GetPushPromiseMinimumSize()); |
187 size_ += framer.GetPushPromiseMinimumSize(); | 181 size_ += framer.GetPushPromiseMinimumSize(); |
188 } | 182 } |
189 | 183 |
190 virtual void OnContinuation(SpdyStreamId stream_id, bool end) override { | 184 void OnContinuation(SpdyStreamId stream_id, bool end) override { |
191 LOG(FATAL); | 185 LOG(FATAL); |
192 } | 186 } |
193 | 187 |
194 virtual void OnPriority(SpdyStreamId stream_id, | 188 void OnPriority(SpdyStreamId stream_id, |
195 SpdyStreamId parent_stream_id, | 189 SpdyStreamId parent_stream_id, |
196 uint8 weight, | 190 uint8 weight, |
197 bool exclusive) override { | 191 bool exclusive) override { |
198 // Do nothing. | 192 // Do nothing. |
199 } | 193 } |
200 | 194 |
201 virtual bool OnUnknownFrame(SpdyStreamId stream_id, | 195 bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { |
202 int frame_type) override { | |
203 LOG(FATAL); | 196 LOG(FATAL); |
204 return false; | 197 return false; |
205 } | 198 } |
206 | 199 |
207 char* ReleaseBuffer() { | 200 char* ReleaseBuffer() { |
208 CHECK(finished_); | 201 CHECK(finished_); |
209 return buffer_.release(); | 202 return buffer_.release(); |
210 } | 203 } |
211 | 204 |
212 virtual void OnWindowUpdate(SpdyStreamId stream_id, | 205 void OnWindowUpdate(SpdyStreamId stream_id, |
213 uint32 delta_window_size) override { | 206 uint32 delta_window_size) override { |
214 LOG(FATAL); | 207 LOG(FATAL); |
215 } | 208 } |
216 | 209 |
217 size_t size() const { | 210 size_t size() const { |
218 CHECK(finished_); | 211 CHECK(finished_); |
219 return size_; | 212 return size_; |
220 } | 213 } |
221 | 214 |
222 private: | 215 private: |
223 SpdyMajorVersion version_; | 216 SpdyMajorVersion version_; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 data_frame_count_(0), | 263 data_frame_count_(0), |
271 last_payload_len_(0), | 264 last_payload_len_(0), |
272 last_frame_len_(0), | 265 last_frame_len_(0), |
273 header_buffer_(new char[kDefaultHeaderBufferSize]), | 266 header_buffer_(new char[kDefaultHeaderBufferSize]), |
274 header_buffer_length_(0), | 267 header_buffer_length_(0), |
275 header_buffer_size_(kDefaultHeaderBufferSize), | 268 header_buffer_size_(kDefaultHeaderBufferSize), |
276 header_stream_id_(static_cast<SpdyStreamId>(-1)), | 269 header_stream_id_(static_cast<SpdyStreamId>(-1)), |
277 header_control_type_(DATA), | 270 header_control_type_(DATA), |
278 header_buffer_valid_(false) {} | 271 header_buffer_valid_(false) {} |
279 | 272 |
280 virtual void OnError(SpdyFramer* f) override { | 273 void OnError(SpdyFramer* f) override { |
281 LOG(INFO) << "SpdyFramer Error: " | 274 LOG(INFO) << "SpdyFramer Error: " |
282 << SpdyFramer::ErrorCodeToString(f->error_code()); | 275 << SpdyFramer::ErrorCodeToString(f->error_code()); |
283 ++error_count_; | 276 ++error_count_; |
284 } | 277 } |
285 | 278 |
286 virtual void OnDataFrameHeader(SpdyStreamId stream_id, | 279 void OnDataFrameHeader(SpdyStreamId stream_id, |
287 size_t length, | 280 size_t length, |
288 bool fin) override { | 281 bool fin) override { |
289 ++data_frame_count_; | 282 ++data_frame_count_; |
290 header_stream_id_ = stream_id; | 283 header_stream_id_ = stream_id; |
291 } | 284 } |
292 | 285 |
293 virtual void OnStreamFrameData(SpdyStreamId stream_id, | 286 void OnStreamFrameData(SpdyStreamId stream_id, |
294 const char* data, | 287 const char* data, |
295 size_t len, | 288 size_t len, |
296 bool fin) override { | 289 bool fin) override { |
297 EXPECT_EQ(header_stream_id_, stream_id); | 290 EXPECT_EQ(header_stream_id_, stream_id); |
298 if (len == 0) | 291 if (len == 0) |
299 ++zero_length_data_frame_count_; | 292 ++zero_length_data_frame_count_; |
300 | 293 |
301 data_bytes_ += len; | 294 data_bytes_ += len; |
302 std::cerr << "OnStreamFrameData(" << stream_id << ", \""; | 295 std::cerr << "OnStreamFrameData(" << stream_id << ", \""; |
303 if (len > 0) { | 296 if (len > 0) { |
304 for (size_t i = 0 ; i < len; ++i) { | 297 for (size_t i = 0 ; i < len; ++i) { |
305 std::cerr << std::hex << (0xFF & (unsigned int)data[i]) << std::dec; | 298 std::cerr << std::hex << (0xFF & (unsigned int)data[i]) << std::dec; |
306 } | 299 } |
307 } | 300 } |
308 std::cerr << "\", " << len << ")\n"; | 301 std::cerr << "\", " << len << ")\n"; |
309 } | 302 } |
310 | 303 |
311 virtual bool OnControlFrameHeaderData(SpdyStreamId stream_id, | 304 bool OnControlFrameHeaderData(SpdyStreamId stream_id, |
312 const char* header_data, | 305 const char* header_data, |
313 size_t len) override { | 306 size_t len) override { |
314 ++control_frame_header_data_count_; | 307 ++control_frame_header_data_count_; |
315 CHECK_EQ(header_stream_id_, stream_id); | 308 CHECK_EQ(header_stream_id_, stream_id); |
316 if (len == 0) { | 309 if (len == 0) { |
317 ++zero_length_control_frame_header_data_count_; | 310 ++zero_length_control_frame_header_data_count_; |
318 // Indicates end-of-header-block. | 311 // Indicates end-of-header-block. |
319 headers_.clear(); | 312 headers_.clear(); |
320 CHECK(header_buffer_valid_); | 313 CHECK(header_buffer_valid_); |
321 size_t parsed_length = framer_.ParseHeaderBlockInBuffer( | 314 size_t parsed_length = framer_.ParseHeaderBlockInBuffer( |
322 header_buffer_.get(), header_buffer_length_, &headers_); | 315 header_buffer_.get(), header_buffer_length_, &headers_); |
323 LOG_IF(DFATAL, header_buffer_length_ != parsed_length) | 316 LOG_IF(DFATAL, header_buffer_length_ != parsed_length) |
324 << "Check failed: header_buffer_length_ == parsed_length " | 317 << "Check failed: header_buffer_length_ == parsed_length " |
325 << "(" << header_buffer_length_ << " vs. " << parsed_length << ")"; | 318 << "(" << header_buffer_length_ << " vs. " << parsed_length << ")"; |
326 return true; | 319 return true; |
327 } | 320 } |
328 const size_t available = header_buffer_size_ - header_buffer_length_; | 321 const size_t available = header_buffer_size_ - header_buffer_length_; |
329 if (len > available) { | 322 if (len > available) { |
330 header_buffer_valid_ = false; | 323 header_buffer_valid_ = false; |
331 return false; | 324 return false; |
332 } | 325 } |
333 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len); | 326 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len); |
334 header_buffer_length_ += len; | 327 header_buffer_length_ += len; |
335 return true; | 328 return true; |
336 } | 329 } |
337 | 330 |
338 virtual void OnSynStream(SpdyStreamId stream_id, | 331 void OnSynStream(SpdyStreamId stream_id, |
339 SpdyStreamId associated_stream_id, | 332 SpdyStreamId associated_stream_id, |
340 SpdyPriority priority, | 333 SpdyPriority priority, |
341 bool fin, | 334 bool fin, |
342 bool unidirectional) override { | 335 bool unidirectional) override { |
343 ++syn_frame_count_; | 336 ++syn_frame_count_; |
344 if (framer_.protocol_version() > SPDY3) { | 337 if (framer_.protocol_version() > SPDY3) { |
345 InitHeaderStreaming(HEADERS, stream_id); | 338 InitHeaderStreaming(HEADERS, stream_id); |
346 } else { | 339 } else { |
347 InitHeaderStreaming(SYN_STREAM, stream_id); | 340 InitHeaderStreaming(SYN_STREAM, stream_id); |
348 } | 341 } |
349 if (fin) { | 342 if (fin) { |
350 ++fin_flag_count_; | 343 ++fin_flag_count_; |
351 } | 344 } |
352 } | 345 } |
353 | 346 |
354 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) override { | 347 void OnSynReply(SpdyStreamId stream_id, bool fin) override { |
355 ++syn_reply_frame_count_; | 348 ++syn_reply_frame_count_; |
356 if (framer_.protocol_version() > SPDY3) { | 349 if (framer_.protocol_version() > SPDY3) { |
357 InitHeaderStreaming(HEADERS, stream_id); | 350 InitHeaderStreaming(HEADERS, stream_id); |
358 } else { | 351 } else { |
359 InitHeaderStreaming(SYN_REPLY, stream_id); | 352 InitHeaderStreaming(SYN_REPLY, stream_id); |
360 } | 353 } |
361 if (fin) { | 354 if (fin) { |
362 ++fin_flag_count_; | 355 ++fin_flag_count_; |
363 } | 356 } |
364 } | 357 } |
365 | 358 |
366 virtual void OnRstStream(SpdyStreamId stream_id, | 359 void OnRstStream(SpdyStreamId stream_id, |
367 SpdyRstStreamStatus status) override { | 360 SpdyRstStreamStatus status) override { |
368 ++fin_frame_count_; | 361 ++fin_frame_count_; |
369 } | 362 } |
370 | 363 |
371 virtual bool OnRstStreamFrameData(const char* rst_stream_data, | 364 bool OnRstStreamFrameData(const char* rst_stream_data, size_t len) override { |
372 size_t len) override { | |
373 if ((rst_stream_data != NULL) && (len > 0)) { | 365 if ((rst_stream_data != NULL) && (len > 0)) { |
374 fin_opaque_data_ += std::string(rst_stream_data, len); | 366 fin_opaque_data_ += std::string(rst_stream_data, len); |
375 } | 367 } |
376 return true; | 368 return true; |
377 } | 369 } |
378 | 370 |
379 virtual void OnSetting(SpdySettingsIds id, | 371 void OnSetting(SpdySettingsIds id, uint8 flags, uint32 value) override { |
380 uint8 flags, | |
381 uint32 value) override { | |
382 ++setting_count_; | 372 ++setting_count_; |
383 } | 373 } |
384 | 374 |
385 virtual void OnSettingsAck() override { | 375 void OnSettingsAck() override { |
386 DCHECK_LT(SPDY3, framer_.protocol_version()); | 376 DCHECK_LT(SPDY3, framer_.protocol_version()); |
387 ++settings_ack_received_; | 377 ++settings_ack_received_; |
388 } | 378 } |
389 | 379 |
390 virtual void OnSettingsEnd() override { | 380 void OnSettingsEnd() override { |
391 if (framer_.protocol_version() <= SPDY3) { return; } | 381 if (framer_.protocol_version() <= SPDY3) { return; } |
392 ++settings_ack_sent_; | 382 ++settings_ack_sent_; |
393 } | 383 } |
394 | 384 |
395 virtual void OnPing(SpdyPingId unique_id, bool is_ack) override { | 385 void OnPing(SpdyPingId unique_id, bool is_ack) override { DLOG(FATAL); } |
396 DLOG(FATAL); | |
397 } | |
398 | 386 |
399 virtual void OnGoAway(SpdyStreamId last_accepted_stream_id, | 387 void OnGoAway(SpdyStreamId last_accepted_stream_id, |
400 SpdyGoAwayStatus status) override { | 388 SpdyGoAwayStatus status) override { |
401 ++goaway_count_; | 389 ++goaway_count_; |
402 } | 390 } |
403 | 391 |
404 virtual void OnHeaders(SpdyStreamId stream_id, bool fin, bool end) override { | 392 void OnHeaders(SpdyStreamId stream_id, bool fin, bool end) override { |
405 ++headers_frame_count_; | 393 ++headers_frame_count_; |
406 InitHeaderStreaming(HEADERS, stream_id); | 394 InitHeaderStreaming(HEADERS, stream_id); |
407 if (fin) { | 395 if (fin) { |
408 ++fin_flag_count_; | 396 ++fin_flag_count_; |
409 } | 397 } |
410 } | 398 } |
411 | 399 |
412 virtual void OnWindowUpdate(SpdyStreamId stream_id, | 400 void OnWindowUpdate(SpdyStreamId stream_id, |
413 uint32 delta_window_size) override { | 401 uint32 delta_window_size) override { |
414 last_window_update_stream_ = stream_id; | 402 last_window_update_stream_ = stream_id; |
415 last_window_update_delta_ = delta_window_size; | 403 last_window_update_delta_ = delta_window_size; |
416 } | 404 } |
417 | 405 |
418 virtual void OnPushPromise(SpdyStreamId stream_id, | 406 void OnPushPromise(SpdyStreamId stream_id, |
419 SpdyStreamId promised_stream_id, | 407 SpdyStreamId promised_stream_id, |
420 bool end) override { | 408 bool end) override { |
421 ++push_promise_frame_count_; | 409 ++push_promise_frame_count_; |
422 InitHeaderStreaming(PUSH_PROMISE, stream_id); | 410 InitHeaderStreaming(PUSH_PROMISE, stream_id); |
423 last_push_promise_stream_ = stream_id; | 411 last_push_promise_stream_ = stream_id; |
424 last_push_promise_promised_stream_ = promised_stream_id; | 412 last_push_promise_promised_stream_ = promised_stream_id; |
425 } | 413 } |
426 | 414 |
427 virtual void OnContinuation(SpdyStreamId stream_id, bool end) override { | 415 void OnContinuation(SpdyStreamId stream_id, bool end) override { |
428 ++continuation_count_; | 416 ++continuation_count_; |
429 } | 417 } |
430 | 418 |
431 virtual void OnAltSvc(SpdyStreamId stream_id, | 419 void OnAltSvc(SpdyStreamId stream_id, |
432 uint32 max_age, | 420 uint32 max_age, |
433 uint16 port, | 421 uint16 port, |
434 StringPiece protocol_id, | 422 StringPiece protocol_id, |
435 StringPiece host, | 423 StringPiece host, |
436 StringPiece origin) override { | 424 StringPiece origin) override { |
437 test_altsvc_ir_.set_stream_id(stream_id); | 425 test_altsvc_ir_.set_stream_id(stream_id); |
438 test_altsvc_ir_.set_max_age(max_age); | 426 test_altsvc_ir_.set_max_age(max_age); |
439 test_altsvc_ir_.set_port(port); | 427 test_altsvc_ir_.set_port(port); |
440 test_altsvc_ir_.set_protocol_id(protocol_id.as_string()); | 428 test_altsvc_ir_.set_protocol_id(protocol_id.as_string()); |
441 test_altsvc_ir_.set_host(host.as_string()); | 429 test_altsvc_ir_.set_host(host.as_string()); |
442 if (origin.length() > 0) { | 430 if (origin.length() > 0) { |
443 test_altsvc_ir_.set_origin(origin.as_string()); | 431 test_altsvc_ir_.set_origin(origin.as_string()); |
444 } | 432 } |
445 ++altsvc_count_; | 433 ++altsvc_count_; |
446 } | 434 } |
447 | 435 |
448 virtual void OnPriority(SpdyStreamId stream_id, | 436 void OnPriority(SpdyStreamId stream_id, |
449 SpdyStreamId parent_stream_id, | 437 SpdyStreamId parent_stream_id, |
450 uint8 weight, | 438 uint8 weight, |
451 bool exclusive) override { | 439 bool exclusive) override { |
452 ++priority_count_; | 440 ++priority_count_; |
453 } | 441 } |
454 | 442 |
455 virtual bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { | 443 bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override { |
456 DLOG(INFO) << "Unknown frame type " << frame_type; | 444 DLOG(INFO) << "Unknown frame type " << frame_type; |
457 return on_unknown_frame_result_; | 445 return on_unknown_frame_result_; |
458 } | 446 } |
459 | 447 |
460 virtual void OnSendCompressedFrame(SpdyStreamId stream_id, | 448 void OnSendCompressedFrame(SpdyStreamId stream_id, |
461 SpdyFrameType type, | 449 SpdyFrameType type, |
462 size_t payload_len, | 450 size_t payload_len, |
463 size_t frame_len) override { | 451 size_t frame_len) override { |
464 last_payload_len_ = payload_len; | 452 last_payload_len_ = payload_len; |
465 last_frame_len_ = frame_len; | 453 last_frame_len_ = frame_len; |
466 } | 454 } |
467 | 455 |
468 virtual void OnReceiveCompressedFrame(SpdyStreamId stream_id, | 456 void OnReceiveCompressedFrame(SpdyStreamId stream_id, |
469 SpdyFrameType type, | 457 SpdyFrameType type, |
470 size_t frame_len) override { | 458 size_t frame_len) override { |
471 last_frame_len_ = frame_len; | 459 last_frame_len_ = frame_len; |
472 } | 460 } |
473 | 461 |
474 // Convenience function which runs a framer simulation with particular input. | 462 // Convenience function which runs a framer simulation with particular input. |
475 void SimulateInFramer(const unsigned char* input, size_t size) { | 463 void SimulateInFramer(const unsigned char* input, size_t size) { |
476 framer_.set_enable_compression(use_compression_); | 464 framer_.set_enable_compression(use_compression_); |
477 framer_.set_visitor(this); | 465 framer_.set_visitor(this); |
478 size_t input_remaining = size; | 466 size_t input_remaining = size; |
479 const char* input_ptr = reinterpret_cast<const char*>(input); | 467 const char* input_ptr = reinterpret_cast<const char*>(input); |
480 while (input_remaining > 0 && | 468 while (input_remaining > 0 && |
(...skipping 5070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5551 TestSpdyVisitor visitor(spdy_version_); | 5539 TestSpdyVisitor visitor(spdy_version_); |
5552 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); | 5540 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); |
5553 | 5541 |
5554 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); | 5542 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); |
5555 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, | 5543 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, |
5556 visitor.framer_.error_code()) | 5544 visitor.framer_.error_code()) |
5557 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); | 5545 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); |
5558 } | 5546 } |
5559 | 5547 |
5560 } // namespace net | 5548 } // namespace net |
OLD | NEW |