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 "net/quic/quic_http_stream.h" | 5 #include "net/quic/quic_http_stream.h" |
6 | 6 |
7 #include "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 } while (next_state_ != STATE_NONE && next_state_ != STATE_OPEN && | 405 } while (next_state_ != STATE_NONE && next_state_ != STATE_OPEN && |
406 rv != ERR_IO_PENDING); | 406 rv != ERR_IO_PENDING); |
407 | 407 |
408 return rv; | 408 return rv; |
409 } | 409 } |
410 | 410 |
411 int QuicHttpStream::DoSendHeaders() { | 411 int QuicHttpStream::DoSendHeaders() { |
412 if (!stream_) | 412 if (!stream_) |
413 return ERR_UNEXPECTED; | 413 return ERR_UNEXPECTED; |
414 | 414 |
415 if (stream_->version() <= QUIC_VERSION_12) { | |
416 if (request_.empty() && !stream_->CanWrite( | |
417 base::Bind(&QuicHttpStream::OnIOComplete, | |
418 weak_factory_.GetWeakPtr()))) { | |
419 // Do not compress headers unless it is likely that they can be sent. | |
420 next_state_ = STATE_SEND_HEADERS; | |
421 return ERR_IO_PENDING; | |
422 } | |
423 request_ = stream_->compressor()->CompressHeadersWithPriority( | |
424 ConvertRequestPriorityToQuicPriority(priority_), request_headers_); | |
425 } | |
426 // Log the actual request with the URL Request's net log. | 415 // Log the actual request with the URL Request's net log. |
427 stream_net_log_.AddEvent( | 416 stream_net_log_.AddEvent( |
428 NetLog::TYPE_HTTP_TRANSACTION_QUIC_SEND_REQUEST_HEADERS, | 417 NetLog::TYPE_HTTP_TRANSACTION_QUIC_SEND_REQUEST_HEADERS, |
429 base::Bind(&QuicRequestNetLogCallback, &request_headers_, priority_)); | 418 base::Bind(&QuicRequestNetLogCallback, &request_headers_, priority_)); |
430 // Also log to the QuicSession's net log. | 419 // Also log to the QuicSession's net log. |
431 stream_->net_log().AddEvent( | 420 stream_->net_log().AddEvent( |
432 NetLog::TYPE_QUIC_HTTP_STREAM_SEND_REQUEST_HEADERS, | 421 NetLog::TYPE_QUIC_HTTP_STREAM_SEND_REQUEST_HEADERS, |
433 base::Bind(&QuicRequestNetLogCallback, &request_headers_, priority_)); | 422 base::Bind(&QuicRequestNetLogCallback, &request_headers_, priority_)); |
434 | 423 |
435 bool has_upload_data = request_body_stream_ != NULL; | 424 bool has_upload_data = request_body_stream_ != NULL; |
436 | 425 |
437 next_state_ = STATE_SEND_HEADERS_COMPLETE; | 426 next_state_ = STATE_SEND_HEADERS_COMPLETE; |
438 int rv = (stream_->version() > QUIC_VERSION_12) ? | 427 int rv = stream_->WriteHeaders(request_headers_, !has_upload_data); |
439 stream_->WriteHeaders(request_headers_, !has_upload_data) : | |
440 stream_->WriteStreamData(request_, !has_upload_data, | |
441 base::Bind(&QuicHttpStream::OnIOComplete, | |
442 weak_factory_.GetWeakPtr())); | |
443 request_headers_.clear(); | 428 request_headers_.clear(); |
444 return rv; | 429 return rv; |
445 } | 430 } |
446 | 431 |
447 int QuicHttpStream::DoSendHeadersComplete(int rv) { | 432 int QuicHttpStream::DoSendHeadersComplete(int rv) { |
448 if (rv < 0) | 433 if (rv < 0) |
449 return rv; | 434 return rv; |
450 | 435 |
451 next_state_ = request_body_stream_ ? | 436 next_state_ = request_body_stream_ ? |
452 STATE_READ_REQUEST_BODY : STATE_OPEN; | 437 STATE_READ_REQUEST_BODY : STATE_OPEN; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 | 541 |
557 void QuicHttpStream::BufferResponseBody(const char* data, int length) { | 542 void QuicHttpStream::BufferResponseBody(const char* data, int length) { |
558 if (length == 0) | 543 if (length == 0) |
559 return; | 544 return; |
560 IOBufferWithSize* io_buffer = new IOBufferWithSize(length); | 545 IOBufferWithSize* io_buffer = new IOBufferWithSize(length); |
561 memcpy(io_buffer->data(), data, length); | 546 memcpy(io_buffer->data(), data, length); |
562 response_body_.push_back(make_scoped_refptr(io_buffer)); | 547 response_body_.push_back(make_scoped_refptr(io_buffer)); |
563 } | 548 } |
564 | 549 |
565 } // namespace net | 550 } // namespace net |
OLD | NEW |