holepunch.js/lib/request.js

58 lines
1.3 KiB
JavaScript
Raw Permalink Normal View History

2015-12-30 03:36:14 +00:00
'use strict';
var PromiseA = require('bluebird');
var https = PromiseA.promisifyAll(require('https'));
var http = PromiseA.promisifyAll(require('http'));
function requestAsync(opts) {
return new PromiseA(function (resolve, reject) {
var httpr = (false === opts.secure) ? http : https;
2015-12-30 21:40:52 +00:00
if (opts.debug) {
console.log('[HP] requestAsync opts');
console.log(opts);
}
2015-12-30 08:22:04 +00:00
2015-12-30 03:36:14 +00:00
var req = httpr.request(opts, function (res) {
var data = '';
res.on('error', function (err) {
if (opts.debug) {
console.error('[Error] HP: bad request:');
console.error(err);
}
reject(err);
});
res.on('data', function (chunk) {
2015-12-30 21:40:52 +00:00
clearTimeout(req.__timtok);
2015-12-30 03:36:14 +00:00
if (opts.debug > 2) {
console.log('HP: request chunk:');
console.log(chunk);
}
2015-12-30 21:40:52 +00:00
2015-12-30 03:36:14 +00:00
data += chunk.toString('utf8');
});
res.on('end', function () {
if (opts.debug > 2) {
console.log('HP: request complete:');
console.log(data);
}
resolve(data);
});
});
req.on('error', reject);
2015-12-30 21:40:52 +00:00
req.setTimeout(3 * 1000);
req.on('socket', function (socket) {
req.__timtok = setTimeout(function () {
req.abort();
}, 3 * 1000);
socket.setTimeout(3 * 1000);
});
2015-12-30 03:36:14 +00:00
req.end();
});
}
module.exports = requestAsync;