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

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

Issue 8774017: Add AUTHENTICATED session state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years 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 | « remoting/protocol/connection_to_host.h ('k') | remoting/protocol/jingle_session.cc » ('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 "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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 ConnectionToHost::State ConnectionToHost::state() const { 152 ConnectionToHost::State ConnectionToHost::state() const {
153 return state_; 153 return state_;
154 } 154 }
155 155
156 void ConnectionToHost::OnSessionStateChange( 156 void ConnectionToHost::OnSessionStateChange(
157 Session::State state) { 157 Session::State state) {
158 DCHECK(message_loop_->BelongsToCurrentThread()); 158 DCHECK(message_loop_->BelongsToCurrentThread());
159 DCHECK(event_callback_); 159 DCHECK(event_callback_);
160 160
161 switch (state) { 161 switch (state) {
162 case Session::INITIALIZING:
163 case Session::CONNECTING:
164 case Session::CONNECTED:
165 // Don't care about these events.
166 break;
167
168 case Session::AUTHENTICATED:
169 video_reader_.reset(VideoReader::Create(
170 message_loop_, session_->config()));
171 video_reader_->Init(session_.get(), video_stub_, base::Bind(
172 &ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
173
174 control_dispatcher_.reset(new ClientControlDispatcher());
175 control_dispatcher_->Init(session_.get(), base::Bind(
176 &ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
177 control_dispatcher_->set_client_stub(client_stub_);
178
179 event_dispatcher_.reset(new ClientEventDispatcher());
180 event_dispatcher_->Init(session_.get(), base::Bind(
181 &ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
182 break;
183
184 case Session::CLOSED:
185 CloseChannels();
186 SetState(CLOSED, OK);
187 break;
188
162 case Session::FAILED: 189 case Session::FAILED:
163 switch (session_->error()) { 190 switch (session_->error()) {
164 case Session::PEER_IS_OFFLINE: 191 case Session::PEER_IS_OFFLINE:
165 CloseOnError(HOST_IS_OFFLINE); 192 CloseOnError(HOST_IS_OFFLINE);
166 break; 193 break;
167 case Session::SESSION_REJECTED: 194 case Session::SESSION_REJECTED:
168 case Session::AUTHENTICATION_FAILED: 195 case Session::AUTHENTICATION_FAILED:
169 CloseOnError(SESSION_REJECTED); 196 CloseOnError(SESSION_REJECTED);
170 break; 197 break;
171 case Session::INCOMPATIBLE_PROTOCOL: 198 case Session::INCOMPATIBLE_PROTOCOL:
172 CloseOnError(INCOMPATIBLE_PROTOCOL); 199 CloseOnError(INCOMPATIBLE_PROTOCOL);
173 break; 200 break;
174 case Session::CHANNEL_CONNECTION_ERROR: 201 case Session::CHANNEL_CONNECTION_ERROR:
175 CloseOnError(NETWORK_FAILURE); 202 CloseOnError(NETWORK_FAILURE);
176 break; 203 break;
177 case Session::OK: 204 case Session::OK:
178 DLOG(FATAL) << "Error code isn't set"; 205 DLOG(FATAL) << "Error code isn't set";
179 CloseOnError(NETWORK_FAILURE); 206 CloseOnError(NETWORK_FAILURE);
180 } 207 }
181 break; 208 break;
182
183 case Session::CLOSED:
184 CloseChannels();
185 SetState(CLOSED, OK);
186 break;
187
188 case Session::CONNECTED:
189 video_reader_.reset(VideoReader::Create(
190 message_loop_, session_->config()));
191 video_reader_->Init(session_.get(), video_stub_, base::Bind(
192 &ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
193
194 control_dispatcher_.reset(new ClientControlDispatcher());
195 control_dispatcher_->Init(session_.get(), base::Bind(
196 &ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
197 control_dispatcher_->set_client_stub(client_stub_);
198
199 event_dispatcher_.reset(new ClientEventDispatcher());
200 event_dispatcher_->Init(session_.get(), base::Bind(
201 &ConnectionToHost::OnChannelInitialized, base::Unretained(this)));
202 break;
203
204 default:
205 // Ignore the other states by default.
206 break;
207 } 209 }
208 } 210 }
209 211
210 void ConnectionToHost::OnChannelInitialized(bool successful) { 212 void ConnectionToHost::OnChannelInitialized(bool successful) {
211 if (!successful) { 213 if (!successful) {
212 LOG(ERROR) << "Failed to connect video channel"; 214 LOG(ERROR) << "Failed to connect video channel";
213 CloseOnError(NETWORK_FAILURE); 215 CloseOnError(NETWORK_FAILURE);
214 return; 216 return;
215 } 217 }
216 218
217 NotifyIfChannelsReady(); 219 NotifyIfChannelsReady();
218 } 220 }
219 221
220 void ConnectionToHost::NotifyIfChannelsReady() { 222 void ConnectionToHost::NotifyIfChannelsReady() {
221 if (control_dispatcher_.get() && control_dispatcher_->is_connected() && 223 if (control_dispatcher_.get() && control_dispatcher_->is_connected() &&
222 event_dispatcher_.get() && event_dispatcher_->is_connected() && 224 event_dispatcher_.get() && event_dispatcher_->is_connected() &&
223 video_reader_.get() && video_reader_->is_connected() && 225 video_reader_.get() && video_reader_->is_connected() &&
224 state_ == CONNECTING) { 226 state_ == CONNECTING) {
225 SetState(CONNECTED, OK); 227 SetState(CONNECTED, OK);
226 SetState(AUTHENTICATED, OK);
227 } 228 }
228 } 229 }
229 230
230 void ConnectionToHost::CloseOnError(Error error) { 231 void ConnectionToHost::CloseOnError(Error error) {
231 CloseChannels(); 232 CloseChannels();
232 SetState(FAILED, error); 233 SetState(FAILED, error);
233 } 234 }
234 235
235 void ConnectionToHost::CloseChannels() { 236 void ConnectionToHost::CloseChannels() {
236 control_dispatcher_.reset(); 237 control_dispatcher_.reset();
237 event_dispatcher_.reset(); 238 event_dispatcher_.reset();
238 video_reader_.reset(); 239 video_reader_.reset();
239 } 240 }
240 241
241 void ConnectionToHost::SetState(State state, Error error) { 242 void ConnectionToHost::SetState(State state, Error error) {
242 DCHECK(message_loop_->BelongsToCurrentThread()); 243 DCHECK(message_loop_->BelongsToCurrentThread());
243 // |error| should be specified only when |state| is set to FAILED. 244 // |error| should be specified only when |state| is set to FAILED.
244 DCHECK(state == FAILED || error == OK); 245 DCHECK(state == FAILED || error == OK);
245 246
246 if (state != state_) { 247 if (state != state_) {
247 state_ = state; 248 state_ = state;
248 error_ = error; 249 error_ = error;
249 event_callback_->OnConnectionState(state_, error_); 250 event_callback_->OnConnectionState(state_, error_);
250 } 251 }
251 } 252 }
252 253
253 } // namespace protocol 254 } // namespace protocol
254 } // namespace remoting 255 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/connection_to_host.h ('k') | remoting/protocol/jingle_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698