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

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

Issue 7551034: Move P2P candidate serialization/deserialization to jingle/glue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 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
« no previous file with comments | « content/renderer/p2p/p2p_transport_impl.h ('k') | jingle/glue/utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/p2p_transport_impl.h" 5 #include "content/renderer/p2p/p2p_transport_impl.h"
6 6
7 #include "base/values.h"
8 #include "content/common/json_value_serializer.h"
9 #include "content/renderer/p2p/ipc_network_manager.h" 7 #include "content/renderer/p2p/ipc_network_manager.h"
10 #include "content/renderer/p2p/ipc_socket_factory.h" 8 #include "content/renderer/p2p/ipc_socket_factory.h"
11 #include "content/renderer/render_view.h" 9 #include "content/renderer/render_view.h"
12 #include "jingle/glue/channel_socket_adapter.h" 10 #include "jingle/glue/channel_socket_adapter.h"
13 #include "jingle/glue/pseudotcp_adapter.h" 11 #include "jingle/glue/pseudotcp_adapter.h"
14 #include "jingle/glue/thread_wrapper.h" 12 #include "jingle/glue/thread_wrapper.h"
13 #include "jingle/glue/utils.h"
15 #include "net/base/net_errors.h" 14 #include "net/base/net_errors.h"
16 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h" 15 #include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h"
17 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h" 16 #include "third_party/libjingle/source/talk/p2p/client/basicportallocator.h"
18 17
19 P2PTransportImpl::P2PTransportImpl( 18 P2PTransportImpl::P2PTransportImpl(
20 talk_base::NetworkManager* network_manager, 19 talk_base::NetworkManager* network_manager,
21 talk_base::PacketSocketFactory* socket_factory) 20 talk_base::PacketSocketFactory* socket_factory)
22 : event_handler_(NULL), 21 : event_handler_(NULL),
23 state_(STATE_NONE), 22 state_(STATE_NONE),
24 network_manager_(network_manager), 23 network_manager_(network_manager),
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 int result = pseudo_tcp_adapter_->Connect(&connect_callback_); 82 int result = pseudo_tcp_adapter_->Connect(&connect_callback_);
84 if (result != net::ERR_IO_PENDING) 83 if (result != net::ERR_IO_PENDING)
85 OnTcpConnected(result); 84 OnTcpConnected(result);
86 } 85 }
87 86
88 return true; 87 return true;
89 } 88 }
90 89
91 bool P2PTransportImpl::AddRemoteCandidate(const std::string& address) { 90 bool P2PTransportImpl::AddRemoteCandidate(const std::string& address) {
92 cricket::Candidate candidate; 91 cricket::Candidate candidate;
93 if (!DeserializeCandidate(address, &candidate)) { 92 if (!jingle_glue::DeserializeP2PCandidate(address, &candidate)) {
93 LOG(ERROR) << "Failed to parse candidate " << address;
94 return false; 94 return false;
95 } 95 }
96 96
97 channel_->OnCandidate(candidate); 97 channel_->OnCandidate(candidate);
98 return true; 98 return true;
99 } 99 }
100 100
101 void P2PTransportImpl::OnRequestSignaling() { 101 void P2PTransportImpl::OnRequestSignaling() {
102 channel_->OnSignalingReady(); 102 channel_->OnSignalingReady();
103 } 103 }
104 104
105 void P2PTransportImpl::OnCandidateReady( 105 void P2PTransportImpl::OnCandidateReady(
106 cricket::TransportChannelImpl* channel, 106 cricket::TransportChannelImpl* channel,
107 const cricket::Candidate& candidate) { 107 const cricket::Candidate& candidate) {
108 event_handler_->OnCandidateReady(SerializeCandidate(candidate)); 108 event_handler_->OnCandidateReady(
109 jingle_glue::SerializeP2PCandidate(candidate));
109 } 110 }
110 111
111 void P2PTransportImpl::OnReadableState(cricket::TransportChannel* channel) { 112 void P2PTransportImpl::OnReadableState(cricket::TransportChannel* channel) {
112 state_ = static_cast<State>(state_ | STATE_READABLE); 113 state_ = static_cast<State>(state_ | STATE_READABLE);
113 event_handler_->OnStateChange(state_); 114 event_handler_->OnStateChange(state_);
114 } 115 }
115 116
116 void P2PTransportImpl::OnWriteableState(cricket::TransportChannel* channel) { 117 void P2PTransportImpl::OnWriteableState(cricket::TransportChannel* channel) {
117 state_ = static_cast<State>(state_ | STATE_WRITABLE); 118 state_ = static_cast<State>(state_ | STATE_WRITABLE);
118 event_handler_->OnStateChange(state_); 119 event_handler_->OnStateChange(state_);
119 } 120 }
120 121
121 std::string P2PTransportImpl::SerializeCandidate(
122 const cricket::Candidate& candidate) {
123
124 // TODO(sergeyu): Use SDP to format candidates?
125 DictionaryValue value;
126 value.SetString("name", candidate.name());
127 value.SetString("ip", candidate.address().IPAsString());
128 value.SetInteger("port", candidate.address().port());
129 value.SetString("type", candidate.type());
130 value.SetString("protocol", candidate.protocol());
131 value.SetString("username", candidate.username());
132 value.SetString("password", candidate.password());
133 value.SetDouble("preference", candidate.preference());
134 value.SetInteger("generation", candidate.generation());
135
136 std::string result;
137 JSONStringValueSerializer serializer(&result);
138 serializer.Serialize(value);
139 return result;
140 }
141
142 bool P2PTransportImpl::DeserializeCandidate(const std::string& address,
143 cricket::Candidate* candidate) {
144 JSONStringValueSerializer deserializer(address);
145 scoped_ptr<Value> value(deserializer.Deserialize(NULL, NULL));
146 if (!value.get() || !value->IsType(Value::TYPE_DICTIONARY)) {
147 return false;
148 }
149
150 DictionaryValue* dic_value = static_cast<DictionaryValue*>(value.get());
151
152 std::string name;
153 std::string ip;
154 int port;
155 std::string type;
156 std::string protocol;
157 std::string username;
158 std::string password;
159 double preference;
160 int generation;
161
162 if (!dic_value->GetString("name", &name) ||
163 !dic_value->GetString("ip", &ip) ||
164 !dic_value->GetInteger("port", &port) ||
165 !dic_value->GetString("type", &type) ||
166 !dic_value->GetString("protocol", &protocol) ||
167 !dic_value->GetString("username", &username) ||
168 !dic_value->GetString("password", &password) ||
169 !dic_value->GetDouble("preference", &preference) ||
170 !dic_value->GetInteger("generation", &generation)) {
171 return false;
172 }
173
174 candidate->set_name(name);
175 candidate->set_address(talk_base::SocketAddress(ip, port));
176 candidate->set_type(type);
177 candidate->set_protocol(protocol);
178 candidate->set_username(username);
179 candidate->set_password(password);
180 candidate->set_preference(static_cast<float>(preference));
181 candidate->set_generation(generation);
182
183 return true;
184 }
185
186 net::Socket* P2PTransportImpl::GetChannel() { 122 net::Socket* P2PTransportImpl::GetChannel() {
187 if (pseudo_tcp_adapter_.get()) { 123 if (pseudo_tcp_adapter_.get()) {
188 DCHECK(!channel_adapter_.get()); 124 DCHECK(!channel_adapter_.get());
189 return pseudo_tcp_adapter_.get(); 125 return pseudo_tcp_adapter_.get();
190 } else { 126 } else {
191 DCHECK(channel_adapter_.get()); 127 DCHECK(channel_adapter_.get());
192 return channel_adapter_.get(); 128 return channel_adapter_.get();
193 } 129 }
194 } 130 }
195 131
196 void P2PTransportImpl::OnTcpConnected(int result) { 132 void P2PTransportImpl::OnTcpConnected(int result) {
197 if (result < 0) { 133 if (result < 0) {
198 event_handler_->OnError(result); 134 event_handler_->OnError(result);
199 return; 135 return;
200 } 136 }
201 state_ = static_cast<State>(STATE_READABLE | STATE_WRITABLE); 137 state_ = static_cast<State>(STATE_READABLE | STATE_WRITABLE);
202 event_handler_->OnStateChange(state_); 138 event_handler_->OnStateChange(state_);
203 } 139 }
OLDNEW
« no previous file with comments | « content/renderer/p2p/p2p_transport_impl.h ('k') | jingle/glue/utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698