Made the request verification process async

This commit is contained in:
Tony Kovanen
2014-04-10 21:03:08 +03:00
parent db36d031bc
commit 802f130080

View File

@@ -99,30 +99,31 @@ Server.prototype.upgrades = function(transport){
* @api private
*/
Server.prototype.verify = function(req, upgrade){
Server.prototype.verify = function(req, upgrade, fn){
// transport check
var transport = req._query.transport;
if (!~this.transports.indexOf(transport)) {
debug('unknown transport "%s"', transport);
return Server.errors.UNKNOWN_TRANSPORT;
return fn(Server.errors.UNKNOWN_TRANSPORT, false);
}
// sid check
var sid = req._query.sid;
if (sid) {
if (!this.clients.hasOwnProperty(sid))
return Server.errors.UNKNOWN_SID;
return fn(Server.errors.UNKNOWN_SID, false);
if (!upgrade && this.clients[sid].transport.name !== transport) {
debug('bad request: unexpected transport without upgrade');
return Server.errors.BAD_REQUEST;
return fn(Server.errors.BAD_REQUEST, false);
}
} else {
// handshake is GET only
if ('GET' != req.method) return Server.errors.BAD_HANDSHAKE_METHOD;
return !this.allowRequest || this.allowRequest(req);
if ('GET' != req.method) return fn(Server.errors.BAD_HANDSHAKE_METHOD, false);
if (!this.allowRequest) return fn(null, true);
return this.allowRequest(req, fn);
}
return true;
fn(null, true);
};
/**
@@ -165,20 +166,20 @@ Server.prototype.handleRequest = function(req, res){
this.prepare(req);
req.res = res;
var code = this.verify(req, false);
if (code !== true) {
sendErrorMessage(res, code);
return this;
}
var self = this;
this.verify(req, false, function(err, success) {
if (!success) {
sendErrorMessage(res, err);
return;
}
if (req._query.sid) {
debug('setting new request for existing client');
this.clients[req._query.sid].transport.onRequest(req);
} else {
this.handshake(req._query.transport, req);
}
return this;
if (req._query.sid) {
debug('setting new request for existing client');
self.clients[req._query.sid].transport.onRequest(req);
} else {
self.handshake(req._query.transport, req);
}
});
};
/**
@@ -258,15 +259,17 @@ Server.prototype.handshake = function(transport, req){
Server.prototype.handleUpgrade = function(req, socket, head){
this.prepare(req);
if (this.verify(req, true) !== true) {
socket.end();
return;
}
// delegate to ws
var self = this;
this.ws.handleUpgrade(req, socket, head, function(conn){
self.onWebSocket(req, conn);
this.verify(req, true, function(err, success) {
if (!success) {
socket.end();
return;
}
// delegate to ws
self.ws.handleUpgrade(req, socket, head, function(conn){
self.onWebSocket(req, conn);
});
});
};