| 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 "content/renderer/p2p/socket_dispatcher.h" | 5 #include "content/renderer/p2p/socket_dispatcher.h" |
| 6 | 6 |
| 7 #include "base/message_loop_proxy.h" | 7 #include "base/message_loop_proxy.h" |
| 8 #include "content/common/p2p_messages.h" | 8 #include "content/common/p2p_messages.h" |
| 9 #include "content/renderer/p2p/host_address_request.h" |
| 10 #include "content/renderer/p2p/socket_client.h" |
| 9 | 11 |
| 10 P2PSocketDispatcher::P2PSocketDispatcher(RenderView* render_view) | 12 P2PSocketDispatcher::P2PSocketDispatcher(RenderView* render_view) |
| 11 : RenderViewObserver(render_view), | 13 : RenderViewObserver(render_view), |
| 12 message_loop_(base::MessageLoopProxy::CreateForCurrentThread()), | 14 message_loop_(base::MessageLoopProxy::CreateForCurrentThread()), |
| 13 network_notifications_started_(false), | 15 network_notifications_started_(false), |
| 14 network_list_observers_( | 16 network_list_observers_( |
| 15 new ObserverListThreadSafe<NetworkListObserver>()) { | 17 new ObserverListThreadSafe<NetworkListObserver>()) { |
| 16 } | 18 } |
| 17 | 19 |
| 18 P2PSocketDispatcher::~P2PSocketDispatcher() { | 20 P2PSocketDispatcher::~P2PSocketDispatcher() { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 35 NetworkListObserver* network_list_observer) { | 37 NetworkListObserver* network_list_observer) { |
| 36 network_list_observers_->RemoveObserver(network_list_observer); | 38 network_list_observers_->RemoveObserver(network_list_observer); |
| 37 network_notifications_started_ = false; | 39 network_notifications_started_ = false; |
| 38 Send(new P2PHostMsg_StopNetworkNotifications(routing_id())); | 40 Send(new P2PHostMsg_StopNetworkNotifications(routing_id())); |
| 39 } | 41 } |
| 40 | 42 |
| 41 bool P2PSocketDispatcher::OnMessageReceived(const IPC::Message& message) { | 43 bool P2PSocketDispatcher::OnMessageReceived(const IPC::Message& message) { |
| 42 bool handled = true; | 44 bool handled = true; |
| 43 IPC_BEGIN_MESSAGE_MAP(P2PSocketDispatcher, message) | 45 IPC_BEGIN_MESSAGE_MAP(P2PSocketDispatcher, message) |
| 44 IPC_MESSAGE_HANDLER(P2PMsg_NetworkListChanged, OnNetworkListChanged) | 46 IPC_MESSAGE_HANDLER(P2PMsg_NetworkListChanged, OnNetworkListChanged) |
| 47 IPC_MESSAGE_HANDLER(P2PMsg_GetHostAddressResult, OnGetHostAddressResult) |
| 45 IPC_MESSAGE_HANDLER(P2PMsg_OnSocketCreated, OnSocketCreated) | 48 IPC_MESSAGE_HANDLER(P2PMsg_OnSocketCreated, OnSocketCreated) |
| 46 IPC_MESSAGE_HANDLER(P2PMsg_OnIncomingTcpConnection, OnIncomingTcpConnection) | 49 IPC_MESSAGE_HANDLER(P2PMsg_OnIncomingTcpConnection, OnIncomingTcpConnection) |
| 47 IPC_MESSAGE_HANDLER(P2PMsg_OnError, OnError) | 50 IPC_MESSAGE_HANDLER(P2PMsg_OnError, OnError) |
| 48 IPC_MESSAGE_HANDLER(P2PMsg_OnDataReceived, OnDataReceived) | 51 IPC_MESSAGE_HANDLER(P2PMsg_OnDataReceived, OnDataReceived) |
| 49 IPC_MESSAGE_UNHANDLED(handled = false) | 52 IPC_MESSAGE_UNHANDLED(handled = false) |
| 50 IPC_END_MESSAGE_MAP() | 53 IPC_END_MESSAGE_MAP() |
| 51 return handled; | 54 return handled; |
| 52 } | 55 } |
| 53 | 56 |
| 57 base::MessageLoopProxy* P2PSocketDispatcher::message_loop() { |
| 58 return message_loop_; |
| 59 } |
| 60 |
| 54 int P2PSocketDispatcher::RegisterClient(P2PSocketClient* client) { | 61 int P2PSocketDispatcher::RegisterClient(P2PSocketClient* client) { |
| 55 return clients_.Add(client); | 62 return clients_.Add(client); |
| 56 } | 63 } |
| 57 | 64 |
| 58 void P2PSocketDispatcher::UnregisterClient(int id) { | 65 void P2PSocketDispatcher::UnregisterClient(int id) { |
| 59 clients_.Remove(id); | 66 clients_.Remove(id); |
| 60 } | 67 } |
| 61 | 68 |
| 62 void P2PSocketDispatcher::SendP2PMessage(IPC::Message* msg) { | 69 void P2PSocketDispatcher::SendP2PMessage(IPC::Message* msg) { |
| 63 msg->set_routing_id(routing_id()); | 70 msg->set_routing_id(routing_id()); |
| 64 Send(msg); | 71 Send(msg); |
| 65 } | 72 } |
| 66 | 73 |
| 67 base::MessageLoopProxy* P2PSocketDispatcher::message_loop() { | 74 int P2PSocketDispatcher::RegisterHostAddressRequest( |
| 68 return message_loop_; | 75 P2PHostAddressRequest* request) { |
| 76 return host_address_requests_.Add(request); |
| 77 } |
| 78 |
| 79 void P2PSocketDispatcher::UnregisterHostAddressRequest(int id) { |
| 80 host_address_requests_.Remove(id); |
| 69 } | 81 } |
| 70 | 82 |
| 71 void P2PSocketDispatcher::OnNetworkListChanged( | 83 void P2PSocketDispatcher::OnNetworkListChanged( |
| 72 const net::NetworkInterfaceList& networks) { | 84 const net::NetworkInterfaceList& networks) { |
| 73 network_list_observers_->Notify(&NetworkListObserver::OnNetworkListChanged, | 85 network_list_observers_->Notify(&NetworkListObserver::OnNetworkListChanged, |
| 74 networks); | 86 networks); |
| 75 } | 87 } |
| 76 | 88 |
| 89 void P2PSocketDispatcher::OnGetHostAddressResult( |
| 90 int32 request_id, |
| 91 const net::IPAddressNumber& address) { |
| 92 P2PHostAddressRequest* request = host_address_requests_.Lookup(request_id); |
| 93 if (!request) { |
| 94 VLOG(1) << "Received P2P message for socket that doesn't exist."; |
| 95 return; |
| 96 } |
| 97 |
| 98 request->OnResponse(address); |
| 99 } |
| 100 |
| 77 void P2PSocketDispatcher::OnSocketCreated( | 101 void P2PSocketDispatcher::OnSocketCreated( |
| 78 int socket_id, const net::IPEndPoint& address) { | 102 int socket_id, const net::IPEndPoint& address) { |
| 79 P2PSocketClient* client = GetClient(socket_id); | 103 P2PSocketClient* client = GetClient(socket_id); |
| 80 if (client) { | 104 if (client) { |
| 81 client->OnSocketCreated(address); | 105 client->OnSocketCreated(address); |
| 82 } | 106 } |
| 83 } | 107 } |
| 84 | 108 |
| 85 void P2PSocketDispatcher::OnIncomingTcpConnection( | 109 void P2PSocketDispatcher::OnIncomingTcpConnection( |
| 86 int socket_id, const net::IPEndPoint& address) { | 110 int socket_id, const net::IPEndPoint& address) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 111 if (client == NULL) { | 135 if (client == NULL) { |
| 112 // This may happen if the socket was closed, but the browser side | 136 // This may happen if the socket was closed, but the browser side |
| 113 // hasn't processed the close message by the time it sends the | 137 // hasn't processed the close message by the time it sends the |
| 114 // message to the renderer. | 138 // message to the renderer. |
| 115 VLOG(1) << "Received P2P message for socket that doesn't exist."; | 139 VLOG(1) << "Received P2P message for socket that doesn't exist."; |
| 116 return NULL; | 140 return NULL; |
| 117 } | 141 } |
| 118 | 142 |
| 119 return client; | 143 return client; |
| 120 } | 144 } |
| OLD | NEW |