OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 'use strict'; | 5 'use strict'; |
6 | 6 |
7 /** @suppress {duplicate} */ | 7 /** @suppress {duplicate} */ |
8 var remoting = remoting || {}; | 8 var remoting = remoting || {}; |
9 | 9 |
10 /** | 10 /** |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 /** | 144 /** |
145 * @param {Element} stanza | 145 * @param {Element} stanza |
146 * @private | 146 * @private |
147 */ | 147 */ |
148 remoting.XmppLoginHandler.prototype.onStanza_ = function(stanza) { | 148 remoting.XmppLoginHandler.prototype.onStanza_ = function(stanza) { |
149 switch (this.state_) { | 149 switch (this.state_) { |
150 case remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER: | 150 case remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER: |
151 if (stanza.querySelector('features>starttls')) { | 151 if (stanza.querySelector('features>starttls')) { |
152 this.state_ = remoting.XmppLoginHandler.State.WAIT_STARTTLS_RESPONSE; | 152 this.state_ = remoting.XmppLoginHandler.State.WAIT_STARTTLS_RESPONSE; |
153 } else { | 153 } else { |
154 this.onError_(remoting.Error.UNEXPECTED, "Server doesn't support TLS."); | 154 this.onError_( |
| 155 remoting.Error.unexpected(), |
| 156 "Server doesn't support TLS."); |
155 } | 157 } |
156 break; | 158 break; |
157 | 159 |
158 case remoting.XmppLoginHandler.State.WAIT_STARTTLS_RESPONSE: | 160 case remoting.XmppLoginHandler.State.WAIT_STARTTLS_RESPONSE: |
159 if (stanza.localName == "proceed") { | 161 if (stanza.localName == "proceed") { |
160 this.state_ = remoting.XmppLoginHandler.State.STARTING_TLS; | 162 this.state_ = remoting.XmppLoginHandler.State.STARTING_TLS; |
161 this.startTlsCallback_(); | 163 this.startTlsCallback_(); |
162 } else { | 164 } else { |
163 this.onError_(remoting.Error.UNEXPECTED, | 165 this.onError_(remoting.Error.unexpected(), |
164 "Failed to start TLS: " + | 166 "Failed to start TLS: " + |
165 (new XMLSerializer().serializeToString(stanza))); | 167 (new XMLSerializer().serializeToString(stanza))); |
166 } | 168 } |
167 break; | 169 break; |
168 | 170 |
169 case remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER_AFTER_TLS: | 171 case remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER_AFTER_TLS: |
170 var mechanisms = Array.prototype.map.call( | 172 var mechanisms = Array.prototype.map.call( |
171 stanza.querySelectorAll('features>mechanisms>mechanism'), | 173 stanza.querySelectorAll('features>mechanisms>mechanism'), |
172 /** @param {Element} m */ | 174 /** @param {Element} m */ |
173 function(m) { return m.textContent; }); | 175 function(m) { return m.textContent; }); |
174 if (mechanisms.indexOf("X-OAUTH2")) { | 176 if (mechanisms.indexOf("X-OAUTH2")) { |
175 this.onError_(remoting.Error.UNEXPECTED, | 177 this.onError_(remoting.Error.unexpected(), |
176 "OAuth2 is not supported by the server."); | 178 "OAuth2 is not supported by the server."); |
177 return; | 179 return; |
178 } | 180 } |
179 | 181 |
180 this.state_ = remoting.XmppLoginHandler.State.WAIT_AUTH_RESULT; | 182 this.state_ = remoting.XmppLoginHandler.State.WAIT_AUTH_RESULT; |
181 | 183 |
182 break; | 184 break; |
183 | 185 |
184 case remoting.XmppLoginHandler.State.WAIT_AUTH_RESULT: | 186 case remoting.XmppLoginHandler.State.WAIT_AUTH_RESULT: |
185 if (stanza.localName == 'success') { | 187 if (stanza.localName == 'success') { |
186 this.state_ = | 188 this.state_ = |
187 remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER_AFTER_AUTH; | 189 remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER_AFTER_AUTH; |
188 this.startStream_( | 190 this.startStream_( |
189 '<iq type="set" id="0">' + | 191 '<iq type="set" id="0">' + |
190 '<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">' + | 192 '<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">' + |
191 '<resource>chromoting</resource>'+ | 193 '<resource>chromoting</resource>'+ |
192 '</bind>' + | 194 '</bind>' + |
193 '</iq>' + | 195 '</iq>' + |
194 '<iq type="set" id="1">' + | 196 '<iq type="set" id="1">' + |
195 '<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>' + | 197 '<session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>' + |
196 '</iq>'); | 198 '</iq>'); |
197 } else { | 199 } else { |
198 this.onError_(remoting.Error.AUTHENTICATION_FAILED, | 200 this.onError_( |
199 'Failed to authenticate: ' + | 201 new remoting.Error(remoting.Error.Tag.AUTHENTICATION_FAILED), |
200 (new XMLSerializer().serializeToString(stanza))); | 202 'Failed to authenticate: ' + |
| 203 (new XMLSerializer().serializeToString(stanza))); |
201 } | 204 } |
202 break; | 205 break; |
203 | 206 |
204 case remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER_AFTER_AUTH: | 207 case remoting.XmppLoginHandler.State.WAIT_STREAM_HEADER_AFTER_AUTH: |
205 if (stanza.querySelector('features>bind')) { | 208 if (stanza.querySelector('features>bind')) { |
206 this.state_ = remoting.XmppLoginHandler.State.WAIT_BIND_RESULT; | 209 this.state_ = remoting.XmppLoginHandler.State.WAIT_BIND_RESULT; |
207 } else { | 210 } else { |
208 this.onError_(remoting.Error.UNEXPECTED, | 211 this.onError_(remoting.Error.unexpected(), |
209 "Server doesn't support bind after authentication."); | 212 "Server doesn't support bind after authentication."); |
210 } | 213 } |
211 break; | 214 break; |
212 | 215 |
213 case remoting.XmppLoginHandler.State.WAIT_BIND_RESULT: | 216 case remoting.XmppLoginHandler.State.WAIT_BIND_RESULT: |
214 var jidElement = stanza.querySelector('iq>bind>jid'); | 217 var jidElement = stanza.querySelector('iq>bind>jid'); |
215 if (stanza.getAttribute('id') != '0' || | 218 if (stanza.getAttribute('id') != '0' || |
216 stanza.getAttribute('type') != 'result' || !jidElement) { | 219 stanza.getAttribute('type') != 'result' || !jidElement) { |
217 this.onError_(remoting.Error.UNEXPECTED, | 220 this.onError_(remoting.Error.unexpected(), |
218 'Received unexpected response to bind: ' + | 221 'Received unexpected response to bind: ' + |
219 (new XMLSerializer().serializeToString(stanza))); | 222 (new XMLSerializer().serializeToString(stanza))); |
220 return; | 223 return; |
221 } | 224 } |
222 this.jid_ = jidElement.textContent; | 225 this.jid_ = jidElement.textContent; |
223 this.state_ = remoting.XmppLoginHandler.State.WAIT_SESSION_IQ_RESULT; | 226 this.state_ = remoting.XmppLoginHandler.State.WAIT_SESSION_IQ_RESULT; |
224 break; | 227 break; |
225 | 228 |
226 case remoting.XmppLoginHandler.State.WAIT_SESSION_IQ_RESULT: | 229 case remoting.XmppLoginHandler.State.WAIT_SESSION_IQ_RESULT: |
227 if (stanza.getAttribute('id') != '1' || | 230 if (stanza.getAttribute('id') != '1' || |
228 stanza.getAttribute('type') != 'result') { | 231 stanza.getAttribute('type') != 'result') { |
229 this.onError_(remoting.Error.UNEXPECTED, | 232 this.onError_(remoting.Error.unexpected(), |
230 'Failed to start session: ' + | 233 'Failed to start session: ' + |
231 (new XMLSerializer().serializeToString(stanza))); | 234 (new XMLSerializer().serializeToString(stanza))); |
232 return; | 235 return; |
233 } | 236 } |
234 this.state_ = remoting.XmppLoginHandler.State.DONE; | 237 this.state_ = remoting.XmppLoginHandler.State.DONE; |
235 this.onHandshakeDoneCallback_(this.jid_, this.streamParser_); | 238 this.onHandshakeDoneCallback_(this.jid_, this.streamParser_); |
236 break; | 239 break; |
237 | 240 |
238 default: | 241 default: |
239 base.debug.assert(false); | 242 base.debug.assert(false); |
(...skipping 16 matching lines...) Expand all Loading... |
256 'xmlns:auth="http://www.google.com/talk/protocol/auth">' + | 259 'xmlns:auth="http://www.google.com/talk/protocol/auth">' + |
257 cookie + | 260 cookie + |
258 '</auth>'); | 261 '</auth>'); |
259 }; | 262 }; |
260 | 263 |
261 /** | 264 /** |
262 * @param {string} text | 265 * @param {string} text |
263 * @private | 266 * @private |
264 */ | 267 */ |
265 remoting.XmppLoginHandler.prototype.onParserError_ = function(text) { | 268 remoting.XmppLoginHandler.prototype.onParserError_ = function(text) { |
266 this.onError_(remoting.Error.UNEXPECTED, text); | 269 this.onError_(remoting.Error.unexpected(), text); |
267 } | 270 } |
268 | 271 |
269 /** | 272 /** |
270 * @param {string} firstMessage Message to send after stream header. | 273 * @param {string} firstMessage Message to send after stream header. |
271 * @private | 274 * @private |
272 */ | 275 */ |
273 remoting.XmppLoginHandler.prototype.startStream_ = function(firstMessage) { | 276 remoting.XmppLoginHandler.prototype.startStream_ = function(firstMessage) { |
274 this.sendMessageCallback_('<stream:stream to="' + this.server_ + | 277 this.sendMessageCallback_('<stream:stream to="' + this.server_ + |
275 '" version="1.0" xmlns="jabber:client" ' + | 278 '" version="1.0" xmlns="jabber:client" ' + |
276 'xmlns:stream="http://etherx.jabber.org/streams">' + | 279 'xmlns:stream="http://etherx.jabber.org/streams">' + |
277 firstMessage); | 280 firstMessage); |
278 this.streamParser_ = new remoting.XmppStreamParser(); | 281 this.streamParser_ = new remoting.XmppStreamParser(); |
279 this.streamParser_.setCallbacks(this.onStanza_.bind(this), | 282 this.streamParser_.setCallbacks(this.onStanza_.bind(this), |
280 this.onParserError_.bind(this)); | 283 this.onParserError_.bind(this)); |
281 } | 284 } |
282 | 285 |
283 /** | 286 /** |
284 * @param {!remoting.Error} error | 287 * @param {!remoting.Error} error |
285 * @param {string} text | 288 * @param {string} text |
286 * @private | 289 * @private |
287 */ | 290 */ |
288 remoting.XmppLoginHandler.prototype.onError_ = function(error, text) { | 291 remoting.XmppLoginHandler.prototype.onError_ = function(error, text) { |
289 if (this.state_ != remoting.XmppLoginHandler.State.ERROR) { | 292 if (this.state_ != remoting.XmppLoginHandler.State.ERROR) { |
290 this.onErrorCallback_(error, text); | 293 this.onErrorCallback_(error, text); |
291 this.state_ = remoting.XmppLoginHandler.State.ERROR; | 294 this.state_ = remoting.XmppLoginHandler.State.ERROR; |
292 } else { | 295 } else { |
293 console.error(text); | 296 console.error(text); |
294 } | 297 } |
295 } | 298 } |
OLD | NEW |