in apps/mountebank-mock/mountebank-source/src/models/tcp/tcpProxy.js [50:105]
function to (proxyDestination, originalRequest, options = {}) {
return new Promise((resolve, reject) => {
try {
const proxyName = socketName(connectionInfoFor(proxyDestination)),
log = (direction, what) => {
logger.debug('Proxy %s %s %s %s %s',
originalRequest.requestFrom, direction, JSON.stringify(format(what)), direction, proxyName);
},
buffer = Buffer.from(originalRequest.data, encoding),
socket = net.connect(connectionInfoFor(proxyDestination), () => {
socket.write(buffer);
}),
packets = [];
log('=>', originalRequest);
socket.on('end', () => {
logger.debug('%s LAST-ACK', proxyName);
});
socket.on('close', () => {
logger.debug('%s CLOSED', proxyName);
});
socket.on('data', data => {
packets.push(data);
const requestBuffer = Buffer.concat(packets);
if (isEndOfRequest(requestBuffer, logger)) {
if (!options.keepalive) {
socket.end();
}
const response = { data: requestBuffer.toString(encoding) };
log('<=', response);
resolve(response);
}
});
socket.once('error', error => {
logger.error(`Proxy ${proxyName} transmission error X=> ${JSON.stringify(error)}`);
if (error.code === 'ENOTFOUND' || error.code === 'EAI_AGAIN') {
reject(errors.InvalidProxyError(`Cannot resolve ${JSON.stringify(proxyDestination)}`));
}
else if (error.code === 'ECONNREFUSED') {
reject(errors.InvalidProxyError(`Unable to connect to ${JSON.stringify(proxyDestination)}`));
}
else {
reject(error);
}
});
}
catch (e) {
reject(e);
}
});
}