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

Side by Side Diff: jingle/glue/pseudotcp_adapter.cc

Issue 8889036: Revert 113699 - base::Bind: Convert Socket::Write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: 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
« no previous file with comments | « jingle/glue/pseudotcp_adapter.h ('k') | jingle/glue/pseudotcp_adapter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Deleted: svn:mergeinfo
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/glue/pseudotcp_adapter.h" 5 #include "jingle/glue/pseudotcp_adapter.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "net/base/address_list.h" 10 #include "net/base/address_list.h"
(...skipping 17 matching lines...) Expand all
28 Core(net::Socket* socket); 28 Core(net::Socket* socket);
29 virtual ~Core(); 29 virtual ~Core();
30 30
31 // Functions used to implement net::StreamSocket. 31 // Functions used to implement net::StreamSocket.
32 int Read(net::IOBuffer* buffer, int buffer_size, 32 int Read(net::IOBuffer* buffer, int buffer_size,
33 net::OldCompletionCallback* callback); 33 net::OldCompletionCallback* callback);
34 int Read(net::IOBuffer* buffer, int buffer_size, 34 int Read(net::IOBuffer* buffer, int buffer_size,
35 const net::CompletionCallback& callback); 35 const net::CompletionCallback& callback);
36 int Write(net::IOBuffer* buffer, int buffer_size, 36 int Write(net::IOBuffer* buffer, int buffer_size,
37 net::OldCompletionCallback* callback); 37 net::OldCompletionCallback* callback);
38 int Write(net::IOBuffer* buffer, int buffer_size,
39 const net::CompletionCallback& callback);
40 int Connect(net::OldCompletionCallback* callback); 38 int Connect(net::OldCompletionCallback* callback);
41 int Connect(const net::CompletionCallback& callback); 39 int Connect(const net::CompletionCallback& callback);
42 void Disconnect(); 40 void Disconnect();
43 bool IsConnected() const; 41 bool IsConnected() const;
44 42
45 // cricket::IPseudoTcpNotify interface. 43 // cricket::IPseudoTcpNotify interface.
46 // These notifications are triggered from NotifyPacket. 44 // These notifications are triggered from NotifyPacket.
47 virtual void OnTcpOpen(cricket::PseudoTcp* tcp) OVERRIDE; 45 virtual void OnTcpOpen(cricket::PseudoTcp* tcp) OVERRIDE;
48 virtual void OnTcpReadable(cricket::PseudoTcp* tcp) OVERRIDE; 46 virtual void OnTcpReadable(cricket::PseudoTcp* tcp) OVERRIDE;
49 virtual void OnTcpWriteable(cricket::PseudoTcp* tcp) OVERRIDE; 47 virtual void OnTcpWriteable(cricket::PseudoTcp* tcp) OVERRIDE;
(...skipping 20 matching lines...) Expand all
70 void HandleReadResults(int result); 68 void HandleReadResults(int result);
71 void HandleTcpClock(); 69 void HandleTcpClock();
72 70
73 // This re-sets |timer| without triggering callbacks. 71 // This re-sets |timer| without triggering callbacks.
74 void AdjustClock(); 72 void AdjustClock();
75 73
76 net::OldCompletionCallback* old_connect_callback_; 74 net::OldCompletionCallback* old_connect_callback_;
77 net::CompletionCallback connect_callback_; 75 net::CompletionCallback connect_callback_;
78 net::OldCompletionCallback* old_read_callback_; 76 net::OldCompletionCallback* old_read_callback_;
79 net::CompletionCallback read_callback_; 77 net::CompletionCallback read_callback_;
80 net::OldCompletionCallback* old_write_callback_; 78 net::OldCompletionCallback* write_callback_;
81 net::CompletionCallback write_callback_;
82 79
83 cricket::PseudoTcp pseudo_tcp_; 80 cricket::PseudoTcp pseudo_tcp_;
84 scoped_ptr<net::Socket> socket_; 81 scoped_ptr<net::Socket> socket_;
85 82
86 scoped_refptr<net::IOBuffer> read_buffer_; 83 scoped_refptr<net::IOBuffer> read_buffer_;
87 int read_buffer_size_; 84 int read_buffer_size_;
88 scoped_refptr<net::IOBuffer> write_buffer_; 85 scoped_refptr<net::IOBuffer> write_buffer_;
89 int write_buffer_size_; 86 int write_buffer_size_;
90 87
91 bool socket_write_pending_; 88 bool socket_write_pending_;
92 scoped_refptr<net::IOBuffer> socket_read_buffer_; 89 scoped_refptr<net::IOBuffer> socket_read_buffer_;
93 90
94 net::OldCompletionCallbackImpl<Core> socket_read_callback_; 91 net::OldCompletionCallbackImpl<Core> socket_read_callback_;
95 net::OldCompletionCallbackImpl<Core> socket_write_callback_; 92 net::OldCompletionCallbackImpl<Core> socket_write_callback_;
96 93
97 base::OneShotTimer<Core> timer_; 94 base::OneShotTimer<Core> timer_;
98 95
99 DISALLOW_COPY_AND_ASSIGN(Core); 96 DISALLOW_COPY_AND_ASSIGN(Core);
100 }; 97 };
101 98
102 99
103 PseudoTcpAdapter::Core::Core(net::Socket* socket) 100 PseudoTcpAdapter::Core::Core(net::Socket* socket)
104 : old_connect_callback_(NULL), 101 : old_connect_callback_(NULL),
105 old_read_callback_(NULL), 102 old_read_callback_(NULL),
106 old_write_callback_(NULL), 103 write_callback_(NULL),
107 ALLOW_THIS_IN_INITIALIZER_LIST(pseudo_tcp_(this, 0)), 104 ALLOW_THIS_IN_INITIALIZER_LIST(pseudo_tcp_(this, 0)),
108 socket_(socket), 105 socket_(socket),
109 socket_write_pending_(false), 106 socket_write_pending_(false),
110 ALLOW_THIS_IN_INITIALIZER_LIST( 107 ALLOW_THIS_IN_INITIALIZER_LIST(
111 socket_read_callback_(this, &PseudoTcpAdapter::Core::OnRead)), 108 socket_read_callback_(this, &PseudoTcpAdapter::Core::OnRead)),
112 ALLOW_THIS_IN_INITIALIZER_LIST( 109 ALLOW_THIS_IN_INITIALIZER_LIST(
113 socket_write_callback_(this, &PseudoTcpAdapter::Core::OnWritten)) { 110 socket_write_callback_(this, &PseudoTcpAdapter::Core::OnWritten)) {
114 // Doesn't trigger callbacks. 111 // Doesn't trigger callbacks.
115 pseudo_tcp_.NotifyMTU(kDefaultMtu); 112 pseudo_tcp_.NotifyMTU(kDefaultMtu);
116 } 113 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 read_callback_ = callback; 157 read_callback_ = callback;
161 } 158 }
162 159
163 AdjustClock(); 160 AdjustClock();
164 161
165 return result; 162 return result;
166 } 163 }
167 164
168 int PseudoTcpAdapter::Core::Write(net::IOBuffer* buffer, int buffer_size, 165 int PseudoTcpAdapter::Core::Write(net::IOBuffer* buffer, int buffer_size,
169 net::OldCompletionCallback* callback) { 166 net::OldCompletionCallback* callback) {
170 DCHECK(!old_write_callback_ && write_callback_.is_null()); 167 DCHECK(!write_callback_);
171 168
172 // Reference the Core in case a callback deletes the adapter. 169 // Reference the Core in case a callback deletes the adapter.
173 scoped_refptr<Core> core(this); 170 scoped_refptr<Core> core(this);
174 171
175 int result = pseudo_tcp_.Send(buffer->data(), buffer_size); 172 int result = pseudo_tcp_.Send(buffer->data(), buffer_size);
176 if (result < 0) { 173 if (result < 0) {
177 result = net::MapSystemError(pseudo_tcp_.GetError()); 174 result = net::MapSystemError(pseudo_tcp_.GetError());
178 DCHECK(result < 0); 175 DCHECK(result < 0);
179 } 176 }
180 177
181 if (result == net::ERR_IO_PENDING) { 178 if (result == net::ERR_IO_PENDING) {
182 write_buffer_ = buffer; 179 write_buffer_ = buffer;
183 write_buffer_size_ = buffer_size; 180 write_buffer_size_ = buffer_size;
184 old_write_callback_ = callback;
185 }
186
187 AdjustClock();
188
189 return result;
190 }
191 int PseudoTcpAdapter::Core::Write(net::IOBuffer* buffer, int buffer_size,
192 const net::CompletionCallback& callback) {
193 DCHECK(!old_write_callback_ && write_callback_.is_null());
194
195 // Reference the Core in case a callback deletes the adapter.
196 scoped_refptr<Core> core(this);
197
198 int result = pseudo_tcp_.Send(buffer->data(), buffer_size);
199 if (result < 0) {
200 result = net::MapSystemError(pseudo_tcp_.GetError());
201 DCHECK(result < 0);
202 }
203
204 if (result == net::ERR_IO_PENDING) {
205 write_buffer_ = buffer;
206 write_buffer_size_ = buffer_size;
207 write_callback_ = callback; 181 write_callback_ = callback;
208 } 182 }
209 183
210 AdjustClock(); 184 AdjustClock();
211 185
212 return result; 186 return result;
213 } 187 }
214 188
215 int PseudoTcpAdapter::Core::Connect(net::OldCompletionCallback* callback) { 189 int PseudoTcpAdapter::Core::Connect(net::OldCompletionCallback* callback) {
216 DCHECK_EQ(pseudo_tcp_.State(), cricket::PseudoTcp::TCP_LISTEN); 190 DCHECK_EQ(pseudo_tcp_.State(), cricket::PseudoTcp::TCP_LISTEN);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 DoReadFromSocket(); 224 DoReadFromSocket();
251 225
252 return net::ERR_IO_PENDING; 226 return net::ERR_IO_PENDING;
253 } 227 }
254 228
255 void PseudoTcpAdapter::Core::Disconnect() { 229 void PseudoTcpAdapter::Core::Disconnect() {
256 // Don't dispatch outstanding callbacks, as mandated by net::StreamSocket. 230 // Don't dispatch outstanding callbacks, as mandated by net::StreamSocket.
257 old_read_callback_ = NULL; 231 old_read_callback_ = NULL;
258 read_callback_.Reset(); 232 read_callback_.Reset();
259 read_buffer_ = NULL; 233 read_buffer_ = NULL;
260 old_write_callback_ = NULL; 234 write_callback_ = NULL;
261 write_callback_.Reset();
262 write_buffer_ = NULL; 235 write_buffer_ = NULL;
263 old_connect_callback_ = NULL; 236 old_connect_callback_ = NULL;
264 connect_callback_.Reset(); 237 connect_callback_.Reset();
265 238
266 // TODO(wez): Connect should succeed if called after Disconnect, which 239 // TODO(wez): Connect should succeed if called after Disconnect, which
267 // PseudoTcp doesn't support, so we need to teardown the internal PseudoTcp 240 // PseudoTcp doesn't support, so we need to teardown the internal PseudoTcp
268 // and create a new one in Connect. 241 // and create a new one in Connect.
269 // TODO(wez): Close sets a shutdown flag inside PseudoTcp but has no other 242 // TODO(wez): Close sets a shutdown flag inside PseudoTcp but has no other
270 // effect. This should be addressed in PseudoTcp, really. 243 // effect. This should be addressed in PseudoTcp, really.
271 // In the meantime we can fake OnTcpClosed notification and tear down the 244 // In the meantime we can fake OnTcpClosed notification and tear down the
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 } else { 290 } else {
318 net::CompletionCallback callback = read_callback_; 291 net::CompletionCallback callback = read_callback_;
319 read_callback_.Reset(); 292 read_callback_.Reset();
320 read_buffer_ = NULL; 293 read_buffer_ = NULL;
321 callback.Run(result); 294 callback.Run(result);
322 } 295 }
323 } 296 }
324 297
325 void PseudoTcpAdapter::Core::OnTcpWriteable(PseudoTcp* tcp) { 298 void PseudoTcpAdapter::Core::OnTcpWriteable(PseudoTcp* tcp) {
326 DCHECK_EQ(tcp, &pseudo_tcp_); 299 DCHECK_EQ(tcp, &pseudo_tcp_);
327 if (!old_write_callback_ && write_callback_.is_null()) 300 if (!write_callback_)
328 return; 301 return;
329 302
330 int result = pseudo_tcp_.Send(write_buffer_->data(), write_buffer_size_); 303 int result = pseudo_tcp_.Send(write_buffer_->data(), write_buffer_size_);
331 if (result < 0) { 304 if (result < 0) {
332 result = net::MapSystemError(pseudo_tcp_.GetError()); 305 result = net::MapSystemError(pseudo_tcp_.GetError());
333 DCHECK(result < 0); 306 DCHECK(result < 0);
334 if (result == net::ERR_IO_PENDING) 307 if (result == net::ERR_IO_PENDING)
335 return; 308 return;
336 } 309 }
337 310
338 AdjustClock(); 311 AdjustClock();
339 312
340 if (old_write_callback_) { 313 net::OldCompletionCallback* callback = write_callback_;
341 net::OldCompletionCallback* callback = old_write_callback_; 314 write_callback_ = NULL;
342 old_write_callback_ = NULL; 315 write_buffer_ = NULL;
343 write_buffer_ = NULL; 316 callback->Run(result);
344 callback->Run(result);
345 } else {
346 net::CompletionCallback callback = write_callback_;
347 write_callback_.Reset();
348 write_buffer_ = NULL;
349 callback.Run(result);
350 }
351 } 317 }
352 318
353 void PseudoTcpAdapter::Core::OnTcpClosed(PseudoTcp* tcp, uint32 error) { 319 void PseudoTcpAdapter::Core::OnTcpClosed(PseudoTcp* tcp, uint32 error) {
354 DCHECK_EQ(tcp, &pseudo_tcp_); 320 DCHECK_EQ(tcp, &pseudo_tcp_);
355 321
356 if (old_connect_callback_) { 322 if (old_connect_callback_) {
357 net::OldCompletionCallback* callback = old_connect_callback_; 323 net::OldCompletionCallback* callback = old_connect_callback_;
358 old_connect_callback_ = NULL; 324 old_connect_callback_ = NULL;
359 callback->Run(net::MapSystemError(error)); 325 callback->Run(net::MapSystemError(error));
360 } else if (!connect_callback_.is_null()) { 326 } else if (!connect_callback_.is_null()) {
361 net::CompletionCallback callback = connect_callback_; 327 net::CompletionCallback callback = connect_callback_;
362 connect_callback_.Reset(); 328 connect_callback_.Reset();
363 callback.Run(net::MapSystemError(error)); 329 callback.Run(net::MapSystemError(error));
364 } 330 }
365 331
366 if (old_read_callback_) { 332 if (old_read_callback_) {
367 net::OldCompletionCallback* callback = old_read_callback_; 333 net::OldCompletionCallback* callback = old_read_callback_;
368 old_read_callback_ = NULL; 334 old_read_callback_ = NULL;
369 callback->Run(net::MapSystemError(error)); 335 callback->Run(net::MapSystemError(error));
370 } else if (!read_callback_.is_null()) { 336 } else if (!read_callback_.is_null()) {
371 net::CompletionCallback callback = read_callback_; 337 net::CompletionCallback callback = read_callback_;
372 read_callback_.Reset(); 338 read_callback_.Reset();
373 callback.Run(net::MapSystemError(error)); 339 callback.Run(net::MapSystemError(error));
374 } 340 }
375 341
376 if (old_write_callback_) { 342 if (write_callback_) {
377 net::OldCompletionCallback* callback = old_write_callback_; 343 net::OldCompletionCallback* callback = write_callback_;
378 old_write_callback_ = NULL; 344 write_callback_ = NULL;
379 callback->Run(net::MapSystemError(error)); 345 callback->Run(net::MapSystemError(error));
380 } else if (!write_callback_.is_null()) {
381 net::CompletionCallback callback = write_callback_;
382 write_callback_.Reset();
383 callback.Run(net::MapSystemError(error));
384 } 346 }
385 } 347 }
386 348
387 void PseudoTcpAdapter::Core::SetAckDelay(int delay_ms) { 349 void PseudoTcpAdapter::Core::SetAckDelay(int delay_ms) {
388 pseudo_tcp_.SetOption(cricket::PseudoTcp::OPT_ACKDELAY, delay_ms); 350 pseudo_tcp_.SetOption(cricket::PseudoTcp::OPT_ACKDELAY, delay_ms);
389 } 351 }
390 352
391 void PseudoTcpAdapter::Core::SetNoDelay(bool no_delay) { 353 void PseudoTcpAdapter::Core::SetNoDelay(bool no_delay) {
392 pseudo_tcp_.SetOption(cricket::PseudoTcp::OPT_NODELAY, no_delay ? 1 : 0); 354 pseudo_tcp_.SetOption(cricket::PseudoTcp::OPT_NODELAY, no_delay ? 1 : 0);
393 } 355 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 const net::CompletionCallback& callback) { 473 const net::CompletionCallback& callback) {
512 DCHECK(CalledOnValidThread()); 474 DCHECK(CalledOnValidThread());
513 return core_->Read(buffer, buffer_size, callback); 475 return core_->Read(buffer, buffer_size, callback);
514 } 476 }
515 477
516 int PseudoTcpAdapter::Write(net::IOBuffer* buffer, int buffer_size, 478 int PseudoTcpAdapter::Write(net::IOBuffer* buffer, int buffer_size,
517 net::OldCompletionCallback* callback) { 479 net::OldCompletionCallback* callback) {
518 DCHECK(CalledOnValidThread()); 480 DCHECK(CalledOnValidThread());
519 return core_->Write(buffer, buffer_size, callback); 481 return core_->Write(buffer, buffer_size, callback);
520 } 482 }
521 int PseudoTcpAdapter::Write(net::IOBuffer* buffer, int buffer_size,
522 const net::CompletionCallback& callback) {
523 DCHECK(CalledOnValidThread());
524 return core_->Write(buffer, buffer_size, callback);
525 }
526 483
527 bool PseudoTcpAdapter::SetReceiveBufferSize(int32 size) { 484 bool PseudoTcpAdapter::SetReceiveBufferSize(int32 size) {
528 DCHECK(CalledOnValidThread()); 485 DCHECK(CalledOnValidThread());
529 486
530 core_->SetReceiveBufferSize(size); 487 core_->SetReceiveBufferSize(size);
531 return false; 488 return false;
532 } 489 }
533 490
534 bool PseudoTcpAdapter::SetSendBufferSize(int32 size) { 491 bool PseudoTcpAdapter::SetSendBufferSize(int32 size) {
535 DCHECK(CalledOnValidThread()); 492 DCHECK(CalledOnValidThread());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 DCHECK(CalledOnValidThread()); 586 DCHECK(CalledOnValidThread());
630 core_->SetAckDelay(delay_ms); 587 core_->SetAckDelay(delay_ms);
631 } 588 }
632 589
633 void PseudoTcpAdapter::SetNoDelay(bool no_delay) { 590 void PseudoTcpAdapter::SetNoDelay(bool no_delay) {
634 DCHECK(CalledOnValidThread()); 591 DCHECK(CalledOnValidThread());
635 core_->SetNoDelay(no_delay); 592 core_->SetNoDelay(no_delay);
636 } 593 }
637 594
638 } // namespace jingle_glue 595 } // namespace jingle_glue
OLDNEW
« no previous file with comments | « jingle/glue/pseudotcp_adapter.h ('k') | jingle/glue/pseudotcp_adapter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698