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 "content/browser/renderer_host/p2p/socket_host_tcp.h" | 5 #include "content/browser/renderer_host/p2p/socket_host_tcp.h" |
6 | 6 |
7 #include "base/sys_byteorder.h" | 7 #include "base/sys_byteorder.h" |
8 #include "content/common/p2p_messages.h" | 8 #include "content/common/p2p_messages.h" |
9 #include "ipc/ipc_sender.h" | 9 #include "ipc/ipc_sender.h" |
10 #include "jingle/glue/fake_ssl_client_socket.h" | 10 #include "jingle/glue/fake_ssl_client_socket.h" |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 if (net::OK != socket_->SetReceiveBufferSize(kRecvSocketBufferSize)) { | 227 if (net::OK != socket_->SetReceiveBufferSize(kRecvSocketBufferSize)) { |
228 LOG(WARNING) << "Failed to set socket receive buffer size to " | 228 LOG(WARNING) << "Failed to set socket receive buffer size to " |
229 << kRecvSocketBufferSize; | 229 << kRecvSocketBufferSize; |
230 } | 230 } |
231 | 231 |
232 if (net::OK != socket_->SetSendBufferSize(kSendSocketBufferSize)) { | 232 if (net::OK != socket_->SetSendBufferSize(kSendSocketBufferSize)) { |
233 LOG(WARNING) << "Failed to set socket send buffer size to " | 233 LOG(WARNING) << "Failed to set socket send buffer size to " |
234 << kSendSocketBufferSize; | 234 << kSendSocketBufferSize; |
235 } | 235 } |
236 | 236 |
237 DoSendSocketCreateMsg(); | 237 if (!DoSendSocketCreateMsg()) |
| 238 return; |
| 239 |
| 240 DCHECK_EQ(state_, STATE_OPEN); |
238 DoRead(); | 241 DoRead(); |
239 } | 242 } |
240 | 243 |
241 void P2PSocketHostTcpBase::DoSendSocketCreateMsg() { | 244 bool P2PSocketHostTcpBase::DoSendSocketCreateMsg() { |
242 DCHECK(socket_.get()); | 245 DCHECK(socket_.get()); |
243 | 246 |
244 net::IPEndPoint local_address; | 247 net::IPEndPoint local_address; |
245 int result = socket_->GetLocalAddress(&local_address); | 248 int result = socket_->GetLocalAddress(&local_address); |
246 if (result < 0) { | 249 if (result < 0) { |
247 LOG(ERROR) << "P2PSocketHostTcpBase::OnConnected: unable to get local" | 250 LOG(ERROR) << "P2PSocketHostTcpBase::OnConnected: unable to get local" |
248 << " address: " << result; | 251 << " address: " << result; |
249 OnError(); | 252 OnError(); |
250 return; | 253 return false; |
251 } | 254 } |
252 | 255 |
253 VLOG(1) << "Local address: " << local_address.ToString(); | 256 VLOG(1) << "Local address: " << local_address.ToString(); |
254 | 257 |
255 net::IPEndPoint remote_address; | 258 net::IPEndPoint remote_address; |
256 result = socket_->GetPeerAddress(&remote_address); | 259 result = socket_->GetPeerAddress(&remote_address); |
257 if (result < 0) { | 260 if (result < 0) { |
258 LOG(ERROR) << "P2PSocketHostTcpBase::OnConnected: unable to get peer" | 261 LOG(ERROR) << "P2PSocketHostTcpBase::OnConnected: unable to get peer" |
259 << " address: " << result; | 262 << " address: " << result; |
260 OnError(); | 263 OnError(); |
261 return; | 264 return false; |
262 } | 265 } |
263 VLOG(1) << "Remote address: " << remote_address.ToString(); | 266 VLOG(1) << "Remote address: " << remote_address.ToString(); |
264 if (remote_address_.ip_address.address().empty()) { | 267 if (remote_address_.ip_address.address().empty()) { |
265 // Save |remote_address| if address is empty. | 268 // Save |remote_address| if address is empty. |
266 remote_address_.ip_address = remote_address; | 269 remote_address_.ip_address = remote_address; |
267 } | 270 } |
268 | 271 |
269 // If we are not doing TLS, we are ready to send data now. | 272 // If we are not doing TLS, we are ready to send data now. |
270 // In case of TLS SignalConnect will be sent only after TLS handshake is | 273 // In case of TLS SignalConnect will be sent only after TLS handshake is |
271 // successfull. So no buffering will be done at socket handlers if any | 274 // successfull. So no buffering will be done at socket handlers if any |
272 // packets sent before that by the application. | 275 // packets sent before that by the application. |
273 message_sender_->Send(new P2PMsg_OnSocketCreated( | 276 message_sender_->Send(new P2PMsg_OnSocketCreated( |
274 id_, local_address, remote_address)); | 277 id_, local_address, remote_address)); |
| 278 return true; |
275 } | 279 } |
276 | 280 |
277 void P2PSocketHostTcpBase::DoRead() { | 281 void P2PSocketHostTcpBase::DoRead() { |
278 int result; | 282 int result; |
279 do { | 283 do { |
280 if (!read_buffer_.get()) { | 284 if (!read_buffer_.get()) { |
281 read_buffer_ = new net::GrowableIOBuffer(); | 285 read_buffer_ = new net::GrowableIOBuffer(); |
282 read_buffer_->SetCapacity(kReadBufferSize); | 286 read_buffer_->SetCapacity(kReadBufferSize); |
283 } else if (read_buffer_->RemainingCapacity() < kReadBufferSize) { | 287 } else if (read_buffer_->RemainingCapacity() < kReadBufferSize) { |
284 // Make sure that we always have at least kReadBufferSize of | 288 // Make sure that we always have at least kReadBufferSize of |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 } else { | 610 } else { |
607 packet_size += kTurnChannelDataHeaderSize; | 611 packet_size += kTurnChannelDataHeaderSize; |
608 // Calculate any padding if present. | 612 // Calculate any padding if present. |
609 if (packet_size % 4) | 613 if (packet_size % 4) |
610 *pad_bytes = 4 - packet_size % 4; | 614 *pad_bytes = 4 - packet_size % 4; |
611 } | 615 } |
612 return packet_size; | 616 return packet_size; |
613 } | 617 } |
614 | 618 |
615 } // namespace content | 619 } // namespace content |
OLD | NEW |