OLD | NEW |
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 "remoting/protocol/pepper_transport_socket_adapter.h" | 5 #include "remoting/protocol/pepper_transport_socket_adapter.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "net/base/address_list.h" | 8 #include "net/base/address_list.h" |
9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 return false; | 116 return false; |
117 } | 117 } |
118 | 118 |
119 bool PepperTransportSocketAdapter::SetSendBufferSize(int32 size) { | 119 bool PepperTransportSocketAdapter::SetSendBufferSize(int32 size) { |
120 DCHECK(CalledOnValidThread()); | 120 DCHECK(CalledOnValidThread()); |
121 // TODO(sergeyu): Implement this: crbug.com/91439. | 121 // TODO(sergeyu): Implement this: crbug.com/91439. |
122 NOTIMPLEMENTED(); | 122 NOTIMPLEMENTED(); |
123 return false; | 123 return false; |
124 } | 124 } |
125 | 125 |
126 int PepperTransportSocketAdapter::Connect(net::OldCompletionCallback* callback)
{ | 126 int PepperTransportSocketAdapter::Connect( |
| 127 net::OldCompletionCallback* callback) { |
127 DCHECK(CalledOnValidThread()); | 128 DCHECK(CalledOnValidThread()); |
128 | 129 |
129 if (!transport_.get()) | 130 if (!transport_.get()) |
| 131 return net::ERR_UNEXPECTED; |
| 132 |
| 133 old_connect_callback_ = callback; |
| 134 |
| 135 // This will return false when GetNextAddress() returns an |
| 136 // error. This helps to detect when the P2P Transport API is not |
| 137 // supported. |
| 138 int result = ProcessCandidates(); |
| 139 if (result != net::OK) |
| 140 return result; |
| 141 |
| 142 result = transport_->Connect( |
| 143 callback_factory_.NewRequiredCallback( |
| 144 &PepperTransportSocketAdapter::OnConnect)); |
| 145 DCHECK_EQ(result, PP_OK_COMPLETIONPENDING); |
| 146 |
| 147 return net::ERR_IO_PENDING; |
| 148 } |
| 149 int PepperTransportSocketAdapter::Connect( |
| 150 const net::CompletionCallback& callback) { |
| 151 DCHECK(CalledOnValidThread()); |
| 152 |
| 153 if (!transport_.get()) |
130 return net::ERR_UNEXPECTED; | 154 return net::ERR_UNEXPECTED; |
131 | 155 |
132 connect_callback_ = callback; | 156 connect_callback_ = callback; |
133 | 157 |
134 // This will return false when GetNextAddress() returns an | 158 // This will return false when GetNextAddress() returns an |
135 // error. This helps to detect when the P2P Transport API is not | 159 // error. This helps to detect when the P2P Transport API is not |
136 // supported. | 160 // supported. |
137 int result = ProcessCandidates(); | 161 int result = ProcessCandidates(); |
138 if (result != net::OK) | 162 if (result != net::OK) |
139 return result; | 163 return result; |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 | 271 |
248 void PepperTransportSocketAdapter::OnNextAddress(int32_t result) { | 272 void PepperTransportSocketAdapter::OnNextAddress(int32_t result) { |
249 DCHECK(CalledOnValidThread()); | 273 DCHECK(CalledOnValidThread()); |
250 | 274 |
251 get_address_pending_ = false; | 275 get_address_pending_ = false; |
252 ProcessCandidates(); | 276 ProcessCandidates(); |
253 } | 277 } |
254 | 278 |
255 void PepperTransportSocketAdapter::OnConnect(int result) { | 279 void PepperTransportSocketAdapter::OnConnect(int result) { |
256 DCHECK(CalledOnValidThread()); | 280 DCHECK(CalledOnValidThread()); |
257 DCHECK(connect_callback_); | 281 DCHECK(old_connect_callback_ || !connect_callback_.is_null()); |
258 | 282 |
259 if (result == PP_OK) | 283 if (result == PP_OK) |
260 connected_ = true; | 284 connected_ = true; |
261 | 285 |
262 net::OldCompletionCallback* callback = connect_callback_; | 286 if (old_connect_callback_) { |
263 connect_callback_ = NULL; | 287 net::OldCompletionCallback* callback = old_connect_callback_; |
264 callback->Run(PPErrorToNetError(result)); | 288 old_connect_callback_ = NULL; |
| 289 callback->Run(PPErrorToNetError(result)); |
| 290 } else { |
| 291 net::CompletionCallback callback = connect_callback_; |
| 292 connect_callback_.Reset(); |
| 293 callback.Run(PPErrorToNetError(result)); |
| 294 } |
265 } | 295 } |
266 | 296 |
267 void PepperTransportSocketAdapter::OnRead(int32_t result) { | 297 void PepperTransportSocketAdapter::OnRead(int32_t result) { |
268 DCHECK(CalledOnValidThread()); | 298 DCHECK(CalledOnValidThread()); |
269 DCHECK(read_callback_); | 299 DCHECK(read_callback_); |
270 DCHECK(read_buffer_); | 300 DCHECK(read_buffer_); |
271 | 301 |
272 net::OldCompletionCallback* callback = read_callback_; | 302 net::OldCompletionCallback* callback = read_callback_; |
273 read_callback_ = NULL; | 303 read_callback_ = NULL; |
274 read_buffer_ = NULL; | 304 read_buffer_ = NULL; |
275 callback->Run(PPErrorToNetError(result)); | 305 callback->Run(PPErrorToNetError(result)); |
276 } | 306 } |
277 | 307 |
278 void PepperTransportSocketAdapter::OnWrite(int32_t result) { | 308 void PepperTransportSocketAdapter::OnWrite(int32_t result) { |
279 DCHECK(CalledOnValidThread()); | 309 DCHECK(CalledOnValidThread()); |
280 DCHECK(write_callback_); | 310 DCHECK(write_callback_); |
281 DCHECK(write_buffer_); | 311 DCHECK(write_buffer_); |
282 | 312 |
283 net::OldCompletionCallback* callback = write_callback_; | 313 net::OldCompletionCallback* callback = write_callback_; |
284 write_callback_ = NULL; | 314 write_callback_ = NULL; |
285 write_buffer_ = NULL; | 315 write_buffer_ = NULL; |
286 callback->Run(PPErrorToNetError(result)); | 316 callback->Run(PPErrorToNetError(result)); |
287 } | 317 } |
288 | 318 |
289 } // namespace protocol | 319 } // namespace protocol |
290 } // namespace remoting | 320 } // namespace remoting |
OLD | NEW |