Commit 7551c629 authored by JC Brand's avatar JC Brand

Rely on Strophe's keepalive function instead of our own.

I recently added keepalive functionality to Strophe, similar to what was
already in converse.js. It's stable enough now that we can rely on it
instead.
parent 66386d5b
...@@ -675,18 +675,11 @@ ...@@ -675,18 +675,11 @@
}; };
this.initSession = function () { this.initSession = function () {
this.session = new this.BOSHSession(); this.session = new this.Session();
var id = b64_sha1('converse.bosh-session'); var id = b64_sha1('converse.bosh-session');
this.session.id = id; // Appears to be necessary for backbone.browserStorage this.session.id = id; // Appears to be necessary for backbone.browserStorage
this.session.browserStorage = new Backbone.BrowserStorage[converse.storage](id); this.session.browserStorage = new Backbone.BrowserStorage[converse.storage](id);
this.session.fetch(); this.session.fetch();
$(window).on(unloadevent, $.proxy(function () {
if (converse.connection.authenticated) {
this.setSession();
} else {
this.clearSession();
}
}, this));
}; };
this.clearSession = function () { this.clearSession = function () {
...@@ -699,16 +692,6 @@ ...@@ -699,16 +692,6 @@
} }
}; };
this.setSession = function () {
if (this.keepalive) {
this.session.save({
jid: this.connection.jid,
rid: this.connection._proto.rid,
sid: this.connection._proto.sid
});
}
};
this.logOut = function () { this.logOut = function () {
converse.chatboxviews.closeAllChatBoxes(false); converse.chatboxviews.closeAllChatBoxes(false);
converse.clearSession(); converse.clearSession();
...@@ -851,7 +834,6 @@ ...@@ -851,7 +834,6 @@
// know whether these boxes are of the same account or not, so we // know whether these boxes are of the same account or not, so we
// close them now. // close them now.
this.chatboxviews.closeAllChatBoxes(); this.chatboxviews.closeAllChatBoxes();
this.setSession();
this.jid = this.connection.jid; this.jid = this.connection.jid;
this.bare_jid = Strophe.getBareJidFromJid(this.connection.jid); this.bare_jid = Strophe.getBareJidFromJid(this.connection.jid);
this.domain = Strophe.getDomainFromJid(this.connection.jid); this.domain = Strophe.getDomainFromJid(this.connection.jid);
...@@ -5015,7 +4997,7 @@ ...@@ -5015,7 +4997,7 @@
} }
}); });
this.BOSHSession = Backbone.Model; this.Session = Backbone.Model; // General session settings to be saved to sessionStorage.
this.Feature = Backbone.Model; this.Feature = Backbone.Model;
this.Features = Backbone.Collection.extend({ this.Features = Backbone.Collection.extend({
/* Service Discovery /* Service Discovery
...@@ -5684,7 +5666,6 @@ ...@@ -5684,7 +5666,6 @@
url: this.prebind_url, url: this.prebind_url,
type: 'GET', type: 'GET',
success: function (response) { success: function (response) {
this.session.save({rid: response.rid});
this.connection.attach( this.connection.attach(
response.jid, response.jid,
response.sid, response.sid,
...@@ -5702,14 +5683,14 @@ ...@@ -5702,14 +5683,14 @@
this.attemptPreboundSession = function (tokens) { this.attemptPreboundSession = function (tokens) {
/* Handle session resumption or initialization when prebind is being used. /* Handle session resumption or initialization when prebind is being used.
*/ */
var rid = tokens.rid, jid = tokens.jid, sid = tokens.sid;
if (this.keepalive) { if (this.keepalive) {
if (!this.jid) { if (!this.jid) {
throw new Error("initConnection: when using 'keepalive' with 'prebind, you must supply the JID of the current user."); throw new Error("initConnection: when using 'keepalive' with 'prebind, you must supply the JID of the current user.");
} }
if (rid && sid && jid && Strophe.getBareJidFromJid(jid) === Strophe.getBareJidFromJid(this.jid)) { try {
this.session.save({rid: rid}); // The RID needs to be increased with each request. return this.connection.restore(this.jid, this.onConnectStatusChanged);
return this.connection.attach(jid, sid, rid, this.onConnectStatusChanged); } catch (e) {
converse.log("Could not restore session for jid: "+this.jid+" Error message: "+e.message);
} }
} else { // Not keepalive } else { // Not keepalive
if (this.jid && this.sid && this.rid) { if (this.jid && this.sid && this.rid) {
...@@ -5730,17 +5711,19 @@ ...@@ -5730,17 +5711,19 @@
} }
}; };
this.attemptNonPreboundSession = function (tokens) { this.attemptNonPreboundSession = function () {
/* Handle session resumption or initialization when prebind is not being used. /* Handle session resumption or initialization when prebind is not being used.
* *
* Two potential options exist and are handled in this method: * Two potential options exist and are handled in this method:
* 1. keepalive * 1. keepalive
* 2. auto_login * 2. auto_login
*/ */
var rid = tokens.rid, jid = tokens.jid, sid = tokens.sid; if (this.keepalive) {
if (this.keepalive && rid && sid && jid) { try {
this.session.save({rid: rid}); // The RID needs to be increased with each request. return this.connection.restore(null, this.onConnectStatusChanged);
this.connection.attach(jid, sid, rid, this.onConnectStatusChanged); } catch (e) {
converse.log("Could not restore sessions. Error message: "+e.message);
}
} else if (this.auto_login) { } else if (this.auto_login) {
if (!this.jid) { if (!this.jid) {
throw new Error("initConnection: If you use auto_login, you also need to provide a jid value"); throw new Error("initConnection: If you use auto_login, you also need to provide a jid value");
...@@ -5758,7 +5741,6 @@ ...@@ -5758,7 +5741,6 @@
}; };
this.initConnection = function () { this.initConnection = function () {
var tokens = {};
if (this.connection && this.connection.connected) { if (this.connection && this.connection.connected) {
this.setUpXMLLogging(); this.setUpXMLLogging();
this.onConnected(); this.onConnected();
...@@ -5767,24 +5749,19 @@ ...@@ -5767,24 +5749,19 @@
throw new Error("initConnection: you must supply a value for either the bosh_service_url or websocket_url or both."); throw new Error("initConnection: you must supply a value for either the bosh_service_url or websocket_url or both.");
} }
if (('WebSocket' in window || 'MozWebSocket' in window) && this.websocket_url) { if (('WebSocket' in window || 'MozWebSocket' in window) && this.websocket_url) {
this.connection = new Strophe.Connection(this.websocket_url); this.connection = new Strophe.Connection(this.websocket_url, {'keepalive': this.keepalive});
} else if (this.bosh_service_url) { } else if (this.bosh_service_url) {
this.connection = new Strophe.Connection(this.bosh_service_url); this.connection = new Strophe.Connection(this.bosh_service_url, {'keepalive': this.keepalive});
} else { } else {
throw new Error("initConnection: this browser does not support websockets and bosh_service_url wasn't specified."); throw new Error("initConnection: this browser does not support websockets and bosh_service_url wasn't specified.");
} }
this.setUpXMLLogging(); this.setUpXMLLogging();
if (this.keepalive) {
tokens.rid = this.session.get('rid');
tokens.sid = this.session.get('sid');
tokens.jid = this.session.get('jid');
}
// We now try to resume or automatically set up a new session. // We now try to resume or automatically set up a new session.
// Otherwise the user will be shown a login form. // Otherwise the user will be shown a login form.
if (this.authentication === PREBIND) { if (this.authentication === PREBIND) {
this.attemptPreboundSession(tokens); this.attemptPreboundSession();
} else { } else {
this.attemptNonPreboundSession(tokens); this.attemptNonPreboundSession();
} }
} }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment