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 "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 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 } | 148 } |
149 | 149 |
150 void ConnectionToHost::OnIncomingSession( | 150 void ConnectionToHost::OnIncomingSession( |
151 Session* session, | 151 Session* session, |
152 SessionManager::IncomingSessionResponse* response) { | 152 SessionManager::IncomingSessionResponse* response) { |
153 DCHECK(message_loop_->BelongsToCurrentThread()); | 153 DCHECK(message_loop_->BelongsToCurrentThread()); |
154 // Client always rejects incoming sessions. | 154 // Client always rejects incoming sessions. |
155 *response = SessionManager::DECLINE; | 155 *response = SessionManager::DECLINE; |
156 } | 156 } |
157 | 157 |
158 void ConnectionToHost::OnClientAuthenticated() { | |
159 // TODO(hclam): Don't send anything except authentication request if it is | |
160 // not authenticated. | |
161 SetState(AUTHENTICATED, OK); | |
162 | |
163 // Create and enable the input stub now that we're authenticated. | |
164 input_sender_.reset( | |
165 new InputSender(message_loop_, session_->event_channel())); | |
166 } | |
167 | |
168 ConnectionToHost::State ConnectionToHost::state() const { | 158 ConnectionToHost::State ConnectionToHost::state() const { |
169 return state_; | 159 return state_; |
170 } | 160 } |
171 | 161 |
172 void ConnectionToHost::OnSessionStateChange( | 162 void ConnectionToHost::OnSessionStateChange( |
173 Session::State state) { | 163 Session::State state) { |
174 DCHECK(message_loop_->BelongsToCurrentThread()); | 164 DCHECK(message_loop_->BelongsToCurrentThread()); |
175 DCHECK(event_callback_); | 165 DCHECK(event_callback_); |
176 | 166 |
177 switch (state) { | 167 switch (state) { |
(...skipping 27 matching lines...) Expand all Loading... |
205 VideoReader::Create(message_loop_, session_->config())); | 195 VideoReader::Create(message_loop_, session_->config())); |
206 video_reader_->Init( | 196 video_reader_->Init( |
207 session_.get(), video_stub_, | 197 session_.get(), video_stub_, |
208 base::Bind(&ConnectionToHost::OnVideoChannelInitialized, | 198 base::Bind(&ConnectionToHost::OnVideoChannelInitialized, |
209 base::Unretained(this))); | 199 base::Unretained(this))); |
210 break; | 200 break; |
211 | 201 |
212 case Session::CONNECTED_CHANNELS: | 202 case Session::CONNECTED_CHANNELS: |
213 host_control_sender_.reset( | 203 host_control_sender_.reset( |
214 new HostControlSender(message_loop_, session_->control_channel())); | 204 new HostControlSender(message_loop_, session_->control_channel())); |
| 205 input_sender_.reset( |
| 206 new InputSender(message_loop_, session_->event_channel())); |
215 dispatcher_.reset(new ClientMessageDispatcher()); | 207 dispatcher_.reset(new ClientMessageDispatcher()); |
216 dispatcher_->Initialize(session_.get(), client_stub_); | 208 dispatcher_->Initialize(session_.get(), client_stub_); |
217 | 209 |
218 control_connected_ = true; | 210 control_connected_ = true; |
219 input_connected_ = true; | 211 input_connected_ = true; |
220 NotifyIfChannelsReady(); | 212 NotifyIfChannelsReady(); |
221 break; | 213 break; |
222 | 214 |
223 default: | 215 default: |
224 // Ignore the other states by default. | 216 // Ignore the other states by default. |
225 break; | 217 break; |
226 } | 218 } |
227 } | 219 } |
228 | 220 |
229 void ConnectionToHost::OnVideoChannelInitialized(bool successful) { | 221 void ConnectionToHost::OnVideoChannelInitialized(bool successful) { |
230 if (!successful) { | 222 if (!successful) { |
231 LOG(ERROR) << "Failed to connect video channel"; | 223 LOG(ERROR) << "Failed to connect video channel"; |
232 CloseOnError(NETWORK_FAILURE); | 224 CloseOnError(NETWORK_FAILURE); |
233 return; | 225 return; |
234 } | 226 } |
235 | 227 |
236 video_connected_ = true; | 228 video_connected_ = true; |
237 NotifyIfChannelsReady(); | 229 NotifyIfChannelsReady(); |
238 } | 230 } |
239 | 231 |
240 void ConnectionToHost::NotifyIfChannelsReady() { | 232 void ConnectionToHost::NotifyIfChannelsReady() { |
241 if (control_connected_ && input_connected_ && video_connected_ && | 233 if (control_connected_ && input_connected_ && video_connected_ && |
242 state_ == CONNECTING) { | 234 state_ == CONNECTING) { |
243 SetState(CONNECTED, OK); | 235 SetState(CONNECTED, OK); |
| 236 SetState(AUTHENTICATED, OK); |
244 } | 237 } |
245 } | 238 } |
246 | 239 |
247 void ConnectionToHost::CloseOnError(Error error) { | 240 void ConnectionToHost::CloseOnError(Error error) { |
248 CloseChannels(); | 241 CloseChannels(); |
249 SetState(FAILED, error); | 242 SetState(FAILED, error); |
250 } | 243 } |
251 | 244 |
252 void ConnectionToHost::CloseChannels() { | 245 void ConnectionToHost::CloseChannels() { |
253 if (input_sender_.get()) | 246 if (input_sender_.get()) |
(...skipping 12 matching lines...) Expand all Loading... |
266 | 259 |
267 if (state != state_) { | 260 if (state != state_) { |
268 state_ = state; | 261 state_ = state; |
269 error_ = error; | 262 error_ = error; |
270 event_callback_->OnConnectionState(state_, error_); | 263 event_callback_->OnConnectionState(state_, error_); |
271 } | 264 } |
272 } | 265 } |
273 | 266 |
274 } // namespace protocol | 267 } // namespace protocol |
275 } // namespace remoting | 268 } // namespace remoting |
OLD | NEW |