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

Side by Side Diff: content/renderer/p2p/socket_client_impl.cc

Issue 193663003: Push remote hostname to P2P socket host. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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
« no previous file with comments | « content/renderer/p2p/socket_client_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/socket_client_impl.h" 5 #include "content/renderer/p2p/socket_client_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop_proxy.h" 8 #include "base/message_loop/message_loop_proxy.h"
9 #include "content/common/p2p_messages.h" 9 #include "content/common/p2p_messages.h"
10 #include "content/renderer/p2p/socket_client_delegate.h" 10 #include "content/renderer/p2p/socket_client_delegate.h"
11 #include "content/renderer/p2p/socket_dispatcher.h" 11 #include "content/renderer/p2p/socket_dispatcher.h"
12 #include "content/renderer/render_thread_impl.h" 12 #include "content/renderer/render_thread_impl.h"
13 #include "crypto/random.h" 13 #include "crypto/random.h"
14 14
15 namespace { 15 namespace {
16 16
17 uint64 GetUniqueId(uint32 random_socket_id, uint32 packet_id) { 17 uint64 GetUniqueId(uint32 random_socket_id, uint32 packet_id) {
18 uint64 uid = random_socket_id; 18 uint64 uid = random_socket_id;
19 uid <<= 32; 19 uid <<= 32;
20 uid |= packet_id; 20 uid |= packet_id;
21 return uid; 21 return uid;
22 } 22 }
23 23
24 } // namespace 24 } // namespace
25 25
26 namespace content { 26 namespace content {
27 27
28 scoped_refptr<P2PSocketClient> P2PSocketClient::Create(
29 P2PSocketType type,
30 const net::IPEndPoint& local_address,
31 const net::IPEndPoint& remote_address,
32 P2PSocketClientDelegate* delegate) {
33 P2PSocketClientImpl* impl = new P2PSocketClientImpl(
34 RenderThreadImpl::current()->p2p_socket_dispatcher());
35 impl->Init(type, local_address, remote_address, delegate);
36 return impl;
37 }
38
39 P2PSocketClientImpl::P2PSocketClientImpl(P2PSocketDispatcher* dispatcher) 28 P2PSocketClientImpl::P2PSocketClientImpl(P2PSocketDispatcher* dispatcher)
40 : dispatcher_(dispatcher), 29 : dispatcher_(dispatcher),
41 ipc_message_loop_(dispatcher->message_loop()), 30 ipc_message_loop_(dispatcher->message_loop()),
42 delegate_message_loop_(base::MessageLoopProxy::current()), 31 delegate_message_loop_(base::MessageLoopProxy::current()),
43 socket_id_(0), delegate_(NULL), 32 socket_id_(0), delegate_(NULL),
44 state_(STATE_UNINITIALIZED), 33 state_(STATE_UNINITIALIZED),
45 random_socket_id_(0), 34 random_socket_id_(0),
46 next_packet_id_(0) { 35 next_packet_id_(0) {
47 crypto::RandBytes(&random_socket_id_, sizeof(random_socket_id_)); 36 crypto::RandBytes(&random_socket_id_, sizeof(random_socket_id_));
48 } 37 }
49 38
50 P2PSocketClientImpl::~P2PSocketClientImpl() { 39 P2PSocketClientImpl::~P2PSocketClientImpl() {
51 CHECK(state_ == STATE_CLOSED || state_ == STATE_UNINITIALIZED); 40 CHECK(state_ == STATE_CLOSED || state_ == STATE_UNINITIALIZED);
52 } 41 }
53 42
54 void P2PSocketClientImpl::Init( 43 void P2PSocketClientImpl::Init(
55 P2PSocketType type, 44 P2PSocketType type,
56 const net::IPEndPoint& local_address, 45 const net::IPEndPoint& local_address,
57 const net::IPEndPoint& remote_address, 46 const P2PHostAndIPEndPoint& remote_address,
58 P2PSocketClientDelegate* delegate) { 47 P2PSocketClientDelegate* delegate) {
59 DCHECK(delegate_message_loop_->BelongsToCurrentThread()); 48 DCHECK(delegate_message_loop_->BelongsToCurrentThread());
60 // |delegate_| is only accessesed on |delegate_message_loop_|. 49 // |delegate_| is only accessesed on |delegate_message_loop_|.
61 delegate_ = delegate; 50 delegate_ = delegate;
62 51
63 ipc_message_loop_->PostTask( 52 ipc_message_loop_->PostTask(
64 FROM_HERE, base::Bind(&P2PSocketClientImpl::DoInit, 53 FROM_HERE, base::Bind(&P2PSocketClientImpl::DoInit,
65 this, 54 this,
66 type, 55 type,
67 local_address, 56 local_address,
68 remote_address)); 57 remote_address));
69 } 58 }
70 59
71 void P2PSocketClientImpl::DoInit(P2PSocketType type, 60 void P2PSocketClientImpl::DoInit(P2PSocketType type,
72 const net::IPEndPoint& local_address, 61 const net::IPEndPoint& local_address,
73 const net::IPEndPoint& remote_address) { 62 const P2PHostAndIPEndPoint& remote_address) {
74 DCHECK_EQ(state_, STATE_UNINITIALIZED); 63 DCHECK_EQ(state_, STATE_UNINITIALIZED);
75 DCHECK(delegate_); 64 DCHECK(delegate_);
76 state_ = STATE_OPENING; 65 state_ = STATE_OPENING;
77 socket_id_ = dispatcher_->RegisterClient(this); 66 socket_id_ = dispatcher_->RegisterClient(this);
78 dispatcher_->SendP2PMessage(new P2PHostMsg_CreateSocket( 67 dispatcher_->SendP2PMessage(new P2PHostMsg_CreateSocket(
79 type, socket_id_, local_address, remote_address)); 68 type, socket_id_, local_address, remote_address));
80 } 69 }
81 70
82 void P2PSocketClientImpl::SendWithDscp( 71 void P2PSocketClientImpl::SendWithDscp(
83 const net::IPEndPoint& address, 72 const net::IPEndPoint& address,
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 delegate_->OnDataReceived(address, data, timestamp); 240 delegate_->OnDataReceived(address, data, timestamp);
252 } 241 }
253 242
254 void P2PSocketClientImpl::Detach() { 243 void P2PSocketClientImpl::Detach() {
255 DCHECK(ipc_message_loop_->BelongsToCurrentThread()); 244 DCHECK(ipc_message_loop_->BelongsToCurrentThread());
256 dispatcher_ = NULL; 245 dispatcher_ = NULL;
257 OnError(); 246 OnError();
258 } 247 }
259 248
260 } // namespace content 249 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/p2p/socket_client_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698