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

Side by Side Diff: jingle/notifier/base/chrome_async_socket.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 "jingle/notifier/base/chrome_async_socket.h" 5 #include "jingle/notifier/base/chrome_async_socket.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <cstdlib> 9 #include <cstdlib>
10 10
(...skipping 14 matching lines...) Expand all
25 #include "net/socket/ssl_client_socket.h" 25 #include "net/socket/ssl_client_socket.h"
26 #include "net/socket/tcp_client_socket.h" 26 #include "net/socket/tcp_client_socket.h"
27 #include "talk/base/socketaddress.h" 27 #include "talk/base/socketaddress.h"
28 28
29 namespace notifier { 29 namespace notifier {
30 30
31 ChromeAsyncSocket::ChromeAsyncSocket( 31 ChromeAsyncSocket::ChromeAsyncSocket(
32 ResolvingClientSocketFactory* client_socket_factory, 32 ResolvingClientSocketFactory* client_socket_factory,
33 size_t read_buf_size, 33 size_t read_buf_size,
34 size_t write_buf_size) 34 size_t write_buf_size)
35 : connect_callback_(ALLOW_THIS_IN_INITIALIZER_LIST(this), 35 : client_socket_factory_(client_socket_factory),
36 &ChromeAsyncSocket::ProcessConnectDone),
37 read_callback_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
38 &ChromeAsyncSocket::ProcessReadDone),
39 write_callback_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
40 &ChromeAsyncSocket::ProcessWriteDone),
41 ssl_connect_callback_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
42 &ChromeAsyncSocket::ProcessSSLConnectDone),
43 client_socket_factory_(client_socket_factory),
44 state_(STATE_CLOSED), 36 state_(STATE_CLOSED),
45 error_(ERROR_NONE), 37 error_(ERROR_NONE),
46 net_error_(net::OK), 38 net_error_(net::OK),
47 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), 39 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
48 read_state_(IDLE), 40 read_state_(IDLE),
49 read_buf_(new net::IOBufferWithSize(read_buf_size)), 41 read_buf_(new net::IOBufferWithSize(read_buf_size)),
50 read_start_(0U), 42 read_start_(0U),
51 read_end_(0U), 43 read_end_(0U),
52 write_state_(IDLE), 44 write_state_(IDLE),
53 write_buf_(new net::IOBufferWithSize(write_buf_size)), 45 write_buf_(new net::IOBufferWithSize(write_buf_size)),
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 104
113 state_ = STATE_CONNECTING; 105 state_ = STATE_CONNECTING;
114 106
115 DCHECK_EQ(false, weak_factory_.HasWeakPtrs()); 107 DCHECK_EQ(false, weak_factory_.HasWeakPtrs());
116 108
117 net::HostPortPair dest_host_port_pair(address.IPAsString(), address.port()); 109 net::HostPortPair dest_host_port_pair(address.IPAsString(), address.port());
118 110
119 transport_socket_.reset( 111 transport_socket_.reset(
120 client_socket_factory_->CreateTransportClientSocket( 112 client_socket_factory_->CreateTransportClientSocket(
121 dest_host_port_pair)); 113 dest_host_port_pair));
122 int status = transport_socket_->Connect(&connect_callback_); 114 int status = transport_socket_->Connect(
115 base::Bind(&ChromeAsyncSocket::ProcessConnectDone,
116 base::Unretained(this)));
123 if (status != net::ERR_IO_PENDING) { 117 if (status != net::ERR_IO_PENDING) {
124 // We defer execution of ProcessConnectDone instead of calling it 118 // We defer execution of ProcessConnectDone instead of calling it
125 // directly here as the caller may not expect an error/close to 119 // directly here as the caller may not expect an error/close to
126 // happen here. This is okay, as from the caller's point of view, 120 // happen here. This is okay, as from the caller's point of view,
127 // the connect always happens asynchronously. 121 // the connect always happens asynchronously.
128 MessageLoop* message_loop = MessageLoop::current(); 122 MessageLoop* message_loop = MessageLoop::current();
129 CHECK(message_loop); 123 CHECK(message_loop);
130 message_loop->PostTask(FROM_HERE, 124 message_loop->PostTask(FROM_HERE,
131 base::Bind(&ChromeAsyncSocket::ProcessConnectDone, 125 base::Bind(&ChromeAsyncSocket::ProcessConnectDone,
132 weak_factory_.GetWeakPtr(), status)); 126 weak_factory_.GetWeakPtr(), status));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 DCHECK(IsOpen()); 169 DCHECK(IsOpen());
176 DCHECK_EQ(read_state_, POSTED); 170 DCHECK_EQ(read_state_, POSTED);
177 DCHECK_EQ(read_start_, 0U); 171 DCHECK_EQ(read_start_, 0U);
178 DCHECK_EQ(read_end_, 0U); 172 DCHECK_EQ(read_end_, 0U);
179 // Once we call Read(), we cannot call StartTls() until the read 173 // Once we call Read(), we cannot call StartTls() until the read
180 // finishes. This is okay, as StartTls() is called only from a read 174 // finishes. This is okay, as StartTls() is called only from a read
181 // handler (i.e., after a read finishes and before another read is 175 // handler (i.e., after a read finishes and before another read is
182 // done). 176 // done).
183 int status = 177 int status =
184 transport_socket_->Read( 178 transport_socket_->Read(
185 read_buf_.get(), read_buf_->size(), &read_callback_); 179 read_buf_.get(), read_buf_->size(),
180 base::Bind(&ChromeAsyncSocket::ProcessReadDone,
181 base::Unretained(this)));
186 read_state_ = PENDING; 182 read_state_ = PENDING;
187 if (status != net::ERR_IO_PENDING) { 183 if (status != net::ERR_IO_PENDING) {
188 ProcessReadDone(status); 184 ProcessReadDone(status);
189 } 185 }
190 } 186 }
191 187
192 // read_state_ == PENDING -> read_state_ == IDLE 188 // read_state_ == PENDING -> read_state_ == IDLE
193 189
194 void ChromeAsyncSocket::ProcessReadDone(int status) { 190 void ChromeAsyncSocket::ProcessReadDone(int status) {
195 DCHECK_NE(status, net::ERR_IO_PENDING); 191 DCHECK_NE(status, net::ERR_IO_PENDING);
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 void ChromeAsyncSocket::DoWrite() { 301 void ChromeAsyncSocket::DoWrite() {
306 DCHECK(IsOpen()); 302 DCHECK(IsOpen());
307 DCHECK_EQ(write_state_, POSTED); 303 DCHECK_EQ(write_state_, POSTED);
308 DCHECK_GT(write_end_, 0U); 304 DCHECK_GT(write_end_, 0U);
309 // Once we call Write(), we cannot call StartTls() until the write 305 // Once we call Write(), we cannot call StartTls() until the write
310 // finishes. This is okay, as StartTls() is called only after we 306 // finishes. This is okay, as StartTls() is called only after we
311 // have received a reply to a message we sent to the server and 307 // have received a reply to a message we sent to the server and
312 // before we send the next message. 308 // before we send the next message.
313 int status = 309 int status =
314 transport_socket_->Write( 310 transport_socket_->Write(
315 write_buf_.get(), write_end_, &write_callback_); 311 write_buf_.get(), write_end_,
312 base::Bind(&ChromeAsyncSocket::ProcessWriteDone,
313 base::Unretained(this)));
316 write_state_ = PENDING; 314 write_state_ = PENDING;
317 if (status != net::ERR_IO_PENDING) { 315 if (status != net::ERR_IO_PENDING) {
318 ProcessWriteDone(status); 316 ProcessWriteDone(status);
319 } 317 }
320 } 318 }
321 319
322 // write_state_ == PENDING -> write_state_ == IDLE or POSTED (the 320 // write_state_ == PENDING -> write_state_ == IDLE or POSTED (the
323 // latter via PostDoWrite()) 321 // latter via PostDoWrite())
324 322
325 void ChromeAsyncSocket::ProcessWriteDone(int status) { 323 void ChromeAsyncSocket::ProcessWriteDone(int status) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 399
402 // Clear out any posted DoRead() tasks. 400 // Clear out any posted DoRead() tasks.
403 weak_factory_.InvalidateWeakPtrs(); 401 weak_factory_.InvalidateWeakPtrs();
404 402
405 DCHECK(transport_socket_.get()); 403 DCHECK(transport_socket_.get());
406 net::ClientSocketHandle* socket_handle = new net::ClientSocketHandle(); 404 net::ClientSocketHandle* socket_handle = new net::ClientSocketHandle();
407 socket_handle->set_socket(transport_socket_.release()); 405 socket_handle->set_socket(transport_socket_.release());
408 transport_socket_.reset( 406 transport_socket_.reset(
409 client_socket_factory_->CreateSSLClientSocket( 407 client_socket_factory_->CreateSSLClientSocket(
410 socket_handle, net::HostPortPair(domain_name, 443))); 408 socket_handle, net::HostPortPair(domain_name, 443)));
411 int status = transport_socket_->Connect(&ssl_connect_callback_); 409 int status = transport_socket_->Connect(
410 base::Bind(&ChromeAsyncSocket::ProcessSSLConnectDone,
411 base::Unretained(this)));
412 if (status != net::ERR_IO_PENDING) { 412 if (status != net::ERR_IO_PENDING) {
413 MessageLoop* message_loop = MessageLoop::current(); 413 MessageLoop* message_loop = MessageLoop::current();
414 CHECK(message_loop); 414 CHECK(message_loop);
415 message_loop->PostTask(FROM_HERE, 415 message_loop->PostTask(FROM_HERE,
416 base::Bind(&ChromeAsyncSocket::ProcessSSLConnectDone, 416 base::Bind(&ChromeAsyncSocket::ProcessSSLConnectDone,
417 weak_factory_.GetWeakPtr(), status)); 417 weak_factory_.GetWeakPtr(), status));
418 } 418 }
419 return true; 419 return true;
420 } 420 }
421 421
(...skipping 16 matching lines...) Expand all
438 } 438 }
439 state_ = STATE_TLS_OPEN; 439 state_ = STATE_TLS_OPEN;
440 PostDoRead(); 440 PostDoRead();
441 if (write_end_ > 0U) { 441 if (write_end_ > 0U) {
442 PostDoWrite(); 442 PostDoWrite();
443 } 443 }
444 SignalSSLConnected(); 444 SignalSSLConnected();
445 } 445 }
446 446
447 } // namespace notifier 447 } // namespace notifier
OLDNEW
« no previous file with comments | « jingle/notifier/base/chrome_async_socket.h ('k') | jingle/notifier/base/fake_ssl_client_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698