OLD | NEW |
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 "content/renderer/p2p/ipc_socket_factory.h" | 5 #include "content/renderer/p2p/ipc_socket_factory.h" |
6 | 6 |
7 #include <deque> | 7 #include <deque> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 talk_base::DiffServCodePoint dscp) OVERRIDE; | 55 talk_base::DiffServCodePoint dscp) OVERRIDE; |
56 virtual int Close() OVERRIDE; | 56 virtual int Close() OVERRIDE; |
57 virtual State GetState() const OVERRIDE; | 57 virtual State GetState() const OVERRIDE; |
58 virtual int GetOption(talk_base::Socket::Option opt, int* value) OVERRIDE; | 58 virtual int GetOption(talk_base::Socket::Option opt, int* value) OVERRIDE; |
59 virtual int SetOption(talk_base::Socket::Option opt, int value) OVERRIDE; | 59 virtual int SetOption(talk_base::Socket::Option opt, int value) OVERRIDE; |
60 virtual int GetError() const OVERRIDE; | 60 virtual int GetError() const OVERRIDE; |
61 virtual void SetError(int error) OVERRIDE; | 61 virtual void SetError(int error) OVERRIDE; |
62 | 62 |
63 // P2PSocketClient::Delegate implementation. | 63 // P2PSocketClient::Delegate implementation. |
64 virtual void OnOpen(const net::IPEndPoint& address) OVERRIDE; | 64 virtual void OnOpen(const net::IPEndPoint& address) OVERRIDE; |
65 virtual void OnIncomingTcpConnection(const net::IPEndPoint& address, | 65 virtual void OnIncomingTcpConnection( |
66 P2PSocketClient* client) OVERRIDE; | 66 const net::IPEndPoint& address, |
| 67 P2PSocketClientInterface* client) OVERRIDE; |
67 virtual void OnSendComplete() OVERRIDE; | 68 virtual void OnSendComplete() OVERRIDE; |
68 virtual void OnError() OVERRIDE; | 69 virtual void OnError() OVERRIDE; |
69 virtual void OnDataReceived(const net::IPEndPoint& address, | 70 virtual void OnDataReceived(const net::IPEndPoint& address, |
70 const std::vector<char>& data) OVERRIDE; | 71 const std::vector<char>& data) OVERRIDE; |
71 | 72 |
72 private: | 73 private: |
73 enum InternalState { | 74 enum InternalState { |
74 IS_UNINITIALIZED, | 75 IS_UNINITIALIZED, |
75 IS_OPENING, | 76 IS_OPENING, |
76 IS_OPEN, | 77 IS_OPEN, |
77 IS_CLOSED, | 78 IS_CLOSED, |
78 IS_ERROR, | 79 IS_ERROR, |
79 }; | 80 }; |
80 | 81 |
81 // Update trace of send throttling internal state. This should be called | 82 // Update trace of send throttling internal state. This should be called |
82 // immediately after any changes to |send_bytes_available_| and/or | 83 // immediately after any changes to |send_bytes_available_| and/or |
83 // |in_flight_packet_sizes_|. | 84 // |in_flight_packet_sizes_|. |
84 void TraceSendThrottlingState() const; | 85 void TraceSendThrottlingState() const; |
85 | 86 |
86 void InitAcceptedTcp(P2PSocketClient* client, | 87 void InitAcceptedTcp(P2PSocketClientInterface* client, |
87 const talk_base::SocketAddress& local_address, | 88 const talk_base::SocketAddress& local_address, |
88 const talk_base::SocketAddress& remote_address); | 89 const talk_base::SocketAddress& remote_address); |
89 P2PSocketType type_; | 90 P2PSocketType type_; |
90 | 91 |
91 // Message loop on which this socket was created and being used. | 92 // Message loop on which this socket was created and being used. |
92 base::MessageLoop* message_loop_; | 93 base::MessageLoop* message_loop_; |
93 | 94 |
94 // Corresponding P2P socket client. | 95 // Corresponding P2P socket client. |
95 scoped_refptr<P2PSocketClient> client_; | 96 scoped_refptr<P2PSocketClientInterface> client_; |
96 | 97 |
97 // Local address is allocated by the browser process, and the | 98 // Local address is allocated by the browser process, and the |
98 // renderer side doesn't know the address until it receives OnOpen() | 99 // renderer side doesn't know the address until it receives OnOpen() |
99 // event from the browser. | 100 // event from the browser. |
100 talk_base::SocketAddress local_address_; | 101 talk_base::SocketAddress local_address_; |
101 | 102 |
102 // Remote address for client TCP connections. | 103 // Remote address for client TCP connections. |
103 talk_base::SocketAddress remote_address_; | 104 talk_base::SocketAddress remote_address_; |
104 | 105 |
105 // Current state of the object. | 106 // Current state of the object. |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 remote_address, &remote_endpoint)) { | 173 remote_address, &remote_endpoint)) { |
173 return false; | 174 return false; |
174 } | 175 } |
175 | 176 |
176 client_->Init(type, local_endpoint, remote_endpoint, this); | 177 client_->Init(type, local_endpoint, remote_endpoint, this); |
177 | 178 |
178 return true; | 179 return true; |
179 } | 180 } |
180 | 181 |
181 void IpcPacketSocket::InitAcceptedTcp( | 182 void IpcPacketSocket::InitAcceptedTcp( |
182 P2PSocketClient* client, | 183 P2PSocketClientInterface* client, |
183 const talk_base::SocketAddress& local_address, | 184 const talk_base::SocketAddress& local_address, |
184 const talk_base::SocketAddress& remote_address) { | 185 const talk_base::SocketAddress& remote_address) { |
185 DCHECK_EQ(base::MessageLoop::current(), message_loop_); | 186 DCHECK_EQ(base::MessageLoop::current(), message_loop_); |
186 DCHECK_EQ(state_, IS_UNINITIALIZED); | 187 DCHECK_EQ(state_, IS_UNINITIALIZED); |
187 | 188 |
188 client_ = client; | 189 client_ = client; |
189 local_address_ = local_address; | 190 local_address_ = local_address; |
190 remote_address_ = remote_address; | 191 remote_address_ = remote_address; |
191 state_ = IS_OPEN; | 192 state_ = IS_OPEN; |
192 TraceSendThrottlingState(); | 193 TraceSendThrottlingState(); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 state_ = IS_OPEN; | 333 state_ = IS_OPEN; |
333 TraceSendThrottlingState(); | 334 TraceSendThrottlingState(); |
334 | 335 |
335 SignalAddressReady(this, local_address_); | 336 SignalAddressReady(this, local_address_); |
336 if (IsTcpClientSocket(type_)) | 337 if (IsTcpClientSocket(type_)) |
337 SignalConnect(this); | 338 SignalConnect(this); |
338 } | 339 } |
339 | 340 |
340 void IpcPacketSocket::OnIncomingTcpConnection( | 341 void IpcPacketSocket::OnIncomingTcpConnection( |
341 const net::IPEndPoint& address, | 342 const net::IPEndPoint& address, |
342 P2PSocketClient* client) { | 343 P2PSocketClientInterface* client) { |
343 DCHECK_EQ(base::MessageLoop::current(), message_loop_); | 344 DCHECK_EQ(base::MessageLoop::current(), message_loop_); |
344 | 345 |
345 scoped_ptr<IpcPacketSocket> socket(new IpcPacketSocket()); | 346 scoped_ptr<IpcPacketSocket> socket(new IpcPacketSocket()); |
346 | 347 |
347 talk_base::SocketAddress remote_address; | 348 talk_base::SocketAddress remote_address; |
348 if (!jingle_glue::IPEndPointToSocketAddress(address, &remote_address)) { | 349 if (!jingle_glue::IPEndPointToSocketAddress(address, &remote_address)) { |
349 // Always expect correct IPv4 address to be allocated. | 350 // Always expect correct IPv4 address to be allocated. |
350 NOTREACHED(); | 351 NOTREACHED(); |
351 } | 352 } |
352 socket->InitAcceptedTcp(client, local_address_, remote_address); | 353 socket->InitAcceptedTcp(client, local_address_, remote_address); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 } | 450 } |
450 P2PSocketClient* socket_client = new P2PSocketClient(socket_dispatcher_); | 451 P2PSocketClient* socket_client = new P2PSocketClient(socket_dispatcher_); |
451 scoped_ptr<IpcPacketSocket> socket(new IpcPacketSocket()); | 452 scoped_ptr<IpcPacketSocket> socket(new IpcPacketSocket()); |
452 if (!socket->Init(type, socket_client, local_address, | 453 if (!socket->Init(type, socket_client, local_address, |
453 remote_address)) | 454 remote_address)) |
454 return NULL; | 455 return NULL; |
455 return socket.release(); | 456 return socket.release(); |
456 } | 457 } |
457 | 458 |
458 } // namespace content | 459 } // namespace content |
OLD | NEW |