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 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 std::string request_line; | 358 std::string request_line; |
359 BuildTunnelRequest(endpoint_, authorization_headers, user_agent_, | 359 BuildTunnelRequest(endpoint_, authorization_headers, user_agent_, |
360 &request_line, &request_.extra_headers); | 360 &request_line, &request_.extra_headers); |
361 | 361 |
362 net_log_.AddEvent( | 362 net_log_.AddEvent( |
363 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 363 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
364 base::Bind(&HttpRequestHeaders::NetLogCallback, | 364 base::Bind(&HttpRequestHeaders::NetLogCallback, |
365 base::Unretained(&request_.extra_headers), &request_line)); | 365 base::Unretained(&request_.extra_headers), &request_line)); |
366 | 366 |
367 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock()); | 367 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock()); |
368 CreateSpdyHeadersFromHttpRequest(request_, request_.extra_headers, | 368 CreateSpdyHeadersFromHttpRequest(request_, request_.extra_headers, true, |
369 spdy_stream_->GetProtocolVersion(), true, | |
370 headers.get()); | 369 headers.get()); |
371 | 370 |
372 return spdy_stream_->SendRequestHeaders(std::move(headers), | 371 return spdy_stream_->SendRequestHeaders(std::move(headers), |
373 MORE_DATA_TO_SEND); | 372 MORE_DATA_TO_SEND); |
374 } | 373 } |
375 | 374 |
376 int SpdyProxyClientSocket::DoSendRequestComplete(int result) { | 375 int SpdyProxyClientSocket::DoSendRequestComplete(int result) { |
377 if (result < 0) | 376 if (result < 0) |
378 return result; | 377 return result; |
379 | 378 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 | 443 |
445 SpdyResponseHeadersStatus SpdyProxyClientSocket::OnResponseHeadersUpdated( | 444 SpdyResponseHeadersStatus SpdyProxyClientSocket::OnResponseHeadersUpdated( |
446 const SpdyHeaderBlock& response_headers) { | 445 const SpdyHeaderBlock& response_headers) { |
447 // If we've already received the reply, existing headers are too late. | 446 // If we've already received the reply, existing headers are too late. |
448 // TODO(mbelshe): figure out a way to make HEADERS frames useful after the | 447 // TODO(mbelshe): figure out a way to make HEADERS frames useful after the |
449 // initial response. | 448 // initial response. |
450 if (next_state_ != STATE_READ_REPLY_COMPLETE) | 449 if (next_state_ != STATE_READ_REPLY_COMPLETE) |
451 return RESPONSE_HEADERS_ARE_COMPLETE; | 450 return RESPONSE_HEADERS_ARE_COMPLETE; |
452 | 451 |
453 // Save the response | 452 // Save the response |
454 if (!SpdyHeadersToHttpResponse( | 453 if (!SpdyHeadersToHttpResponse(response_headers, &response_)) |
455 response_headers, spdy_stream_->GetProtocolVersion(), &response_)) | |
456 return RESPONSE_HEADERS_ARE_INCOMPLETE; | 454 return RESPONSE_HEADERS_ARE_INCOMPLETE; |
457 | 455 |
458 OnIOComplete(OK); | 456 OnIOComplete(OK); |
459 return RESPONSE_HEADERS_ARE_COMPLETE; | 457 return RESPONSE_HEADERS_ARE_COMPLETE; |
460 } | 458 } |
461 | 459 |
462 // Called when data is received or on EOF (if |buffer| is NULL). | 460 // Called when data is received or on EOF (if |buffer| is NULL). |
463 void SpdyProxyClientSocket::OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) { | 461 void SpdyProxyClientSocket::OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) { |
464 if (buffer) { | 462 if (buffer) { |
465 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, | 463 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 } else if (!read_callback_.is_null()) { | 524 } else if (!read_callback_.is_null()) { |
527 // If we have a read_callback_, the we need to make sure we call it back. | 525 // If we have a read_callback_, the we need to make sure we call it back. |
528 OnDataReceived(std::unique_ptr<SpdyBuffer>()); | 526 OnDataReceived(std::unique_ptr<SpdyBuffer>()); |
529 } | 527 } |
530 // This may have been deleted by read_callback_, so check first. | 528 // This may have been deleted by read_callback_, so check first. |
531 if (weak_ptr.get() && !write_callback.is_null()) | 529 if (weak_ptr.get() && !write_callback.is_null()) |
532 write_callback.Run(ERR_CONNECTION_CLOSED); | 530 write_callback.Run(ERR_CONNECTION_CLOSED); |
533 } | 531 } |
534 | 532 |
535 } // namespace net | 533 } // namespace net |
OLD | NEW |