OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "base/callback.h" | 5 #include "base/callback.h" |
6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
7 #include "remoting/base/constants.h" | 7 #include "remoting/base/constants.h" |
8 // TODO(hclam): Remove this header once MessageDispatcher is used. | 8 // TODO(hclam): Remove this header once MessageDispatcher is used. |
9 #include "remoting/base/multiple_array_input_stream.h" | 9 #include "remoting/base/multiple_array_input_stream.h" |
10 #include "remoting/client/client_config.h" | 10 #include "remoting/client/client_config.h" |
11 #include "remoting/client/jingle_host_connection.h" | 11 #include "remoting/client/jingle_host_connection.h" |
12 #include "remoting/jingle_glue/jingle_thread.h" | 12 #include "remoting/jingle_glue/jingle_thread.h" |
13 #include "remoting/protocol/jingle_chromotocol_server.h" | 13 #include "remoting/protocol/jingle_session_manager.h" |
14 #include "remoting/protocol/video_stub.h" | 14 #include "remoting/protocol/video_stub.h" |
15 #include "remoting/protocol/util.h" | 15 #include "remoting/protocol/util.h" |
16 | 16 |
17 namespace remoting { | 17 namespace remoting { |
18 | 18 |
19 JingleHostConnection::JingleHostConnection(ClientContext* context) | 19 JingleHostConnection::JingleHostConnection(ClientContext* context) |
20 : context_(context), | 20 : context_(context), |
21 event_callback_(NULL) { | 21 event_callback_(NULL) { |
22 } | 22 } |
23 | 23 |
(...skipping 21 matching lines...) Expand all Loading... |
45 message_loop()->PostTask( | 45 message_loop()->PostTask( |
46 FROM_HERE, NewRunnableMethod(this, | 46 FROM_HERE, NewRunnableMethod(this, |
47 &JingleHostConnection::Disconnect)); | 47 &JingleHostConnection::Disconnect)); |
48 return; | 48 return; |
49 } | 49 } |
50 | 50 |
51 control_reader_.Close(); | 51 control_reader_.Close(); |
52 event_writer_.Close(); | 52 event_writer_.Close(); |
53 video_reader_->Close(); | 53 video_reader_->Close(); |
54 | 54 |
55 if (connection_) { | 55 if (session_) { |
56 connection_->Close( | 56 session_->Close( |
57 NewRunnableMethod(this, &JingleHostConnection::OnDisconnected)); | 57 NewRunnableMethod(this, &JingleHostConnection::OnDisconnected)); |
58 } else { | 58 } else { |
59 OnDisconnected(); | 59 OnDisconnected(); |
60 } | 60 } |
61 } | 61 } |
62 | 62 |
63 void JingleHostConnection::OnControlMessage(ChromotingHostMessage* msg) { | 63 void JingleHostConnection::OnControlMessage(ChromotingHostMessage* msg) { |
64 event_callback_->HandleMessage(this, msg); | 64 event_callback_->HandleMessage(this, msg); |
65 } | 65 } |
66 | 66 |
67 void JingleHostConnection::InitConnection() { | 67 void JingleHostConnection::InitSession() { |
68 DCHECK_EQ(message_loop(), MessageLoop::current()); | 68 DCHECK_EQ(message_loop(), MessageLoop::current()); |
69 | 69 |
70 // Initialize |chromotocol_server_|. | 70 // Initialize chromotocol |session_manager_|. |
71 JingleChromotocolServer* chromotocol_server = | 71 protocol::JingleSessionManager* session_manager = |
72 new JingleChromotocolServer(context_->jingle_thread()); | 72 new protocol::JingleSessionManager(context_->jingle_thread()); |
73 // TODO(ajwong): Make this a command switch when we're more stable. | 73 // TODO(ajwong): Make this a command switch when we're more stable. |
74 chromotocol_server->set_allow_local_ips(true); | 74 session_manager->set_allow_local_ips(true); |
75 chromotocol_server->Init( | 75 session_manager->Init( |
76 jingle_client_->GetFullJid(), | 76 jingle_client_->GetFullJid(), |
77 jingle_client_->session_manager(), | 77 jingle_client_->session_manager(), |
78 NewCallback(this, &JingleHostConnection::OnNewChromotocolConnection)); | 78 NewCallback(this, &JingleHostConnection::OnNewSession)); |
79 chromotocol_server_ = chromotocol_server; | 79 session_manager_ = session_manager; |
80 | 80 |
81 CandidateChromotocolConfig* candidate_config = | 81 CandidateChromotocolConfig* candidate_config = |
82 CandidateChromotocolConfig::CreateDefault(); | 82 CandidateChromotocolConfig::CreateDefault(); |
83 // TODO(sergeyu): Set resolution in the |candidate_config| to the desired | 83 // TODO(sergeyu): Set resolution in the |candidate_config| to the desired |
84 // resolution. | 84 // resolution. |
85 | 85 |
86 // Initialize |connection_|. | 86 // Initialize |session_|. |
87 connection_ = chromotocol_server_->Connect( | 87 session_ = session_manager_->Connect( |
88 host_jid_, candidate_config, | 88 host_jid_, candidate_config, |
89 NewCallback(this, &JingleHostConnection::OnConnectionStateChange)); | 89 NewCallback(this, &JingleHostConnection::OnSessionStateChange)); |
90 } | 90 } |
91 | 91 |
92 void JingleHostConnection::OnDisconnected() { | 92 void JingleHostConnection::OnDisconnected() { |
93 connection_ = NULL; | 93 session_ = NULL; |
94 | 94 |
95 if (chromotocol_server_) { | 95 if (session_manager_) { |
96 chromotocol_server_->Close( | 96 session_manager_->Close( |
97 NewRunnableMethod(this, &JingleHostConnection::OnServerClosed)); | 97 NewRunnableMethod(this, &JingleHostConnection::OnServerClosed)); |
98 } else { | 98 } else { |
99 OnServerClosed(); | 99 OnServerClosed(); |
100 } | 100 } |
101 } | 101 } |
102 | 102 |
103 void JingleHostConnection::OnServerClosed() { | 103 void JingleHostConnection::OnServerClosed() { |
104 chromotocol_server_ = NULL; | 104 session_manager_ = NULL; |
105 if (jingle_client_) { | 105 if (jingle_client_) { |
106 jingle_client_->Close(); | 106 jingle_client_->Close(); |
107 jingle_client_ = NULL; | 107 jingle_client_ = NULL; |
108 } | 108 } |
109 } | 109 } |
110 | 110 |
111 void JingleHostConnection::SendEvent(const ChromotingClientMessage& msg) { | 111 void JingleHostConnection::SendEvent(const ChromotingClientMessage& msg) { |
112 // This drops the message if we are not connected yet. | 112 // This drops the message if we are not connected yet. |
113 event_writer_.SendMessage(msg); | 113 event_writer_.SendMessage(msg); |
114 } | 114 } |
115 | 115 |
116 // JingleClient::Callback interface. | 116 // JingleClient::Callback interface. |
117 void JingleHostConnection::OnStateChange(JingleClient* client, | 117 void JingleHostConnection::OnStateChange(JingleClient* client, |
118 JingleClient::State state) { | 118 JingleClient::State state) { |
119 DCHECK_EQ(message_loop(), MessageLoop::current()); | 119 DCHECK_EQ(message_loop(), MessageLoop::current()); |
120 DCHECK(client); | 120 DCHECK(client); |
121 DCHECK(event_callback_); | 121 DCHECK(event_callback_); |
122 | 122 |
123 if (state == JingleClient::CONNECTED) { | 123 if (state == JingleClient::CONNECTED) { |
124 VLOG(1) << "Connected as: " << client->GetFullJid(); | 124 VLOG(1) << "Connected as: " << client->GetFullJid(); |
125 InitConnection(); | 125 InitSession(); |
126 } else if (state == JingleClient::CLOSED) { | 126 } else if (state == JingleClient::CLOSED) { |
127 VLOG(1) << "Connection closed."; | 127 VLOG(1) << "Connection closed."; |
128 event_callback_->OnConnectionClosed(this); | 128 event_callback_->OnConnectionClosed(this); |
129 } | 129 } |
130 } | 130 } |
131 | 131 |
132 void JingleHostConnection::OnNewChromotocolConnection( | 132 void JingleHostConnection::OnNewSession(protocol::Session* session, |
133 ChromotocolConnection* connection, | 133 protocol::SessionManager::IncomingSessionResponse* response) { |
134 ChromotocolServer::IncomingConnectionResponse* response) { | |
135 DCHECK_EQ(message_loop(), MessageLoop::current()); | 134 DCHECK_EQ(message_loop(), MessageLoop::current()); |
136 // Client always rejects incoming connections. | 135 // Client always rejects incoming sessions. |
137 *response = ChromotocolServer::DECLINE; | 136 *response = protocol::SessionManager::DECLINE; |
138 } | 137 } |
139 | 138 |
140 void JingleHostConnection::OnConnectionStateChange( | 139 void JingleHostConnection::OnSessionStateChange( |
141 ChromotocolConnection::State state) { | 140 protocol::Session::State state) { |
142 DCHECK_EQ(message_loop(), MessageLoop::current()); | 141 DCHECK_EQ(message_loop(), MessageLoop::current()); |
143 DCHECK(event_callback_); | 142 DCHECK(event_callback_); |
144 | 143 |
145 switch (state) { | 144 switch (state) { |
146 case ChromotocolConnection::FAILED: | 145 case protocol::Session::FAILED: |
147 event_callback_->OnConnectionFailed(this); | 146 event_callback_->OnConnectionFailed(this); |
148 break; | 147 break; |
149 | 148 |
150 case ChromotocolConnection::CLOSED: | 149 case protocol::Session::CLOSED: |
151 event_callback_->OnConnectionClosed(this); | 150 event_callback_->OnConnectionClosed(this); |
152 break; | 151 break; |
153 | 152 |
154 case ChromotocolConnection::CONNECTED: | 153 case protocol::Session::CONNECTED: |
155 // Initialize reader and writer. | 154 // Initialize reader and writer. |
156 control_reader_.Init<ChromotingHostMessage>( | 155 control_reader_.Init<ChromotingHostMessage>( |
157 connection_->control_channel(), | 156 session_->control_channel(), |
158 NewCallback(this, &JingleHostConnection::OnControlMessage)); | 157 NewCallback(this, &JingleHostConnection::OnControlMessage)); |
159 event_writer_.Init(connection_->event_channel()); | 158 event_writer_.Init(session_->event_channel()); |
160 video_reader_.reset(VideoReader::Create(connection_->config())); | 159 video_reader_.reset(VideoReader::Create(session_->config())); |
161 video_reader_->Init(connection_, video_stub_); | 160 video_reader_->Init(session_, video_stub_); |
162 event_callback_->OnConnectionOpened(this); | 161 event_callback_->OnConnectionOpened(this); |
163 break; | 162 break; |
164 | 163 |
165 default: | 164 default: |
166 // Ignore the other states by default. | 165 // Ignore the other states by default. |
167 break; | 166 break; |
168 } | 167 } |
169 } | 168 } |
170 | 169 |
171 MessageLoop* JingleHostConnection::message_loop() { | 170 MessageLoop* JingleHostConnection::message_loop() { |
172 return context_->jingle_thread()->message_loop(); | 171 return context_->jingle_thread()->message_loop(); |
173 } | 172 } |
174 | 173 |
175 } // namespace remoting | 174 } // namespace remoting |
OLD | NEW |