| 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/spdy/spdy_proxy_client_socket.h" | 5 #include "net/spdy/spdy_proxy_client_socket.h" |
| 6 | 6 |
| 7 #include <algorithm> // min | 7 #include <algorithm> // min |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 | 432 |
| 433 // SpdyStream::Delegate methods: | 433 // SpdyStream::Delegate methods: |
| 434 // Called when SYN frame has been sent. | 434 // Called when SYN frame has been sent. |
| 435 // Returns true if no more data to be sent after SYN frame. | 435 // Returns true if no more data to be sent after SYN frame. |
| 436 void SpdyProxyClientSocket::OnRequestHeadersSent() { | 436 void SpdyProxyClientSocket::OnRequestHeadersSent() { |
| 437 DCHECK_EQ(next_state_, STATE_SEND_REQUEST_COMPLETE); | 437 DCHECK_EQ(next_state_, STATE_SEND_REQUEST_COMPLETE); |
| 438 | 438 |
| 439 OnIOComplete(OK); | 439 OnIOComplete(OK); |
| 440 } | 440 } |
| 441 | 441 |
| 442 int SpdyProxyClientSocket::OnResponseHeadersReceived( | 442 SpdyResponseHeadersStatus SpdyProxyClientSocket::OnResponseHeadersUpdated( |
| 443 const SpdyHeaderBlock& response, | 443 const SpdyHeaderBlock& response_headers) { |
| 444 base::Time response_time, | |
| 445 int status) { | |
| 446 // If we've already received the reply, existing headers are too late. | 444 // If we've already received the reply, existing headers are too late. |
| 447 // TODO(mbelshe): figure out a way to make HEADERS frames useful after the | 445 // TODO(mbelshe): figure out a way to make HEADERS frames useful after the |
| 448 // initial response. | 446 // initial response. |
| 449 if (next_state_ != STATE_READ_REPLY_COMPLETE) | 447 if (next_state_ != STATE_READ_REPLY_COMPLETE) |
| 450 return OK; | 448 return RESPONSE_HEADERS_ARE_COMPLETE; |
| 451 | 449 |
| 452 // Save the response | 450 // Save the response |
| 453 if (!SpdyHeadersToHttpResponse( | 451 if (!SpdyHeadersToHttpResponse( |
| 454 response, spdy_stream_->GetProtocolVersion(), &response_)) | 452 response_headers, spdy_stream_->GetProtocolVersion(), &response_)) |
| 455 return ERR_INCOMPLETE_SPDY_HEADERS; | 453 return RESPONSE_HEADERS_ARE_INCOMPLETE; |
| 456 | 454 |
| 457 OnIOComplete(status); | 455 OnIOComplete(OK); |
| 458 return OK; | 456 return RESPONSE_HEADERS_ARE_COMPLETE; |
| 459 } | 457 } |
| 460 | 458 |
| 461 // Called when data is received or on EOF (if |buffer| is NULL). | 459 // Called when data is received or on EOF (if |buffer| is NULL). |
| 462 int SpdyProxyClientSocket::OnDataReceived(scoped_ptr<SpdyBuffer> buffer) { | 460 void SpdyProxyClientSocket::OnDataReceived(scoped_ptr<SpdyBuffer> buffer) { |
| 463 if (buffer) { | 461 if (buffer) { |
| 464 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, | 462 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, |
| 465 buffer->GetRemainingSize(), | 463 buffer->GetRemainingSize(), |
| 466 buffer->GetRemainingData()); | 464 buffer->GetRemainingData()); |
| 467 read_buffer_queue_.Enqueue(buffer.Pass()); | 465 read_buffer_queue_.Enqueue(buffer.Pass()); |
| 468 } else { | 466 } else { |
| 469 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, 0, NULL); | 467 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, 0, NULL); |
| 470 } | 468 } |
| 471 | 469 |
| 472 if (!read_callback_.is_null()) { | 470 if (!read_callback_.is_null()) { |
| 473 int rv = PopulateUserReadBuffer(user_buffer_->data(), user_buffer_len_); | 471 int rv = PopulateUserReadBuffer(user_buffer_->data(), user_buffer_len_); |
| 474 CompletionCallback c = read_callback_; | 472 CompletionCallback c = read_callback_; |
| 475 read_callback_.Reset(); | 473 read_callback_.Reset(); |
| 476 user_buffer_ = NULL; | 474 user_buffer_ = NULL; |
| 477 user_buffer_len_ = 0; | 475 user_buffer_len_ = 0; |
| 478 c.Run(rv); | 476 c.Run(rv); |
| 479 } | 477 } |
| 480 return OK; | |
| 481 } | 478 } |
| 482 | 479 |
| 483 void SpdyProxyClientSocket::OnDataSent() { | 480 void SpdyProxyClientSocket::OnDataSent() { |
| 484 DCHECK(!write_callback_.is_null()); | 481 DCHECK(!write_callback_.is_null()); |
| 485 | 482 |
| 486 int rv = write_buffer_len_; | 483 int rv = write_buffer_len_; |
| 487 write_buffer_len_ = 0; | 484 write_buffer_len_ = 0; |
| 488 ResetAndReturn(&write_callback_).Run(rv); | 485 ResetAndReturn(&write_callback_).Run(rv); |
| 489 } | 486 } |
| 490 | 487 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 514 } else if (!read_callback_.is_null()) { | 511 } else if (!read_callback_.is_null()) { |
| 515 // If we have a read_callback_, the we need to make sure we call it back. | 512 // If we have a read_callback_, the we need to make sure we call it back. |
| 516 OnDataReceived(scoped_ptr<SpdyBuffer>()); | 513 OnDataReceived(scoped_ptr<SpdyBuffer>()); |
| 517 } | 514 } |
| 518 // This may have been deleted by read_callback_, so check first. | 515 // This may have been deleted by read_callback_, so check first. |
| 519 if (weak_ptr.get() && !write_callback.is_null()) | 516 if (weak_ptr.get() && !write_callback.is_null()) |
| 520 write_callback.Run(ERR_CONNECTION_CLOSED); | 517 write_callback.Run(ERR_CONNECTION_CLOSED); |
| 521 } | 518 } |
| 522 | 519 |
| 523 } // namespace net | 520 } // namespace net |
| OLD | NEW |