diff options
Diffstat (limited to 'vnfmarket/src/main/webapp/vnfmarket/node_modules/connect-timeout/index.js')
-rw-r--r-- | vnfmarket/src/main/webapp/vnfmarket/node_modules/connect-timeout/index.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/vnfmarket/src/main/webapp/vnfmarket/node_modules/connect-timeout/index.js b/vnfmarket/src/main/webapp/vnfmarket/node_modules/connect-timeout/index.js new file mode 100644 index 00000000..c39a2288 --- /dev/null +++ b/vnfmarket/src/main/webapp/vnfmarket/node_modules/connect-timeout/index.js @@ -0,0 +1,74 @@ +/*! + * connect-timeout + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +var createError = require('http-errors'); +var debug = require('debug')('connect:timeout'); +var ms = require('ms'); +var onHeaders = require('on-headers'); + +/** + * Timeout: + * + * See README.md for documentation. + * + * @param {Number} time + * @param {Object} options + * @return {Function} middleware + * @api public + */ + +module.exports = function timeout(time, options) { + options = options || {}; + + time = typeof time === 'string' + ? ms(time) + : Number(time || 5000); + + var respond = !('respond' in options) || options.respond === true; + + return function(req, res, next) { + var destroy = req.socket.destroy; + var id = setTimeout(function(){ + req.timedout = true; + req.emit('timeout', time); + }, time); + + if (respond) { + req.on('timeout', onTimeout(time, next)); + } + + req.clearTimeout = function(){ + clearTimeout(id); + }; + + req.socket.destroy = function(){ + clearTimeout(id); + destroy.call(this); + }; + + req.timedout = false; + + onHeaders(res, function(){ + clearTimeout(id); + }); + + next(); + }; +}; + +function onTimeout(time, cb){ + return function(){ + cb(createError(503, 'Response timeout', { + code: 'ETIMEDOUT', + timeout: time + })); + }; +} |