function to()

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);
            }
        });
    }