Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: content/browser/renderer_host/p2p/socket_host_tcp.cc

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "content/common/p2p_messages.h" 7 #include "content/common/p2p_messages.h"
8 #include "net/base/io_buffer.h" 8 #include "net/base/io_buffer.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/base/net_util.h" 10 #include "net/base/net_util.h"
11 #include "net/base/sys_byteorder.h" 11 #include "net/base/sys_byteorder.h"
12 #include "net/socket/tcp_client_socket.h" 12 #include "net/socket/tcp_client_socket.h"
13 13
14 namespace { 14 namespace {
15 const int kReadBufferSize = 4096; 15 const int kReadBufferSize = 4096;
16 const int kPacketHeaderSize = sizeof(uint16); 16 const int kPacketHeaderSize = sizeof(uint16);
17 } // namespace 17 } // namespace
18 18
19 namespace content { 19 namespace content {
20 20
21 P2PSocketHostTcp::P2PSocketHostTcp(IPC::Message::Sender* message_sender, 21 P2PSocketHostTcp::P2PSocketHostTcp(IPC::Message::Sender* message_sender,
22 int routing_id, int id) 22 int routing_id, int id)
23 : P2PSocketHost(message_sender, routing_id, id), 23 : P2PSocketHost(message_sender, routing_id, id),
24 connected_(false), 24 connected_(false) {
25 ALLOW_THIS_IN_INITIALIZER_LIST(
26 connect_callback_(this, &P2PSocketHostTcp::OnConnected)),
27 ALLOW_THIS_IN_INITIALIZER_LIST(
28 read_callback_(this, &P2PSocketHostTcp::OnRead)),
29 ALLOW_THIS_IN_INITIALIZER_LIST(
30 write_callback_(this, &P2PSocketHostTcp::OnWritten)) {
31 } 25 }
32 26
33 P2PSocketHostTcp::~P2PSocketHostTcp() { 27 P2PSocketHostTcp::~P2PSocketHostTcp() {
34 if (state_ == STATE_OPEN) { 28 if (state_ == STATE_OPEN) {
35 DCHECK(socket_.get()); 29 DCHECK(socket_.get());
36 socket_.reset(); 30 socket_.reset();
37 } 31 }
38 } 32 }
39 33
40 bool P2PSocketHostTcp::InitAccepted(const net::IPEndPoint& remote_address, 34 bool P2PSocketHostTcp::InitAccepted(const net::IPEndPoint& remote_address,
(...skipping 20 matching lines...) Expand all
61 NULL, net::NetLog::Source())); 55 NULL, net::NetLog::Source()));
62 if (tcp_socket->Bind(local_address) != net::OK) { 56 if (tcp_socket->Bind(local_address) != net::OK) {
63 OnError(); 57 OnError();
64 return false; 58 return false;
65 } 59 }
66 socket_.reset(tcp_socket.release()); 60 socket_.reset(tcp_socket.release());
67 61
68 if (socket_->SetSendBufferSize(kMaxSendBufferSize)) 62 if (socket_->SetSendBufferSize(kMaxSendBufferSize))
69 LOG(WARNING) << "Failed to set send buffer size for TCP socket."; 63 LOG(WARNING) << "Failed to set send buffer size for TCP socket.";
70 64
71 int result = socket_->Connect(&connect_callback_); 65 int result = socket_->Connect(
66 base::Bind(&P2PSocketHostTcp::OnConnected, base::Unretained(this)));
72 if (result != net::ERR_IO_PENDING) { 67 if (result != net::ERR_IO_PENDING) {
73 OnConnected(result); 68 OnConnected(result);
74 } 69 }
75 70
76 return state_ != STATE_ERROR; 71 return state_ != STATE_ERROR;
77 } 72 }
78 73
79 void P2PSocketHostTcp::OnError() { 74 void P2PSocketHostTcp::OnError() {
80 socket_.reset(); 75 socket_.reset();
81 76
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 read_buffer_->SetCapacity(kReadBufferSize); 113 read_buffer_->SetCapacity(kReadBufferSize);
119 } else if (read_buffer_->RemainingCapacity() < kReadBufferSize) { 114 } else if (read_buffer_->RemainingCapacity() < kReadBufferSize) {
120 // Make sure that we always have at least kReadBufferSize of 115 // Make sure that we always have at least kReadBufferSize of
121 // remaining capacity in the read buffer. Normally all packets 116 // remaining capacity in the read buffer. Normally all packets
122 // are smaller than kReadBufferSize, so this is not really 117 // are smaller than kReadBufferSize, so this is not really
123 // required. 118 // required.
124 read_buffer_->SetCapacity(read_buffer_->capacity() + kReadBufferSize - 119 read_buffer_->SetCapacity(read_buffer_->capacity() + kReadBufferSize -
125 read_buffer_->RemainingCapacity()); 120 read_buffer_->RemainingCapacity());
126 } 121 }
127 result = socket_->Read(read_buffer_, read_buffer_->RemainingCapacity(), 122 result = socket_->Read(read_buffer_, read_buffer_->RemainingCapacity(),
128 &read_callback_); 123 base::Bind(&P2PSocketHostTcp::OnRead,
124 base::Unretained(this)));
129 DidCompleteRead(result); 125 DidCompleteRead(result);
130 } while (result > 0); 126 } while (result > 0);
131 } 127 }
132 128
133 void P2PSocketHostTcp::OnRead(int result) { 129 void P2PSocketHostTcp::OnRead(int result) {
134 DidCompleteRead(result); 130 DidCompleteRead(result);
135 if (state_ == STATE_OPEN) { 131 if (state_ == STATE_OPEN) {
136 DoRead(); 132 DoRead();
137 } 133 }
138 } 134 }
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 write_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(size), size); 221 write_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(size), size);
226 *reinterpret_cast<uint16*>(write_buffer_->data()) = htons(data.size()); 222 *reinterpret_cast<uint16*>(write_buffer_->data()) = htons(data.size());
227 memcpy(write_buffer_->data() + kPacketHeaderSize, &data[0], data.size()); 223 memcpy(write_buffer_->data() + kPacketHeaderSize, &data[0], data.size());
228 224
229 DoWrite(); 225 DoWrite();
230 } 226 }
231 227
232 void P2PSocketHostTcp::DoWrite() { 228 void P2PSocketHostTcp::DoWrite() {
233 while (true) { 229 while (true) {
234 int result = socket_->Write(write_buffer_, write_buffer_->BytesRemaining(), 230 int result = socket_->Write(write_buffer_, write_buffer_->BytesRemaining(),
235 &write_callback_); 231 base::Bind(&P2PSocketHostTcp::OnWritten,
232 base::Unretained(this)));
236 if (result >= 0) { 233 if (result >= 0) {
237 write_buffer_->DidConsume(result); 234 write_buffer_->DidConsume(result);
238 if (write_buffer_->BytesRemaining() == 0) { 235 if (write_buffer_->BytesRemaining() == 0) {
239 write_buffer_ = NULL; 236 write_buffer_ = NULL;
240 break; 237 break;
241 } 238 }
242 } else { 239 } else {
243 if (result != net::ERR_IO_PENDING) { 240 if (result != net::ERR_IO_PENDING) {
244 LOG(ERROR) << "Error when sending data in TCP socket: " << result; 241 LOG(ERROR) << "Error when sending data in TCP socket: " << result;
245 OnError(); 242 OnError();
(...skipping 23 matching lines...) Expand all
269 } 266 }
270 267
271 P2PSocketHost* P2PSocketHostTcp::AcceptIncomingTcpConnection( 268 P2PSocketHost* P2PSocketHostTcp::AcceptIncomingTcpConnection(
272 const net::IPEndPoint& remote_address, int id) { 269 const net::IPEndPoint& remote_address, int id) {
273 NOTREACHED(); 270 NOTREACHED();
274 OnError(); 271 OnError();
275 return NULL; 272 return NULL;
276 } 273 }
277 274
278 } // namespace content 275 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/p2p/socket_host_tcp.h ('k') | content/browser/renderer_host/p2p/socket_host_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698