diff --git a/app.js b/app.js index 6ed9fba9c..4714da0f8 100644 --- a/app.js +++ b/app.js @@ -22,13 +22,65 @@ app.start = function(port, callback) { cert: fs.readFileSync(bc + '/test/data/x509.crt') }); var pserver = require(bc + '/examples/PayPro/server.js'); - server.on('request', function(req, res) { - app(req, res); - pserver.app(res, res); + pserver.removeListener('request', pserver.app); + pserver.on('request', function(req, res) { + var statusCode = res.statusCode; + + var headers = Object.keys(res._headers || {}).reduce(function(out, key) { + out[key] = res._headers[key]; + return out; + }, {}); + + var headerNames = Object.keys(res._headerNames || {}).reduce(function(out, key) { + out[key] = res._headerNames[key]; + return out; + }, {}); + + var writeHead = res.writeHead; + var write = res.write; + var end = res.end; + var status; + + res.writeHead = function(s) { + status = s; + if (status > 400) { + return; + } + return writeHead.apply(this, arguments); + }; + + res.write = function() { + if (status && status > 400) { + return true; + } + return write.apply(this, arguments); + }; + + res.end = function() { + var self = this; + var args = Array.prototype.slice.call(arguments); + process.nextTick(function() { + self.statusCode = statusCode; + self._headers = headers; + self._headerNames = headerNames; + self.writeHead = writeHead; + self.write = write; + self.end = end; + if ((status || self.statusCode) > 400) { + return pserver.app(req, res); + } + return end.apply(self, args); + }); + return true; + }; + + return app(req, res); }); - app.listen(port, function() { + + pserver.listen(port, function() { callback('https://localhost:' + port); }); + return; }