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

Side by Side Diff: remoting/client/plugin/pepper_packet_socket_factory.cc

Issue 429113002: Webrtc deps roll. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use webrtc version 6825 and rebase and switch back to original workspace. Created 6 years, 4 months 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/client/plugin/pepper_packet_socket_factory.h" 5 #include "remoting/client/plugin/pepper_packet_socket_factory.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.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"
11 #include "ppapi/cpp/net_address.h" 11 #include "ppapi/cpp/net_address.h"
12 #include "ppapi/cpp/udp_socket.h" 12 #include "ppapi/cpp/udp_socket.h"
13 #include "ppapi/utility/completion_callback_factory.h" 13 #include "ppapi/utility/completion_callback_factory.h"
14 #include "remoting/client/plugin/pepper_util.h" 14 #include "remoting/client/plugin/pepper_util.h"
15 #include "remoting/protocol/socket_util.h" 15 #include "remoting/protocol/socket_util.h"
16 #include "third_party/libjingle/source/talk/base/asyncpacketsocket.h" 16 #include "third_party/webrtc/base/asyncpacketsocket.h"
17 17
18 namespace remoting { 18 namespace remoting {
19 19
20 namespace { 20 namespace {
21 21
22 // Size of the buffer to allocate for RecvFrom(). 22 // Size of the buffer to allocate for RecvFrom().
23 const int kReceiveBufferSize = 65536; 23 const int kReceiveBufferSize = 65536;
24 24
25 // Maximum amount of data in the send buffers. This is necessary to 25 // Maximum amount of data in the send buffers. This is necessary to
26 // prevent out-of-memory crashes if the caller sends data faster than 26 // prevent out-of-memory crashes if the caller sends data faster than
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 return net::ERR_NETWORK_ACCESS_DENIED; 74 return net::ERR_NETWORK_ACCESS_DENIED;
75 case PP_ERROR_MESSAGE_TOO_BIG: 75 case PP_ERROR_MESSAGE_TOO_BIG:
76 return net::ERR_MSG_TOO_BIG; 76 return net::ERR_MSG_TOO_BIG;
77 case PP_ERROR_ADDRESS_IN_USE: 77 case PP_ERROR_ADDRESS_IN_USE:
78 return net::ERR_ADDRESS_IN_USE; 78 return net::ERR_ADDRESS_IN_USE;
79 default: 79 default:
80 return net::ERR_FAILED; 80 return net::ERR_FAILED;
81 } 81 }
82 } 82 }
83 83
84 class UdpPacketSocket : public talk_base::AsyncPacketSocket { 84 class UdpPacketSocket : public rtc::AsyncPacketSocket {
85 public: 85 public:
86 explicit UdpPacketSocket(const pp::InstanceHandle& instance); 86 explicit UdpPacketSocket(const pp::InstanceHandle& instance);
87 virtual ~UdpPacketSocket(); 87 virtual ~UdpPacketSocket();
88 88
89 // |min_port| and |max_port| are set to zero if the port number 89 // |min_port| and |max_port| are set to zero if the port number
90 // should be assigned by the OS. 90 // should be assigned by the OS.
91 bool Init(const talk_base::SocketAddress& local_address, 91 bool Init(const rtc::SocketAddress& local_address,
92 int min_port, 92 int min_port,
93 int max_port); 93 int max_port);
94 94
95 // talk_base::AsyncPacketSocket interface. 95 // rtc::AsyncPacketSocket interface.
96 virtual talk_base::SocketAddress GetLocalAddress() const OVERRIDE; 96 virtual rtc::SocketAddress GetLocalAddress() const OVERRIDE;
97 virtual talk_base::SocketAddress GetRemoteAddress() const OVERRIDE; 97 virtual rtc::SocketAddress GetRemoteAddress() const OVERRIDE;
98 virtual int Send(const void* data, size_t data_size, 98 virtual int Send(const void* data, size_t data_size,
99 const talk_base::PacketOptions& options) OVERRIDE; 99 const rtc::PacketOptions& options) OVERRIDE;
100 virtual int SendTo(const void* data, 100 virtual int SendTo(const void* data,
101 size_t data_size, 101 size_t data_size,
102 const talk_base::SocketAddress& address, 102 const rtc::SocketAddress& address,
103 const talk_base::PacketOptions& options) OVERRIDE; 103 const rtc::PacketOptions& options) OVERRIDE;
104 virtual int Close() OVERRIDE; 104 virtual int Close() OVERRIDE;
105 virtual State GetState() const OVERRIDE; 105 virtual State GetState() const OVERRIDE;
106 virtual int GetOption(talk_base::Socket::Option opt, int* value) OVERRIDE; 106 virtual int GetOption(rtc::Socket::Option opt, int* value) OVERRIDE;
107 virtual int SetOption(talk_base::Socket::Option opt, int value) OVERRIDE; 107 virtual int SetOption(rtc::Socket::Option opt, int value) OVERRIDE;
108 virtual int GetError() const OVERRIDE; 108 virtual int GetError() const OVERRIDE;
109 virtual void SetError(int error) OVERRIDE; 109 virtual void SetError(int error) OVERRIDE;
110 110
111 private: 111 private:
112 struct PendingPacket { 112 struct PendingPacket {
113 PendingPacket(const void* buffer, 113 PendingPacket(const void* buffer,
114 int buffer_size, 114 int buffer_size,
115 const pp::NetAddress& address); 115 const pp::NetAddress& address);
116 116
117 scoped_refptr<net::IOBufferWithSize> data; 117 scoped_refptr<net::IOBufferWithSize> data;
(...skipping 10 matching lines...) Expand all
128 void OnReadCompleted(int result, pp::NetAddress address); 128 void OnReadCompleted(int result, pp::NetAddress address);
129 void HandleReadResult(int result, pp::NetAddress address); 129 void HandleReadResult(int result, pp::NetAddress address);
130 130
131 pp::InstanceHandle instance_; 131 pp::InstanceHandle instance_;
132 132
133 pp::UDPSocket socket_; 133 pp::UDPSocket socket_;
134 134
135 State state_; 135 State state_;
136 int error_; 136 int error_;
137 137
138 talk_base::SocketAddress local_address_; 138 rtc::SocketAddress local_address_;
139 139
140 // Used to scan ports when necessary. Both values are set to 0 when 140 // Used to scan ports when necessary. Both values are set to 0 when
141 // the port number is assigned by OS. 141 // the port number is assigned by OS.
142 uint16_t min_port_; 142 uint16_t min_port_;
143 uint16_t max_port_; 143 uint16_t max_port_;
144 144
145 std::vector<char> receive_buffer_; 145 std::vector<char> receive_buffer_;
146 146
147 bool send_pending_; 147 bool send_pending_;
148 std::list<PendingPacket> send_queue_; 148 std::list<PendingPacket> send_queue_;
(...skipping 23 matching lines...) Expand all
172 max_port_(0), 172 max_port_(0),
173 send_pending_(false), 173 send_pending_(false),
174 send_queue_size_(0), 174 send_queue_size_(0),
175 callback_factory_(this) { 175 callback_factory_(this) {
176 } 176 }
177 177
178 UdpPacketSocket::~UdpPacketSocket() { 178 UdpPacketSocket::~UdpPacketSocket() {
179 Close(); 179 Close();
180 } 180 }
181 181
182 bool UdpPacketSocket::Init(const talk_base::SocketAddress& local_address, 182 bool UdpPacketSocket::Init(const rtc::SocketAddress& local_address,
183 int min_port, 183 int min_port,
184 int max_port) { 184 int max_port) {
185 if (socket_.is_null()) { 185 if (socket_.is_null()) {
186 return false; 186 return false;
187 } 187 }
188 188
189 local_address_ = local_address; 189 local_address_ = local_address;
190 max_port_ = max_port; 190 max_port_ = max_port;
191 min_port_ = min_port; 191 min_port_ = min_port;
192 192
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 callback_factory_.NewCallback(&UdpPacketSocket::OnBindCompleted); 232 callback_factory_.NewCallback(&UdpPacketSocket::OnBindCompleted);
233 int result = socket_.Bind(pp_local_address, callback); 233 int result = socket_.Bind(pp_local_address, callback);
234 DCHECK_EQ(result, PP_OK_COMPLETIONPENDING); 234 DCHECK_EQ(result, PP_OK_COMPLETIONPENDING);
235 } 235 }
236 } else { 236 } else {
237 LOG(ERROR) << "Failed to bind UDP socket to " << local_address_.ToString() 237 LOG(ERROR) << "Failed to bind UDP socket to " << local_address_.ToString()
238 << ", error: " << result; 238 << ", error: " << result;
239 } 239 }
240 } 240 }
241 241
242 talk_base::SocketAddress UdpPacketSocket::GetLocalAddress() const { 242 rtc::SocketAddress UdpPacketSocket::GetLocalAddress() const {
243 DCHECK_EQ(state_, STATE_BOUND); 243 DCHECK_EQ(state_, STATE_BOUND);
244 return local_address_; 244 return local_address_;
245 } 245 }
246 246
247 talk_base::SocketAddress UdpPacketSocket::GetRemoteAddress() const { 247 rtc::SocketAddress UdpPacketSocket::GetRemoteAddress() const {
248 // UDP sockets are not connected - this method should never be called. 248 // UDP sockets are not connected - this method should never be called.
249 NOTREACHED(); 249 NOTREACHED();
250 return talk_base::SocketAddress(); 250 return rtc::SocketAddress();
251 } 251 }
252 252
253 int UdpPacketSocket::Send(const void* data, size_t data_size, 253 int UdpPacketSocket::Send(const void* data, size_t data_size,
254 const talk_base::PacketOptions& options) { 254 const rtc::PacketOptions& options) {
255 // UDP sockets are not connected - this method should never be called. 255 // UDP sockets are not connected - this method should never be called.
256 NOTREACHED(); 256 NOTREACHED();
257 return EWOULDBLOCK; 257 return EWOULDBLOCK;
258 } 258 }
259 259
260 int UdpPacketSocket::SendTo(const void* data, 260 int UdpPacketSocket::SendTo(const void* data,
261 size_t data_size, 261 size_t data_size,
262 const talk_base::SocketAddress& address, 262 const rtc::SocketAddress& address,
263 const talk_base::PacketOptions& options) { 263 const rtc::PacketOptions& options) {
264 if (state_ != STATE_BOUND) { 264 if (state_ != STATE_BOUND) {
265 // TODO(sergeyu): StunPort may try to send stun request before we 265 // TODO(sergeyu): StunPort may try to send stun request before we
266 // are bound. Fix that problem and change this to DCHECK. 266 // are bound. Fix that problem and change this to DCHECK.
267 return EINVAL; 267 return EINVAL;
268 } 268 }
269 269
270 if (error_ != 0) { 270 if (error_ != 0) {
271 return error_; 271 return error_;
272 } 272 }
273 273
(...skipping 11 matching lines...) Expand all
285 DoSend(); 285 DoSend();
286 return data_size; 286 return data_size;
287 } 287 }
288 288
289 int UdpPacketSocket::Close() { 289 int UdpPacketSocket::Close() {
290 state_ = STATE_CLOSED; 290 state_ = STATE_CLOSED;
291 socket_.Close(); 291 socket_.Close();
292 return 0; 292 return 0;
293 } 293 }
294 294
295 talk_base::AsyncPacketSocket::State UdpPacketSocket::GetState() const { 295 rtc::AsyncPacketSocket::State UdpPacketSocket::GetState() const {
296 return state_; 296 return state_;
297 } 297 }
298 298
299 int UdpPacketSocket::GetOption(talk_base::Socket::Option opt, int* value) { 299 int UdpPacketSocket::GetOption(rtc::Socket::Option opt, int* value) {
300 // Options are not supported for Pepper UDP sockets. 300 // Options are not supported for Pepper UDP sockets.
301 return -1; 301 return -1;
302 } 302 }
303 303
304 int UdpPacketSocket::SetOption(talk_base::Socket::Option opt, int value) { 304 int UdpPacketSocket::SetOption(rtc::Socket::Option opt, int value) {
305 // Options are not supported for Pepper UDP sockets. 305 // Options are not supported for Pepper UDP sockets.
306 return -1; 306 return -1;
307 } 307 }
308 308
309 int UdpPacketSocket::GetError() const { 309 int UdpPacketSocket::GetError() const {
310 return error_; 310 return error_;
311 } 311 }
312 312
313 void UdpPacketSocket::SetError(int error) { 313 void UdpPacketSocket::SetError(int error) {
314 error_ = error; 314 error_ = error;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 378
379 void UdpPacketSocket::OnReadCompleted(int result, pp::NetAddress address) { 379 void UdpPacketSocket::OnReadCompleted(int result, pp::NetAddress address) {
380 HandleReadResult(result, address); 380 HandleReadResult(result, address);
381 if (result > 0) { 381 if (result > 0) {
382 DoRead(); 382 DoRead();
383 } 383 }
384 } 384 }
385 385
386 void UdpPacketSocket::HandleReadResult(int result, pp::NetAddress address) { 386 void UdpPacketSocket::HandleReadResult(int result, pp::NetAddress address) {
387 if (result > 0) { 387 if (result > 0) {
388 talk_base::SocketAddress socket_address; 388 rtc::SocketAddress socket_address;
389 PpNetAddressToSocketAddress(address, &socket_address); 389 PpNetAddressToSocketAddress(address, &socket_address);
390 SignalReadPacket(this, &receive_buffer_[0], result, socket_address, 390 SignalReadPacket(this, &receive_buffer_[0], result, socket_address,
391 talk_base::CreatePacketTime(0)); 391 rtc::CreatePacketTime(0));
392 } else if (result != PP_ERROR_ABORTED) { 392 } else if (result != PP_ERROR_ABORTED) {
393 LOG(ERROR) << "Received error when reading from UDP socket: " << result; 393 LOG(ERROR) << "Received error when reading from UDP socket: " << result;
394 } 394 }
395 } 395 }
396 396
397 } // namespace 397 } // namespace
398 398
399 PepperPacketSocketFactory::PepperPacketSocketFactory( 399 PepperPacketSocketFactory::PepperPacketSocketFactory(
400 const pp::InstanceHandle& instance) 400 const pp::InstanceHandle& instance)
401 : pp_instance_(instance) { 401 : pp_instance_(instance) {
402 } 402 }
403 403
404 PepperPacketSocketFactory::~PepperPacketSocketFactory() { 404 PepperPacketSocketFactory::~PepperPacketSocketFactory() {
405 } 405 }
406 406
407 talk_base::AsyncPacketSocket* PepperPacketSocketFactory::CreateUdpSocket( 407 rtc::AsyncPacketSocket* PepperPacketSocketFactory::CreateUdpSocket(
408 const talk_base::SocketAddress& local_address, 408 const rtc::SocketAddress& local_address,
409 int min_port, 409 int min_port,
410 int max_port) { 410 int max_port) {
411 scoped_ptr<UdpPacketSocket> result(new UdpPacketSocket(pp_instance_)); 411 scoped_ptr<UdpPacketSocket> result(new UdpPacketSocket(pp_instance_));
412 if (!result->Init(local_address, min_port, max_port)) 412 if (!result->Init(local_address, min_port, max_port))
413 return NULL; 413 return NULL;
414 return result.release(); 414 return result.release();
415 } 415 }
416 416
417 talk_base::AsyncPacketSocket* PepperPacketSocketFactory::CreateServerTcpSocket( 417 rtc::AsyncPacketSocket* PepperPacketSocketFactory::CreateServerTcpSocket(
418 const talk_base::SocketAddress& local_address, 418 const rtc::SocketAddress& local_address,
419 int min_port, 419 int min_port,
420 int max_port, 420 int max_port,
421 int opts) { 421 int opts) {
422 // We don't use TCP sockets for remoting connections. 422 // We don't use TCP sockets for remoting connections.
423 NOTREACHED(); 423 NOTREACHED();
424 return NULL; 424 return NULL;
425 } 425 }
426 426
427 talk_base::AsyncPacketSocket* PepperPacketSocketFactory::CreateClientTcpSocket( 427 rtc::AsyncPacketSocket* PepperPacketSocketFactory::CreateClientTcpSocket(
428 const talk_base::SocketAddress& local_address, 428 const rtc::SocketAddress& local_address,
429 const talk_base::SocketAddress& remote_address, 429 const rtc::SocketAddress& remote_address,
430 const talk_base::ProxyInfo& proxy_info, 430 const rtc::ProxyInfo& proxy_info,
431 const std::string& user_agent, 431 const std::string& user_agent,
432 int opts) { 432 int opts) {
433 // We don't use TCP sockets for remoting connections. 433 // We don't use TCP sockets for remoting connections.
434 NOTREACHED(); 434 NOTREACHED();
435 return NULL; 435 return NULL;
436 } 436 }
437 437
438 talk_base::AsyncResolverInterface* 438 rtc::AsyncResolverInterface*
439 PepperPacketSocketFactory::CreateAsyncResolver() { 439 PepperPacketSocketFactory::CreateAsyncResolver() {
440 NOTREACHED(); 440 NOTREACHED();
441 return NULL; 441 return NULL;
442 } 442 }
443 443
444 } // namespace remoting 444 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/plugin/pepper_packet_socket_factory.h ('k') | remoting/client/plugin/pepper_port_allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698