Beispiel #1
0
    it('closes connection on socket timeout', function (done) {

        Nipple.request('GET', 'http://localhost:' + port + '/', {}, function (err, res) {

            expect(err).to.exist;
            expect(err.message).to.equal('Client request error');
            done();
        });
    });
            server.start(function () {

                Nipple.request('GET', 'http://localhost:' + server.info.port + '/', {}, function (err, res) {

                    server.stop();
                    expect(err).to.exist;
                    expect(err.message).to.equal('Client request error: socket hang up');
                    done();
                });
            });
            server.start(function () {

                var timeout;
                var orig = Net.Socket.prototype.setTimeout;
                Net.Socket.prototype.setTimeout = function () {

                    timeout = 'gotcha';
                    Net.Socket.prototype.setTimeout = orig;
                    return orig.apply(this, arguments);
                };

                Nipple.request('GET', 'http://localhost:' + server.info.port + '/', {}, function (err, res) {

                    server.stop();
                    expect(err).to.not.exist;
                    expect(timeout).to.equal('gotcha');
                    done();
                });
            });
Beispiel #4
0
    Object.keys(self._subscriberQueues.http).forEach(function (uri) {

        var subscriberQueue = self._subscriberQueues.http[uri];
        if (!subscriberQueue.length) {
            return;
        }

        var envelope = {
            schema: self.settings.schemaName,
            host: internals.host,
            appVer: internals.appVer,
            timestamp: Date.now(),
            events: self._eventsFilter(self._subscriberTags[uri], subscriberQueue)
        };

        subscriberQueue.length = 0;                                     // Empty queue (must not set to [] or queue reference will change)

        Nipple.request('post', uri, { headers: { 'content-type': 'application/json' }, payload: JSON.stringify(envelope), timeout: self.settings.requestTimeout });
    });
Beispiel #5
0
        settings.mapUri(request, function (err, uri, headers) {

            if (err) {
                return reply(err);
            }

            var req = request.raw.req;

            var options = {
                headers: {},
                payload: request.payload,
                redirects: settings.redirects,
                timeout: settings.timeout,
                rejectUnauthorized: settings.rejectUnauthorized            // in case maxSockets is not specified
            };

            var protocol = uri.split(':', 1)[0];

            options.agent = protocol === 'http' ? request.server._agents.http :
                (settings.rejectUnauthorized === false ? request.server._agents.insecureAgent : request.server._agents.https);

            var bind = request.route.bind || request._route.env.bind || null;

            if (settings.passThrough) {
                options.headers = Hoek.clone(req.headers);
                delete options.headers.host;
            }

            if (headers) {
                Hoek.merge(options.headers, headers);
            }

            if (settings.xforward) {
                options.headers['x-forwarded-for'] = (options.headers['x-forwarded-for'] ? options.headers['x-forwarded-for'] + ',' : '') + request.info.remoteAddress;
                options.headers['x-forwarded-port'] = (options.headers['x-forwarded-port'] ? options.headers['x-forwarded-port'] + ',' : '') + request.info.remotePort;
                options.headers['x-forwarded-proto'] = (options.headers['x-forwarded-proto'] ? options.headers['x-forwarded-proto'] + ',' : '') + settings.protocol;
            }

            if (settings.onResponse) {
                delete options.headers['accept-encoding'];
            }

            var contentType = req.headers['content-type'];
            if (contentType) {
                options.headers['Content-Type'] = contentType;
            }

            // Send request

            Nipple.request(request.method, uri, options, function (err, res) {

                var ttl = null;

                if (err) {
                    if (settings.onResponse) {
                        return settings.onResponse.call(bind, err, res, request, reply, settings, ttl);
                    }

                    return reply(err);
                }

                if (settings._upstreamTtl) {
                    var cacheControlHeader = res.headers['cache-control'];
                    if (cacheControlHeader) {
                        var cacheControl = Nipple.parseCacheControl(cacheControlHeader);
                        if (cacheControl) {
                            ttl = cacheControl['max-age'] * 1000;
                        }
                    }
                }

                if (settings.onResponse) {
                    return settings.onResponse.call(bind, null, res, request, reply, settings, ttl);
                }

                reply(res)
                    .ttl(ttl)
                    .passThrough(settings.passThrough || false);   // Default to false
            });
        });
Beispiel #6
0
        settings.mapUri(request, function (err, uri, headers) {

            if (err) {
                return reply(err);
            }

            var req = request.raw.req;

            var options = {
                headers: {},
                payload: request.payload,
                redirects: settings.redirects,
                timeout: settings.timeout,
                rejectUnauthorized: settings.rejectUnauthorized
            };

            var bind = (request.route.bind || request._route.env.bind);

            if (settings.passThrough) {
                options.headers = Utils.clone(req.headers);
                delete options.headers.host;
            }

            if (headers) {
                Utils.merge(options.headers, headers);
            }

            if (settings.xforward) {
                options.headers['x-forwarded-for'] = (options.headers['x-forwarded-for'] ? options.headers['x-forwarded-for'] + ',' : '') + request.info.remoteAddress;
                options.headers['x-forwarded-port'] = (options.headers['x-forwarded-port'] ? options.headers['x-forwarded-port'] + ',' : '') + request.info.remotePort;
                options.headers['x-forwarded-proto'] = (options.headers['x-forwarded-proto'] ? options.headers['x-forwarded-proto'] + ',' : '') + settings.protocol;
            }

            if (settings.preResponse || settings.postResponse) {
                delete options.headers['accept-encoding'];
            }

            var contentType = req.headers['content-type'];
            if (contentType) {
                options.headers['Content-Type'] = contentType;
            }

            // Send request

            Nipple.request(request.method, uri, options, function (err, res) {

                if (err) {
                    if (settings.preResponse) {
                        return settings.preResponse.call(bind, err, res, request, reply, settings, ttl);
                    }
                    return reply(err);
                }

                var ttl = null;
                if (settings._upstreamTtl) {
                    var cacheControlHeader = res.headers['cache-control'];
                    if (cacheControlHeader) {
                        var cacheControl = Nipple.parseCacheControl(cacheControlHeader);
                        if (cacheControl) {
                            ttl = cacheControl['max-age'] * 1000;
                        }
                    }
                }

                if (settings.preResponse) {
                    return settings.preResponse.call(bind, undefined, res, request, reply, settings, ttl);
                }

                if (settings.postResponse) {
                    return settings.postResponse.call(bind, request, reply, res, settings, ttl);
                }

                reply(res)
                    .ttl(ttl)
                    .passThrough(settings.passThrough || false);   // Default to false
            });
        });
Beispiel #7
0
internals.request = function (request, reply) {

    Nipple.request('GET', 'http://google.com', {}, reply);
};