Server after chain support, and minor metrics
This commit is contained in:
parent
1e242d840b
commit
0e77b69dc0
|
@ -24,6 +24,7 @@ function SearchResponse(options) {
|
||||||
|
|
||||||
this.attributes = options.attributes ? options.attributes.slice() : [];
|
this.attributes = options.attributes ? options.attributes.slice() : [];
|
||||||
this.notAttributes = [];
|
this.notAttributes = [];
|
||||||
|
this.sentEntries = 0;
|
||||||
}
|
}
|
||||||
util.inherits(SearchResponse, LDAPResult);
|
util.inherits(SearchResponse, LDAPResult);
|
||||||
module.exports = SearchResponse;
|
module.exports = SearchResponse;
|
||||||
|
@ -76,6 +77,7 @@ SearchResponse.prototype.send = function(entry) {
|
||||||
this.log.debug('%s: sending: %j', this.connection.ldap.id, entry.json);
|
this.log.debug('%s: sending: %j', this.connection.ldap.id, entry.json);
|
||||||
|
|
||||||
this.connection.write(entry.toBer());
|
this.connection.write(entry.toBer());
|
||||||
|
this.sentEntries++;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.log.warn('%s failure to write message %j: %s',
|
this.log.warn('%s failure to write message %j: %s',
|
||||||
this.connection.ldap.id, this.json, e.toString());
|
this.connection.ldap.id, this.json, e.toString());
|
||||||
|
|
|
@ -300,6 +300,7 @@ function Server(options) {
|
||||||
c.parser.on('message', function(req) {
|
c.parser.on('message', function(req) {
|
||||||
req.connection = c;
|
req.connection = c;
|
||||||
req.logId = c.ldap.id + '::' + req.messageID;
|
req.logId = c.ldap.id + '::' + req.messageID;
|
||||||
|
req.startTime = new Date().getTime();
|
||||||
|
|
||||||
if (log.isDebugEnabled())
|
if (log.isDebugEnabled())
|
||||||
log.debug('%s: message received: req=%j', c.ldap.id, req.json);
|
log.debug('%s: message received: req=%j', c.ldap.id, req.json);
|
||||||
|
@ -325,18 +326,32 @@ function Server(options) {
|
||||||
res.requestDN = req.dn;
|
res.requestDN = req.dn;
|
||||||
|
|
||||||
var chain = self._getHandlerChain(req);
|
var chain = self._getHandlerChain(req);
|
||||||
|
//.concat(this._postChain || []);
|
||||||
|
|
||||||
var i = 0;
|
var i = 0;
|
||||||
return function(err) {
|
return function(err) {
|
||||||
function sendError(err) {
|
function sendError(err) {
|
||||||
res.status = err.code || errors.LDAP_OPERATIONS_ERROR;
|
res.status = err.code || errors.LDAP_OPERATIONS_ERROR;
|
||||||
res.matchedDN = req.suffix.toString();
|
res.matchedDN = req.suffix ? req.suffix.toString() : '';
|
||||||
res.errorMessage = err.message || '';
|
res.errorMessage = err.message || '';
|
||||||
return res.end();
|
return res.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (err)
|
function after() {
|
||||||
return sendError(err);
|
if (!self._postChain || !self._postChain.length)
|
||||||
|
return;
|
||||||
|
|
||||||
|
function next() {} // stub out next for the post chain
|
||||||
|
|
||||||
|
self._postChain.forEach(function(c) {
|
||||||
|
c.call(self, req, res, next);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
sendError(err);
|
||||||
|
return after();
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var next = arguments.callee;
|
var next = arguments.callee;
|
||||||
|
@ -346,6 +361,7 @@ function Server(options) {
|
||||||
if (req.protocolOp === Protocol.LDAP_REQ_BIND && res.status === 0)
|
if (req.protocolOp === Protocol.LDAP_REQ_BIND && res.status === 0)
|
||||||
c.ldap.bindDN = req.dn;
|
c.ldap.bindDN = req.dn;
|
||||||
|
|
||||||
|
return after();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (!e.stack)
|
if (!e.stack)
|
||||||
e.stack = e.toString();
|
e.stack = e.toString();
|
||||||
|
@ -611,6 +627,16 @@ Server.prototype.unbind = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Server.prototype.after = function() {
|
||||||
|
if (!this._postChain)
|
||||||
|
this._postChain = [];
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
mergeFunctionArgs(arguments).forEach(function(h) {
|
||||||
|
self._postChain.push(h);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// All these just reexpose the requisite net.Server APIs
|
// All these just reexpose the requisite net.Server APIs
|
||||||
Server.prototype.listen = function(port, host, callback) {
|
Server.prototype.listen = function(port, host, callback) {
|
||||||
if (!port)
|
if (!port)
|
||||||
|
|
Loading…
Reference in New Issue