Index: remoting/webapp/xmpp_connection.js |
diff --git a/remoting/webapp/xmpp_connection.js b/remoting/webapp/xmpp_connection.js |
index 5be329554b1982a6b09122ab944d17f7af3fbea3..adf911a8fef2f8f610d43d95c1ed56b3a0e45a89 100644 |
--- a/remoting/webapp/xmpp_connection.js |
+++ b/remoting/webapp/xmpp_connection.js |
@@ -15,27 +15,24 @@ var remoting = remoting || {}; |
* because TLS support in chrome.sockets.tcp is currently broken, see |
* crbug.com/403076 . |
* |
- * @param {function(remoting.XmppConnection.State):void} onStateChangedCallback |
+ * @param {function(remoting.SignalStrategy.State):void} onStateChangedCallback |
* Callback to call on state change. |
- * @param {function(Element):void} onIncomingStanzaCallback Callback to call to |
- * handle incoming messages. |
* @constructor |
- * @implements {base.Disposable} |
+ * @implements {remoting.SignalStrategy} |
*/ |
-remoting.XmppConnection = |
- function(onStateChangedCallback, onIncomingStanzaCallback) { |
+remoting.XmppConnection = function(onStateChangedCallback) { |
/** @private */ |
this.server_ = ''; |
/** @private */ |
this.port_ = 0; |
/** @private */ |
this.onStateChangedCallback_ = onStateChangedCallback; |
- /** @private */ |
- this.onIncomingStanzaCallback_ = onIncomingStanzaCallback; |
+ /** @type {?function(Element):void} @private */ |
+ this.onIncomingStanzaCallback_ = null; |
/** @private */ |
this.socketId_ = -1; |
/** @private */ |
- this.state_ = remoting.XmppConnection.State.NOT_CONNECTED; |
+ this.state_ = remoting.SignalStrategy.State.NOT_CONNECTED; |
/** @private */ |
this.readPending_ = false; |
/** @private */ |
@@ -55,21 +52,12 @@ remoting.XmppConnection = |
}; |
/** |
- * @enum {number} XmppConnection states. Possible state transitions: |
- * NOT_CONNECTED -> CONNECTING (connect() called). |
- * CONNECTING -> HANDSHAKE (connected successfully). |
- * HANDSHAKE -> CONNECTED (authenticated successfully). |
- * CONNECTING -> FAILED (connection failed). |
- * HANDSHAKE -> FAILED (authentication failed). |
- * * -> CLOSED (dispose() called). |
+ * @param {?function(Element):void} onIncomingStanzaCallback Callback to call on |
+ * incoming messages. |
*/ |
-remoting.XmppConnection.State = { |
- NOT_CONNECTED: 0, |
- CONNECTING: 1, |
- HANDSHAKE: 2, |
- CONNECTED: 3, |
- FAILED: 4, |
- CLOSED: 5 |
+remoting.XmppConnection.prototype.setIncomingStanzaCallback = |
+ function(onIncomingStanzaCallback) { |
+ this.onIncomingStanzaCallback_ = onIncomingStanzaCallback; |
}; |
/** |
@@ -79,7 +67,7 @@ remoting.XmppConnection.State = { |
*/ |
remoting.XmppConnection.prototype.connect = |
function(server, username, authToken) { |
- base.debug.assert(this.state_ == remoting.XmppConnection.State.NOT_CONNECTED); |
+ base.debug.assert(this.state_ == remoting.SignalStrategy.State.NOT_CONNECTED); |
this.error_ = remoting.Error.NONE; |
var hostnameAndPort = server.split(':', 2); |
@@ -108,16 +96,16 @@ remoting.XmppConnection.prototype.connect = |
this.onHandshakeDone_.bind(this), |
this.onError_.bind(this)); |
chrome.socket.create("tcp", {}, this.onSocketCreated_.bind(this)); |
- this.setState_(remoting.XmppConnection.State.CONNECTING); |
+ this.setState_(remoting.SignalStrategy.State.CONNECTING); |
}; |
/** @param {string} message */ |
remoting.XmppConnection.prototype.sendMessage = function(message) { |
- base.debug.assert(this.state_ == remoting.XmppConnection.State.CONNECTED); |
+ base.debug.assert(this.state_ == remoting.SignalStrategy.State.CONNECTED); |
this.sendInternal_(message); |
}; |
-/** @return {remoting.XmppConnection.State} Current state */ |
+/** @return {remoting.SignalStrategy.State} Current state */ |
remoting.XmppConnection.prototype.getState = function() { |
return this.state_; |
}; |
@@ -134,7 +122,7 @@ remoting.XmppConnection.prototype.getJid = function() { |
remoting.XmppConnection.prototype.dispose = function() { |
this.closeSocket_(); |
- this.setState_(remoting.XmppConnection.State.CLOSED); |
+ this.setState_(remoting.SignalStrategy.State.CLOSED); |
}; |
/** |
@@ -143,7 +131,7 @@ remoting.XmppConnection.prototype.dispose = function() { |
*/ |
remoting.XmppConnection.prototype.onSocketCreated_ = function(createInfo) { |
// Check if connection was destroyed. |
- if (this.state_ != remoting.XmppConnection.State.CONNECTING) { |
+ if (this.state_ != remoting.SignalStrategy.State.CONNECTING) { |
chrome.socket.destroy(createInfo.socketId); |
return; |
} |
@@ -162,7 +150,7 @@ remoting.XmppConnection.prototype.onSocketCreated_ = function(createInfo) { |
*/ |
remoting.XmppConnection.prototype.onSocketConnected_ = function(result) { |
// Check if connection was destroyed. |
- if (this.state_ != remoting.XmppConnection.State.CONNECTING) { |
+ if (this.state_ != remoting.SignalStrategy.State.CONNECTING) { |
return; |
} |
@@ -172,7 +160,7 @@ remoting.XmppConnection.prototype.onSocketConnected_ = function(result) { |
return; |
} |
- this.setState_(remoting.XmppConnection.State.HANDSHAKE); |
+ this.setState_(remoting.SignalStrategy.State.HANDSHAKE); |
this.tryRead_(); |
this.loginHandler_.start(); |
@@ -183,8 +171,8 @@ remoting.XmppConnection.prototype.onSocketConnected_ = function(result) { |
*/ |
remoting.XmppConnection.prototype.tryRead_ = function() { |
base.debug.assert(!this.readPending_); |
- base.debug.assert(this.state_ == remoting.XmppConnection.State.HANDSHAKE || |
- this.state_ == remoting.XmppConnection.State.CONNECTED); |
+ base.debug.assert(this.state_ == remoting.SignalStrategy.State.HANDSHAKE || |
+ this.state_ == remoting.SignalStrategy.State.CONNECTED); |
base.debug.assert(!this.startTlsPending_); |
this.readPending_ = true; |
@@ -200,20 +188,21 @@ remoting.XmppConnection.prototype.onRead_ = function(readInfo) { |
this.readPending_ = false; |
// Check if the socket was closed while reading. |
- if (this.state_ != remoting.XmppConnection.State.HANDSHAKE && |
- this.state_ != remoting.XmppConnection.State.CONNECTED) { |
+ if (this.state_ != remoting.SignalStrategy.State.HANDSHAKE && |
+ this.state_ != remoting.SignalStrategy.State.CONNECTED) { |
return; |
} |
+ |
if (readInfo.resultCode < 0) { |
this.onError_(remoting.Error.NETWORK_FAILURE, |
'Failed to receive from XMPP socket: ' + readInfo.resultCode); |
return; |
} |
- if (this.state_ == remoting.XmppConnection.State.HANDSHAKE) { |
+ if (this.state_ == remoting.SignalStrategy.State.HANDSHAKE) { |
this.loginHandler_.onDataReceived(readInfo.data); |
- } else if (this.state_ == remoting.XmppConnection.State.CONNECTED) { |
+ } else if (this.state_ == remoting.SignalStrategy.State.CONNECTED) { |
this.streamParser_.appendData(readInfo.data); |
} |
@@ -253,8 +242,8 @@ remoting.XmppConnection.prototype.onWrite_ = function(writeInfo) { |
this.sendPending_ = false; |
// Ignore write() result if the socket was closed. |
- if (this.state_ != remoting.XmppConnection.State.HANDSHAKE && |
- this.state_ != remoting.XmppConnection.State.CONNECTED) { |
+ if (this.state_ != remoting.SignalStrategy.State.HANDSHAKE && |
+ this.state_ != remoting.SignalStrategy.State.CONNECTED) { |
return; |
} |
@@ -316,9 +305,19 @@ remoting.XmppConnection.prototype.onHandshakeDone_ = |
function(jid, streamParser) { |
this.jid_ = jid; |
this.streamParser_ = streamParser; |
- this.streamParser_.setCallbacks(this.onIncomingStanzaCallback_, |
+ this.streamParser_.setCallbacks(this.onIncomingStanza_.bind(this), |
this.onParserError_.bind(this)); |
- this.setState_(remoting.XmppConnection.State.CONNECTED); |
+ this.setState_(remoting.SignalStrategy.State.CONNECTED); |
+}; |
+ |
+/** |
+ * @param {Element} stanza |
+ * @private |
+ */ |
+remoting.XmppConnection.prototype.onIncomingStanza_ = function(stanza) { |
+ if (this.onIncomingStanzaCallback_) { |
+ this.onIncomingStanzaCallback_(stanza); |
+ } |
}; |
/** |
@@ -338,7 +337,7 @@ remoting.XmppConnection.prototype.onError_ = function(error, text) { |
console.error(text); |
this.error_ = error; |
this.closeSocket_(); |
- this.setState_(remoting.XmppConnection.State.FAILED); |
+ this.setState_(remoting.SignalStrategy.State.FAILED); |
}; |
/** |
@@ -352,7 +351,7 @@ remoting.XmppConnection.prototype.closeSocket_ = function() { |
}; |
/** |
- * @param {remoting.XmppConnection.State} newState |
+ * @param {remoting.SignalStrategy.State} newState |
* @private |
*/ |
remoting.XmppConnection.prototype.setState_ = function(newState) { |