Chromium Code Reviews| Index: chrome/browser/extensions/api/cast_channel/cast_socket.cc |
| =================================================================== |
| --- chrome/browser/extensions/api/cast_channel/cast_socket.cc (revision 250590) |
| +++ chrome/browser/extensions/api/cast_channel/cast_socket.cc (working copy) |
| @@ -71,9 +71,11 @@ |
| ApiResource(owner_extension_id), |
| channel_id_(0), |
| url_(url), |
| + url_log_str_("[URL: " + url.spec() + "] "), |
|
Wez
2014/02/12 21:13:16
nit: Is "URL:" redundant here?
mark a. foltz
2014/02/12 21:45:02
This is really only for the purposes of logging an
Wez
2014/02/12 21:52:14
+1
Munjal (Google)
2014/02/12 22:34:36
Done.
Started doing that but thought I cannot do
Munjal (Google)
2014/02/12 22:34:36
Done.
|
| delegate_(delegate), |
| auth_required_(false), |
| current_message_size_(0), |
| + current_message_(new CastMessage()), |
| net_log_(net_log), |
| connect_state_(CONN_STATE_NONE), |
| write_state_(WRITE_STATE_NONE), |
| @@ -145,8 +147,8 @@ |
| bool result = net::X509Certificate::GetDEREncoded( |
| ssl_info.cert->os_cert_handle(), cert); |
| if (result) |
| - VLOG(1) << "[URL: " << url_.spec() |
| - << "] Successfully extracted peer certificate: " << *cert; |
| + VLOG(1) << url_log_str_ |
| + << "Successfully extracted peer certificate: " << *cert; |
| return result; |
| } |
| @@ -156,7 +158,7 @@ |
| void CastSocket::Connect(const net::CompletionCallback& callback) { |
| DCHECK(CalledOnValidThread()); |
| - VLOG(1) << "Connect readyState = " << ready_state_; |
| + VLOG(1) << url_log_str_ << "Connect readyState = " << ready_state_; |
| if (ready_state_ != READY_STATE_NONE) { |
| callback.Run(net::ERR_CONNECTION_FAILED); |
| return; |
| @@ -232,7 +234,7 @@ |
| } |
| int CastSocket::DoTcpConnect() { |
| - VLOG(1) << "DoTcpConnect"; |
| + VLOG(1) << url_log_str_ << "DoTcpConnect"; |
| connect_state_ = CONN_STATE_TCP_CONNECT_COMPLETE; |
| tcp_socket_ = CreateTcpSocket(); |
| return tcp_socket_->Connect( |
| @@ -240,7 +242,7 @@ |
| } |
| int CastSocket::DoTcpConnectComplete(int result) { |
| - VLOG(1) << "DoTcpConnectComplete: " << result; |
| + VLOG(1) << url_log_str_ << "DoTcpConnectComplete: " << result; |
| if (result == net::OK) { |
| // Enable TCP protocol-level keep-alive. |
| bool result = tcp_socket_->SetKeepAlive(true, kTcpKeepAliveDelaySecs); |
| @@ -251,7 +253,7 @@ |
| } |
| int CastSocket::DoSslConnect() { |
| - VLOG(1) << "DoSslConnect"; |
| + VLOG(1) << url_log_str_ << "DoSslConnect"; |
| connect_state_ = CONN_STATE_SSL_CONNECT_COMPLETE; |
| socket_ = CreateSslSocket(tcp_socket_.PassAs<net::StreamSocket>()); |
| return socket_->Connect( |
| @@ -259,7 +261,7 @@ |
| } |
| int CastSocket::DoSslConnectComplete(int result) { |
| - VLOG(1) << "DoSslConnectComplete: " << result; |
| + VLOG(1) << url_log_str_ << "DoSslConnectComplete: " << result; |
| if (result == net::ERR_CERT_AUTHORITY_INVALID && |
| peer_cert_.empty() && |
| ExtractPeerCert(&peer_cert_)) { |
| @@ -271,11 +273,12 @@ |
| } |
| int CastSocket::DoAuthChallengeSend() { |
| - VLOG(1) << "DoAuthChallengeSend"; |
| + VLOG(1) << url_log_str_ << "DoAuthChallengeSend"; |
| connect_state_ = CONN_STATE_AUTH_CHALLENGE_SEND_COMPLETE; |
| CastMessage challenge_message; |
| CreateAuthChallengeMessage(&challenge_message); |
| - VLOG(1) << "Sending challenge: " << CastMessageToString(challenge_message); |
| + VLOG(1) << url_log_str_ |
| + << "Sending challenge: " << CastMessageToString(challenge_message); |
| // Post a task to send auth challenge so that DoWriteLoop is not nested inside |
| // DoConnectLoop. This is not strictly necessary but keeps the write loop |
| // code decoupled from connect loop code. |
| @@ -289,7 +292,7 @@ |
| } |
| int CastSocket::DoAuthChallengeSendComplete(int result) { |
| - VLOG(1) << "DoAuthChallengeSendComplete: " << result; |
| + VLOG(1) << url_log_str_ << "DoAuthChallengeSendComplete: " << result; |
| if (result < 0) |
| return result; |
| connect_state_ = CONN_STATE_AUTH_CHALLENGE_REPLY_COMPLETE; |
| @@ -302,12 +305,12 @@ |
| } |
| int CastSocket::DoAuthChallengeReplyComplete(int result) { |
| - VLOG(1) << "DoAuthChallengeReplyComplete: " << result; |
| + VLOG(1) << url_log_str_ << "DoAuthChallengeReplyComplete: " << result; |
| if (result < 0) |
| return result; |
| if (!VerifyChallengeReply()) |
| return net::ERR_FAILED; |
| - VLOG(1) << "Auth challenge verification succeeded"; |
| + VLOG(1) << url_log_str_ << "Auth challenge verification succeeded"; |
| return net::OK; |
| } |
| @@ -322,7 +325,7 @@ |
| void CastSocket::Close(const net::CompletionCallback& callback) { |
| DCHECK(CalledOnValidThread()); |
| - VLOG(1) << "Close ReadyState = " << ready_state_; |
| + VLOG(1) << url_log_str_ << "Close ReadyState = " << ready_state_; |
| tcp_socket_.reset(); |
| socket_.reset(); |
| cert_verifier_.reset(); |
| @@ -366,7 +369,7 @@ |
| void CastSocket::DoWriteLoop(int result) { |
| DCHECK(CalledOnValidThread()); |
| - VLOG(1) << "WriteData q = " << write_queue_.size(); |
| + VLOG(1) << url_log_str_ << "DoWriteLoop queue size: " << write_queue_.size(); |
| if (write_queue_.empty()) { |
| write_state_ = WRITE_STATE_NONE; |
| @@ -416,8 +419,9 @@ |
| DCHECK(!write_queue_.empty()); |
| WriteRequest& request = write_queue_.front(); |
| - VLOG(1) << "WriteData byte_count = " << request.io_buffer->size() |
| - << " bytes_written " << request.io_buffer->BytesConsumed(); |
| + VLOG(2) << url_log_str_ |
| + << "WriteData byte_count = " << request.io_buffer->size() |
| + << " bytes_written " << request.io_buffer->BytesConsumed(); |
| write_state_ = WRITE_STATE_WRITE_COMPLETE; |
| @@ -564,10 +568,11 @@ |
| } |
| int CastSocket::DoReadComplete(int result) { |
| - VLOG(1) << "DoReadDataComplete result = " << result |
| + VLOG(2) << url_log_str_ << "DoReadComplete result = " << result |
| << " header offset = " << header_read_buffer_->offset() |
| << " body offset = " << body_read_buffer_->offset(); |
| if (result <= 0) { // 0 means EOF: the peer closed the socket |
| + VLOG(1) << url_log_str_ << "Read error, peer closed the socket"; |
| error_state_ = CHANNEL_ERROR_SOCKET_ERROR; |
| read_state_ = READ_STATE_ERROR; |
| return result == 0 ? net::ERR_FAILED : result; |
| @@ -603,22 +608,23 @@ |
| int CastSocket::DoReadCallback() { |
| read_state_ = READ_STATE_READ; |
| - if (IsAuthMessage(current_message_)) { |
| + const CastMessage& message = *(current_message_.get()); |
| + if (IsAuthMessage(message)) { |
| // An auth message is received, check that connect flow is running. |
| if (ready_state_ == READY_STATE_CONNECTING) { |
| - challenge_reply_.reset(new CastMessage(current_message_)); |
| + challenge_reply_.reset(new CastMessage(message)); |
| PostTaskToStartConnectLoop(net::OK); |
| } else { |
| read_state_ = READ_STATE_ERROR; |
| } |
| } else if (delegate_) { |
| - MessageInfo message; |
| - if (CastMessageToMessageInfo(current_message_, &message)) |
| - delegate_->OnMessage(this, message); |
| + MessageInfo message_info; |
| + if (CastMessageToMessageInfo(message, &message_info)) |
| + delegate_->OnMessage(this, message_info); |
| else |
| read_state_ = READ_STATE_ERROR; |
| } |
| - current_message_.Clear(); |
| + current_message_->Clear(); |
|
Wez
2014/02/12 21:13:16
Rather than clearing & re-using the CastMessage, w
Munjal (Google)
2014/02/12 22:34:36
So that we don't create many objects on the heap e
|
| return net::OK; |
| } |
| @@ -641,7 +647,8 @@ |
| if (header.message_size > kMaxMessageSize) |
| return false; |
| - VLOG(1) << "Parsed header { message_size: " << header.message_size << " }"; |
| + VLOG(2) << url_log_str_ |
| + << "Parsed header { message_size: " << header.message_size << " }"; |
| current_message_size_ = header.message_size; |
| return true; |
| } |
| @@ -649,7 +656,7 @@ |
| bool CastSocket::ProcessBody() { |
| DCHECK_EQ(static_cast<uint32>(body_read_buffer_->offset()), |
| current_message_size_); |
| - if (!current_message_.ParseFromArray( |
| + if (!current_message_->ParseFromArray( |
| body_read_buffer_->StartOfBuffer(), current_message_size_)) { |
| return false; |
| } |
| @@ -686,7 +693,7 @@ |
| } |
| bool CastSocket::ParseChannelUrl(const GURL& url) { |
| - VLOG(1) << "url = " + url.spec(); |
| + VLOG(2) << url_log_str_ << "ParseChannelUrl"; |
| if (url.SchemeIs(kCastInsecureScheme)) { |
| auth_required_ = false; |
| } else if (url.SchemeIs(kCastSecureScheme)) { |
| @@ -696,8 +703,8 @@ |
| } |
| // TODO(mfoltz): Manual parsing, yech. Register cast[s] as standard schemes? |
| // TODO(mfoltz): Test for IPv6 addresses. Brackets or no brackets? |
| - // TODO(mfoltz): Maybe enforce restriction to IPv4 private and IPv6 link-local |
| - // networks |
|
Wez
2014/02/12 21:13:16
Did this need re-wrapping?
Munjal (Google)
2014/02/12 22:34:36
Yes, I think it was 81 without wrapping.
|
| + // TODO(mfoltz): Maybe enforce restriction to IPv4 private and IPv6 |
| + // link-local networks |
| const std::string& path = url.path(); |
| // Shortest possible: //A:B |
| if (path.size() < 5) { |
| @@ -712,7 +719,7 @@ |
| } |
| const std::string& ip_address_str = path.substr(2, colon - 2); |
| const std::string& port_str = path.substr(colon + 1); |
| - VLOG(1) << "addr " << ip_address_str << " port " << port_str; |
| + VLOG(2) << url_log_str_ << "IP: " << ip_address_str << " Port: " << port_str; |
| int port; |
| if (!base::StringToInt(port_str, &port)) |
| return false; |