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

Side by Side Diff: remoting/protocol/connection_to_host.cc

Issue 8587053: Remove event_channel() and control_channel() from Session interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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) 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 "remoting/protocol/connection_to_host.h" 5 #include "remoting/protocol/connection_to_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
(...skipping 18 matching lines...) Expand all
29 pp::Instance* pp_instance, 29 pp::Instance* pp_instance,
30 bool allow_nat_traversal) 30 bool allow_nat_traversal)
31 : message_loop_(message_loop), 31 : message_loop_(message_loop),
32 pp_instance_(pp_instance), 32 pp_instance_(pp_instance),
33 allow_nat_traversal_(allow_nat_traversal), 33 allow_nat_traversal_(allow_nat_traversal),
34 event_callback_(NULL), 34 event_callback_(NULL),
35 client_stub_(NULL), 35 client_stub_(NULL),
36 video_stub_(NULL), 36 video_stub_(NULL),
37 state_(CONNECTING), 37 state_(CONNECTING),
38 error_(OK), 38 error_(OK),
39 control_connected_(false), 39 control_channel_connected_(false),
40 input_connected_(false), 40 event_channel_connected_(false),
41 video_connected_(false) { 41 video_channel_connected_(false) {
42 } 42 }
43 43
44 ConnectionToHost::~ConnectionToHost() { 44 ConnectionToHost::~ConnectionToHost() {
45 } 45 }
46 46
47 InputStub* ConnectionToHost::input_stub() { 47 InputStub* ConnectionToHost::input_stub() {
48 return input_dispatcher_.get(); 48 return event_dispatcher_.get();
49 } 49 }
50 50
51 HostStub* ConnectionToHost::host_stub() { 51 HostStub* ConnectionToHost::host_stub() {
52 return control_dispatcher_.get(); 52 return control_dispatcher_.get();
53 } 53 }
54 54
55 void ConnectionToHost::Connect(scoped_refptr<XmppProxy> xmpp_proxy, 55 void ConnectionToHost::Connect(scoped_refptr<XmppProxy> xmpp_proxy,
56 const std::string& your_jid, 56 const std::string& your_jid,
57 const std::string& host_jid, 57 const std::string& host_jid,
58 const std::string& host_public_key, 58 const std::string& host_public_key,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 CloseOnError(NETWORK_FAILURE); 183 CloseOnError(NETWORK_FAILURE);
184 } 184 }
185 break; 185 break;
186 186
187 case Session::CLOSED: 187 case Session::CLOSED:
188 CloseChannels(); 188 CloseChannels();
189 SetState(CLOSED, OK); 189 SetState(CLOSED, OK);
190 break; 190 break;
191 191
192 case Session::CONNECTED: 192 case Session::CONNECTED:
193 video_reader_.reset( 193 video_reader_.reset(VideoReader::Create(
194 VideoReader::Create(message_loop_, session_->config())); 194 message_loop_, session_->config()));
195 video_reader_->Init( 195 video_reader_->Init(session_.get(), video_stub_, base::Bind(
196 session_.get(), video_stub_, 196 &ConnectionToHost::OnVideoChannelInitialized,
197 base::Bind(&ConnectionToHost::OnVideoChannelInitialized, 197 base::Unretained(this)));
198 base::Unretained(this)));
199 break;
200 198
201 case Session::CONNECTED_CHANNELS:
202 control_dispatcher_.reset(new ClientControlDispatcher()); 199 control_dispatcher_.reset(new ClientControlDispatcher());
203 control_dispatcher_->Init(session_.get()); 200 control_dispatcher_->Init(session_.get(), base::Bind(
201 &ConnectionToHost::OnControlChannelInitialized,
202 base::Unretained(this)));
204 control_dispatcher_->set_client_stub(client_stub_); 203 control_dispatcher_->set_client_stub(client_stub_);
205 input_dispatcher_.reset(new ClientEventDispatcher());
206 input_dispatcher_->Init(session_.get());
207 204
208 control_connected_ = true; 205 event_dispatcher_.reset(new ClientEventDispatcher());
209 input_connected_ = true; 206 event_dispatcher_->Init(session_.get(), base::Bind(
210 NotifyIfChannelsReady(); 207 &ConnectionToHost::OnEventChannelInitialized,
208 base::Unretained(this)));
211 break; 209 break;
212 210
213 default: 211 default:
214 // Ignore the other states by default. 212 // Ignore the other states by default.
215 break; 213 break;
216 } 214 }
217 } 215 }
218 216
217 void ConnectionToHost::OnControlChannelInitialized(bool successful) {
218 if (!successful) {
219 LOG(ERROR) << "Failed to connect video channel";
220 CloseOnError(NETWORK_FAILURE);
221 return;
222 }
223
224 control_channel_connected_ = true;
225 NotifyIfChannelsReady();
226 }
227
228
229 void ConnectionToHost::OnEventChannelInitialized(bool successful) {
230 if (!successful) {
231 LOG(ERROR) << "Failed to connect video channel";
232 CloseOnError(NETWORK_FAILURE);
233 return;
234 }
235
236 event_channel_connected_ = true;
237 NotifyIfChannelsReady();
238 }
239
240
219 void ConnectionToHost::OnVideoChannelInitialized(bool successful) { 241 void ConnectionToHost::OnVideoChannelInitialized(bool successful) {
220 if (!successful) { 242 if (!successful) {
221 LOG(ERROR) << "Failed to connect video channel"; 243 LOG(ERROR) << "Failed to connect video channel";
222 CloseOnError(NETWORK_FAILURE); 244 CloseOnError(NETWORK_FAILURE);
223 return; 245 return;
224 } 246 }
225 247
226 video_connected_ = true; 248 video_channel_connected_ = true;
227 NotifyIfChannelsReady(); 249 NotifyIfChannelsReady();
228 } 250 }
229 251
230 void ConnectionToHost::NotifyIfChannelsReady() { 252 void ConnectionToHost::NotifyIfChannelsReady() {
231 if (control_connected_ && input_connected_ && video_connected_ && 253 if (control_channel_connected_ && event_channel_connected_ &&
232 state_ == CONNECTING) { 254 video_channel_connected_ && state_ == CONNECTING) {
233 SetState(CONNECTED, OK); 255 SetState(CONNECTED, OK);
234 SetState(AUTHENTICATED, OK); 256 SetState(AUTHENTICATED, OK);
235 } 257 }
236 } 258 }
237 259
238 void ConnectionToHost::CloseOnError(Error error) { 260 void ConnectionToHost::CloseOnError(Error error) {
239 CloseChannels(); 261 CloseChannels();
240 SetState(FAILED, error); 262 SetState(FAILED, error);
241 } 263 }
242 264
243 void ConnectionToHost::CloseChannels() { 265 void ConnectionToHost::CloseChannels() {
244 control_dispatcher_.reset(); 266 control_dispatcher_.reset();
245 input_dispatcher_.reset(); 267 event_dispatcher_.reset();
246 video_reader_.reset(); 268 video_reader_.reset();
247 } 269 }
248 270
249 void ConnectionToHost::SetState(State state, Error error) { 271 void ConnectionToHost::SetState(State state, Error error) {
250 DCHECK(message_loop_->BelongsToCurrentThread()); 272 DCHECK(message_loop_->BelongsToCurrentThread());
251 // |error| should be specified only when |state| is set to FAILED. 273 // |error| should be specified only when |state| is set to FAILED.
252 DCHECK(state == FAILED || error == OK); 274 DCHECK(state == FAILED || error == OK);
253 275
254 if (state != state_) { 276 if (state != state_) {
255 state_ = state; 277 state_ = state;
256 error_ = error; 278 error_ = error;
257 event_callback_->OnConnectionState(state_, error_); 279 event_callback_->OnConnectionState(state_, error_);
258 } 280 }
259 } 281 }
260 282
261 } // namespace protocol 283 } // namespace protocol
262 } // namespace remoting 284 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698