mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
Made the request verification process async
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user