OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "remoting/protocol/pseudotcp_adapter.h" | 5 #include "remoting/protocol/pseudotcp_adapter.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 const int kReadBufferSize = 65536; // Maximum size of a packet. | 25 const int kReadBufferSize = 65536; // Maximum size of a packet. |
26 const uint16_t kDefaultMtu = 1280; | 26 const uint16_t kDefaultMtu = 1280; |
27 } // namespace | 27 } // namespace |
28 | 28 |
29 namespace remoting { | 29 namespace remoting { |
30 namespace protocol { | 30 namespace protocol { |
31 | 31 |
32 class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify, | 32 class PseudoTcpAdapter::Core : public cricket::IPseudoTcpNotify, |
33 public base::RefCounted<Core> { | 33 public base::RefCounted<Core> { |
34 public: | 34 public: |
35 explicit Core(scoped_ptr<P2PDatagramSocket> socket); | 35 explicit Core(std::unique_ptr<P2PDatagramSocket> socket); |
36 | 36 |
37 // Functions used to implement net::StreamSocket. | 37 // Functions used to implement net::StreamSocket. |
38 int Read(const scoped_refptr<net::IOBuffer>& buffer, int buffer_size, | 38 int Read(const scoped_refptr<net::IOBuffer>& buffer, int buffer_size, |
39 const net::CompletionCallback& callback); | 39 const net::CompletionCallback& callback); |
40 int Write(const scoped_refptr<net::IOBuffer>& buffer, int buffer_size, | 40 int Write(const scoped_refptr<net::IOBuffer>& buffer, int buffer_size, |
41 const net::CompletionCallback& callback); | 41 const net::CompletionCallback& callback); |
42 int Connect(const net::CompletionCallback& callback); | 42 int Connect(const net::CompletionCallback& callback); |
43 | 43 |
44 // cricket::IPseudoTcpNotify interface. | 44 // cricket::IPseudoTcpNotify interface. |
45 // These notifications are triggered from NotifyPacket. | 45 // These notifications are triggered from NotifyPacket. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
81 void CheckWriteComplete(); | 81 void CheckWriteComplete(); |
82 | 82 |
83 // This re-sets |timer| without triggering callbacks. | 83 // This re-sets |timer| without triggering callbacks. |
84 void AdjustClock(); | 84 void AdjustClock(); |
85 | 85 |
86 net::CompletionCallback connect_callback_; | 86 net::CompletionCallback connect_callback_; |
87 net::CompletionCallback read_callback_; | 87 net::CompletionCallback read_callback_; |
88 net::CompletionCallback write_callback_; | 88 net::CompletionCallback write_callback_; |
89 | 89 |
90 cricket::PseudoTcp pseudo_tcp_; | 90 cricket::PseudoTcp pseudo_tcp_; |
91 scoped_ptr<P2PDatagramSocket> socket_; | 91 std::unique_ptr<P2PDatagramSocket> socket_; |
92 | 92 |
93 scoped_refptr<net::IOBuffer> read_buffer_; | 93 scoped_refptr<net::IOBuffer> read_buffer_; |
94 int read_buffer_size_; | 94 int read_buffer_size_; |
95 scoped_refptr<net::IOBuffer> write_buffer_; | 95 scoped_refptr<net::IOBuffer> write_buffer_; |
96 int write_buffer_size_; | 96 int write_buffer_size_; |
97 | 97 |
98 // Whether we need to wait for data to be sent before completing write. | 98 // Whether we need to wait for data to be sent before completing write. |
99 bool write_waits_for_send_; | 99 bool write_waits_for_send_; |
100 | 100 |
101 // Set to true in the write-waits-for-send mode when we've | 101 // Set to true in the write-waits-for-send mode when we've |
102 // successfully writtend data to the send buffer and waiting for the | 102 // successfully writtend data to the send buffer and waiting for the |
103 // data to be sent to the remote end. | 103 // data to be sent to the remote end. |
104 bool waiting_write_position_; | 104 bool waiting_write_position_; |
105 | 105 |
106 // Number of the bytes written by the last write stored while we wait | 106 // Number of the bytes written by the last write stored while we wait |
107 // for the data to be sent (i.e. when waiting_write_position_ = true). | 107 // for the data to be sent (i.e. when waiting_write_position_ = true). |
108 int last_write_result_; | 108 int last_write_result_; |
109 | 109 |
110 bool socket_write_pending_; | 110 bool socket_write_pending_; |
111 scoped_refptr<net::IOBuffer> socket_read_buffer_; | 111 scoped_refptr<net::IOBuffer> socket_read_buffer_; |
112 | 112 |
113 base::OneShotTimer timer_; | 113 base::OneShotTimer timer_; |
114 | 114 |
115 DISALLOW_COPY_AND_ASSIGN(Core); | 115 DISALLOW_COPY_AND_ASSIGN(Core); |
116 }; | 116 }; |
117 | 117 |
118 | 118 PseudoTcpAdapter::Core::Core(std::unique_ptr<P2PDatagramSocket> socket) |
119 PseudoTcpAdapter::Core::Core(scoped_ptr<P2PDatagramSocket> socket) | |
120 : pseudo_tcp_(this, 0), | 119 : pseudo_tcp_(this, 0), |
121 socket_(std::move(socket)), | 120 socket_(std::move(socket)), |
122 write_waits_for_send_(false), | 121 write_waits_for_send_(false), |
123 waiting_write_position_(false), | 122 waiting_write_position_(false), |
124 socket_write_pending_(false) { | 123 socket_write_pending_(false) { |
125 // Doesn't trigger callbacks. | 124 // Doesn't trigger callbacks. |
126 pseudo_tcp_.NotifyMTU(kDefaultMtu); | 125 pseudo_tcp_.NotifyMTU(kDefaultMtu); |
127 } | 126 } |
128 | 127 |
129 PseudoTcpAdapter::Core::~Core() { | 128 PseudoTcpAdapter::Core::~Core() { |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 net::CompletionCallback callback = write_callback_; | 444 net::CompletionCallback callback = write_callback_; |
446 write_callback_.Reset(); | 445 write_callback_.Reset(); |
447 write_buffer_ = NULL; | 446 write_buffer_ = NULL; |
448 callback.Run(last_write_result_); | 447 callback.Run(last_write_result_); |
449 } | 448 } |
450 } | 449 } |
451 } | 450 } |
452 | 451 |
453 // Public interface implementation. | 452 // Public interface implementation. |
454 | 453 |
455 PseudoTcpAdapter::PseudoTcpAdapter(scoped_ptr<P2PDatagramSocket> socket) | 454 PseudoTcpAdapter::PseudoTcpAdapter(std::unique_ptr<P2PDatagramSocket> socket) |
456 : core_(new Core(std::move(socket))) { | 455 : core_(new Core(std::move(socket))) {} |
457 } | |
458 | 456 |
459 PseudoTcpAdapter::~PseudoTcpAdapter() { | 457 PseudoTcpAdapter::~PseudoTcpAdapter() { |
460 // Make sure that the underlying socket is destroyed before PseudoTcp. | 458 // Make sure that the underlying socket is destroyed before PseudoTcp. |
461 core_->DeleteSocket(); | 459 core_->DeleteSocket(); |
462 } | 460 } |
463 | 461 |
464 int PseudoTcpAdapter::Read(const scoped_refptr<net::IOBuffer>& buffer, | 462 int PseudoTcpAdapter::Read(const scoped_refptr<net::IOBuffer>& buffer, |
465 int buffer_size, | 463 int buffer_size, |
466 const net::CompletionCallback& callback) { | 464 const net::CompletionCallback& callback) { |
467 DCHECK(CalledOnValidThread()); | 465 DCHECK(CalledOnValidThread()); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 core_->SetNoDelay(no_delay); | 500 core_->SetNoDelay(no_delay); |
503 } | 501 } |
504 | 502 |
505 void PseudoTcpAdapter::SetWriteWaitsForSend(bool write_waits_for_send) { | 503 void PseudoTcpAdapter::SetWriteWaitsForSend(bool write_waits_for_send) { |
506 DCHECK(CalledOnValidThread()); | 504 DCHECK(CalledOnValidThread()); |
507 core_->SetWriteWaitsForSend(write_waits_for_send); | 505 core_->SetWriteWaitsForSend(write_waits_for_send); |
508 } | 506 } |
509 | 507 |
510 } // namespace protocol | 508 } // namespace protocol |
511 } // namespace remoting | 509 } // namespace remoting |
OLD | NEW |