From 04b5ac0bbe87c700e28f1b8259245649a60cab5a Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:23:24 +0000 Subject: [PATCH 01/29] Add files via upload --- package.json | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 6ded8c6..805ee71 100644 --- a/package.json +++ b/package.json @@ -5,28 +5,35 @@ "url": "http://tomasz.janczuk.org", "twitter": "tjanczuk" }, - "version": "0.3.3-pre", + "version": "1.0.0", "description": "Native HTTP stack for Node.js on Windows", - "tags" : ["http", "https", "http.sys", "windows"], - "main": "./lib/httpsys.js", - "licenses": [ { "type": "Apache", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], - "os": [ "win32" ], + "tags": [ + "http", + "https", + "http.sys", + "windows" + ], + "main": "./index.js", + "licenses": [ + { + "type": "Apache", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + } + ], + "os": [ + "win32" + ], "devDependencies": { - "mocha": "1.8.1", - "ws": "0.4.27", - "socket.io": "0.9.16", - "socket.io-client": "0.9.16" - }, - "homepage": "https://github.com/tjanczuk/httpsys", - "repository": { - "type": "git", - "url": "git@github.com:tjanczuk/httpsys.git" - }, - "bugs" : { - "url" : "http://github.com/tjanczuk/httpsys/issues" + "mocha": "^5.2.0", + "socket.io": "1.4.8", + "socket.io-client": "1.4.8" }, "scripts": { - "install": "tools\\install.bat", "test": "test\\test.bat" - } -} \ No newline at end of file + }, + "dependencies": { + "debug": "4.1.0", + "http-status-codes": "1.3.0", + "nan": "^2.11.1" + } +} From d1def5da8a8935ad583e89d2f0cd177a730b0dce Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:29:17 +0000 Subject: [PATCH 02/29] Add files via upload Update to use Native Abstractions for Node.js allowing support for current version of node. --- binding.gyp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/binding.gyp b/binding.gyp index 69ebcbd..b4ca036 100644 --- a/binding.gyp +++ b/binding.gyp @@ -1,10 +1,13 @@ -{ - 'targets': [ - { - 'target_name': 'httpsys', - 'sources': [ - 'src/httpsys.cc' - ] - } - ] +{ + 'targets': [ + { + 'target_name': 'httpsys', + 'sources': [ + 'src/httpsys.cc' + ], + "include_dirs": [ + " Date: Wed, 14 Nov 2018 13:37:48 +0000 Subject: [PATCH 03/29] Update to support node v8, v9 and v10. --- lib/httpsys_native.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/httpsys_native.js b/lib/httpsys_native.js index 91d4a3e..7efaf9f 100644 --- a/lib/httpsys_native.js +++ b/lib/httpsys_native.js @@ -1,7 +1,7 @@ var versionMap = [ - [ /^0\.6\./, '0.6.20' ], - [ /^0\.8\./, '0.8.22' ], - [ /^0\.10\./, '0.10.15' ] + [ /^8\.9\./, '8.9.4' ], + [ /^9\.9\./, '9.9.0' ], + [ /^10\.13\./, '10.13.0' ] ]; function determineVersion() { @@ -47,5 +47,5 @@ exports.nativeEvents = [ '_on_request_body', // 7 '_on_written', // 8 '_on_error_writing', // 9 - '_on_server_closed' // 10 + '_on_server_closed' ]; From a9eaa6c09e840620ee2e84b4ad176bfb8220a2c6 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:39:45 +0000 Subject: [PATCH 04/29] Update to support node v8, v9 and v10. --- lib/Server.js | 148 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 99 insertions(+), 49 deletions(-) diff --git a/lib/Server.js b/lib/Server.js index 2f1fd14..8011879 100644 --- a/lib/Server.js +++ b/lib/Server.js @@ -1,26 +1,46 @@ var httpsys = require('./httpsys_native') + , debug = require('debug')('httpsys:server') + , debugReq = require('debug')('httpsys:server:req') + , debugRes = require('debug')('httpsys:server:res') , events = require('events') , util = require('util') , ServerRequest = require('./ServerRequest') , ServerResponse = require('./ServerResponse') , Socket = require('./Socket'); +var HTTPSYS_HTTP_TRACE = 99; + function Server() { events.EventEmitter.call(this); } util.inherits(Server, events.EventEmitter); +/*===================================================================== + * Function : listen on specified port + * + * Parameters : port - port can a number, string or array of strings + * hostname - optional host if port is specified as a number + * callback - callback function on listen complete + * + * Returns : this object reference + * + */ Server.prototype.listen = function (port, hostname, callback) { - if (this._server) - throw new Error('The server is already listening. Call close before calling listen again.'); - - if (!port || isNaN(+port) && typeof port !== 'string') - throw new Error('Port must be specified as a positive integer or a full URL specification string.'); - - if (typeof port === 'string' && typeof hostname === 'string') - throw new Error('If port specifies a full URL, hostname cannot be specified.'); + var urls = []; + debug("listening called"); + + if (this._server) { + debug("the server is already listening, call close before calling listen again"); + throw new Error('The server is already listening. Call close before calling listen again.'); + } + //port specified? + if (!port) { + debug("port must be specified as a positive integer, a full URL specification string or an array of full URL specification strings"); + throw new Error("Port must be specified as a positive integer, a full URL specification string or an array of full URL specification strings"); + } + if (typeof hostname === 'function') { callback = hostname; hostname = '*'; @@ -29,20 +49,31 @@ Server.prototype.listen = function (port, hostname, callback) { hostname = '*'; } + switch (typeof port) { + case "number": + urls.push(this._scheme + hostname + ':' + port + '/'); + break; + + case "string": + urls.push(port); + break; + + case "object": + urls = port; + break; + } + if (typeof callback === 'function') { this.on('listening', callback); } - var options = { - url: typeof port === 'string' ? port : (this._scheme + hostname + ':' + port + '/') - }; - try { - this._nativeServer = httpsys.httpsys_listen(options); + this._nativeServer = httpsys.httpsys_listen(urls); this._nativeServer.serverId = httpsys.serverId++; httpsys.servers[this._nativeServer.serverId] = this; } catch (e) { + debug('error initializing the HTTP.SYS server, system error ' + e + '.'); throw new Error('Error initializing the HTTP.SYS server. System error ' + e + '.'); } @@ -55,11 +86,13 @@ Server.prototype.listen = function (port, hostname, callback) { }; Server.prototype.close = function (callback) { + debug("close"); if (!this._closed) { try { httpsys.httpsys_stop_listen(this._nativeServer); } catch (e) { + debug('error closing the HTTP.SYS listener. System error ' + e + '.'); throw new Error('Error closing the HTTP.SYS listener. System error ' + e + '.'); } @@ -70,57 +103,66 @@ Server.prototype.close = function (callback) { } this._closed = true; + } else { + debug("close ignored as already closed"); } }; Server.prototype._on_server_closed = function () { + debug("server closed, id '" + this._nativeServer.serverId + "'"); delete httpsys.servers[this._nativeServer.serverId]; - delete this._nativeServer; + delete this._nativeServer; + debug("emitting close"); this.emit('close'); }; Server._dispatch = function (args) { - if (!args.eventType || !httpsys.nativeEvents[args.eventType]) - throw new Error('Unrecognized eventType: ' + args.eventType); - - var server = args.server || httpsys.servers[args.uv_httpsys_server.serverId]; - if (server) { - return server[httpsys.nativeEvents[args.eventType]](args); - } - else if (args.eventType === 2) { - // Error initiating a new request for a server that was closed by the application. - // This is expected since the HTTP.SYS request queue was closed, and so attempts - // to initiate new requests are going to fail. Ignore the error. - - // Ignore. - } - else { - // We should never get here. + //look for http trace message + if (args.eventType === HTTPSYS_HTTP_TRACE) { + debug(args.data); + } else { + if (!args.eventType || !httpsys.nativeEvents[args.eventType]) { + debug('unrecognized eventType: ' + args.eventType); + throw new Error('Unrecognized eventType: ' + args.eventType); + } + + var server = args.server || httpsys.servers[args.uv_httpsys_server.serverId]; + if (server) { + return server[httpsys.nativeEvents[args.eventType]](args); + } + else if (args.eventType === 2) { + // Error initiating a new request for a server that was closed by the application. + // This is expected since the HTTP.SYS request queue was closed, and so attempts + // to initiate new requests are going to fail. Ignore the error. - throw new Error('Server associated with HTTP.SYS request queue ' - + args.uv_httpsys_server.serverId + ' does not exist. Unable to dispatch event ' - + util.format(args)); + // Ignore. + } + else { + // We should never get here. + debug('server associated with HTTP.SYS request queue ' + args.uv_httpsys_server.serverId + ' does not exist. Unable to dispatch event ' + util.format(args)); + throw new Error('Server associated with HTTP.SYS request queue ' + args.uv_httpsys_server.serverId + ' does not exist. Unable to dispatch event ' + util.format(args)); + } } }; Server.prototype._on_error_initializing_request = function(args) { // This is a non-recoverable exception. Ignoring this exception would lead to // the server becoming unresponsive due to lack of pending reads. - - throw new Error('Unable to initiate a new asynchronous receive of an HTTP request against HTTP.SYS. ' - + 'System error ' + args.code + '.'); + debug('unable to initiate a new asynchronous receive of an HTTP request against HTTP.SYS. ' + 'System error ' + args.code + '.'); + throw new Error('Unable to initiate a new asynchronous receive of an HTTP request against HTTP.SYS. ' + 'System error ' + args.code + '.'); }; Server.prototype._on_error_new_request = function(args) { // The HTTP.SYS operation that was to receive a new HTTP request had failed. This // condition is safe to ignore - no JavaScript representation of the request exists yet, // and the failed pending read had already been replaced with a new pending read. - - this.emit('clientError', new Error('HTTP.SYS receive of a new HTTP request has failed. ' - + 'System errror ' + args.code + '.')); + debug('HTTP.SYS receive of a new HTTP request has failed, system error ' + args.code + '.'); + this.emit('clientError', new Error('HTTP.SYS receive of a new HTTP request has failed. ' + 'System error ' + args.code + '.')); }; -Server.prototype._on_new_request = function(requestContext) { +Server.prototype._on_new_request = function (requestContext) { + debugReq("received new request, '" + requestContext.req.method + "', url '" + requestContext.req.url + "'"); + requestContext._reqAsyncPending = false; requestContext._resAsyncPending = false; requestContext.responseStarted = false; @@ -131,6 +173,8 @@ Server.prototype._on_new_request = function(requestContext) { requestContext.noDelay = true; requestContext.socket = new Socket(requestContext); requestContext.req = new ServerRequest(requestContext.socket); + requestContext.socket.remoteAddress = requestContext.req.remoteAddress; + requestContext.asyncPending = function (target, value) { // For regular HTTP reuests, only one async operation outstanding against HTTP.SYS @@ -154,6 +198,7 @@ Server.prototype._on_new_request = function(requestContext) { if (requestContext.req.headers['upgrade']) { // This is an upgrade request. + debugReq("received upgrade request"); requestContext.upgrade = true; @@ -167,13 +212,15 @@ Server.prototype._on_new_request = function(requestContext) { } else { // The 'upgrade' event is not listened for. Reject the upgrade request. - + debugReq("upgrade event not listened for, reject the upgrade request"); // Prevent the native module from reading request entity body after this function returns. requestContext.asyncPending('req', false); // Send a 400 response and drop the TCP connection requestContext.statusCode = 400; requestContext.disconnect = true; + //when disconnect set, write headers will not + //throw an exception if it errors httpsys.httpsys_write_headers(requestContext); } } @@ -202,24 +249,26 @@ Server.prototype._on_error_initializing_read_request_body = function(args) { // The headers of the HTTP request had already been read but initializing reading of the // request body failed. Notify application code and clean up managed resources // representing the request. Native resources had already been released at this point. - - args.socket._error('req', new Error('Error initializing the reading of the request body. System error ' - + args.code + '.')); + debugReq("error initializing read request body, reason '" + args.code + "'"); + args.socket._error('req', args.code, 'Error initializing the reading of the request body. System error'); }; Server.prototype._on_end_request = function(requestContext) { requestContext.asyncPending('req', false); requestContext.socket._on_end_request(); + debugReq("on end request closed '" + (requestContext.socket._closed || 'false') + "', closeError '" + (requestContext.socket._closeError || "") + "'"); + return (requestContext.socket._closeError || 0); }; Server.prototype._on_error_read_request_body = function(args) { // Reading of the request body failed. Notify application code and clean up managed resources // representing the request. Native resources had already been released at this point. - - args.socket._error('req', new Error('Error reading the request body. System error ' + args.code + '.')); + debugReq("on error read request body, reason '" + args.code + "'"); + args.socket._error('req', args.code, 'Error reading the request body. System error'); }; -Server.prototype._on_request_body = function(requestContext) { +Server.prototype._on_request_body = function (requestContext) { + debugReq("on request body"); requestContext.asyncPending('req', false); requestContext.socket._on_request_body(requestContext); requestContext.asyncPending('req', !requestContext.socket._paused); @@ -235,11 +284,12 @@ Server.prototype._on_request_body = function(requestContext) { Server.prototype._on_error_writing = function(args) { // Sending of the response headers and/or body failed. Notify application code and clean up managed resources // representing the request. Native resources had already been released at this point. - - args.socket._error('res', new Error('Error sending response data. System error ' + args.code + '.')); + debugRes("on error writing, reason '" + args.code + "'"); + args.socket._error('res', args.code, 'Error sending response data. System error'); }; Server.prototype._on_written = function(requestContext) { + debugRes("on written"); requestContext.asyncPending('res', false); requestContext.socket._on_written(); }; From af0fd8ff3d2604dada0bfe6bd443f2033ae055e8 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:41:09 +0000 Subject: [PATCH 05/29] Update to support node v8, v9 and v10. --- lib/ServerRequest.js | 58 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/lib/ServerRequest.js b/lib/ServerRequest.js index 5f4ad09..ba07d06 100644 --- a/lib/ServerRequest.js +++ b/lib/ServerRequest.js @@ -1,5 +1,6 @@ var events = require('events') - , util = require('util'); + , util = require('util') + , Stream = require('stream'); // http://msdn.microsoft.com/en-us/library/windows/desktop/aa377188(v=vs.85).aspx @@ -16,8 +17,29 @@ var certErrors = { }; function ServerRequest(socket) { + events.EventEmitter.call(this); this.socket = this.connection = socket; + + Stream.Readable.call(this); + + // Set this to `true` so that stream.Readable won't attempt to read more + // data on `IncomingMessage#push` (see `maybeReadMore` in + // `_stream_readable.js`). This is important for proper tracking of + // `IncomingMessage#_consuming` which is used to dump requests that users + // haven't attempted to read. + this._readableState.readingMore = true; + this.complete = false; + this.readable = true; + + // flag for backwards compatibility grossness. + this._consuming = false; + + // flag for when we decide that this message cannot possibly be + // read by the user, so there's no point continuing to handle it. + this._dumped = false; + + /******************/ var clientCertInfo = this.socket._requestContext.req.clientCertInfo; if (clientCertInfo) { @@ -68,10 +90,34 @@ function ServerRequest(socket) { this.httpVersion = this.httpVersionMajor + '.' + this.httpVersionMinor; var self = this; - this.socket.on('close', function (had_error) { self.emit('close', had_error); }); + this.socket.on('close', function (had_error) { + self.emit('close', had_error); + }); }; util.inherits(ServerRequest, events.EventEmitter); +util.inherits(ServerRequest, Stream.Readable); + +/****** JPW Not sure we need these routines *****/ + +ServerRequest.prototype.read = function (n) { + if (!this._consuming) + this._readableState.readingMore = false; + this._consuming = true; + this.read = Stream.Readable.prototype.read; + return this.read(n); +}; + + +ServerRequest.prototype._read = function (n) { + // We actually do almost nothing here, because the parserOnBody + // function fills up our internal buffer directly. However, we + // do need to unpause the underlying socket so that it flows. + if (this.socket.readable) + readStart(this.socket); +}; + +/***************************************/ ServerRequest.prototype.destroy = function (error) { return this.socket.destroy(error); @@ -92,8 +138,12 @@ ServerRequest.prototype.setEncoding = function (encoding) { ServerRequest.prototype._subscribe = function () { var self = this; // TODO promote other Socket events to ServerRequest? - this.socket.on('data', function (chunk) { self.emit('data', chunk); }); - this.socket.on('end', function () { self.emit('end'); }); + this.socket.on('data', function (chunk) { + self.emit('data', chunk); + }); + this.socket.on('end', function () { + self.emit('end'); + }); }; module.exports = ServerRequest; From cdc1bccd9a04593de995c1401011666e6d7484d5 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:42:29 +0000 Subject: [PATCH 06/29] Update to support node v8, v9 and v10. --- lib/ServerResponse.js | 66 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/lib/ServerResponse.js b/lib/ServerResponse.js index 1a8c16a..d541498 100644 --- a/lib/ServerResponse.js +++ b/lib/ServerResponse.js @@ -1,15 +1,64 @@ var events = require('events') - , util = require('util'); + ,util = require('util') + , Stream = require('stream') + , HttpStatus = require('http-status-codes'); function ServerResponse(socket) { + + Stream.call(this); + + // `outputSize` is an approximate measure of how much data is queued on this + // response. `_onPendingData` will be invoked to update similar global + // per-connection counter. That counter will be used to pause/unpause the + // TCP socket and HTTP Parser and thus handle the backpressure. + this.outputSize = 0; + + //need to initialise this to 200 to allow serve-static module to correctly check for fileCreatedDate + //not modified. see module isCachable() in nodejs\node_modules\serve-static\node_modules\send\index.js + //this was originally commented-out to prevent browser range request issues. The was due to javascript httpsys + //code not correctly returning 206/200, the result was page downloads never completed (just occasional froze). + //However have now tested in 11.3 which now uses http.sys I cannot see any problems. + this.statusCode = 200; + + this.writable = true; + + this._last = false; + this.chunkedEncoding = false; + this.shouldKeepAlive = true; + this.useChunkedEncodingByDefault = true; + + this._removedHeader = {}; + + this._contentLength = null; + this._hasBody = true; + this._trailer = ''; + + this.finished = false; + this._headerSent = false; + + this.connection = null; + this._header = null; + this._headers = null; + this._headerNames = {}; + + this._onPendingData = null; + + /***************************/ + events.EventEmitter.call(this); this._socket = socket; this.sendDate = true; var self = this; this._socket.on('close', function (had_error) { self.emit('close', had_error); }); + + this._socket.on('drain', function () { + self.emit('drain'); + }); }; util.inherits(ServerResponse, events.EventEmitter); +util.inherits(ServerResponse, Stream); + ServerResponse.prototype.writeHead = function (statusCode, reasonPhrase, headers) { this._socket._requestContext.responseStarted = true; @@ -26,6 +75,12 @@ ServerResponse.prototype.write = function(chunk, encoding, isEnd) { }; ServerResponse.prototype.end = function (chunk, encoding) { + //if this is the first and last block then make + //sure the status code is set correctly + if (!this._socket._requestContext.responseStarted && this.statusCode) { + this._socket._requestContext.statusCode = this.statusCode; + this._socket._requestContext.reason = HttpStatus.getStatusText(this.statusCode) || "OK"; + } return this.write(chunk, encoding, true); }; @@ -35,6 +90,11 @@ ServerResponse.prototype.writeContinue = function () { }; ServerResponse.prototype.setHeader = function (name, value) { + //JPW added: express requires headers in object _headers + if (!this._headers) { + this._headers = {}; + } + this._headers [name.toLowerCase()] = value.toString();; return this._socket._setHeader(name, value); }; @@ -43,6 +103,10 @@ ServerResponse.prototype.getHeader = function (name) { }; ServerResponse.prototype.removeHeader = function (name) { + //JPW added: express requires headers in object _headers + if (this._header && this._headers[name.toLowerCase()]) { + delete this._headers[name.toLowerCase()]; + } return this._socket._removeHeader(name); }; From e0c461c51efe56eddd354774ada56616c10699c8 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:43:36 +0000 Subject: [PATCH 07/29] Update to support node v8, v9 and v10. --- lib/Socket.js | 532 +++++++++++++++++++++++++++++++------------------- 1 file changed, 331 insertions(+), 201 deletions(-) diff --git a/lib/Socket.js b/lib/Socket.js index 8c22349..1f99723 100644 --- a/lib/Socket.js +++ b/lib/Socket.js @@ -1,4 +1,5 @@ var httpsys = require('./httpsys_native') + , debug = require('debug')('httpsys:socket') , events = require('events') , util = require('util'); @@ -25,6 +26,8 @@ var bufferConcat = Buffer.concat || function (list) { return buffer; }; +var ERROR_CONNECTION_INVALID = 1229; + // Maps known HTTP response header name to HTTP_HEADER_ID enum value // http://msdn.microsoft.com/en-us/library/windows/desktop/aa364526(v=vs.85).aspx var knownResponseHeaders = { @@ -76,6 +79,7 @@ var lastChunk = new Buffer('0\x0d\x0a\x0d\x0a'); var crlf = new Buffer('\x0d\x0a'); function Socket(requestContext) { + events.EventEmitter.call(this); this._requestContext = requestContext; this._encoding = 'binary'; @@ -83,42 +87,62 @@ function Socket(requestContext) { // Prevent 'error' events without registred handlers from surfacing as // uncaughtExceptions. This appears to be the case with socket.io. - this.on('error', function () {}); + this.on('error', function () { + debug("onerror event trapped for socket"); + }); }; util.inherits(Socket, events.EventEmitter); Socket.prototype._writeHead = function (statusCode, reasonPhrase, headers) { - this._ensureOpened(); + debug("writeHead '" + statusCode + "'"); - if (!statusCode || isNaN(+statusCode)) - throw new Error('Status code must be specified as a positive integer.'); - - if (typeof reasonPhrase === 'object') { - headers = reasonPhrase; - reasonPhrase = ''; - } - else if (reasonPhrase === null || typeof reasonPhrase === 'undefined') { - reasonPhrase = ''; - } - else if (typeof reasonPhrase !== 'string') - throw new Error('Reason phrase must be a string.'); + if (!this._closed) { + if (!statusCode || isNaN(+statusCode)) { + debug("status code must be specified as a positive integer"); + throw new Error('Status code must be specified as a positive integer.'); + } - if (typeof headers !== 'undefined' && typeof headers !== 'object') - throw new Error('Headers must be an object.'); + if (typeof reasonPhrase === 'object') { + headers = reasonPhrase; + reasonPhrase = ''; + } + else if (reasonPhrase === null || typeof reasonPhrase === 'undefined') { + reasonPhrase = ''; + } + else if (typeof reasonPhrase !== 'string') { + debug("reason phrase must be a string"); + throw new Error('Reason phrase must be a string.'); + } + if (typeof headers !== 'undefined' && typeof headers !== 'object') { + debug("headers must be an object"); + throw new Error('Headers must be an object.'); + } - if (this._requestContext.headersWritten) - throw new Error('The writeHead method cannot be called after the response headers have been sent.'); + if (this._requestContext.headersWritten) { + debug("the writeHead method cannot be called after the response headers have been sent"); + throw new Error('The writeHead method cannot be called after the response headers have been sent.'); + } - this._requestContext.statusCode = statusCode; - this._requestContext.reason = reasonPhrase; - if (headers) { - for (var i in headers) - this._requestContext.headers[i.toLowerCase()] = headers[i].toString(); + this._requestContext.statusCode = statusCode; + this._requestContext.reason = reasonPhrase; + var headerName = "", headerValue = ""; + if (headers) { + for (var i in headers) + { + headerName = i.toLowerCase() + headerValue = headers[i].toString(); + this._requestContext.headers[headerName] = headerValue; + debug(headerName + " '" + headerValue + "'"); + } + } + } else { + debug("writeHead ignored as socket is closed"); } }; -Socket.prototype._ensureUpgradeProcessed = function() { +Socket.prototype._ensureUpgradeProcessed = function () { + debug("ensureUpgradeProcessed called"); // This is a response to an HTTP upgrade request. The HTTP response headers are written // by the Node.js application directly to the Socket as there is no response object. // Here the HTTP response status line and headers need to be deserialized again, @@ -151,6 +175,7 @@ Socket.prototype._ensureUpgradeProcessed = function() { responseHeaders = response.substring(match[0].length); } else { + debug("invalid HTTP upgrade response. Unable to parse the response status line"); throw new Error('Invalid HTTP upgrade response. Unable to parse the response status line.'); } @@ -165,6 +190,7 @@ Socket.prototype._ensureUpgradeProcessed = function() { } if (lastIndex < (endOfHeaders - response.length + responseHeaders.length)) { + debug("invalid HTTP upgrade response. Unable to parse the response headers"); throw new Error('Invalid HTTP upgrade response. Unable to parse the response headers.'); } @@ -181,249 +207,335 @@ Socket.prototype._ensureUpgradeProcessed = function() { return true; }; -Socket.prototype.write = function(chunk, encoding, isEnd) { - this._ensureOpened(); - - if (this._requestContext.upgrade) { - // Queue up the chunk of the body to be sent. - // For upgrade requests the chunk must be added before a call to _ensureUpgradeProcessed. - // Regular responses cannot add the chunk here since it is not known yet whether chunking - // needs to be applied. - this._queue_body_chunk(chunk, encoding, isEnd); +Socket.prototype.write = function (chunk, encoding, options) { + var isEnd = false, cb = null, sent = false; + //socketio:ws calls the function with a callback function which must + //be called once the data has been written otherwise no further responses + //will happen. Other sources will call option with a boolean value, true + //if no more data to follow, else false + if (typeof (options) === 'function') { + cb = options; + } else { + isEnd = options; + } + //this._ensureOpened(); + if (!this._closed) { + if (this._requestContext.upgrade) { + debug("this is an upgrade request"); + // Queue up the chunk of the body to be sent. + // For upgrade requests the chunk must be added before a call to _ensureUpgradeProcessed. + // Regular responses cannot add the chunk here since it is not known yet whether chunking + // needs to be applied. + this._queue_body_chunk(chunk, encoding, isEnd); + + if (!this._requestContext.knownHeaders + && !this._requestContext.disconnect + && !this._ensureUpgradeProcessed()) { + + // This is a response to an upgrade request, but the application has not yet fully written out + // the HTTP response status line and headers to the socket. Return and wait for another call to write. + // At this point the chunk of the response has already been queued up in the requestContext.chunks. + debug("upgrade response, http response status not yet written, wait..."); + return false; + } + } - if (!this._requestContext.knownHeaders - && !this._requestContext.disconnect - && !this._ensureUpgradeProcessed()) { + if (!this._requestContext.knownHeaders) { + // First call to write prepares the cached response headers + debug("first write, preparing headers"); + + //there is a scenario where a range is requested from the browser which results in serveStatic->send->index + //to set the statusCode (206) is the res object. This needs to be synced to the top level _requestContext which + //is used by the http.sys driver when constructing the response back to the browser + // + //this is the only time it is copied. There is another scenario when servering socket.io.js where the two + //statusCodes are different, in this case we must respect the _requestContext statusCode + if (this._requestContext.res && this._requestContext.res.statusCode === 206) { + this._requestContext.statusCode = 206; + } + debug("response status code '" + this._requestContext.statusCode + "'"); + + // Upgrade reqeusts are never chunked. For regular requests assume chunking unless proven otherwise. + this._requestContext.chunkResponse = !this._requestContext.upgrade; + + this._requestContext.knownHeaders = []; + this._requestContext.unknownHeaders = {}; + for (var i in this._requestContext.headers) { + var id = knownResponseHeaders[i.toLowerCase()]; + //for an unknown reason 'Connection:upgrade' response header + //is stripped by http.sys api, so to get around this it is added + //to the unknown headers which gets passed through + if (id === undefined || id === 1) { + debug("unknown header: " + i + "=" + this._requestContext.headers[i]); + this._requestContext.unknownHeaders[i] = this._requestContext.headers[i]; + } else { + debug("known header: " + i + "=" + this._requestContext.headers[i]); + this._requestContext.knownHeaders.push({ id: id, value: this._requestContext.headers[i] }); + if (6 === id || 11 === id) { + // Either Content-Length or Transfer-Encoding headers were specified, + // chunked transfer encoding need not be applied. + this._requestContext.chunkResponse = false; + } + } - // This is a response to an upgrade request, but the application has not yet fully written out - // the HTTP response status line and headers to the socket. Return and wait for another call to write. - // At this point the chunk of the response has already been queued up in the requestContext.chunks. + } - return false; - } - } - - if (!this._requestContext.knownHeaders) { - // First call to write prepares the cached response headers - - // Upgrade reqeusts are never chunked. For regular requests assume chunking unless proven otherwise. - this._requestContext.chunkResponse = !this._requestContext.upgrade; - - this._requestContext.knownHeaders = []; - this._requestContext.unknownHeaders = {}; - for (var i in this._requestContext.headers) { - var id = knownResponseHeaders[i]; - if (id === undefined) - this._requestContext.unknownHeaders[i] = this._requestContext.headers[i]; - else { - this._requestContext.knownHeaders.push({id: id, value: this._requestContext.headers[i]}); - if (6 === id || 11 === id) { - // Either Content-Length or Transfer-Encoding headers were specified, - // chunked transfer encoding need not be applied. - this._requestContext.chunkResponse = false; - } + // Determine if chunked transfer encoding must be applied. + if (this._requestContext.chunkResponse) { + debug("know header: transfer-encoding=chunked"); + // Add Transfer-Encoding: chunked header if chunking will be applied. + this._requestContext.knownHeaders.push({ id: 6, value: 'chunked' }); } - } - // Determine if chunked transfer encoding must be applied. - - if (this._requestContext.chunkResponse) { - // Add Transfer-Encoding: chunked header if chunking will be applied. + // propagate cacheDuration from ServerResponse to _requestContext if it was set - this._requestContext.knownHeaders.push({id: 6, value: 'chunked'}); + if (!isNaN(this.cacheDuration)) { + this._requestContext.cacheDuration = this.cacheDuration; } - } - // propagate cacheDuration from ServerResponse to _requestContext if it was set + if (!this._requestContext.upgrade) { + // Queue up the chunk of the body to be sent after headers have been sent. + // For upgrade requests the chunk had already been added at the beginning of this function. + this._queue_body_chunk(chunk, encoding, isEnd); + } - if (!isNaN(this.cacheDuration)) { - this._requestContext.cacheDuration = this.cacheDuration; + sent = this._initiate_send_next(); + if (cb) { + if (!sent) { + this._wsDrain = cb; + } else { + cb(); + } + } + return sent; + } else { + debug("write ignored as socket is closed"); } - - if (!this._requestContext.upgrade) { - // Queue up the chunk of the body to be sent after headers have been sent. - // For upgrade requests the chunk had already been added at the beginning of this function. - this._queue_body_chunk(chunk, encoding, isEnd); - } - - return this._initiate_send_next(); + return false; }; Socket.prototype.end = function (chunk, encoding) { + debug("ending..."); if (chunk) { - this._ensureOpened(); - return this.write(chunk, encoding, true); + //this._ensureOpened(); + if (!this._closed) { + debug("we have chunked data, calling write"); + return this.write(chunk, encoding, true); + } else { + debug("we have chunked data, but socket is closed, ignoring write"); + return true; + } } else if (!this._closed) { + debug("calling write..."); return this.write(chunk, encoding, true); } else { + debug("socket is closed, ignoring write"); return true; } }; Socket.prototype._setHeader = function (name, value) { - this._ensureOpened(); - - if (typeof name !== 'string') - throw new Error('The name parameter must be a string HTTP header name.'); + if (!this._closed) { + if (typeof name !== 'string') + throw new Error('The name parameter must be a string HTTP header name.'); - if (Array.isArray(value)) - throw new Error('Array header values are not supported. The HTTP header value must be atomic.'); + if (Array.isArray(value)) + throw new Error('Array header values are not supported. The HTTP header value must be atomic.'); - if (typeof value !== 'string') - value += ''; + if (typeof value !== 'string') + value += ''; - // TODO: support for multiple headers with the same name + // TODO: support for multiple headers with the same name - if (this._requestContext.knownHeaders) - throw new Error('Response headers cannot be modified after they have been sent to the client.'); + if (this._requestContext.knownHeaders) + throw new Error('Response headers cannot be modified after they have been sent to the client.'); - this._requestContext.headers[name.toLowerCase()] = value.toString(); + this._requestContext.headers[name.toLowerCase()] = value.toString(); + } else { + debug("setHeader ignored as socket closed"); + } }; Socket.prototype._getHeader = function (name) { - this._ensureOpened(); - - if (typeof name !== 'string') - throw new Error('The name parameter must be a string HTTP header name.'); + if (!this._closed) { + if (typeof name !== 'string') + throw new Error('The name parameter must be a string HTTP header name.'); - return this._requestContext.headers[name.toLowerCase()]; + return this._requestContext.headers[name.toLowerCase()]; + } else { + debug("getHeader() ignored as socket closed"); + } + return ""; }; Socket.prototype._removeHeader = function (name) { - this._ensureOpened(); - - if (typeof name !== 'string') - throw new Error('The name parameter must be a string HTTP header name.'); + if (!this._closed) { + if (typeof name !== 'string') + throw new Error('The name parameter must be a string HTTP header name.'); - if (this._requestContext.knownHeaders) - throw new Error('Response headers cannot be modified after they have been sent to the client.'); + if (this._requestContext.knownHeaders) + throw new Error('Response headers cannot be modified after they have been sent to the client.'); - return delete this._requestContext.headers[name.toLowerCase()]; + return delete this._requestContext.headers[name.toLowerCase()]; + } else { + debug("removeHeader() ignored as socket closed"); + } }; Socket.prototype._queue_body_chunk = function (chunk, encoding, isEnd) { - this._ensureOpened(); - - if (this._requestContext.isLastChunk) - throw new Error('No more response data can be written after the end method had been called.'); - - if (!Buffer.isBuffer(chunk)) { - if (typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding || 'utf8'); - } - else if (chunk === null && isEnd !== true) { - throw new Error('Chunk must be a string or a Buffer.'); + debug("queue body chunk isEnd '" + (isEnd || 'false') + "'"); + if (!this._closed) { + if (this._requestContext.isLastChunk) { + debug("no more response data can be written after the end method had been called"); + throw new Error('No more response data can be written after the end method had been called.'); } - } - if (!this._requestContext.chunks) - this._requestContext.chunks = []; + if (!Buffer.isBuffer(chunk)) { + if (typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding || 'utf8'); + } + else if (chunk === null && isEnd !== true) { + throw new Error('Chunk must be a string or a Buffer.'); + } + } - if (chunk) { - if (this._requestContext.chunkResponse) - this._requestContext.chunks.push( - new Buffer(chunk.length.toString(16) + '\x0d\x0a'), - chunk, - crlf); - else - this._requestContext.chunks.push(chunk); - } + if (!this._requestContext.chunks) + this._requestContext.chunks = []; + + if (chunk) { + if (this._requestContext.chunkResponse) + this._requestContext.chunks.push( + new Buffer(chunk.length.toString(16) + '\x0d\x0a'), + chunk, + crlf); + else + this._requestContext.chunks.push(chunk); + } - if (isEnd) { - this._requestContext.isLastChunk = true; - if (this._requestContext.chunkResponse) - this._requestContext.chunks.push(lastChunk); + if (isEnd) { + this._requestContext.isLastChunk = true; + if (this._requestContext.chunkResponse) + this._requestContext.chunks.push(lastChunk); + } + } else { + debug("queue body chunk ignored as socket closed"); } }; Socket.prototype._on_written = function () { + debug("write complete"); if (this._requestContext.drainEventPending && !this._requestContext.chunks) { delete this._requestContext.drainEventPending; if (!this._closed) { + debug("emitting drain"); this.emit('drain'); + if (this._wsDrain) { + this._wsDrain(); + this._wsDrain = null; + } } } - if (!this._closed && this._requestContext.chunks) - this._initiate_send_next(); -}; - -Socket.prototype._initiate_send_next = function () { - this._ensureOpened(); + if (!this._closed && this._requestContext.chunks) { + // fix #40: httpsys native module has a problem in processing empty list of chunks, + // which happens when stream gets to an end, and .write(null, null, true) + // is issued to indicate it. The problem has to do with callback recursion, + // and so we get out of it by scheduling _initiate_send_next() to occur on + // next nodejs event-loop iteration. - if (this._requestContext.asyncPending('res')) { - // Another response async operation is pending. - // Postpone send until entire request had been read and no async operations are pending. + if (!this._requestContext.chunks.length) { + process.nextTick(this._initiate_send_next.bind(this)); + } else { + this._initiate_send_next(); + } + } - if (this._requestContext.chunks) { - // There is a chunk of the body to be sent, but it cannot be sent synchronously. - // The 'drain' event must therefore be emitted once the chunk is sent in the future. +}; - this._requestContext.drainEventPending = true; +Socket.prototype._initiate_send_next = function () { + debug("initiate sending next response"); + if (!this._closed) { + if (this._requestContext.asyncPending('res')) { + debug("response async pending, wait for write to complete before sending next"); + // Another response async operation is pending. + // Postpone send until entire request had been read and no async operations are pending. + if (this._requestContext.chunks) { + debug("we have request context chucks, setting drainEventPending"); + // There is a chunk of the body to be sent, but it cannot be sent synchronously. + // The 'drain' event must therefore be emitted once the chunk is sent in the future. + this._requestContext.drainEventPending = true; + } + return false; } - return false; - } + if (this._requestContext.knownHeaders && !this._requestContext.headersWritten) { + // Initiate sending HTTP response headers and body, if any. + debug("writing headers"); - if (this._requestContext.knownHeaders && !this._requestContext.headersWritten) { - // Initiate sending HTTP response headers and body, if any. + this._requestContext.headersWritten = true; - this._requestContext.headersWritten = true; + try { + this._requestContext.asyncPending('res', httpsys.httpsys_write_headers(this._requestContext)); + } + catch (e) { + this._error('res', e, "httpsys_write_headers has failed"); + } - try { - this._requestContext.asyncPending('res', httpsys.httpsys_write_headers(this._requestContext)); - } - catch (e) { - this._error('res', e); - } + if (!this._requestContext.asyncPending('res') && !this._requestContext.disconnect) { + // Synchronous completion + this._on_written(); + } - if (!this._requestContext.asyncPending('res') && !this._requestContext.disconnect) { - // Synchronous completion - this._on_written(); + return true; } + else if (this._requestContext.chunks) { + // Initiate sending HTTP response body. + debug("writing body"); - return true; - } - else if (this._requestContext.chunks) { - // Initiate sending HTTP response body. + try { + this._requestContext.asyncPending('res', httpsys.httpsys_write_body(this._requestContext)); + } + catch (e) { + this._error('res', e, "httpsys_write_body has failed"); + } - try { - this._requestContext.asyncPending('res', httpsys.httpsys_write_body(this._requestContext)); - } - catch (e) { - this._error('res', e); - } - - if (!this._requestContext.asyncPending('res') && !this._requestContext.disconnect) { - // Synchronous completion - this._on_written(); - } + if (!this._requestContext.asyncPending('res') && !this._requestContext.disconnect) { + // Synchronous completion + this._on_written(); + } - return true; + return true; + } + } else { + debug("cannot send next response as socket closed"); } - return false; }; Socket.prototype.pause = function () { - this._ensureOpened(); - - this._paused = true; + debug("pausing flow"); + if (!this._closed) { + this._paused = true; + } else { + debug("ignore pause as socket closed"); + } }; Socket.prototype.resume = function () { - this._ensureOpened(); - - if (this._paused) { - if (!this._requestContext.asyncPending('req')) { - httpsys.httpsys_resume(this._requestContext); + debug("resuming flow"); + if (!this._closed) { + if (this._paused) { + if (!this._requestContext.asyncPending('req')) { + httpsys.httpsys_resume(this._requestContext); + } + delete this._paused; } - - delete this._paused; + } else { + debug("ignored resume as socket closed"); } }; @@ -432,6 +544,7 @@ Socket.prototype.setEncoding = function (encoding) { }; Socket.prototype._on_request_body = function (args) { + debug("response body requested"); if (!this._closed) { if (this._requestContext.responseStarted) { // If response was started by the application asynchronously (e.g from @@ -446,10 +559,13 @@ Socket.prototype._on_request_body = function (args) { else { this.emit('data', args.data.toString(this._encoding)); } + } else { + debug("response body request ignored as socket closed"); } }; Socket.prototype._on_end_request = function () { + debug("end response requested"); if (!this._closed) { if (!this._requestContext.responseStarted) { // Only emit the 'end' event if no response was started by the application @@ -458,15 +574,16 @@ Socket.prototype._on_end_request = function () { this.emit('end'); } - // Signal the response to start sending cached response content if any // had been accumulated while the response was being received. - this._initiate_send_next(); + } else { + debug("end response request ignored as socket closed"); } }; Socket.prototype.setTimeout = function (timeout, callback) { + debug("setTimeout called, timeout '" + timeout + "'"); // TODO: implement full Socket.setTimeout semantics // http://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback @@ -476,12 +593,17 @@ Socket.prototype.setTimeout = function (timeout, callback) { }; Socket.prototype.setNoDelay = function (noDelay) { + debug("setNoDelay called, noDelay '" + noDelay + "'"); this._requestContext.noDelay = typeof noDelay === 'boolean' ? noDelay : true; }; -Socket.prototype._error = function (source, error) { +Socket.prototype._error = function (source, error, msg) { + debug("error called, typeof error '" + typeof error + "'"); + debug("error:" + source + ":" + error + ":" + msg); this._requestContext.asyncPending(source, false); if (!this._closed && !this._closing) { + this._closeError = error; + debug("socket closing.."); this._closing = true; try { // Ensure that all native resources are released. @@ -491,21 +613,16 @@ Socket.prototype._error = function (source, error) { catch (e) { // Ignore. } - this._closed = true; - this._closeError = error; - this.emit('error', error); + debug("emitting error"); + this.emit('error', new Error(msg + " " + error)); + debug("emitting close"); this.emit('close', true); } }; -Socket.prototype._ensureOpened = function () { - if (this._closed) { - throw new Error('Socket is closed.') - } -}; - Socket.prototype.destroy = function () { + debug("destory called"); if (!this._closed) { // Destroying a socket is implemented by calling HTTP.SYS APIs with @@ -523,16 +640,29 @@ Socket.prototype.destroy = function () { this._requestContext.disconnect = true; if (!this._requestContext.isLastChunk) { - // Only call end if it was not called before - this.end(); + // Only call end if it was not called before, + // JPW: ********************* + // if the socket has been closed with a 1229 error code, the native resources + // will have been freed so we need to prevent further writes in this screnaio. + // ************************** + if (this._closeError !== ERROR_CONNECTION_INVALID) { + debug("connect still valid, calling end..."); + //only write if connection is still valid + this.end(); + } else { + debug("socket connection invalid, do not respond with end..."); + } } if (!this._closed && !this.closing) { // this._closed can be true if the end() completed synchronously // this._closing is true if the socket._error was called and the socket is being destroyed + debug("emit close..."); this._closed = true; this.emit('close', false); } + } else { + debug("destory ignored as socket already closed"); } }; From 474632f8532f4bc59083e6352eb0c32def7612a1 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:45:24 +0000 Subject: [PATCH 08/29] Update to support node v8, v9 and v10. --- lib/httpsys.js | 128 +------------------------------------------------ 1 file changed, 1 insertion(+), 127 deletions(-) diff --git a/lib/httpsys.js b/lib/httpsys.js index f294c8c..e99c10c 100644 --- a/lib/httpsys.js +++ b/lib/httpsys.js @@ -1,127 +1 @@ -// Get a reference to Node's internal NativeModule, courtesy of Brandon Benvie: -// https://github.com/Benvie/Node.js-Ultra-REPL/blob/master/lib/ScopedModule.js -// The reference is then used in the *.slipstream methods to replace built-in -// HTTP and HTTPS modules with the HTTP.SYS one. - -var NativeModule; -(function (){ - process.moduleLoadList.push = function() { - // NativeModule.require('native_module') returns NativeModule - NativeModule = arguments.callee.caller('native_module'); - - // Delete the interceptor and re-expose normal functionality - delete process.moduleLoadList.push; - - return Array.prototype.push.apply(process.moduleLoadList, arguments); - }; - - // Force one module resolution to enter the push method above - require('vm'); -})(); - -var version = require('../package.json').version - , httpsys = require('./httpsys_native') - , HttpServer = require('./HttpServer') - , HttpsServer = require('./HttpsServer') - , Server = require('./Server') - , ServerRequest = require('./ServerRequest') - , ServerResponse = require('./ServerResponse') - , util = require('util'); - -httpsys.httpsys_init({ - initialBufferSize: (+process.env.HTTPSYS_BUFFER_SIZE) || 4096, - requestQueueLength: (+process.env.HTTPSYS_REQUEST_QUEUE_LENGTH) || 5000, - pendingReadCount: (+process.env.HTTPSYS_PENDING_READ_COUNT) || 1, - cacheDuration: isNaN(process.env.HTTPSYS_CACHE_DURATION) ? -1 : (+process.env.HTTPSYS_CACHE_DURATION), - callback: Server._dispatch -}); - -function addClientStack(target, source) { - [ 'STATUS_CODES', - 'IncomingMessage', - 'OutgoingMessage', - 'Agent', - 'globalAgent', - 'ClientRequest', - 'request', - 'get', - 'Client', - 'createClient' - ].forEach(function (api) { - if (source[api]) - target[api] = source[api]; - }); -} - -var http; -var https; - -exports.http = function () { - if (!http) { - http = { - Server: HttpServer, - ServerRequest: ServerRequest, - ServerResponse: ServerResponse, - createServer: function (requestListener) { - var server = new HttpServer(); - if (requestListener) { - server.on('request', requestListener) - } - - return server; - }, - httpsys_version: version - }; - - addClientStack(http, require('http')); - } - - return http; -}; - -exports.https = function () { - if (!https) { - https = { - Server: HttpsServer, - createServer: function (options, requestListener) { - - // `options` are ignored for API compatibility - // Keys and certificates in HTTP.SYS - // are configured with `netsh http add sslcert`. - - var server = new HttpsServer(); - if (requestListener) { - server.on('request', requestListener) - } - - return server; - }, - httpsys_version: version - }; - - addClientStack(https, require('https')); - } - - return https; -} - -exports.http.slipstream = function() { - // Make sure original HTTP module is loaded into native module cache - require('http'); - - // Replace the HTTP module implementation in the native module cache with HTTP.SYS - NativeModule._cache.http.exports = exports.http(); -}; - -exports.https.slipstream = function() { - // Make sure original HTTPS module is loaded into native module cache - require('https'); - - // Replace the HTTPS module implementation in the native module cache with HTTP.SYS - NativeModule._cache.https.exports = exports.https(); -}; - -exports.slipstream = function () { - exports.http.slipstream(); - exports.https.slipstream(); -}; +// moved to ../index.js From fedf7de8a51790a27dffbacdd94c3b09ff296cc1 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:58:57 +0000 Subject: [PATCH 09/29] Update binary --- lib/native/win32/ia32/10.13.0/httpsys.node | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/native/win32/ia32/10.13.0/httpsys.node diff --git a/lib/native/win32/ia32/10.13.0/httpsys.node b/lib/native/win32/ia32/10.13.0/httpsys.node new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/native/win32/ia32/10.13.0/httpsys.node @@ -0,0 +1 @@ + From cbfab7061b048c0725e0e3c5071285737dd9a0d6 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 13:59:29 +0000 Subject: [PATCH 10/29] Update binary --- lib/native/win32/ia32/10.13.0/httpsys.node | Bin 1 -> 172544 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/win32/ia32/10.13.0/httpsys.node b/lib/native/win32/ia32/10.13.0/httpsys.node index 8b137891791fe96927ad78e64b0aad7bded08bdc..db85d916d598903ec22a3535effa213d11577f26 100644 GIT binary patch literal 172544 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 Date: Wed, 14 Nov 2018 14:00:31 +0000 Subject: [PATCH 11/29] Update binary --- lib/native/win32/ia32/9.9.0/httpsys.node | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/native/win32/ia32/9.9.0/httpsys.node diff --git a/lib/native/win32/ia32/9.9.0/httpsys.node b/lib/native/win32/ia32/9.9.0/httpsys.node new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/native/win32/ia32/9.9.0/httpsys.node @@ -0,0 +1 @@ + From bd2b94f0593f41593854b3ac3cb3a302f2dddf38 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:00:54 +0000 Subject: [PATCH 12/29] Update binary --- lib/native/win32/ia32/9.9.0/httpsys.node | Bin 1 -> 172544 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/win32/ia32/9.9.0/httpsys.node b/lib/native/win32/ia32/9.9.0/httpsys.node index 8b137891791fe96927ad78e64b0aad7bded08bdc..8ec5fc6f20f564432ea966d40a5f9136cbb37834 100644 GIT binary patch literal 172544 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 wX5TVc#F*0t<~4rf7=Bx+efW?WIqh|Y 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 literal 1 Icmd-A000XB3jhEB From 64ac9a68cf4c99b88ed46652111ac47ae982f9ed Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:01:33 +0000 Subject: [PATCH 13/29] Update binary --- lib/native/win32/ia32/8.9.4/httpsys.node | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/native/win32/ia32/8.9.4/httpsys.node diff --git a/lib/native/win32/ia32/8.9.4/httpsys.node b/lib/native/win32/ia32/8.9.4/httpsys.node new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/native/win32/ia32/8.9.4/httpsys.node @@ -0,0 +1 @@ + From 3a3a8c79639c1fdb28da1b23d59ae3700a0b9501 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:02:09 +0000 Subject: [PATCH 14/29] Update binary --- lib/native/win32/x64/8.9.4/httpsys.node | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/native/win32/x64/8.9.4/httpsys.node diff --git a/lib/native/win32/x64/8.9.4/httpsys.node b/lib/native/win32/x64/8.9.4/httpsys.node new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/native/win32/x64/8.9.4/httpsys.node @@ -0,0 +1 @@ + From 9b6e8d9123cced83b12d30f9395499d45b328b78 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:02:35 +0000 Subject: [PATCH 15/29] Update binary --- lib/native/win32/x64/9.9.0/httpsys.node | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/native/win32/x64/9.9.0/httpsys.node diff --git a/lib/native/win32/x64/9.9.0/httpsys.node b/lib/native/win32/x64/9.9.0/httpsys.node new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/native/win32/x64/9.9.0/httpsys.node @@ -0,0 +1 @@ + From f3c3a22787446e83b428d303b2dfac38b30a12d9 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:03:12 +0000 Subject: [PATCH 16/29] update binary --- lib/native/win32/x64/10.13.0/httpsys.node | 1 + 1 file changed, 1 insertion(+) create mode 100644 lib/native/win32/x64/10.13.0/httpsys.node diff --git a/lib/native/win32/x64/10.13.0/httpsys.node b/lib/native/win32/x64/10.13.0/httpsys.node new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lib/native/win32/x64/10.13.0/httpsys.node @@ -0,0 +1 @@ + From 86f5333e7dec7ddf7736a6c8367affce86d0767c Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:03:34 +0000 Subject: [PATCH 17/29] Update binary --- lib/native/win32/x64/8.9.4/httpsys.node | Bin 1 -> 200704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/win32/x64/8.9.4/httpsys.node b/lib/native/win32/x64/8.9.4/httpsys.node index 8b137891791fe96927ad78e64b0aad7bded08bdc..8afb5dc483ab2dc9e981e1156c174eef757dcf5a 100644 GIT binary patch literal 200704 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 G^Z9>VIdEwJ literal 1 Icmd-A000XB3jhEB From 99c96a90d25a4e36ada3c7e2e06ff5422cd3f4e8 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:04:09 +0000 Subject: [PATCH 18/29] Update binary --- lib/native/win32/x64/9.9.0/httpsys.node | Bin 1 -> 199168 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/win32/x64/9.9.0/httpsys.node b/lib/native/win32/x64/9.9.0/httpsys.node index 8b137891791fe96927ad78e64b0aad7bded08bdc..16c7e9d51ece356ca8bc84b6c64613dfe906150a 100644 GIT binary patch literal 199168 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 literal 1 Icmd-A000XB3jhEB From c1912e71e3305d42ef5f4c88486cf282436d3969 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:04:41 +0000 Subject: [PATCH 19/29] Update binary --- lib/native/win32/x64/10.13.0/httpsys.node | Bin 1 -> 199168 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/win32/x64/10.13.0/httpsys.node b/lib/native/win32/x64/10.13.0/httpsys.node index 8b137891791fe96927ad78e64b0aad7bded08bdc..8abadcaf216d7cd2f12dbeb4e8365917519e5c47 100644 GIT binary patch literal 199168 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 RJah;j9l=X!%HPcAKLIXeFI@lt literal 1 Icmd-A000XB3jhEB From 76222bb27ea9fc0231570fd30ff3cb48f3758ea3 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:07:33 +0000 Subject: [PATCH 20/29] Update to support node v8, v9 and v10 --- src/httpsys.cc | 3354 ++++++++++++++++++++++++++---------------------- 1 file changed, 1793 insertions(+), 1561 deletions(-) diff --git a/src/httpsys.cc b/src/httpsys.cc index ed77183..61878f1 100644 --- a/src/httpsys.cc +++ b/src/httpsys.cc @@ -1,1716 +1,1948 @@ #include "httpsys.h" - -/* -Design notes: -- Only one async operation per regular HTTP request should be outstanding at a time. JavaScript - must ensure not to initiate another async operation (e.g. httpsys_write_body) before - the ongoing one completes. This implies JavaScript must manage a state machine around a request - and buffer certain calls from user code (e.g. writing multiple chunks of response body before - previous write completes) -- Only up to two async operations per upgraded HTTP request should be outstanding at the time: one for reading - of the requst, and one for writing of the response. The native module supports separate event pumps for - the request and response of upgraded request. -- Native resources are released by native code if async operation completes with error. -- If JavaScript encounters an error it must explicitly request native resources to be released. - In particular there is no exception contract between JavaScript callback and native code. -- JavaScript cannot make any additional calls into native in the context of a particular request - after it has been called with an error event type; at that time all native resources had already - been cleaned up. -- The Socket underlying the HTTP request and response implements the allowHalfOpen=true semantics using - HTTP.SYS APIs, which is the Node.js behavior. This allows responses to be sent after the request has finished - and requests to be received after the response has finished. Native resources are only freed when both ends - of the connection are closed. -*/ +#include using namespace v8; -int initialBufferSize; -ULONG requestQueueLength; -int pendingReadCount; -Persistent callback; -Persistent bufferConstructor; -HTTP_CACHE_POLICY cachePolicy; -ULONG defaultCacheDuration; -Persistent httpsysObject; -RtlTimeToSecondsSince1970Func RtlTimeToSecondsSince1970Impl; -BOOL httpsys_export_client_cert; +#pragma comment(lib, "ws2_32.lib") + + /* + Design notes: + - Only one async operation per regular HTTP request should be outstanding at a time. JavaScript + must ensure not to initiate another async operation (e.g. httpsys_write_body) before + the ongoing one completes. This implies JavaScript must manage a state machine around a request + and buffer certain calls from user code (e.g. writing multiple chunks of response body before + previous write completes) + - Only up to two async operations per upgraded HTTP request should be outstanding at the time: one for reading + of the requst, and one for writing of the response. The native module supports separate event pumps for + the request and response of upgraded request. + - Native resources are released by native code if async operation completes with error. + - If JavaScript encounters an error it must explicitly request native resources to be released. + In particular there is no exception contract between JavaScript callback and native code. + - JavaScript cannot make any additional calls into native in the context of a particular request + after it has been called with an error event type; at that time all native resources had already + been cleaned up. + - The Socket underlying the HTTP request and response implements the allowHalfOpen=true semantics using + HTTP.SYS APIs, which is the Node.js behavior. This allows responses to be sent after the request has finished + and requests to be received after the response has finished. Native resources are only freed when both ends + of the connection are closed. + */ + +BOOL debugOut; +char logBuf[1024]; +int initialBufferSize; +ULONG requestQueueLength; +int pendingReadCount; + +Nan::Callback *callback; +Nan::Persistent bufferConstructor; + +HTTP_CACHE_POLICY cachePolicy; +ULONG defaultCacheDuration; +Nan::Persistent httpsysObject; +RtlTimeToSecondsSince1970Func RtlTimeToSecondsSince1970Impl; +BOOL httpsys_export_client_cert; // Global V8 strings reused across requests -Handle v8uv_httpsys_server; -Handle v8method; -Handle v8req; -Handle v8httpHeaders; -Handle v8httpVersionMajor; -Handle v8httpVersionMinor; -Handle v8eventType; -Handle v8code; -Handle v8url; -Handle v8uv_httpsys; -Handle v8data; -Handle v8statusCode; -Handle v8reason; -Handle v8knownHeaders; -Handle v8unknownHeaders; -Handle v8isLastChunk; -Handle v8chunks; -Handle v8id; -Handle v8value; -Handle v8cacheDuration; -Handle v8disconnect; -Handle v8noDelay; -Handle v8clientCertInfo; -Handle v8cert; -Handle v8authorizationError; -Handle v8subject; -Handle v8issuer; -Handle v8validFrom; -Handle v8validTo; -Handle v8fingerprint; -Handle v8encoded; +Nan::Persistent v8uv_httpsys_server; +Nan::Persistent v8method; +Nan::Persistent v8req; +Nan::Persistent v8httpHeaders; +Nan::Persistent v8httpVersionMajor; +Nan::Persistent v8httpVersionMinor; +Nan::Persistent v8eventType; +Nan::Persistent v8code; +Nan::Persistent v8url; +Nan::Persistent v8uv_httpsys; +Nan::Persistent v8data; +Nan::Persistent v8statusCode; +Nan::Persistent v8reason; +Nan::Persistent v8knownHeaders; +Nan::Persistent v8unknownHeaders; +Nan::Persistent v8isLastChunk; +Nan::Persistent v8chunks; +Nan::Persistent v8id; +Nan::Persistent v8value; +Nan::Persistent v8cacheDuration; +Nan::Persistent v8disconnect; +Nan::Persistent v8noDelay; +Nan::Persistent v8clientCertInfo; +Nan::Persistent v8cert; +Nan::Persistent v8authorizationError; +Nan::Persistent v8subject; +Nan::Persistent v8issuer; +Nan::Persistent v8validFrom; +Nan::Persistent v8validTo; +Nan::Persistent v8fingerprint; +Nan::Persistent v8encoded; +Nan::Persistent v8remoteAddress; // Maps HTTP_HEADER_ID enum to v8 string // http://msdn.microsoft.com/en-us/library/windows/desktop/aa364526(v=vs.85).aspx -Handle v8httpRequestHeaderNames[HttpHeaderRequestMaximum]; + +Nan::Persistent v8httpRequestHeaderNames[HttpHeaderRequestMaximum]; + char* requestHeaders[] = { - "cache-control", - "connection", - "date", - "keep-alive", - "pragma", - "trailer", - "transfer-encoding", - "upgrade", - "via", - "warning", - "alive", - "content-length", - "content-type", - "content-encoding", - "content-language", - "content-location", - "content-md5", - "content-range", - "expires", - "last-modified", - "accept", - "accept-charset", - "accept-encoding", - "accept-language", - "authorization", - "cookie", - "expect", - "from", - "host", - "if-match", - "if-modified-since", - "if-none-match", - "if-range", - "if-unmodified-since", - "max-forwards", - "proxy-authorization", - "referer", - "range", - "te", - "translate", - "user-agent" + "cache-control", + "connection", + "date", + "keep-alive", + "pragma", + "trailer", + "transfer-encoding", + "upgrade", + "via", + "warning", + "alive", + "content-length", + "content-type", + "content-encoding", + "content-language", + "content-location", + "content-md5", + "content-range", + "expires", + "last-modified", + "accept", + "accept-charset", + "accept-encoding", + "accept-language", + "authorization", + "cookie", + "expect", + "from", + "host", + "if-match", + "if-modified-since", + "if-none-match", + "if-range", + "if-unmodified-since", + "max-forwards", + "proxy-authorization", + "referer", + "range", + "te", + "translate", + "user-agent" }; // Maps HTTP_VERB enum to V8 string // http://msdn.microsoft.com/en-us/library/windows/desktop/aa364664(v=vs.85).aspx -Handle v8verbs[HttpVerbMaximum]; + +Nan::Persistent v8verbs[HttpVerbMaximum]; + char* verbs[] = { - NULL, - NULL, - NULL, - "OPTIONS", - "GET", - "HEAD", - "POST", - "PUT", - "DELETE", - "TRACE", - "CONNECT", - "TRACK", - "MOVE", - "COPY", - "PROPFIND", - "PROPPATCH", - "MKCOL", - "LOCK", - "UNLOCK", - "SEARCH" + NULL, + NULL, + NULL, + "OPTIONS", + "GET", + "HEAD", + "POST", + "PUT", + "DELETE", + "TRACE", + "CONNECT", + "TRACK", + "MOVE", + "COPY", + "PROPFIND", + "PROPPATCH", + "MKCOL", + "LOCK", + "UNLOCK", + "SEARCH" }; -// Processing common to all callbacks from HTTP.SYS: -// - map the uv_async_t handle to uv_httpsys_t -// - clean up uv_async indicate completion of async operation -#define HTTPSYS_CALLBACK_PREAMBLE \ - HandleScope handleScope; \ - uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)handle->data; \ - NTSTATUS overlappedResult = (NTSTATUS)uv_httpsys->uv_async->async_req.overlapped.Internal; \ - ULONG overlappedLength = (ULONG)uv_httpsys->uv_async->async_req.overlapped.InternalHigh; \ - httpsys_uv_httpsys_close(uv_httpsys); \ - PHTTP_REQUEST request = (PHTTP_REQUEST)uv_httpsys->buffer; - // Processing common to most exported methods: // - declare handle scope and hr // - extract uv_httpsys_t from the internal field of the object passed as the first parameter +//uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)Handle::Cast(args[0])->GetPointerFromInternalField(0); + #define HTTPSYS_EXPORT_PREAMBLE \ - HandleScope handleScope; \ HRESULT hr; \ - uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)Handle::Cast(args[0])->GetPointerFromInternalField(0); + Handle o = Handle::Cast(info[0]); \ + uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)Nan::GetInternalFieldPointer(o, 0); HRESULT httpsys_uv_httpsys_init(uv_httpsys_t* uv_httpsys, uv_async_cb callback) { - HRESULT hr; - - ErrorIf(NULL != uv_httpsys->uv_async, E_FAIL); - ErrorIf(NULL == (uv_httpsys->uv_async = new uv_async_t), ERROR_NOT_ENOUGH_MEMORY); - RtlZeroMemory(uv_httpsys->uv_async, sizeof(uv_async_t)); - CheckError(uv_async_init(uv_default_loop(), uv_httpsys->uv_async, callback)); - uv_httpsys->uv_async->data = uv_httpsys; - uv_httpsys->uv_httpsys_server->refCount++; + HRESULT hr; - return S_OK; + ErrorIf(NULL != uv_httpsys->uv_async, E_FAIL); + ErrorIf(NULL == (uv_httpsys->uv_async = new uv_async_t), ERROR_NOT_ENOUGH_MEMORY); + RtlZeroMemory(uv_httpsys->uv_async, sizeof(uv_async_t)); + CheckError(uv_async_init(uv_default_loop(), uv_httpsys->uv_async, callback)); + uv_httpsys->uv_async->data = uv_httpsys; + uv_httpsys->uv_httpsys_server->refCount++; + Log("uv_async_init '%p', uv_httpsys_server->refCount '%d'\n", uv_httpsys->uv_async, uv_httpsys->uv_httpsys_server->refCount); + return S_OK; Error: - - return hr; + Log("uv_async_init FAILED as uv_httpsys->uv_async not null\n"); + return hr; } void httpsys_close_uv_async_cb(uv_handle_t* uv_handle) { - delete uv_handle; + Log("httpsys_close_uv_async_cb called '%p'\n", uv_handle); + delete uv_handle; } HRESULT httpsys_uv_httpsys_close(uv_httpsys_t* uv_httpsys) { - HRESULT hr; + HRESULT hr; - ErrorIf(NULL == uv_httpsys->uv_async, E_FAIL); - uv_close((uv_handle_t*)uv_httpsys->uv_async, httpsys_close_uv_async_cb); - uv_httpsys->uv_async = NULL; - uv_httpsys->uv_httpsys_server->refCount--; + Log("entered httpsys_uv_httpsys_close for request id '%I64u, uv_async '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys->uv_async); + ErrorIf(NULL == uv_httpsys->uv_async, E_FAIL); + Log("calling uv_close"); + uv_close((uv_handle_t*)uv_httpsys->uv_async, httpsys_close_uv_async_cb); + uv_httpsys->uv_async = NULL; + uv_httpsys->uv_httpsys_server->refCount--; + Log("uv_async cleared and uv_httpsys_server->refCount '%d'\n", uv_httpsys->uv_httpsys_server->refCount); - return S_OK; + return S_OK; Error: - - return hr; + Log("httpsys_uv_httpsys_close failed as uv_async already null\n"); + return hr; } Handle httpsys_make_callback(Handle options) { - HandleScope handleScope; - Handle argv[] = { options }; - - TryCatch try_catch; + Nan::EscapableHandleScope handleScope; + Handle argv[] = { options }; - Handle result = callback->Call(Context::GetCurrent()->Global(), 1, argv); + Nan::TryCatch try_catch; - if (try_catch.HasCaught()) { - node::FatalException(try_catch); - } + Handle result; + Nan::Call(*callback, 1, argv).ToLocal(&result); - return handleScope.Close(result); + if (try_catch.HasCaught()) { + Nan::FatalException(try_catch); + } + return handleScope.Escape(result); } Handle httpsys_create_event(uv_httpsys_server_t* uv_httpsys_server, int eventType) { - HandleScope handleScope; - - uv_httpsys_server->event->Set(v8eventType, Integer::NewFromUnsigned(eventType)); - - return uv_httpsys_server->event; + Handle o = Nan::New(uv_httpsys_server->event); + o->Set(Nan::New(v8eventType), Nan::New(eventType)); + return Nan::New(uv_httpsys_server->event); } Handle httpsys_create_event(uv_httpsys_t* uv_httpsys, int eventType) { - HandleScope handleScope; - - uv_httpsys->event->Set(v8eventType, Integer::NewFromUnsigned(eventType)); - - return uv_httpsys->event; + Handle o = Nan::New(uv_httpsys->event); + o->Set(Nan::New(v8eventType), Nan::New(eventType)); + return Nan::New(uv_httpsys->event); } Handle httpsys_notify_error(uv_httpsys_server_t* uv_httpsys_server, uv_httpsys_event_type errorType, unsigned int code) { - HandleScope handleScope; - - Handle error = httpsys_create_event(uv_httpsys_server, errorType); - error->Set(v8code, Integer::NewFromUnsigned(code)); - - return handleScope.Close(httpsys_make_callback(error)); + Nan::EscapableHandleScope handleScope; + Log("_NOTIFY_ERROR: httpsys_server event type '%d', code '%d'\n", errorType, code); + Handle error = httpsys_create_event(uv_httpsys_server, errorType); + error->Set(Nan::New(v8code), Nan::New(code)); + return handleScope.Escape(httpsys_make_callback(error)); } Handle httpsys_notify_error(uv_httpsys_t* uv_httpsys, uv_httpsys_event_type errorType, unsigned int code) { - HandleScope handleScope; - - Handle error = httpsys_create_event(uv_httpsys, errorType); - error->Set(v8code, Integer::NewFromUnsigned(code)); - - return handleScope.Close(httpsys_make_callback(error)); + Nan::EscapableHandleScope handleScope; + Log("_NOTIFY_ERROR: httpsys event type '%d', code '%d'\n", errorType, code); + Handle error = httpsys_create_event(uv_httpsys, errorType); + error->Set(Nan::New(v8code), Nan::New(code)); + return handleScope.Escape(httpsys_make_callback(error)); } -void httpsys_new_request_callback(uv_async_t* handle, int status) +// get sockaddr, IPv4 or IPv6: +void *get_in_addr(struct sockaddr *sa) { - HTTPSYS_CALLBACK_PREAMBLE - BOOL isUpgrade = FALSE; - - // Copy the request ID assigned to the request by HTTP.SYS to uv_httpsys - // to start subsequent async operations related to this request - - uv_httpsys->requestId = request->RequestId; - - // Increase the count of new read requests to initialize to replace the one that just completed. - // Actual initialization will be done in the uv_prepare callback httpsys_prepare_new_requests - // associated with this server. - - uv_httpsys->uv_httpsys_server->readsToInitialize++; - - // Initialize the JavaScript representation of an event object that will be used - // to marshall data into JavaScript for the lifetime of this request. - - uv_httpsys->event = Persistent::New(httpsysObject->NewInstance()); - uv_httpsys->event->SetPointerInInternalField(0, (void*)uv_httpsys); - uv_httpsys->event->Set(v8uv_httpsys_server, uv_httpsys->uv_httpsys_server->event); - - // Process async completion + if (sa->sa_family == AF_INET) { + return &(((struct sockaddr_in*)sa)->sin_addr); + } + return &(((struct sockaddr_in6*)sa)->sin6_addr); +} - if (S_OK != overlappedResult) - { - // Async completion failed - notify JavaScript - - httpsys_notify_error( - uv_httpsys, - HTTPSYS_ERROR_NEW_REQUEST, - (unsigned int)overlappedResult); - - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - } - else - { - // New request received - notify JavaScript - - Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_NEW_REQUEST); - - // Create the 'req' object representing the request - - Handle req = Object::New(); - event->Set(v8req, req); - - // Add HTTP verb information - - if (HttpVerbUnknown == request->Verb) - { - req->Set(v8method, String::New(request->pUnknownVerb)); - } - else - { - req->Set(v8method, v8verbs[request->Verb]); - } - - // Add known HTTP header information - - Handle headers = Object::New(); - req->Set(v8httpHeaders, headers); - - for (int i = 0; i < HttpHeaderRequestMaximum; i++) - { - if (request->Headers.KnownHeaders[i].RawValueLength > 0) - { - if (7 == i) { - // This is an upgrade header indicatting a potential upgrade - - isUpgrade = TRUE; - } - - headers->Set(v8httpRequestHeaderNames[i], String::New( - request->Headers.KnownHeaders[i].pRawValue, - request->Headers.KnownHeaders[i].RawValueLength)); - } - } - - // Add custom HTTP header information - - for (int i = 0; i < request->Headers.UnknownHeaderCount; i++) - { - // Node expects header names in lowercase. - // In-place convert unknown header names to lowercase. - - for (int k = 0; k < request->Headers.pUnknownHeaders[i].NameLength; k++) { - ((PSTR)request->Headers.pUnknownHeaders[i].pName)[k] = - tolower(request->Headers.pUnknownHeaders[i].pName[k]); - } - - headers->Set( - String::New( - request->Headers.pUnknownHeaders[i].pName, - request->Headers.pUnknownHeaders[i].NameLength), - String::New( - request->Headers.pUnknownHeaders[i].pRawValue, - request->Headers.pUnknownHeaders[i].RawValueLength)); - } - - // TODO: process trailers - - // Add HTTP version information - - req->Set(v8httpVersionMajor, Integer::NewFromUnsigned(request->Version.MajorVersion)); - req->Set(v8httpVersionMinor, Integer::NewFromUnsigned(request->Version.MinorVersion)); - - // Add URL information - - req->Set(v8url, String::New(request->pRawUrl, request->RawUrlLength)); - - // Add client X.509 information - - if (NULL != request->pSslInfo && NULL != request->pSslInfo->pClientCertInfo) - { - req->Set( - v8clientCertInfo, - httpsys_create_client_cert_info(request->pSslInfo->pClientCertInfo)); - } - - // Invoke the JavaScript callback passing event as the only paramater - - Handle result = httpsys_make_callback(event); - if (result->IsBoolean() && result->BooleanValue()) - { - // If the callback response is 'true', proceed to process the request body. - // Otherwise request had been paused and will be resumed asynchronously from JavaScript - // with a call to httpsys_resume. - - if (0 == (request->Flags & HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS) && !isUpgrade) - { - // This is a body-less request. Notify JavaScript the request is finished. - // Note that for HTTP upgrade paths this flag appears not to be set. - - Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_END_REQUEST); - httpsys_make_callback(event); - } - else - { - // Start synchronous body reading loop. - - httpsys_read_request_body_loop(uv_httpsys); - } - } - } +void httpsys_new_request_callback(uv_async_t* handle) +{ + Nan::HandleScope handleScope; + uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)handle->data; + NTSTATUS overlappedResult = (NTSTATUS)uv_httpsys->uv_async->async_req.u.io.overlapped.Internal; + ULONG overlappedLength = (ULONG)uv_httpsys->uv_async->async_req.u.io.overlapped.InternalHigh; + PHTTP_REQUEST request = (PHTTP_REQUEST)uv_httpsys->buffer; + + Log("REQ: httpsys_new_request_callback, request id '%I64u', result 0x%08x, buffer size '%d', required '%d'\n", + request->RequestId, + overlappedResult, + uv_httpsys->bufferSize, + overlappedLength); + + httpsys_uv_httpsys_close(uv_httpsys); + + //if the async callback fails check for server shutting down. Actual value returned + //overlappedResult for shut down is STATUS_CANCELLED (0xc0000120). + if (S_OK != overlappedResult) + { + //are we shutting down? + if (uv_httpsys->uv_httpsys_server->closing = TRUE) + { + Log("server is closing down, abort processing new request\n"); + //free resources + Log("freeing uv_httpsys request id = '%I64u'\n", uv_httpsys->requestId); + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + return; + } + } + + //if the http request header is bigger then the available buffer, + //the async receive request will fail + if (S_OK == overlappedResult && request->pRawUrl != NULL) { + Log("REQ: received raw url '%s'\n", + request->pRawUrl); + } + + BOOL isUpgrade = FALSE; + + // Copy the request ID assigned to the request by HTTP.SYS to uv_httpsys + // to start subsequent async operations related to this request + + uv_httpsys->requestId = request->RequestId; + + // Increase the count of new read requests to initialize to replace the one that just completed. + // Actual initialization will be done in the uv_prepare callback httpsys_prepare_new_requests + // associated with this server. + + uv_httpsys->uv_httpsys_server->readsToInitialize++; + Log("REQ: incrementing readsToInitialize to ready next request, new value '%d'\n", + uv_httpsys->uv_httpsys_server->readsToInitialize); + + // Initialize the JavaScript representation of an event object that will be used + // to marshall data into JavaScript for the lifetime of this request. + Local tpl = Nan::New(httpsysObject); + Local o = tpl->NewInstance(); + uv_httpsys->event.Reset(o); + + Nan::SetInternalFieldPointer(o, 0, (void*)uv_httpsys); + o->Set(Nan::New(v8uv_httpsys_server), Nan::New(uv_httpsys->uv_httpsys_server->event)); + + // Process async completion + if (S_OK != overlappedResult) + { + // Async completion failed - notify JavaScript + Log("REQ: creating new request error\n"); + + //JPW ADDED + uv_httpsys->refCount++; + + httpsys_notify_error( + uv_httpsys, + HTTPSYS_ERROR_NEW_REQUEST, + (unsigned int)overlappedResult); + + uv_httpsys->refCount--; + if (uv_httpsys->refCount == 0) { + Log("REQ: freeing uv_httpsys request id = '%I64u'\n", uv_httpsys->requestId); + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + } + } + else + { + Log("REQ: building new request, request id = '%I64u'\n", uv_httpsys->requestId); + // New request received, build event to pass to JavaScript + Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_NEW_REQUEST); + + // Create the 'req' object representing the request + Handle req = Nan::New(); + event->Set(Nan::New(v8req), req); + + char remoteAddress[INET6_ADDRSTRLEN]; + memset(remoteAddress, 0, INET6_ADDRSTRLEN); + if (request->Address.pRemoteAddress != NULL) { + //extract remote connection ip + inet_ntop( + request->Address.pRemoteAddress->sa_family, + get_in_addr((struct sockaddr *)request->Address.pRemoteAddress), + remoteAddress, + sizeof remoteAddress); + } + req->Set(Nan::New(v8remoteAddress), Nan::New(remoteAddress).ToLocalChecked()); + + // Add HTTP verb information + if (HttpVerbUnknown == request->Verb) + { + req->Set(Nan::New(v8method), Nan::New(request->pUnknownVerb).ToLocalChecked()); + } + else + { + req->Set(Nan::New(v8method), Nan::New(v8verbs[request->Verb])); + } + + // Add known HTTP header information + Handle headers = Nan::New(); + req->Set(Nan::New(v8httpHeaders), headers); + + for (int i = 0; i < HttpHeaderRequestMaximum; i++) + { + if (request->Headers.KnownHeaders[i].RawValueLength > 0) + { + if (7 == i) { + // This is an upgrade header indicating a potential upgrade + Log("REQ: received an upgrade request"); + isUpgrade = TRUE; + } + + headers->Set(Nan::New(v8httpRequestHeaderNames[i]), Nan::New( + request->Headers.KnownHeaders[i].pRawValue, + request->Headers.KnownHeaders[i].RawValueLength).ToLocalChecked()); + } + } + + // Add custom HTTP header information + for (int i = 0; i < request->Headers.UnknownHeaderCount; i++) + { + // Node expects header names in lowercase. + // In-place convert unknown header names to lowercase. + + for (int k = 0; k < request->Headers.pUnknownHeaders[i].NameLength; k++) { + ((PSTR)request->Headers.pUnknownHeaders[i].pName)[k] = + tolower(request->Headers.pUnknownHeaders[i].pName[k]); + } + + headers->Set( + Nan::New( + request->Headers.pUnknownHeaders[i].pName, + request->Headers.pUnknownHeaders[i].NameLength).ToLocalChecked(), + Nan::New( + request->Headers.pUnknownHeaders[i].pRawValue, + request->Headers.pUnknownHeaders[i].RawValueLength).ToLocalChecked()); + } + + // TODO: process trailers + + // Add HTTP version information + + req->Set(Nan::New(v8httpVersionMajor), Nan::New(request->Version.MajorVersion)); + req->Set(Nan::New(v8httpVersionMinor), Nan::New(request->Version.MinorVersion)); + + // Add URL information + + req->Set(Nan::New(v8url), Nan::New(request->pRawUrl, request->RawUrlLength).ToLocalChecked()); + + // Add client X.509 information + + if (NULL != request->pSslInfo && NULL != request->pSslInfo->pClientCertInfo) + { + req->Set( + Nan::New(v8clientCertInfo), + httpsys_create_client_cert_info(request->pSslInfo->pClientCertInfo)); + } + + // Invoke the JavaScript callback passing event as the only paramater + Log("REQ: passing event to javascript request id = '%I64u', uv_httpsys = '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys); + Handle result = httpsys_make_callback(event); + Log("REQ: back from javascript uv_httpsys = '%p'\n", (void*)uv_httpsys); + + if (result->IsBoolean() && result->BooleanValue()) + { + Log("REQ: true returned from javascript, continue... checking for request body\n"); + // If the callback response is 'true', proceed to process the request body. + // Otherwise request had been paused and will be resumed asynchronously from JavaScript + // with a call to httpsys_resume. + + if (0 == (request->Flags & HTTP_REQUEST_FLAG_MORE_ENTITY_BODY_EXISTS) && !isUpgrade) + { + Log("REQ: body-less request, create END request and pass to javascript, request id = '%I64u', uv_httpsys = '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys); + // This is a body-less request. Notify JavaScript the request is finished. + // Note that for HTTP upgrade paths this flag appears not to be set. + + Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_END_REQUEST); + httpsys_make_callback(event); + Log("REQ: back from javascript uv_httpsys = '%p'\n", (void*)uv_httpsys); + } + else + { + // Start synchronous body reading loop. + Log("REQ: **Start synchronous body reading loop, isUpgrade = '%d'\n", isUpgrade); + httpsys_read_request_body_loop(uv_httpsys); + } + } + } + Log("REQ: exiting httpsys_new_request_callback\n"); } Handle httpsys_create_client_cert_info(PHTTP_SSL_CLIENT_CERT_INFO info) { - HandleScope scope; - - Handle certInfo = Object::New(); - - // Set the authentication result - - certInfo->Set(v8authorizationError, Number::New(info->CertFlags)); - - // Decode the certificate and create V8 representation - // http://msdn.microsoft.com/en-us/library/windows/desktop/aa381955(v=vs.85).aspx - - PCCERT_CONTEXT certContext = CertCreateCertificateContext( - X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, - info->pCertEncoded, - info->CertEncodedSize); - DWORD size; - char* str = NULL; - ULONG time; - - if (NULL != certContext) - { - Handle cert = Object::New(); - certInfo->Set(v8cert, cert); - - // Set the Subject's X500 name - - size = CertNameToStr( - X509_ASN_ENCODING, - &certContext->pCertInfo->Subject, - CERT_X500_NAME_STR, - NULL, - 0); - - if (size > 0 && (NULL != (str = (char*)malloc(size)))) - { - CertNameToStr( - X509_ASN_ENCODING, - &certContext->pCertInfo->Subject, - CERT_X500_NAME_STR, - str, - size); - - cert->Set(v8subject, String::New(str)); - free(str); - str = NULL; - } - - // Set the Issuer's X500 name - - size = CertNameToStr( - X509_ASN_ENCODING, - &certContext->pCertInfo->Issuer, - CERT_X500_NAME_STR, - NULL, - 0); - - if (size > 0 && (NULL != (str = (char*)malloc(size)))) - { - CertNameToStr( - X509_ASN_ENCODING, - &certContext->pCertInfo->Issuer, - CERT_X500_NAME_STR, - str, - size); - - cert->Set(v8issuer, String::New(str)); - free(str); - str = NULL; - } - - // Set the validity period - - if (RtlTimeToSecondsSince1970Impl) - { - RtlTimeToSecondsSince1970Impl( - (PLARGE_INTEGER)&certContext->pCertInfo->NotBefore, - &time); - cert->Set(v8validFrom, Number::New(time)); - - RtlTimeToSecondsSince1970Impl( - (PLARGE_INTEGER)&certContext->pCertInfo->NotAfter, - &time); - cert->Set(v8validTo, Number::New(time)); - } - - // Set the thumbprint - - size = 0; - if (CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, NULL, &size) - && (NULL != (str = (char*)malloc(size))) - && CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, str, &size)) - { - node::Buffer* slowBuffer = node::Buffer::New(size); - memcpy(node::Buffer::Data(slowBuffer), str, size); - Handle args[] = { slowBuffer->handle_, Integer::New(size), Integer::New(0) }; - Handle fastBuffer = bufferConstructor->NewInstance(3, args); - cert->Set(v8fingerprint, fastBuffer); - - free(str); - str = NULL; - } - - // If HTTPSYS_EXPORT_CLIENT_CERT environment variable is set, - // export the raw X.509 certificate presented by the client - - if (httpsys_export_client_cert) - { - node::Buffer* slowBuffer = node::Buffer::New(certContext->cbCertEncoded); - memcpy(node::Buffer::Data(slowBuffer), certContext->pbCertEncoded, certContext->cbCertEncoded); - Handle args[] = { slowBuffer->handle_, Integer::New(certContext->cbCertEncoded), Integer::New(0) }; - Handle fastBuffer = bufferConstructor->NewInstance(3, args); - cert->Set(v8encoded, fastBuffer); - } - - CertFreeCertificateContext(certContext); - } - - return scope.Close(certInfo); + char* slowBuffer; + Nan::EscapableHandleScope scope; + Handle certInfo = Nan::New(); + // Set the authentication result + certInfo->Set(Nan::New(v8authorizationError), Nan::New(info->CertFlags)); + // Decode the certificate and create V8 representation + // http://msdn.microsoft.com/en-us/library/windows/desktop/aa381955(v=vs.85).aspx + + PCCERT_CONTEXT certContext = CertCreateCertificateContext( + X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + info->pCertEncoded, + info->CertEncodedSize); + + DWORD size; + char* str = NULL; + ULONG time; + + if (NULL != certContext) + { + Handle cert = Nan::New(); + certInfo->Set(Nan::New(v8cert), cert); + // Set the Subject's X500 name + size = CertNameToStr( + X509_ASN_ENCODING, + &certContext->pCertInfo->Subject, + CERT_X500_NAME_STR, + NULL, + 0); + + if (size > 0 && (NULL != (str = (char*)malloc(size)))) + { + CertNameToStr( + X509_ASN_ENCODING, + &certContext->pCertInfo->Subject, + CERT_X500_NAME_STR, + str, + size); + + cert->Set(Nan::New(v8subject), Nan::New(str).ToLocalChecked()); + free(str); + str = NULL; + } + + // Set the Issuer's X500 name + + size = CertNameToStr( + X509_ASN_ENCODING, + &certContext->pCertInfo->Issuer, + CERT_X500_NAME_STR, + NULL, + 0); + + if (size > 0 && (NULL != (str = (char*)malloc(size)))) + { + CertNameToStr( + X509_ASN_ENCODING, + &certContext->pCertInfo->Issuer, + CERT_X500_NAME_STR, + str, + size); + + cert->Set(Nan::New(v8issuer), Nan::New(str).ToLocalChecked()); + free(str); + str = NULL; + } + + // Set the validity period + + if (RtlTimeToSecondsSince1970Impl) + { + RtlTimeToSecondsSince1970Impl( + (PLARGE_INTEGER)&certContext->pCertInfo->NotBefore, + &time); + + cert->Set(Nan::New(v8validFrom), Nan::New(time)); + + RtlTimeToSecondsSince1970Impl( + (PLARGE_INTEGER)&certContext->pCertInfo->NotAfter, + &time); + + cert->Set(Nan::New(v8validTo), Nan::New(time)); + } + + // Set the thumbprint + + size = 0; + if (CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, NULL, &size) + && (NULL != (str = (char*)malloc(size))) + && CertGetCertificateContextProperty(certContext, CERT_SHA1_HASH_PROP_ID, str, &size)) + { + if (NULL != (slowBuffer = (char*)malloc(size))) + { + memcpy(slowBuffer, (char*)str, size); + Handle args[] = { Nan::NewBuffer(slowBuffer,size).ToLocalChecked(), Nan::New(size), Nan::New(0) }; + Local cons = Nan::New(bufferConstructor); + Handle fastBuffer; + cons->NewInstance(Nan::GetCurrentContext(), 3, args).ToLocal(&fastBuffer); + cert->Set(Nan::New(v8fingerprint), fastBuffer); + free(str); + str = NULL; + } + else + { + Log("CertGetCertificateContextProperty: failed to allocate memory\n"); + } + } + + // If HTTPSYS_EXPORT_CLIENT_CERT environment variable is set, + // export the raw X.509 certificate presented by the client + if (httpsys_export_client_cert) + { + if (NULL != (slowBuffer = (char*)malloc(certContext->cbCertEncoded))) + { + memcpy(slowBuffer, (char*)certContext->pbCertEncoded, certContext->cbCertEncoded); + Handle args[] = { Nan::NewBuffer(slowBuffer, certContext->cbCertEncoded).ToLocalChecked(), Nan::New(certContext->cbCertEncoded), Nan::New(0) }; + Local cons = Nan::New(bufferConstructor); + Handle fastBuffer; + cons->NewInstance(Nan::GetCurrentContext(), 3, args).ToLocal(&fastBuffer); + cert->Set(Nan::New(v8encoded), fastBuffer); + } + else + { + Log("httpsys_export_client_cert: failed to allocate memory\n"); + } + } + CertFreeCertificateContext(certContext); + } + + return scope.Escape(certInfo); } HRESULT httpsys_initiate_new_request(uv_httpsys_t* uv_httpsys) { - HRESULT hr; - - // Create libuv async handle and initialize it - - CheckError(httpsys_uv_httpsys_init(uv_httpsys, httpsys_new_request_callback)); - - // Allocate initial buffer to receice the HTTP request - - uv_httpsys->bufferSize = initialBufferSize; - ErrorIf(NULL == (uv_httpsys->buffer = malloc(uv_httpsys->bufferSize)), ERROR_NOT_ENOUGH_MEMORY); - RtlZeroMemory(uv_httpsys->buffer, uv_httpsys->bufferSize); - - // Initiate async receive of a new request with HTTP.SYS, using the OVERLAPPED - // associated with the default libuv event loop. - - hr = HttpReceiveHttpRequest( - uv_httpsys->uv_httpsys_server->requestQueue, - HTTP_NULL_ID, - 0, - (PHTTP_REQUEST)uv_httpsys->buffer, - uv_httpsys->bufferSize, - NULL, - &uv_httpsys->uv_async->async_req.overlapped); - - if (NO_ERROR == hr) - { - // Synchronous completion. - - httpsys_new_request_callback(uv_httpsys->uv_async, 0); - } - else - { - ErrorIf(ERROR_IO_PENDING != hr, hr); - } - - return S_OK; + HRESULT hr; + + // Create libuv async handle and initialize it + Log("REQ: entered httpsys_initiate_new_request request id = '%I64u'\n", uv_httpsys->requestId); + + CheckError(httpsys_uv_httpsys_init(uv_httpsys, (uv_async_cb)httpsys_new_request_callback)); + + // Allocate initial buffer to receice the HTTP request + + uv_httpsys->bufferSize = initialBufferSize; + ErrorIf(NULL == (uv_httpsys->buffer = malloc(uv_httpsys->bufferSize)), ERROR_NOT_ENOUGH_MEMORY); + RtlZeroMemory(uv_httpsys->buffer, uv_httpsys->bufferSize); + + // Initiate async receive of a new request with HTTP.SYS, using the OVERLAPPED + // associated with the default libuv event loop. + + hr = HttpReceiveHttpRequest( + uv_httpsys->uv_httpsys_server->requestQueue, + HTTP_NULL_ID, + 0, + (PHTTP_REQUEST)uv_httpsys->buffer, + uv_httpsys->bufferSize, + NULL, + &uv_httpsys->uv_async->async_req.u.io.overlapped); + + Log("REQ: result from HttpReceiveHttpRequest '%d'\n", hr); + + if (NO_ERROR == hr) + { + // Synchronous completion. + Log("REQ: synchronous completion, calling httpsys_new_request_callback\n"); + httpsys_new_request_callback(uv_httpsys->uv_async); + } + else + { + ErrorIf(ERROR_IO_PENDING != hr, hr); + } + Log("REQ: exited httpsys_initiate_new_request\n"); + return S_OK; Error: - - return hr; + Log("REQ: httpsys_initiate_new_request has errored hr = '%d'\n", hr); + return hr; } void httpsys_free_chunks(uv_httpsys_t* uv_httpsys) { - if (uv_httpsys->chunk.FromMemory.pBuffer) - { - free(uv_httpsys->chunk.FromMemory.pBuffer); - RtlZeroMemory(&uv_httpsys->chunk, sizeof(uv_httpsys->chunk)); - } + Log("entered httpsys_free_chunks for request id '%I64u\n", uv_httpsys->requestId); + if (uv_httpsys->chunk.FromMemory.pBuffer) + { + free(uv_httpsys->chunk.FromMemory.pBuffer); + RtlZeroMemory(&uv_httpsys->chunk, sizeof(uv_httpsys->chunk)); + } } void httpsys_free(uv_httpsys_t* uv_httpsys, BOOL error) { - if (NULL != uv_httpsys) - { - // For upgraded requests, two uv_httpsys instances exist: one for request and the other for response. - // The last one to close cleans up shared resources as well as disposes of the peer. - - uv_httpsys->closed = TRUE; - - httpsys_free_chunks(uv_httpsys); - - if (!uv_httpsys->event.IsEmpty()) - { - uv_httpsys->event.Dispose(); - uv_httpsys->event.Clear(); - } - - if (uv_httpsys->response.pReason) - { - free((void*)uv_httpsys->response.pReason); - } - - for (int i = 0; i < HttpHeaderResponseMaximum; i++) - { - if (uv_httpsys->response.Headers.KnownHeaders[i].pRawValue) - { - free((void*)uv_httpsys->response.Headers.KnownHeaders[i].pRawValue); - } - } - - if (uv_httpsys->response.Headers.pUnknownHeaders) - { - for (int i = 0; i < uv_httpsys->response.Headers.UnknownHeaderCount; i++) - { - if (uv_httpsys->response.Headers.pUnknownHeaders[i].pName) - { - free((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pName); - } - - if (uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue) - { - free((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue); - } - } - - free(uv_httpsys->response.Headers.pUnknownHeaders); - } - - RtlZeroMemory(&uv_httpsys->response, sizeof (uv_httpsys->response)); - - if (uv_httpsys->uv_async) - { - httpsys_uv_httpsys_close(uv_httpsys); - } - - if (NULL != uv_httpsys->buffer) - { - free(uv_httpsys->buffer); - uv_httpsys->buffer = NULL; - } - - if (NULL != uv_httpsys->uv_httpsys_peer) { - - // The uv_httpsys structure is paired with another in the HTTP upgrade scenario to - // support concurrent reads and writes. Disposal logic: - // 1. During normal operation (no error) the second uv_httpsys to be freed disposes the pair. - // 2. If an error occurrs: - // 2.1. If there is an async operation pending against the second uv_httpsys, it is marked - // for disposal. The async completion callback will re-enter httpsys_free for the second - // uv_httpsys structure in order to finish the cleanup. - // 2.2. If there is no async operation pending against the second uv_httpsys, the pair - // is disposed immediately. - - if (uv_httpsys->uv_httpsys_peer->closed) { - // #1 - delete uv_httpsys->uv_httpsys_peer; - uv_httpsys->uv_httpsys_peer = NULL; - delete uv_httpsys; - uv_httpsys = NULL; - } - else if (error) { - if (uv_httpsys->uv_httpsys_peer->uv_async) { - // #2.1 - uv_httpsys->uv_httpsys_peer->disconnect = TRUE; - } - else { - // #2.2 - httpsys_free(uv_httpsys->uv_httpsys_peer, FALSE); - } - } - } - else { - - // The regular HTTP request scenario - single uv_httpsys instance. - - delete uv_httpsys; - uv_httpsys = NULL; - } - } + if (NULL != uv_httpsys) + { + Log("httpsys_free called request id ='%I64u', uv_httpsys = '%p', uv_httpsys_peer = '%p', refcount = '%d'\n", uv_httpsys->requestId, (void*)uv_httpsys, uv_httpsys->uv_httpsys_peer, uv_httpsys->refCount); + + // For upgraded requests, two uv_httpsys instances exist: one for request and the other for response. + // The last one to close cleans up shared resources as well as disposes of the peer. + uv_httpsys->closed = TRUE; + + Log("freeing chunks...\n"); + httpsys_free_chunks(uv_httpsys); + + if (!uv_httpsys->event.IsEmpty()) { + Log("freeing uv_httpsys->event...\n"); + uv_httpsys->event.Reset(); + } + + if (uv_httpsys->response.pReason) { + Log("freeing uv_httpsys->response.pReason...\n"); + free((void*)uv_httpsys->response.pReason); + } + + for (int i = 0; i < HttpHeaderResponseMaximum; i++) { + if (uv_httpsys->response.Headers.KnownHeaders[i].pRawValue) { + Log("freeing known header '%.*s'\n", + uv_httpsys->response.Headers.KnownHeaders[i].RawValueLength, + uv_httpsys->response.Headers.KnownHeaders[i].pRawValue); + + free((void*)uv_httpsys->response.Headers.KnownHeaders[i].pRawValue); + } + } + + if (uv_httpsys->response.Headers.pUnknownHeaders) { + for (int i = 0; i < uv_httpsys->response.Headers.UnknownHeaderCount; i++) { + if (uv_httpsys->response.Headers.pUnknownHeaders[i].pName) { + Log("freeing unknown header name '%.*s'\n", + uv_httpsys->response.Headers.pUnknownHeaders[i].NameLength, + uv_httpsys->response.Headers.pUnknownHeaders[i].pName); + + free((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pName); + } + if (uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue) { + Log("freeing unknown header value '%.*s'\n", + uv_httpsys->response.Headers.pUnknownHeaders[i].RawValueLength, + uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue); + + free((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue); + } + } + Log("freeing header memory '%p'\n", (void*)uv_httpsys->response.Headers.pUnknownHeaders); + free(uv_httpsys->response.Headers.pUnknownHeaders); + } + + RtlZeroMemory(&uv_httpsys->response, sizeof(uv_httpsys->response)); + + if (uv_httpsys->uv_async) { + Log("requesting close of uv_async '%p\n", (void*)uv_httpsys->uv_async); + httpsys_uv_httpsys_close(uv_httpsys); + } + + if (NULL != uv_httpsys->buffer) { + Log("freeing uv_httpsys->buffer '%p'\n", (void*)uv_httpsys->buffer); + free(uv_httpsys->buffer); + uv_httpsys->buffer = NULL; + } + + if (NULL != uv_httpsys->uv_httpsys_peer) { + Log("this is an upgraded connection, freeing...\n") + // The uv_httpsys structure is paired with another in the HTTP upgrade scenario to + // support concurrent reads and writes. Disposal logic: + // 1. During normal operation (no error) the second uv_httpsys to be freed disposes the pair. + // 2. If an error occurrs: + // 2.1. If there is an async operation pending against the second uv_httpsys, it is marked + // for disposal. The async completion callback will re-enter httpsys_free for the second + // uv_httpsys structure in order to finish the cleanup. + // 2.2. If there is no async operation pending against the second uv_httpsys, the pair + // is disposed immediately. + + if (uv_httpsys->uv_httpsys_peer->closed) { + // #1 + Log("scenario #1, (no error) the second uv_httpsys to be freed disposes the pair\n"); + delete uv_httpsys->uv_httpsys_peer; + uv_httpsys->uv_httpsys_peer = NULL; + delete uv_httpsys; + uv_httpsys = NULL; + } + else if (error) { + if (uv_httpsys->uv_httpsys_peer->uv_async) { + // #2.1 + Log("scenario #2.1, If there is an async operation pending against the second uv_httpsys, it is marked for disposal. The async completion callback will re-enter httpsys_free for the second uv_httpsys structure in order to finish the cleanup\n"); + uv_httpsys->uv_httpsys_peer->disconnect = TRUE; + } + else { + // #2.2 + Log("scenario #2.2, If there is no async operation pending against the second uv_httpsys, the pair is disposed immediately\n"); + httpsys_free(uv_httpsys->uv_httpsys_peer, FALSE); + } + } + } + else { + + // The regular HTTP request scenario - single uv_httpsys instance. + Log("regular http request scenario, delete uv_httpsys instance\n"); + delete uv_httpsys; + uv_httpsys = NULL; + } + } + else { + Log("httpsys_free ignored as uv_httpsys is already NULL, uv_httpsys = '%p'\n", (void*)uv_httpsys); + } } -void httpsys_read_request_body_callback(uv_async_t* handle, int status) +void httpsys_read_request_body_callback(uv_async_t* handle) { - HTTPSYS_CALLBACK_PREAMBLE - - // The "status" parameter is 0 if the callback is an async completion from libuv. - // Otherwise, the parameter is a uv_httpsys_t** that the callback is supposed to set to the - // uv_httpsys that just completed if reading of the body should continue synchronously - // (i.e. there is no error during the callback and the application does not pause the request), - // or to NULL if the body should not be read any more. - - uv_httpsys_t** uv_httpsys_result = (uv_httpsys_t**)status; - if (uv_httpsys_result) - { - *uv_httpsys_result = NULL; - } - - // Process async completion - - if (uv_httpsys->disconnect) - { - // A request was made to disconnect the client when an async operation was in progress. - // Now that the async operation completed, disregard the results and free up resources. - - httpsys_free(uv_httpsys, FALSE); - uv_httpsys = NULL; - } - else if (ERROR_HANDLE_EOF == overlappedResult || 0 == overlappedLength) - { - // End of request body - notify JavaScript - - BOOL freePending = NULL != uv_httpsys->uv_httpsys_peer; - - if (!uv_httpsys->responseStarted) { - // Do not emit the `end` event if the app already started writing the response - - Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_END_REQUEST); - httpsys_make_callback(event); - } - - if (freePending) { - // This is an upgraded request which has a peer uv_httpsys to handle the response. - // Since the request uv_httpsys is no longer needed, deallocate it. - - httpsys_free(uv_httpsys, FALSE); - uv_httpsys = NULL; - } - } - else if (S_OK != overlappedResult) - { - // Async completion failed - notify JavaScript - - if (!uv_httpsys->responseStarted) { - // Do not emit the `error` event if the app already started writing the response - - httpsys_notify_error( - uv_httpsys, - HTTPSYS_ERROR_READ_REQUEST_BODY, - (unsigned int)overlappedResult); - } - - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - } - else - { - // Successful completion - send body chunk to JavaScript as a Buffer - - BOOL continueReading = TRUE; - - // Good explanation of native Buffers at - // http://sambro.is-super-awesome.com/2011/03/03/creating-a-proper-buffer-in-a-node-c-addon/ - - if (!uv_httpsys->responseStarted) { - // Do not emit the `data` event if the app already started writing the response - - Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_REQUEST_BODY); - ULONG length = overlappedLength; - node::Buffer* slowBuffer = node::Buffer::New(length); - memcpy(node::Buffer::Data(slowBuffer), uv_httpsys->buffer, length); - Handle args[] = { slowBuffer->handle_, Integer::New(length), Integer::New(0) }; - Handle fastBuffer = bufferConstructor->NewInstance(3, args); - event->Set(v8data, fastBuffer); - - Handle result = httpsys_make_callback(event); - continueReading = result->IsBoolean() && result->BooleanValue(); - } - - if (continueReading) - { - // If the callback response is 'true', proceed to read more of the request body. - // Otherwise request had been paused and will be resumed asynchronously from JavaScript - // with a call to httpsys_resume. - - if (uv_httpsys_result) - { - // This is a synchronous completion of a read. Indicate to the caller the reading should continue - // and unwind the stack. - - *uv_httpsys_result = uv_httpsys; - } - else - { - // This is an asynchronous completion of a read. Restart the reading loop. - - httpsys_read_request_body_loop(uv_httpsys); - } - } - } + //HTTPSYS_CALLBACK_PREAMBLE + Nan::HandleScope handleScope; + uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)handle->data; + Log("REQ: entered httpsys_read_request_body_callback, synchronous '%d', request id '%I64u'\n", uv_httpsys->synchronous, uv_httpsys->requestId); + + NTSTATUS overlappedResult = (NTSTATUS)uv_httpsys->uv_async->async_req.u.io.overlapped.Internal; + ULONG overlappedLength = (ULONG)uv_httpsys->uv_async->async_req.u.io.overlapped.InternalHigh; + httpsys_uv_httpsys_close(uv_httpsys); + PHTTP_REQUEST request = (PHTTP_REQUEST)uv_httpsys->buffer; + int lastError = 0; + char* slowBuffer; + + // Process async completion + if (uv_httpsys->disconnect) + { + Log("REQ: disconnection received during operation, free request resources\n"); + // A request was made to disconnect the client when an async operation was in progress. + // Now that the async operation completed, disregard the results and free up resources. + + httpsys_free(uv_httpsys, FALSE); + uv_httpsys = NULL; + } + else if (ERROR_HANDLE_EOF == overlappedResult || 0 == overlappedLength) + { + Log("REQ: end of body\n"); + // End of request body - notify JavaScript + BOOL freePending = NULL != uv_httpsys->uv_httpsys_peer; + + if (!uv_httpsys->responseStarted) { + // Do not emit the `end` event if the app already started writing the response + Log("REQ: sending END event to javascript request id = '%I64u', uv_httpsys = '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys); + Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_END_REQUEST); + Handle result = httpsys_make_callback(event); + //assume the worst, if an error code is not returned + lastError = ERROR_CONNECTION_INVALID; + //extract any errors + if (result->IsNumber()) { + lastError = result->Int32Value(); + Log("REQ: result from httpsys_end_request error = '%d'\n", lastError); + } + else { + Log("REQ: result from httpsys_end_request invalid number returned\n"); + } + + Log("REQ: back from javascript uv_httpsys = '%p'\n", (void*)uv_httpsys); + //during this callback a failed response write can occur + //resulting in native resources being freed + } + + //if the last error was an invalid connection, all native resources + //would have already been cleaned up so do not do it again + if (freePending && lastError != ERROR_CONNECTION_INVALID && lastError != ERROR_INVALID_HANDLE) { + // This is an upgraded request which has a peer uv_httpsys to handle the response. + // Since the request uv_httpsys is no longer needed, deallocate it. + Log("REQ: free pending, this is an upgraded request which has a peer uv_httpsys to handle the response\n"); + httpsys_free(uv_httpsys, FALSE); + uv_httpsys = NULL; + } + } + else if (S_OK != overlappedResult) + { + // Async completion failed - notify JavaScript + Log("REQ: async completion failed\n"); + + if (!uv_httpsys->responseStarted) { + // Do not emit the `error` event if the app already started writing the response + Log("REQ: read body request async completion failed\n"); + httpsys_notify_error( + uv_httpsys, + HTTPSYS_ERROR_READ_REQUEST_BODY, + (unsigned int)overlappedResult); + } + + Log("REQ: free uv_httpsys\n"); + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + } + else + { + Log("REQ: send body chunk to javascript\n"); + // Successful completion - send body chunk to JavaScript as a Buffer + + BOOL continueReading = TRUE; + + // Good explanation of native Buffers at + // http://sambro.is-super-awesome.com/2011/03/03/creating-a-proper-buffer-in-a-node-c-addon/ + + if (!uv_httpsys->responseStarted) { + // Do not emit the `data` event if the app already started writing the response + Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_REQUEST_BODY); + ULONG length = overlappedLength; + Log("REQ: response not started, build body buffer\n"); + + //slow buffer is a pointer to an HTTP request structure + if (NULL != (slowBuffer = (char*)malloc(length))) + { + memcpy(slowBuffer, (char*)uv_httpsys->buffer, length); + Handle args[] = { Nan::CopyBuffer(slowBuffer, length).ToLocalChecked(), Nan::New(length), Nan::New(0) }; + + Local cons = Nan::New(bufferConstructor); + Handle fastBuffer; + cons->NewInstance(Nan::GetCurrentContext(), 3, args).ToLocal(&fastBuffer); + event->Set(Nan::New(v8data), fastBuffer); + Log("REQ: calling javascript: httpsys_request_body request id = '%I64u', uv_httpsys = '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys); + Handle result = httpsys_make_callback(event); + Log("REQ: back from javascript uv_httpsys = '%p'\n", (void*)uv_httpsys); + + free(slowBuffer); + + continueReading = result->IsBoolean() && result->BooleanValue(); + } + else { + continueReading = FALSE; + Log("REQ: failed to allocate memory will creating slow buffer\n"); + } + } + + if (continueReading) + { + Log("REQ: continuing reading body\n"); + // If the callback response is 'true', proceed to read more of the request body. + // Otherwise request had been paused and will be resumed asynchronously from JavaScript + // with a call to httpsys_resume. + if (!uv_httpsys->synchronous) + { + Log("REQ: synchronous body reading, calling httpsys_read_request_body_loop\n"); + httpsys_read_request_body_loop(uv_httpsys); + } + } + } + Log("REQ: exiting httpsys_read_request_body_callback\n"); } HRESULT httpsys_read_request_body_loop(uv_httpsys_t* uv_httpsys) { - HRESULT hr = S_OK; - - // Continue reading the request body synchronously until EOF, and error, - // request is paused or async completion is expected. - while (NULL != uv_httpsys && NO_ERROR == (hr = httpsys_initiate_read_request_body(uv_httpsys))) - { - // Use the "status" parameter to the callback as a mechanism to return data - // from the callback. If upon return the uv_httpsys is still not NULL, - // it means there was no error and the request was not paused by the application. - - httpsys_read_request_body_callback(uv_httpsys->uv_async, (int)&uv_httpsys); - } - - return (NO_ERROR == hr || ERROR_HANDLE_EOF == hr || ERROR_IO_PENDING == hr) ? S_OK : hr; + HRESULT hr = S_OK; + + Log("REQ: entered httpsys_read_request_body_loop\n"); + + // Continue reading the request body synchronously until EOF, and error, + // request is paused or async completion is expected. + while (NULL != uv_httpsys && NO_ERROR == (hr = httpsys_initiate_read_request_body(uv_httpsys))) + { + Log("REQ: synchronous read body completion\n"); + // Use the "status" parameter to the callback as a mechanism to return data + // from the callback. If upon return the uv_httpsys is still not NULL, + // it means there was no error and the request was not paused by the application. + uv_httpsys->synchronous = 1; /*JPW Added*/ + httpsys_read_request_body_callback(uv_httpsys->uv_async); + } + + Log("REQ: exited httpsys_read_request_body_loop\n"); + return (NO_ERROR == hr || ERROR_HANDLE_EOF == hr || ERROR_IO_PENDING == hr) ? S_OK : hr; } HRESULT httpsys_initiate_read_request_body(uv_httpsys_t* uv_httpsys) { - HandleScope handleScope; - HRESULT hr; - - // Initialize libuv handle representing this async operation - - CheckError(httpsys_uv_httpsys_init(uv_httpsys, httpsys_read_request_body_callback)); - - // Initiate async receive of the HTTP request body - - hr = HttpReceiveRequestEntityBody( - uv_httpsys->uv_httpsys_server->requestQueue, - uv_httpsys->requestId, - 0, - uv_httpsys->buffer, - uv_httpsys->bufferSize, - NULL, - &uv_httpsys->uv_async->async_req.overlapped); - - if (ERROR_HANDLE_EOF == hr) - { - // End of request body, decrement libuv loop ref count since no async completion will follow - // and generate JavaScript event - - httpsys_uv_httpsys_close(uv_httpsys); - if (!uv_httpsys->responseStarted) { - // Do not emit the `end` event if the app already started writing the response - - Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_END_REQUEST); - httpsys_make_callback(event); - } - } - else if (ERROR_IO_PENDING != hr && NO_ERROR != hr) - { - // Initiation failed - notify JavaScript - if (!uv_httpsys->responseStarted) { - // Do not emit the `error` event if the app already started writing the response - httpsys_notify_error(uv_httpsys, HTTPSYS_ERROR_INITIALIZING_READ_REQUEST_BODY, hr); - } - - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - } - - // Result of NO_ERROR at this point means synchronous completion that must be handled by the caller - // since the IO completion port of libuv will not receive a completion. + Nan::HandleScope handleScope; + HRESULT hr; + + Log("REQ: entered httpsys_initiate_read_request_body, request id = '%I64u'\n", uv_httpsys->requestId); + // Initialize libuv handle representing this async operation + uv_httpsys->synchronous = 0; /*JPW Added*/ + CheckError(httpsys_uv_httpsys_init(uv_httpsys, (uv_async_cb)httpsys_read_request_body_callback)); + + // Initiate async receive of the HTTP request body + + hr = HttpReceiveRequestEntityBody( + uv_httpsys->uv_httpsys_server->requestQueue, + uv_httpsys->requestId, + 0, + uv_httpsys->buffer, + uv_httpsys->bufferSize, + NULL, + &uv_httpsys->uv_async->async_req.u.io.overlapped); + + Log("REQ: HttpReceiveRequestEntityBody request id '%I64u', result '%d'\n", uv_httpsys->requestId, hr); + + if (ERROR_HANDLE_EOF == hr) + { + // End of request body, decrement libuv loop ref count since no async completion will follow + // and generate JavaScript event + Log("REQ: end of body received\n"); + + httpsys_uv_httpsys_close(uv_httpsys); + if (!uv_httpsys->responseStarted) { + // Do not emit the `end` event if the app already started writing the response + Log("REQ: sending END to javascript request id = '%I64u', uv_httpsys = '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys); + Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_END_REQUEST); + httpsys_make_callback(event); + Log("REQ: back from javascript, uv_httpsys = '%p'\n", (void*)uv_httpsys); + } + else { + Log("REQ: response already started, not sending END to javascript\n"); + } + } + else if (ERROR_IO_PENDING != hr && NO_ERROR != hr) + { + Log("REQ: reading request body has failed...\n"); + // Initiation failed - notify JavaScript + if (!uv_httpsys->responseStarted) { + // Do not emit the `error` event if the app already started writing the response + httpsys_notify_error(uv_httpsys, HTTPSYS_ERROR_INITIALIZING_READ_REQUEST_BODY, hr); + } + + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + } + + // Result of NO_ERROR at this point means synchronous completion that must be handled by the caller + // since the IO completion port of libuv will not receive a completion. Error: - - return hr; + Log("REQ: exiting httpsys_initiate_read_request_body, hr = '%d'\n", hr); + return hr; } -Handle httpsys_init(const Arguments& args) +void httpsys_init(const Nan::FunctionCallbackInfo& info) { - HandleScope handleScope; - - Handle options = args[0]->ToObject(); - - callback.Dispose(); - callback.Clear(); - callback = Persistent::New( - Handle::Cast(options->Get(String::New("callback")))); - initialBufferSize = options->Get(String::New("initialBufferSize"))->Int32Value(); - requestQueueLength = options->Get(String::New("requestQueueLength"))->Int32Value(); - pendingReadCount = options->Get(String::New("pendingReadCount"))->Int32Value(); - int cacheDuration = options->Get(String::New("cacheDuration"))->Int32Value(); - if (0 > cacheDuration) - { - cachePolicy.Policy = HttpCachePolicyNocache; - cachePolicy.SecondsToLive = 0; - } - else - { - cachePolicy.Policy = HttpCachePolicyTimeToLive; - defaultCacheDuration = cacheDuration; - } - - return handleScope.Close(Undefined()); + v8::Handle options = info[0]->ToObject(); + + callback = new Nan::Callback(options->Get(Nan::New("callback").ToLocalChecked()).As()); + initialBufferSize = options->Get(Nan::New("initialBufferSize").ToLocalChecked())->Int32Value(); + requestQueueLength = options->Get(Nan::New("requestQueueLength").ToLocalChecked())->Int32Value(); + pendingReadCount = options->Get(Nan::New("pendingReadCount").ToLocalChecked())->Int32Value(); + int cacheDuration = options->Get(Nan::New("cacheDuration").ToLocalChecked())->Int32Value(); + + if (0 > cacheDuration) + { + cachePolicy.Policy = HttpCachePolicyNocache; + cachePolicy.SecondsToLive = 0; + } + else + { + cachePolicy.Policy = HttpCachePolicyTimeToLive; + defaultCacheDuration = cacheDuration; + } + + debugOut = getenv("HTTP_SYS_DEBUG") ? TRUE : FALSE; + info.GetReturnValue().SetUndefined(); } -void httpsys_prepare_new_requests(uv_prepare_t* handle, int status) -{ - HandleScope scope; - uv_httpsys_server_t* uv_httpsys_server = CONTAINING_RECORD(handle, uv_httpsys_server_t, uv_prepare); - HRESULT hr; - uv_httpsys_t* uv_httpsys = NULL; - - if (uv_httpsys_server->closing && 0 == uv_httpsys_server->refCount) - { - // The HTTP.SYS server is closing as a result of a call to Server.close(). - // The HTTP.SYS request queue has already been closed in httpsys_stop_listen. - // Given that the refCount of pending async operatoins has reached zero, we can - // now perform final cleanup of the server, including notifying JavaScript that - // closing has completed. - // Stop this callback from executing again. - - uv_prepare_stop(&uv_httpsys_server->uv_prepare); - - // Emit the close event to JavaScript. - - httpsys_make_callback( - httpsys_create_event(uv_httpsys_server, HTTPSYS_SERVER_CLOSED)); - - // Clean up data structures - - uv_httpsys_server->event.Dispose(); - uv_httpsys_server->event.Clear(); - delete uv_httpsys_server; - uv_httpsys_server = NULL; - - // Terminate HTTP Server. The corresponding HttpInitiate call was made in - // httpsys_listen. - - CheckError(HttpTerminate( - HTTP_INITIALIZE_SERVER, - NULL)); - - return; - } - - while (uv_httpsys_server->readsToInitialize) - { - // TODO: address a situation when some new requests fail while others not - cancel them? - ErrorIf(NULL == (uv_httpsys = new uv_httpsys_t), ERROR_NOT_ENOUGH_MEMORY); - RtlZeroMemory(uv_httpsys, sizeof(uv_httpsys_t)); - uv_httpsys->uv_httpsys_server = uv_httpsys_server; - CheckError(httpsys_initiate_new_request(uv_httpsys)); - uv_httpsys = NULL; - uv_httpsys_server->readsToInitialize--; - } - - return; +void httpsys_prepare_new_requests(uv_prepare_t* handle) +{ + Nan::HandleScope handleScope; + uv_httpsys_server_t* uv_httpsys_server = CONTAINING_RECORD(handle, uv_httpsys_server_t, uv_prepare); + HRESULT hr; + uv_httpsys_t* uv_httpsys = NULL; + + if (uv_httpsys_server->closing && 0 == uv_httpsys_server->refCount) + { + Log("REQ: httpsys_prepare_new_requests server closing with refcount === 0\n"); + // The HTTP.SYS server is closing as a result of a call to Server.close(). + // The HTTP.SYS request queue has already been closed in httpsys_stop_listen. + // Given that the refCount of pending async operatoins has reached zero, we can + // now perform final cleanup of the server, including notifying JavaScript that + // closing has completed. + + // Stop this callback from executing again. + Log("uv_prepare_stop\n"); + uv_prepare_stop(&uv_httpsys_server->uv_prepare); + + Log("informing javascript of server closing\n"); + httpsys_make_callback(httpsys_create_event(uv_httpsys_server, HTTPSYS_SERVER_CLOSED)); + + Log("releasing server resources\n"); + // Clean up data structures + uv_httpsys_server->event.Reset(); + + //delete uv_httpsys_server; + uv_httpsys_server = NULL; + + Log("terminating http server\n"); + // Terminate HTTP Server. The corresponding HttpInitiate call was made in + // httpsys_listen. + CheckError(HttpTerminate( + HTTP_INITIALIZE_SERVER, + NULL)); + + return; + } + + while (uv_httpsys_server->readsToInitialize) + { + Log("\nREQ: preparing new request: current reads to initialise '%d'\n", uv_httpsys_server->readsToInitialize); + // TODO: address a situation when some new requests fail while others not - cancel them? + ErrorIf(NULL == (uv_httpsys = new uv_httpsys_t), ERROR_NOT_ENOUGH_MEMORY); + RtlZeroMemory(uv_httpsys, sizeof(uv_httpsys_t)); + uv_httpsys->uv_httpsys_server = uv_httpsys_server; + CheckError(httpsys_initiate_new_request(uv_httpsys)); + uv_httpsys = NULL; + uv_httpsys_server->readsToInitialize--; + Log("REQ: finished current request initialisation, decrementing readsToInitialize count, new value '%d'\n", uv_httpsys_server->readsToInitialize); + } + + return; Error: - if (NULL != uv_httpsys) - { - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - } - - httpsys_notify_error(uv_httpsys_server, HTTPSYS_ERROR_INITIALIZING_REQUEST, hr); - - return; + Log("REQ: httpsys_prepare_new_requests has errored, freeing uv_httpsys\n"); + if (NULL != uv_httpsys) + { + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + } + httpsys_notify_error(uv_httpsys_server, HTTPSYS_ERROR_INITIALIZING_REQUEST, hr); + return; } -Handle httpsys_listen(const Arguments& args) +void httpsys_listen(const Nan::FunctionCallbackInfo& info) { - HandleScope handleScope; - HRESULT hr; - HTTPAPI_VERSION HttpApiVersion = HTTPAPI_VERSION_2; - WCHAR url[MAX_PATH + 1]; - WCHAR requestQueueName[MAX_PATH + 1]; - HTTP_BINDING_INFO bindingInfo; - uv_loop_t* loop; - uv_httpsys_t* uv_httpsys = NULL; - uv_httpsys_server_t* uv_httpsys_server = NULL; - - // Process arguments - - Handle options = args[0]->ToObject(); - - // Lazy initialization of HTTP.SYS - - CheckError(HttpInitialize( - HttpApiVersion, - HTTP_INITIALIZE_SERVER, - NULL)); - - // Create uv_httpsys_server_t - - ErrorIf(NULL == (uv_httpsys_server = new uv_httpsys_server_t), ERROR_NOT_ENOUGH_MEMORY); - RtlZeroMemory(uv_httpsys_server, sizeof(uv_httpsys_server_t)); - - // Create the request queue name by replacing slahes in the URL with _ - // to make it a valid file name. - - options->Get(String::New("url"))->ToString()->Write((uint16_t*)requestQueueName, 0, MAX_PATH); - - for (WCHAR* current = requestQueueName; *current; current++) - { - if (L'/' == *current) - { - *current = L'_'; - } - } - - // Create HTTP.SYS request queue (one per URL). Request queues are named - // to allow sharing between processes and support cluster. - // First try to obtain a handle to a pre-existing queue with the name - // based on the listen URL. If that fails, create a new named request queue. - - hr = HttpCreateRequestQueue( - HttpApiVersion, - requestQueueName, - NULL, - HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING, - &uv_httpsys_server->requestQueue); - - if (ERROR_FILE_NOT_FOUND == hr) - { - // Request queue by that name does not exist yet, try to create it - - CheckError(HttpCreateRequestQueue( - HttpApiVersion, - requestQueueName, - NULL, - 0, - &uv_httpsys_server->requestQueue)); - - // Create HTTP.SYS session and associate it with URL group containing the - // single listen URL. - - CheckError(HttpCreateServerSession( - HttpApiVersion, - &uv_httpsys_server->sessionId, - NULL)); - - CheckError(HttpCreateUrlGroup( - uv_httpsys_server->sessionId, - &uv_httpsys_server->groupId, - NULL)); - - options->Get(String::New("url"))->ToString()->Write((uint16_t*)url, 0, MAX_PATH); - - CheckError(HttpAddUrlToUrlGroup( - uv_httpsys_server->groupId, - url, - 0, - NULL)); - - // Set the request queue length - - CheckError(HttpSetRequestQueueProperty( - uv_httpsys_server->requestQueue, - HttpServerQueueLengthProperty, - &requestQueueLength, - sizeof(requestQueueLength), - 0, - NULL)); - - // Bind the request queue with the URL group to enable receiving - // HTTP traffic on the request queue. - - RtlZeroMemory(&bindingInfo, sizeof(HTTP_BINDING_INFO)); - bindingInfo.RequestQueueHandle = uv_httpsys_server->requestQueue; - bindingInfo.Flags.Present = 1; - - CheckError(HttpSetUrlGroupProperty( - uv_httpsys_server->groupId, - HttpServerBindingProperty, - &bindingInfo, - sizeof(HTTP_BINDING_INFO))); - } - else - { - CheckError(hr); - } - - // Configure the request queue to prevent queuing a completion to the libuv - // IO completion port when an async operation completes synchronously. - - ErrorIf(!SetFileCompletionNotificationModes( - uv_httpsys_server->requestQueue, - FILE_SKIP_COMPLETION_PORT_ON_SUCCESS | FILE_SKIP_SET_EVENT_ON_HANDLE), - GetLastError()); - - // Associate the HTTP.SYS request queue handle with the IO completion port - // of the default libuv event loop used by node. This will cause - // async completions related to the HTTP.SYS request queue to execute - // on the node.js thread. The event loop will process these events as - // UV_ASYNC handle types, beacuse a call to uv_async_init will be made - // every time an async operation is started with HTTP.SYS. On Windows, - // uv_async_init associates the OVERLAPPED structure representing the - // async operation with the uv_async_t handle that embeds it, which allows - // the event loop to map the OVERLAPPED instance back to the async - // callback to invoke when the IO completion port is signaled. - - loop = uv_default_loop(); - ErrorIf(NULL == CreateIoCompletionPort( - uv_httpsys_server->requestQueue, - loop->iocp, - (ULONG_PTR)uv_httpsys_server->requestQueue, - 0), - GetLastError()); - - // Initiate uv_prepare associated with this server that will be responsible for - // initializing new pending receives of new HTTP reqests against HTTP.SYS - // to replace completed ones. This logic will run once per iteration of the libuv event loop. - // The first execution of the callback will initiate the first batch of reads. - - uv_prepare_init(loop, &uv_httpsys_server->uv_prepare); - uv_prepare_start(&uv_httpsys_server->uv_prepare, httpsys_prepare_new_requests); - uv_httpsys_server->readsToInitialize = pendingReadCount; - - // The result wraps the native pointer to the uv_httpsys_server_t structure. - // It also doubles as an event parameter to JavaScript callbacks scoped to the entire server. - - uv_httpsys_server->event = Persistent::New(httpsysObject->NewInstance()); - uv_httpsys_server->event->SetPointerInInternalField(0, (void*)uv_httpsys_server); - uv_httpsys_server->event->Set(v8uv_httpsys_server, uv_httpsys_server->event); - - return uv_httpsys_server->event; + Isolate* isolate = Isolate::GetCurrent(); + EscapableHandleScope handleScope(isolate); + HRESULT hr; + HTTPAPI_VERSION HttpApiVersion = HTTPAPI_VERSION_2; + WCHAR url[MAX_PATH + 1]; + WCHAR requestQueueName[MAX_PATH + 1]; + HTTP_BINDING_INFO bindingInfo; + uv_loop_t* loop; + uv_httpsys_t* uv_httpsys = NULL; + uv_httpsys_server_t* uv_httpsys_server = NULL; + BOOL success = 0; + HANDLE handle = NULL; + Local tpl = Nan::New(httpsysObject); + Local o = tpl->NewInstance(); + + Log("start listen called\n"); + // Process arguments + + Local urls = Local::Cast(info[0]); + + // Lazy initialization of HTTP.SYS + + CheckError(HttpInitialize( + HttpApiVersion, + HTTP_INITIALIZE_SERVER, + NULL)); + + // Create uv_httpsys_server_t + + ErrorIf(NULL == (uv_httpsys_server = new uv_httpsys_server_t), ERROR_NOT_ENOUGH_MEMORY); + RtlZeroMemory(uv_httpsys_server, sizeof(uv_httpsys_server_t)); + + // use the first url path as the request queue name by replacing slahes in the URL with _ + // to make it a valid file name. + urls->Get(0)->ToString()->Write((uint16_t*)requestQueueName, 0, MAX_PATH); + + for (WCHAR* current = requestQueueName; *current; current++) + { + if (L'/' == *current) + { + *current = L'_'; + } + } + + // Create HTTP.SYS request queue (one per URL). Request queues are named + // to allow sharing between processes and support cluster. + // First try to obtain a handle to a pre-existing queue with the name + // based on the listen URL. If that fails, create a new named request queue. + Log("checking if request queue exists '%ws'\n", requestQueueName); + + hr = HttpCreateRequestQueue( + HttpApiVersion, + requestQueueName, + NULL, + HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING, + &uv_httpsys_server->requestQueue); + + Log("result from HttpCreateRequestQueue = %d\n", hr); + + if (ERROR_FILE_NOT_FOUND == hr) + { + // Request queue by that name does not exist yet, try to create it + + Log("attempting to create request queue\n"); + + CheckError(HttpCreateRequestQueue( + HttpApiVersion, + requestQueueName, + NULL, + 0, + &uv_httpsys_server->requestQueue)); + + Log("created request queue\n"); + + // Create HTTP.SYS session and associate it with URL group containing the + // single listen URL. + + CheckError(HttpCreateServerSession( + HttpApiVersion, + &uv_httpsys_server->sessionId, + NULL)); + + Log("done HttpCreateServerSession\n"); + + CheckError(HttpCreateUrlGroup( + uv_httpsys_server->sessionId, + &uv_httpsys_server->groupId, + NULL)); + + Log("done HttpCreateUrlGroup\n"); + + //repeat for all specified url's + for (unsigned int i = 0; i < urls->Length(); i++) { + urls->Get(i)->ToString()->Write((uint16_t*)url, 0, MAX_PATH); + + Log("adding url to group '%ws'\n", url); + + HRESULT hres = HttpAddUrlToUrlGroup( + uv_httpsys_server->groupId, + url, + 0, + NULL); + + Log("result = '%d'\n", hres); + + CheckError(hres); + } + // Set the request queue length + CheckError(HttpSetRequestQueueProperty( + uv_httpsys_server->requestQueue, + HttpServerQueueLengthProperty, + &requestQueueLength, + sizeof(requestQueueLength), + 0, + NULL)); + + Log("done HttpSetRequestQueueProperty\n"); + + // Bind the request queue with the URL group to enable receiving + // HTTP traffic on the request queue. + RtlZeroMemory(&bindingInfo, sizeof(HTTP_BINDING_INFO)); + bindingInfo.RequestQueueHandle = uv_httpsys_server->requestQueue; + bindingInfo.Flags.Present = 1; + + CheckError(HttpSetUrlGroupProperty( + uv_httpsys_server->groupId, + HttpServerBindingProperty, + &bindingInfo, + sizeof(HTTP_BINDING_INFO))); + + Log("done HttpSetUrlGroupProperty\n"); + } + else + { + CheckError(hr); + } + // Associate the HTTP.SYS request queue handle with the IO completion port + // of the default libuv event loop used by node. This will cause + // async completions related to the HTTP.SYS request queue to execute + // on the node.js thread. The event loop will process these events as + // UV_ASYNC handle types, beacuse a call to uv_async_init will be made + // every time an async operation is started with HTTP.SYS. On Windows, + // uv_async_init associates the OVERLAPPED structure representing the + // async operation with the uv_async_t handle that embeds it, which allows + // the event loop to map the OVERLAPPED instance back to the async + // callback to invoke when the IO completion port is signaled. + + loop = uv_default_loop(); + handle = CreateIoCompletionPort( + uv_httpsys_server->requestQueue, + loop->iocp, + (ULONG_PTR)uv_httpsys_server->requestQueue, + 0); + + ErrorIf(handle == NULL, GetLastError()); + + Log("done CreateIoCompletionPort\n"); + + // Configure the request queue to prevent queuing a completion to the libuv + // IO completion port when an async operation completes synchronously. + + success = SetFileCompletionNotificationModes( + uv_httpsys_server->requestQueue, + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS | FILE_SKIP_SET_EVENT_ON_HANDLE); + + ErrorIf(!success, GetLastError()); + + Log("done SetFileCompletionNotificationModes\n"); + + // Initiate uv_prepare associated with this server that will be responsible for + // initializing new pending receives of new HTTP reqests against HTTP.SYS + // to replace completed ones. This logic will run once per iteration of the libuv event loop. + // The first execution of the callback will initiate the first batch of reads. + + uv_prepare_init(loop, &uv_httpsys_server->uv_prepare); + uv_prepare_start(&uv_httpsys_server->uv_prepare, (uv_prepare_cb)httpsys_prepare_new_requests); + + Log("REQ: initialising readsToInitialize to '%d'\n", pendingReadCount); + uv_httpsys_server->readsToInitialize = pendingReadCount; + + // The result wraps the native pointer to the uv_httpsys_server_t structure. + // It also doubles as an event parameter to JavaScript callbacks scoped to the entire server. + uv_httpsys_server->event.Reset(o); + Nan::SetInternalFieldPointer(o, 0, (void*)uv_httpsys_server); + o->Set(Nan::New(v8uv_httpsys_server), Nan::New(uv_httpsys_server->event)); + info.GetReturnValue().Set(Nan::New(uv_httpsys_server->event)); + return; Error: - if (NULL != uv_httpsys_server) - { - if (HTTP_NULL_ID != uv_httpsys_server->groupId) - { - HttpCloseUrlGroup(uv_httpsys_server->groupId); - } - - if (NULL != uv_httpsys_server->requestQueue) - { - HttpCloseRequestQueue(uv_httpsys_server->requestQueue); - } - - if (HTTP_NULL_ID != uv_httpsys_server->sessionId) - { - HttpCloseServerSession(uv_httpsys_server->sessionId); - } - - delete uv_httpsys_server; - uv_httpsys_server = NULL; - } - - if (NULL != uv_httpsys) - { - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - } - - return handleScope.Close(ThrowException(Int32::New(hr))); + if (NULL != uv_httpsys_server) { + if (HTTP_NULL_ID != uv_httpsys_server->groupId) { + HttpCloseUrlGroup(uv_httpsys_server->groupId); + } + if (NULL != uv_httpsys_server->requestQueue) { + HttpCloseRequestQueue(uv_httpsys_server->requestQueue); + } + if (HTTP_NULL_ID != uv_httpsys_server->sessionId) { + HttpCloseServerSession(uv_httpsys_server->sessionId); + } + delete uv_httpsys_server; + uv_httpsys_server = NULL; + } + + if (NULL != uv_httpsys) { + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + } + info.GetReturnValue().Set(isolate->ThrowException(Nan::New(hr))); } -Handle httpsys_stop_listen(const Arguments& args) -{ - HandleScope handleScope; - HRESULT hr; - - uv_httpsys_server_t* uv_httpsys_server = (uv_httpsys_server_t*)Handle::Cast(args[0])->GetPointerFromInternalField(0); - - // Mark the HTTP.SYS listener as closing. Next time the httpsys_prepare_new_requests - // callback is entered, and the pending async operations associated with the server have - // drained (as indicated by the uv_httpsys_server->refCount), it will have a chance to - // perform final cleanup. - - uv_httpsys_server->closing = TRUE; - - // Close the HTTP.SYS URL group - - if (HTTP_NULL_ID != uv_httpsys_server->groupId) - { - CheckError(HttpCloseUrlGroup(uv_httpsys_server->groupId)); - } - - // Perform graceful shutdown of the HTTP.SYS request queue, then close the queue. - // This will cause all pending async operations to be cancelled, which the system - // will be notified about via the IO completion port of the main libuv event loop. - // Appropriate async callbacks will be executed to react to these cancellations. - - if (NULL != uv_httpsys_server->requestQueue) - { - CheckError(HttpShutdownRequestQueue(uv_httpsys_server->requestQueue)); - CheckError(HttpCloseRequestQueue(uv_httpsys_server->requestQueue)); - } - - // Close the HTTP.SYS server session - - if (HTTP_NULL_ID != uv_httpsys_server->sessionId) - { - CheckError(HttpCloseServerSession(uv_httpsys_server->sessionId)); - } - return handleScope.Close(Undefined()); +void httpsys_stop_listen(const Nan::FunctionCallbackInfo& info) +{ + HRESULT hr; + Handle o = Handle::Cast(info[0]); + uv_httpsys_server_t* uv_httpsys_server = (uv_httpsys_server_t*)Nan::GetInternalFieldPointer(o, 0); + Log("stop listen called\n"); + + // Mark the HTTP.SYS listener as closing. Next time the httpsys_prepare_new_requests + // callback is entered, and the pending async operations associated with the server have + // drained (as indicated by the uv_httpsys_server->refCount), it will have a chance to + // perform final cleanup. + uv_httpsys_server->closing = TRUE; + + // Close the HTTP.SYS URL group + if (HTTP_NULL_ID != uv_httpsys_server->groupId) { + Log("closing url group\n"); + CheckError(HttpCloseUrlGroup(uv_httpsys_server->groupId)); + } + // Perform graceful shutdown of the HTTP.SYS request queue, then close the queue. + // This will cause all pending async operations to be cancelled, which the system + // will be notified about via the IO completion port of the main libuv event loop. + // Appropriate async callbacks will be executed to react to these cancellations. + + if (NULL != uv_httpsys_server->requestQueue) + { + Log("shutting down request queue\n"); + CheckError(HttpShutdownRequestQueue(uv_httpsys_server->requestQueue)); + Log("closing request queue\n"); + CheckError(HttpCloseRequestQueue(uv_httpsys_server->requestQueue)); + } + + // Close the HTTP.SYS server session + if (HTTP_NULL_ID != uv_httpsys_server->sessionId) { + Log("closing server session %llu\n", uv_httpsys_server->sessionId); + CheckError(HttpCloseServerSession(uv_httpsys_server->sessionId)); + } + Log("returning from stop listen\n"); + info.GetReturnValue().SetUndefined(); + return; Error: - - return handleScope.Close(ThrowException(Int32::New(hr))); + Log("RESP: error during httpsys_stop_listen hr = '%ld'\n", hr); + Isolate* isolate = Isolate::GetCurrent(); + info.GetReturnValue().Set(isolate->ThrowException(Nan::New(hr))); } -Handle httpsys_resume(const Arguments& args) +void httpsys_resume(const Nan::FunctionCallbackInfo& info) { - HTTPSYS_EXPORT_PREAMBLE; - - CheckError(httpsys_read_request_body_loop(uv_httpsys)); - - return handleScope.Close(Undefined()); + HTTPSYS_EXPORT_PREAMBLE; + Log("REQ: httpsys_resume called from javascript request id = '%I64u'\n", uv_httpsys->requestId); + CheckError(httpsys_read_request_body_loop(uv_httpsys)); + info.GetReturnValue().SetUndefined(); + return; Error: - - // uv_httpsys had been freed alredy - - return handleScope.Close(ThrowException(Int32::New(hr))); + Log("RESP: error during httpsys_resume hr = '%d'\n", hr); + // uv_httpsys had been freed already + Isolate* isolate = Isolate::GetCurrent(); + EscapableHandleScope handleScope(isolate); + info.GetReturnValue().Set(isolate->ThrowException(Nan::New(hr))); } -Handle httpsys_write_headers(const Arguments& args) +void httpsys_write_headers(const Nan::FunctionCallbackInfo& info) { - HTTPSYS_EXPORT_PREAMBLE; - Handle options = args[0]->ToObject(); - String::Utf8Value reason(options->Get(v8reason)); - Handle unknownHeaders; - Handle headerNames; - Handle headerName; - Handle knownHeaders; - Handle knownHeader; - Handle cacheDuration; - ULONG flags = 0; - unsigned int statusCode; - uv_httpsys_t* uv_httpsys_req = NULL; - - // Enable NAGLE if requested - - if (!options->Get(v8noDelay)->BooleanValue()) { - flags |= HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING; - } - - // Get response status code - - statusCode = options->Get(v8statusCode)->Uint32Value(); - - // If this is an accepted upgrade response, create another uv_httpsys intance - // to allow processing request and response concurrently. Use the new uv_httpsys instance - // for writing of the response, inluding sending back the HTTP response headers. The old - // uv_httpsys instance will continue to be used for reading of the request. - - if (101 == statusCode) { - // Instruct HTTP.SYS to treat subsequent reads and writes of the HTTP request and response as - // opaque. This allows higher level protocols like WebSockets to implement custom framing. - - flags |= HTTP_SEND_RESPONSE_FLAG_OPAQUE; - - // Create an initialize uv_httpsys for writing of the response - - ErrorIf(NULL == (uv_httpsys->uv_httpsys_peer = new uv_httpsys_t), ERROR_NOT_ENOUGH_MEMORY); - RtlZeroMemory(uv_httpsys->uv_httpsys_peer, sizeof(uv_httpsys_t)); - uv_httpsys->uv_httpsys_peer->uv_httpsys_server = uv_httpsys->uv_httpsys_server; - uv_httpsys->uv_httpsys_peer->requestId = uv_httpsys->requestId; - uv_httpsys->uv_httpsys_peer->event = Persistent::New(uv_httpsys->event); - uv_httpsys->uv_httpsys_peer->uv_httpsys_peer = uv_httpsys; - - // Switch to using the newly created uv_httpsys for the rest of this function - - uv_httpsys_req = uv_httpsys; - uv_httpsys = uv_httpsys->uv_httpsys_peer; - } - else { - // For regular HTTP requests, once the response had been initiated, further - // `data` and `end` events will not be emitted even if the request had - // not been read entirely. This flag is used to stop issuing read requests - // against HTTP.SYS for this request. - - uv_httpsys->responseStarted = TRUE; - } - - uv_httpsys->response.StatusCode = statusCode; - - // Initialize libuv handle representing this async operation - - CheckError(httpsys_uv_httpsys_init(uv_httpsys, httpsys_write_callback)); - - // If the request is to be disconnected, it indicates a rejected HTTP upgrade request. - // In that case the request is closed and native resources deallocated. - - if (options->Get(v8disconnect)->BooleanValue()) { - uv_httpsys->disconnect = TRUE; - } - - if (uv_httpsys->disconnect) { - uv_httpsys->disconnectProcessed = TRUE; - flags |= HTTP_SEND_RESPONSE_FLAG_DISCONNECT; - hr = HttpSendHttpResponse( - uv_httpsys->uv_httpsys_server->requestQueue, - uv_httpsys->requestId, - flags, - &uv_httpsys->response, - NULL, - NULL, - NULL, - 0, - &uv_httpsys->uv_async->async_req.overlapped, - NULL); - - if (NO_ERROR == hr) - { - // Synchronous completion. - - httpsys_write_callback(uv_httpsys->uv_async, 1); - } - else - { - ErrorIf(ERROR_IO_PENDING != hr, hr); - } - - return handleScope.Close(Boolean::New(ERROR_IO_PENDING == hr)); - } - - // Set reason - - ErrorIf(NULL == (uv_httpsys->response.pReason = (PCSTR)malloc(reason.length())), - ERROR_NOT_ENOUGH_MEMORY); - uv_httpsys->response.ReasonLength = reason.length(); - memcpy((void*)uv_httpsys->response.pReason, *reason, reason.length()); - - // Set known headers - - knownHeaders = Handle::Cast(options->Get(v8knownHeaders)); - for (unsigned int i = 0; i < knownHeaders->Length(); i++) - { - knownHeader = Handle::Cast(knownHeaders->Get(i)); - int headerIndex = knownHeader->Get(v8id)->Int32Value(); - String::Utf8Value header(knownHeader->Get(v8value)); - ErrorIf(NULL == (uv_httpsys->response.Headers.KnownHeaders[headerIndex].pRawValue = - (PCSTR)malloc(header.length())), - ERROR_NOT_ENOUGH_MEMORY); - uv_httpsys->response.Headers.KnownHeaders[headerIndex].RawValueLength = header.length(); - memcpy((void*)uv_httpsys->response.Headers.KnownHeaders[headerIndex].pRawValue, - *header, header.length()); - } - - // Set unknown headers - - unknownHeaders = Handle::Cast(options->Get(v8unknownHeaders)); - headerNames = unknownHeaders->GetOwnPropertyNames(); - if (headerNames->Length() > 0) - { - ErrorIf(NULL == (uv_httpsys->response.Headers.pUnknownHeaders = - (PHTTP_UNKNOWN_HEADER)malloc(headerNames->Length() * sizeof (HTTP_UNKNOWN_HEADER))), - ERROR_NOT_ENOUGH_MEMORY); - RtlZeroMemory(uv_httpsys->response.Headers.pUnknownHeaders, - headerNames->Length() * sizeof (HTTP_UNKNOWN_HEADER)); - uv_httpsys->response.Headers.UnknownHeaderCount = headerNames->Length(); - for (int i = 0; i < uv_httpsys->response.Headers.UnknownHeaderCount; i++) - { - headerName = headerNames->Get(i)->ToString(); - String::Utf8Value headerNameUtf8(headerName); - String::Utf8Value headerValueUtf8(unknownHeaders->Get(headerName)); - uv_httpsys->response.Headers.pUnknownHeaders[i].NameLength = headerNameUtf8.length(); - ErrorIf(NULL == (uv_httpsys->response.Headers.pUnknownHeaders[i].pName = - (PCSTR)malloc(headerNameUtf8.length())), - ERROR_NOT_ENOUGH_MEMORY); - memcpy((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pName, - *headerNameUtf8, headerNameUtf8.length()); - uv_httpsys->response.Headers.pUnknownHeaders[i].RawValueLength = headerValueUtf8.length(); - ErrorIf(NULL == (uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue = - (PCSTR)malloc(headerValueUtf8.length())), - ERROR_NOT_ENOUGH_MEMORY); - memcpy((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue, - *headerValueUtf8, headerValueUtf8.length()); - } - } - - // Prepare response body and determine flags - - CheckError(httpsys_initialize_body_chunks(options, uv_httpsys, &flags)); - if (uv_httpsys->chunk.FromMemory.pBuffer) - { - uv_httpsys->response.EntityChunkCount = 1; - uv_httpsys->response.pEntityChunks = &uv_httpsys->chunk; - } - - // Determine cache policy - - if (HttpCachePolicyTimeToLive == cachePolicy.Policy) - { - // If HTTP.SYS output caching is enabled, establish the duration to cache for - // based on the setting on the message or the global default, in that order of precedence - - cacheDuration = options->Get(v8cacheDuration); - cachePolicy.SecondsToLive = cacheDuration->IsUint32() ? cacheDuration->Uint32Value() : defaultCacheDuration; - } - - // TOOD: support response trailers - - // Initiate async send of the HTTP response headers and optional body - - hr = HttpSendHttpResponse( - uv_httpsys->uv_httpsys_server->requestQueue, - uv_httpsys->requestId, - flags, - &uv_httpsys->response, - &cachePolicy, - NULL, - NULL, - 0, - &uv_httpsys->uv_async->async_req.overlapped, - NULL); - - if (NO_ERROR == hr) - { - // Synchronous completion. - - httpsys_write_callback(uv_httpsys->uv_async, 1); - } - else - { - ErrorIf(ERROR_IO_PENDING != hr, hr); - } - - // Return true if async completion is pending and an event will be generated once completed - return handleScope.Close(Boolean::New(ERROR_IO_PENDING == hr)); + HRESULT hr; + Handle o = Handle::Cast(info[0]); + uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)Nan::GetInternalFieldPointer(o, 0); + + Handle options = info[0]->ToObject(); + String::Utf8Value reason(options->Get(Nan::New(v8reason))); + Handle unknownHeaders; + Handle headerNames; + v8::Handle headerName; + Handle knownHeaders; + Handle knownHeader; + Handle cacheDuration; + ULONG flags = 0; + unsigned int statusCode; + uv_httpsys_t* uv_httpsys_req = NULL; + + // Enable NAGLE if requested + if (!options->Get(Nan::New(v8noDelay))->BooleanValue()) { + flags |= HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING; + } + + // Get response status code + statusCode = options->Get(Nan::New(v8statusCode))->Uint32Value(); + Log("\nRESP: httpsys_write_headers called from javascript, status '%d', request id '%I64u'\n", statusCode, uv_httpsys->requestId); + + // If this is an accepted upgrade response, create another uv_httpsys intance + // to allow processing request and response concurrently. Use the new uv_httpsys instance + // for writing of the response, inluding sending back the HTTP response headers. The old + // uv_httpsys instance will continue to be used for reading of the request. + + if (101 == statusCode) { + // Instruct HTTP.SYS to treat subsequent reads and writes of the HTTP request and response as + // opaque. This allows higher level protocols like WebSockets to implement custom framing. + Log("RESP: socket upgraded requested\n"); + flags |= HTTP_SEND_RESPONSE_FLAG_OPAQUE; + + // Create an initialize uv_httpsys for writing of the response + ErrorIf(NULL == (uv_httpsys->uv_httpsys_peer = new uv_httpsys_t), ERROR_NOT_ENOUGH_MEMORY); + RtlZeroMemory(uv_httpsys->uv_httpsys_peer, sizeof(uv_httpsys_t)); + uv_httpsys->uv_httpsys_peer->uv_httpsys_server = uv_httpsys->uv_httpsys_server; + uv_httpsys->uv_httpsys_peer->requestId = uv_httpsys->requestId; + + uv_httpsys->uv_httpsys_peer->event.Reset(uv_httpsys->event); + uv_httpsys->uv_httpsys_peer->uv_httpsys_peer = uv_httpsys; + // Switch to using the newly created uv_httpsys for the rest of this function + uv_httpsys_req = uv_httpsys; + uv_httpsys = uv_httpsys->uv_httpsys_peer; + + Log("RESP: ***upgrade response: swap uv_httpsys_peer = '%p', with uv_httpsys = '%p'\n", (void*)uv_httpsys, (void*)uv_httpsys_req); + } + else { + // For regular HTTP requests, once the response had been initiated, further + // `data` and `end` events will not be emitted even if the request had + // not been read entirely. This flag is used to stop issuing read requests + // against HTTP.SYS for this request. + uv_httpsys->responseStarted = TRUE; + } + uv_httpsys->response.StatusCode = statusCode; + + // Initialize libuv handle representing this async operation + uv_httpsys->synchronousWrite = FALSE; /*JPW ADDED*/ + CheckError(httpsys_uv_httpsys_init(uv_httpsys, (uv_async_cb)httpsys_write_callback)); + + // If the request is to be disconnected, it indicates a rejected HTTP upgrade request. + // In that case the request is closed and native resources deallocated. + if (options->Get(Nan::New(v8disconnect))->BooleanValue()) { + Log("RESP: disconnect set from javascript, it indicates a rejected HTTP upgrade request\n"); + uv_httpsys->disconnect = TRUE; + } + + if (uv_httpsys->disconnect) { + Log("RESP: disconnect flag set, responding with DISCONNECT response\n"); + + uv_httpsys->disconnectProcessed = TRUE; + flags |= HTTP_SEND_RESPONSE_FLAG_DISCONNECT; + hr = HttpSendHttpResponse( + uv_httpsys->uv_httpsys_server->requestQueue, + uv_httpsys->requestId, + flags, + &uv_httpsys->response, + NULL, + NULL, + NULL, + 0, + &uv_httpsys->uv_async->async_req.u.io.overlapped, + NULL); + + Log("RESP: HttpSendHttpResponse result '%d'\n", hr); + + if (NO_ERROR == hr) + { + //Synchronous completion. + uv_httpsys->synchronousWrite = TRUE; /*JPW Added*/ + httpsys_write_callback(uv_httpsys->uv_async); + + //uv_httpsys may have been freed inside this routine if the write completed + Log("RESP: back from httpsys_write_callback uv_httpsys = '%p'\n", (void*)uv_httpsys); + } + else + { + ErrorIf(ERROR_IO_PENDING != hr, hr); + } + info.GetReturnValue().Set(ERROR_IO_PENDING == hr ? true : false); + return; + } + + //make sure uv_httpsys is still valid + if (uv_httpsys != NULL) { + // Set reason + ErrorIf(NULL == (uv_httpsys->response.pReason = (PCSTR)malloc(reason.length())), + ERROR_NOT_ENOUGH_MEMORY); + uv_httpsys->response.ReasonLength = reason.length(); + memcpy((void*)uv_httpsys->response.pReason, *reason, reason.length()); + + // Set known headers + + knownHeaders = Handle::Cast(options->Get(Nan::New(v8knownHeaders))); + for (unsigned int i = 0; i < knownHeaders->Length(); i++) + { + knownHeader = Handle::Cast(knownHeaders->Get(i)); + int headerIndex = knownHeader->Get(Nan::New(v8id))->Int32Value(); + String::Utf8Value header(knownHeader->Get(Nan::New(v8value))); + ErrorIf(NULL == (uv_httpsys->response.Headers.KnownHeaders[headerIndex].pRawValue = + (PCSTR)malloc(header.length())), + ERROR_NOT_ENOUGH_MEMORY); + uv_httpsys->response.Headers.KnownHeaders[headerIndex].RawValueLength = header.length(); + memcpy((void*)uv_httpsys->response.Headers.KnownHeaders[headerIndex].pRawValue, + *header, header.length()); + } + + // Set unknown headers + + unknownHeaders = Handle::Cast(options->Get(Nan::New(v8unknownHeaders))); + headerNames = unknownHeaders->GetOwnPropertyNames(); + if (headerNames->Length() > 0) + { + ErrorIf(NULL == (uv_httpsys->response.Headers.pUnknownHeaders = + (PHTTP_UNKNOWN_HEADER)malloc(headerNames->Length() * sizeof(HTTP_UNKNOWN_HEADER))), + ERROR_NOT_ENOUGH_MEMORY); + RtlZeroMemory(uv_httpsys->response.Headers.pUnknownHeaders, + headerNames->Length() * sizeof(HTTP_UNKNOWN_HEADER)); + uv_httpsys->response.Headers.UnknownHeaderCount = headerNames->Length(); + for (int i = 0; i < uv_httpsys->response.Headers.UnknownHeaderCount; i++) + { + headerName = headerNames->Get(i)->ToString(); + String::Utf8Value headerNameUtf8(headerName); + String::Utf8Value headerValueUtf8(unknownHeaders->Get(headerName)); + uv_httpsys->response.Headers.pUnknownHeaders[i].NameLength = headerNameUtf8.length(); + ErrorIf(NULL == (uv_httpsys->response.Headers.pUnknownHeaders[i].pName = + (PCSTR)malloc(headerNameUtf8.length())), + ERROR_NOT_ENOUGH_MEMORY); + memcpy((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pName, + *headerNameUtf8, headerNameUtf8.length()); + uv_httpsys->response.Headers.pUnknownHeaders[i].RawValueLength = headerValueUtf8.length(); + ErrorIf(NULL == (uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue = + (PCSTR)malloc(headerValueUtf8.length())), + ERROR_NOT_ENOUGH_MEMORY); + memcpy((void*)uv_httpsys->response.Headers.pUnknownHeaders[i].pRawValue, + *headerValueUtf8, headerValueUtf8.length()); + } + } + + // Prepare response body and determine flags + + CheckError(httpsys_initialize_body_chunks(options, uv_httpsys, &flags)); + if (uv_httpsys->chunk.FromMemory.pBuffer) + { + uv_httpsys->response.EntityChunkCount = 1; + uv_httpsys->response.pEntityChunks = &uv_httpsys->chunk; + } + + // Determine cache policy + + if (HttpCachePolicyTimeToLive == cachePolicy.Policy) + { + // If HTTP.SYS output caching is enabled, establish the duration to cache for + // based on the setting on the message or the global default, in that order of precedence + + cacheDuration = options->Get(Nan::New(v8cacheDuration)); + cachePolicy.SecondsToLive = cacheDuration->IsUint32() ? cacheDuration->Uint32Value() : defaultCacheDuration; + } + // TOOD: support response trailers + + // Initiate async send of the HTTP response headers and optional body + hr = HttpSendHttpResponse( + uv_httpsys->uv_httpsys_server->requestQueue, + uv_httpsys->requestId, + flags, + &uv_httpsys->response, + &cachePolicy, + NULL, + NULL, + 0, + &uv_httpsys->uv_async->async_req.u.io.overlapped, + NULL); + + Log("RESP: sending response data: HttpSendHttpResponse result '%d'\n", hr); + + if (NO_ERROR == hr) + { + // Synchronous completion. + //httpsys_write_callback(uv_httpsys->uv_async, 1); + uv_httpsys->synchronousWrite = TRUE; + httpsys_write_callback(uv_httpsys->uv_async); + Log("RESP: back from httpsys_write_callback uv_httpsys = '%p'\n", (void*)uv_httpsys); + } + else + { + ErrorIf(ERROR_IO_PENDING != hr, hr); + } + } + info.GetReturnValue().Set(ERROR_IO_PENDING == hr ? true : false); + return; Error: - - httpsys_free(uv_httpsys_req, TRUE); - uv_httpsys_req = NULL; - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - - return handleScope.Close(ThrowException(Int32::New(hr))); + Log("RESP: error during httpsys_write_headers\n"); + if (uv_httpsys_req != NULL) { + Log("we have a uv_httpsys_req so we have an upgraded connection, clearing original req uv_httpsys_req = '%I64u'\n", uv_httpsys_req->requestId); + } + httpsys_free(uv_httpsys_req, TRUE); + uv_httpsys_req = NULL; + + Log("call httpsys_free for 'uv_httpsys' request '%I64u'\n", uv_httpsys->requestId); + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + + Isolate* isolate = Isolate::GetCurrent(); + info.GetReturnValue().Set(isolate->ThrowException(Nan::New((int)hr))); } -void httpsys_write_callback(uv_async_t* handle, int status) +void httpsys_write_callback(uv_async_t* handle) { - HTTPSYS_CALLBACK_PREAMBLE; - HRESULT hr = S_OK; - - // Process async completion - - if (uv_httpsys->disconnectProcessed) { - // This was a best-effort termination of a client connection after an unaccepted - // HTTP upgrade request or an error. Free up native resources regardless of the outcome - // of the async operation. - - httpsys_free(uv_httpsys, FALSE); - uv_httpsys = NULL; - } - else if (uv_httpsys->disconnect) { - // A request was made to disconnect the client when an async operation was in progress. - // Now that the async operation completed, initiate the disconnection again. - - uv_httpsys->disconnectProcessed = TRUE; - - CheckError(httpsys_uv_httpsys_init(uv_httpsys, httpsys_write_callback)); - - hr = HttpSendResponseEntityBody( - uv_httpsys->uv_httpsys_server->requestQueue, - uv_httpsys->requestId, - HTTP_SEND_RESPONSE_FLAG_DISCONNECT, - 0, - NULL, - NULL, - NULL, - 0, - &uv_httpsys->uv_async->async_req.overlapped, - NULL); - - if (ERROR_IO_PENDING != hr) - { - // Synchronous completion or an error - execute callback manually to release the uv_httpsys. - httpsys_write_callback(uv_httpsys->uv_async, 1); - } - } - else if (S_OK != overlappedResult) - { - // Async completion failed - notify JavaScript - - httpsys_notify_error( - uv_httpsys, - HTTPSYS_ERROR_WRITING, - (unsigned int)overlappedResult); - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; - } - else - { - // Successful completion - - if (0 == status) - { - // Call completed asynchronously - send notification to JavaScript. - - Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_WRITTEN); - httpsys_make_callback(event); - } - - if (uv_httpsys->lastChunkSent) - { - // Response is completed - clean up resources - httpsys_free(uv_httpsys, FALSE); - uv_httpsys = NULL; - } - } - - return; + Nan::HandleScope handleScope; + uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)handle->data; + NTSTATUS overlappedResult = (NTSTATUS)uv_httpsys->uv_async->async_req.u.io.overlapped.Internal; + ULONG overlappedLength = (ULONG)uv_httpsys->uv_async->async_req.u.io.overlapped.InternalHigh; + + Log("RESP: httpsys_write_callback called for request '%I64u'\n", uv_httpsys->requestId); + BOOL calledSynchronously = uv_httpsys->synchronousWrite; + // Process async completion + if (calledSynchronously) { + Log("**SYNCHRONOUS**\n"); + } + else { + Log("**ASYNCHRONOUSLY**\n"); + } + httpsys_uv_httpsys_close(uv_httpsys); + PHTTP_REQUEST request = (PHTTP_REQUEST)uv_httpsys->buffer; + HRESULT hr = S_OK; + + if (uv_httpsys->disconnectProcessed) { + Log("RESP: client termination due to upgrade or an error, freeing resources\n"); + // This was a best-effort termination of a client connection after an unaccepted + // HTTP upgrade request or an error. Free up native resources regardless of the outcome + // of the async operation. + + httpsys_free(uv_httpsys, FALSE); + uv_httpsys = NULL; + } + else if (uv_httpsys->disconnect) { + Log("RESP: client disconnect request when async in progress\n"); + // A request was made to disconnect the client when an async operation was in progress. + // Now that the async operation completed, initiate the disconnection again. + + uv_httpsys->disconnectProcessed = TRUE; + + uv_httpsys->synchronousWrite = FALSE; + CheckError(httpsys_uv_httpsys_init(uv_httpsys, (uv_async_cb)httpsys_write_callback)); + + hr = HttpSendResponseEntityBody( + uv_httpsys->uv_httpsys_server->requestQueue, + uv_httpsys->requestId, + HTTP_SEND_RESPONSE_FLAG_DISCONNECT, + 0, + NULL, + NULL, + NULL, + 0, + &uv_httpsys->uv_async->async_req.u.io.overlapped, + NULL); + + Log("RESP: HttpSendResponseEntityBody returned hr = '%ld', request '%I64u'\n", hr, uv_httpsys->requestId); + + if (ERROR_IO_PENDING != hr) + { + // Synchronous completion or an error - execute callback manually to release the uv_httpsys. + uv_httpsys->synchronousWrite = TRUE; + httpsys_write_callback(uv_httpsys->uv_async); + Log("RESP: back from httpsys_write_callback uv_httpsys = '%p'\n", (void*)uv_httpsys); + } + } + else if (S_OK != overlappedResult) + { + Log("RESP: write async completion failed\n"); + // Async completion failed - notify JavaScript + uv_httpsys->refCount++; + + httpsys_notify_error( + uv_httpsys, + HTTPSYS_ERROR_WRITING, + (unsigned int)overlappedResult); + + uv_httpsys->refCount--; + Log("RESP: ref count = '%d'\n", uv_httpsys->refCount); + + if (uv_httpsys->refCount == 0) + { + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; + } + } + else + { + // Successful completion + if (!calledSynchronously) + { + // Call completed asynchronously - send notification to JavaScript. + //added ref count as the httpsys_make_callback can result in re-entrance into + //this function which results in memory being de-allocating more than once + Log("RESP: informing javascript that response has been written, request id = '%I64u', uv_httpsys = '%p'\n", uv_httpsys->requestId, (void*)uv_httpsys); + uv_httpsys->refCount++; + Handle event = httpsys_create_event(uv_httpsys, HTTPSYS_WRITTEN); + httpsys_make_callback(event); + Log("RESP: back from javascript uv_httpsys = '%p'\n", (void*)uv_httpsys); + uv_httpsys->refCount--; + } + + //this original logic was NOT correct for the following scenario: + //async write completion calls this routine + //callback to javascript resulting a further pending response write which is the last chunk + //returns to this function with last chunk flag set + //the req resources freed even though there is a pending async write callback + //causing uv_loop to go bang + // + //solution is to check the uv_async handle, if not NULL do not free resources as their is + //a pending sync callback + if (!uv_httpsys->uv_async && uv_httpsys->lastChunkSent && uv_httpsys->refCount == 0) + { + Log("RESP: response is complete, free uv_httpsys\n"); + // Response is completed - clean up resources + httpsys_free(uv_httpsys, FALSE); + uv_httpsys = NULL; + } + } + Log("RESP: exiting httpsys_write_callback "); + if (calledSynchronously) { + Log("**SYNCHRONOUS**\n"); + } + else { + Log("**ASYNCHRONOUSLY**\n"); + } + return; Error: - // The best-effort termination of a client connection failed. Free up the uv_httpsys. + Log("RESP: error during httpsys_write_callback, calling httpsys_free for request '%I64u'\n", uv_httpsys->requestId); + // The best-effort termination of a client connection failed. Free up the uv_httpsys. - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; } HRESULT httpsys_initialize_body_chunks(Handle options, uv_httpsys_t* uv_httpsys, ULONG* flags) { - HRESULT hr; - HandleScope handleScope; - Handle chunks; - - httpsys_free_chunks(uv_httpsys); - - // Copy JavaScript buffers representing response body chunks into a single - // continuous memory block in an HTTP_DATA_CHUNK. - - chunks = Handle::Cast(options->Get(v8chunks)); - if (chunks->Length() > 0) - { - for (unsigned int i = 0; i < chunks->Length(); i++) { - Handle buffer = chunks->Get(i)->ToObject(); - uv_httpsys->chunk.FromMemory.BufferLength += (ULONG)node::Buffer::Length(buffer); - } - - ErrorIf(NULL == (uv_httpsys->chunk.FromMemory.pBuffer = - malloc(uv_httpsys->chunk.FromMemory.BufferLength)), - ERROR_NOT_ENOUGH_MEMORY); - - char* position = (char*)uv_httpsys->chunk.FromMemory.pBuffer; - for (unsigned int i = 0; i < chunks->Length(); i++) - { - Handle buffer = chunks->Get(i)->ToObject(); - memcpy(position, node::Buffer::Data(buffer), node::Buffer::Length(buffer)); - position += node::Buffer::Length(buffer); - } - } - - // Remove the 'chunks' propert from the options object to indicate they have been - // consumed. - - ErrorIf(!options->Set(v8chunks, Undefined()), E_FAIL); - - // Determine whether the last of the response body is to be written out. - - if (options->Get(v8isLastChunk)->BooleanValue()) - { - uv_httpsys->lastChunkSent = 1; - if (uv_httpsys->uv_httpsys_peer) { - // For upgraded requests, the connection must be manually terminated. - *flags |= HTTP_SEND_RESPONSE_FLAG_DISCONNECT; - } - } - else - { - *flags |= HTTP_SEND_RESPONSE_FLAG_MORE_DATA; - } - - return S_OK; + HRESULT hr; + Handle chunks; + + Log("RESP: freeing any previous chunks\n"); + httpsys_free_chunks(uv_httpsys); + + // Copy JavaScript buffers representing response body chunks into a single + // continuous memory block in an HTTP_DATA_CHUNK. + chunks = Handle::Cast(options->Get(Nan::New(v8chunks))); + Log("RESP: initialise response body chunks, number of chunks '%d'\n", chunks->Length()); + + if (chunks->Length() > 0) + { + for (unsigned int i = 0; i < chunks->Length(); i++) { + Handle buffer = chunks->Get(i)->ToObject(); + uv_httpsys->chunk.FromMemory.BufferLength += (ULONG)node::Buffer::Length(buffer); + } + + Log("RESP: total buffer length '%d'\n", uv_httpsys->chunk.FromMemory.BufferLength); + + ErrorIf(NULL == (uv_httpsys->chunk.FromMemory.pBuffer = + malloc(uv_httpsys->chunk.FromMemory.BufferLength)), + ERROR_NOT_ENOUGH_MEMORY); + + //initialise buffer write position to start + char* position = (char*)uv_httpsys->chunk.FromMemory.pBuffer; + for (unsigned int i = 0; i < chunks->Length(); i++) + { + Handle buffer = chunks->Get(i)->ToObject(); + //copy chunk to buffer + memcpy(position, node::Buffer::Data(buffer), node::Buffer::Length(buffer)); + //move buffer write position + position += node::Buffer::Length(buffer); + } + } + + // Remove the 'chunks' property from the options object to indicate they have been + // consumed. + + ErrorIf(!options->Set(Nan::New(v8chunks), Nan::Undefined()), E_FAIL); + + // Determine whether the last of the response body is to be written out. + + if (options->Get(Nan::New(v8isLastChunk))->BooleanValue()) + { + Log("RESP: this was the last chunk, setting last chunk sent\n"); + + uv_httpsys->lastChunkSent = 1; + if (uv_httpsys->uv_httpsys_peer) { + Log("RESP: setting disconnect flag\n"); + // For upgraded requests, the connection must be manually terminated. + *flags |= HTTP_SEND_RESPONSE_FLAG_DISCONNECT; + } + } + else + { + Log("RESP: more data to follow, set more data response flag\n"); + *flags |= HTTP_SEND_RESPONSE_FLAG_MORE_DATA; + } + + Log("exiting httpsys_initialize_body_chunks\n"); + return S_OK; Error: - httpsys_free_chunks(uv_httpsys); + Log("RESP: error during initialise body chunks, calling httpsys_free_chunks for request '%I64u'\n", uv_httpsys->requestId); + httpsys_free_chunks(uv_httpsys); - return hr; + return hr; } -Handle httpsys_write_body(const Arguments& args) +void httpsys_write_body(const Nan::FunctionCallbackInfo& info) { - HTTPSYS_EXPORT_PREAMBLE; - Handle options = args[0]->ToObject(); - ULONG flags = 0; - - // Enable NAGLE if requested - - if (!options->Get(v8noDelay)->BooleanValue()) { - flags |= HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING; - } - - // If this is an upgraded HTTP request, use the peer uv_httpsys for the write operation - - if (uv_httpsys->uv_httpsys_peer) { - uv_httpsys = uv_httpsys->uv_httpsys_peer; - } - - // Initialize libuv handle representing this async operation - - CheckError(httpsys_uv_httpsys_init(uv_httpsys, httpsys_write_callback)); - - // Prepare response body and determine flags - - CheckError(httpsys_initialize_body_chunks(options, uv_httpsys, &flags)); - - // Initiate async send of the HTTP response body - - hr = HttpSendResponseEntityBody( - uv_httpsys->uv_httpsys_server->requestQueue, - uv_httpsys->requestId, - flags, - uv_httpsys->chunk.FromMemory.pBuffer ? 1 : 0, - uv_httpsys->chunk.FromMemory.pBuffer ? &uv_httpsys->chunk : NULL, - NULL, - NULL, - 0, - &uv_httpsys->uv_async->async_req.overlapped, - NULL); - - if (NO_ERROR == hr) - { - // Synchronous completion. - - httpsys_write_callback(uv_httpsys->uv_async, 1); - } - else - { - ErrorIf(ERROR_IO_PENDING != hr, hr); - } - - // Return true if async completion is pending and an event will be generated once completed - return handleScope.Close(Boolean::New(ERROR_IO_PENDING == hr)); + HRESULT hr; + Handle o = Handle::Cast(info[0]); + uv_httpsys_t* uv_httpsys = (uv_httpsys_t*)Nan::GetInternalFieldPointer(o, 0); + + Handle options = info[0]->ToObject(); + ULONG flags = 0; + + Log("RESP: httpsys_write_body called from javascript for request id '%I64u'\n", uv_httpsys->requestId); + // Enable NAGLE if requested + + if (!options->Get(Nan::New(v8noDelay))->BooleanValue()) { + flags |= HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING; + } + + // If this is an upgraded HTTP request, use the peer uv_httpsys for the write operation + if (uv_httpsys->uv_httpsys_peer) { + uv_httpsys = uv_httpsys->uv_httpsys_peer; + Log("RESP: this is an upgraded connection, using uv_httpsys(peer) = '%p'\n", (void*)uv_httpsys); + } + + // Initialize libuv handle representing this async operation + uv_httpsys->synchronousWrite = FALSE; + CheckError(httpsys_uv_httpsys_init(uv_httpsys, (uv_async_cb)httpsys_write_callback)); + + // Prepare response body and determine flags + CheckError(httpsys_initialize_body_chunks(options, uv_httpsys, &flags)); + + // Initiate async send of the HTTP response body + hr = HttpSendResponseEntityBody( + uv_httpsys->uv_httpsys_server->requestQueue, + uv_httpsys->requestId, + flags, + uv_httpsys->chunk.FromMemory.pBuffer ? 1 : 0, + uv_httpsys->chunk.FromMemory.pBuffer ? &uv_httpsys->chunk : NULL, + NULL, + NULL, + 0, + &uv_httpsys->uv_async->async_req.u.io.overlapped, + NULL); + + Log("RESP: HttpSendResponseEntityBody: hr = '%d' for request '%I64u'\n", hr, uv_httpsys->requestId); + + if (NO_ERROR == hr) + { + // Synchronous completion. + uv_httpsys->synchronousWrite = TRUE; + httpsys_write_callback(uv_httpsys->uv_async); + } + else + { + ErrorIf(ERROR_IO_PENDING != hr, hr); + } + // Return true if async completion is pending and an event will be generated once completed + info.GetReturnValue().Set(ERROR_IO_PENDING == hr ? true : false); + return; Error: - httpsys_free(uv_httpsys, TRUE); - uv_httpsys = NULL; + Log("RESP: error during write body, performing clean-up of request '%I64u'\n", uv_httpsys->requestId); + httpsys_free(uv_httpsys, TRUE); + uv_httpsys = NULL; - return handleScope.Close(ThrowException(Int32::New(hr))); + Isolate* isolate = Isolate::GetCurrent(); + info.GetReturnValue().Set(isolate->ThrowException(Nan::New(hr))); } -void init(Handle target) + +void init(v8::Local target) { - HandleScope handleScope; - - // Create V8 representation of HTTP verb strings to reuse across requests - - for (int i = 0; i < HttpVerbMaximum; i++) - { - if (verbs[i]) - { - v8verbs[i] = Persistent::New(String::New(verbs[i])); - } - } - - // Create V8 representation of HTTP header names to reuse across requests - - for (int i = 0; i < HttpHeaderRequestMaximum; i++) - { - if (requestHeaders[i]) - { - v8httpRequestHeaderNames[i] = Persistent::New(String::New(requestHeaders[i])); - } - } - - // Create global V8 strings to reuse across requests - - v8method = Persistent::New(String::NewSymbol("method")); - v8uv_httpsys_server = Persistent::New(String::NewSymbol("uv_httpsys_server")); - v8req = Persistent::New(String::NewSymbol("req")); - v8httpHeaders = Persistent::New(String::NewSymbol("headers")); - v8httpVersionMinor = Persistent::New(String::NewSymbol("httpVersionMinor")); - v8httpVersionMajor = Persistent::New(String::NewSymbol("httpVersionMajor")); - v8eventType = Persistent::New(String::NewSymbol("eventType")); - v8code = Persistent::New(String::NewSymbol("code")); - v8url = Persistent::New(String::NewSymbol("url")); - v8uv_httpsys = Persistent::New(String::NewSymbol("uv_httpsys")); - v8data = Persistent::New(String::NewSymbol("data")); - v8statusCode = Persistent::New(String::NewSymbol("statusCode")); - v8reason = Persistent::New(String::NewSymbol("reason")); - v8knownHeaders = Persistent::New(String::NewSymbol("knownHeaders")); - v8unknownHeaders = Persistent::New(String::NewSymbol("unknownHeaders")); - v8isLastChunk = Persistent::New(String::NewSymbol("isLastChunk")); - v8chunks = Persistent::New(String::NewSymbol("chunks")); - v8id = Persistent::New(String::NewSymbol("id")); - v8value = Persistent::New(String::NewSymbol("value")); - v8cacheDuration = Persistent::New(String::NewSymbol("cacheDuration")); - v8disconnect = Persistent::New(String::NewSymbol("disconnect")); - v8noDelay = Persistent::New(String::NewSymbol("noDelay")); - v8clientCertInfo = Persistent::New(String::NewSymbol("clientCertInfo")); - v8cert = Persistent::New(String::NewSymbol("cert")); - v8authorizationError = Persistent::New(String::NewSymbol("authorizationError")); - v8subject = Persistent::New(String::NewSymbol("subject")); - v8issuer = Persistent::New(String::NewSymbol("issuer")); - v8validFrom = Persistent::New(String::NewSymbol("valid_from")); - v8validTo = Persistent::New(String::NewSymbol("valid_to")); - v8fingerprint = Persistent::New(String::NewSymbol("fingerprint")); - v8encoded = Persistent::New(String::NewSymbol("encoded")); - - // Capture the constructor function of JavaScript Buffer implementation - - bufferConstructor = Persistent::New(Handle::Cast( - Context::GetCurrent()->Global()->Get(String::New("Buffer")))); - - // Create an object template of an object to roundtrip a native pointer to JavaScript - - httpsysObject = Persistent::New(ObjectTemplate::New()); - httpsysObject->SetInternalFieldCount(1); - - // Obtain reference to RtlTimeToSecondsSince1970 function - - HMODULE ntdll = LoadLibrary("Ntdll.dll"); - RtlTimeToSecondsSince1970Impl = - (RtlTimeToSecondsSince1970Func)GetProcAddress(ntdll, "RtlTimeToSecondsSince1970"); - - // Determine whether to propagate raw client X.509 certificate to the application with HTTPS - - httpsys_export_client_cert = (0 < GetEnvironmentVariable("HTTPSYS_EXPORT_CLIENT_CERT", NULL, 0)); - - // Create exports - - NODE_SET_METHOD(target, "httpsys_init", httpsys_init); - NODE_SET_METHOD(target, "httpsys_listen", httpsys_listen); - NODE_SET_METHOD(target, "httpsys_stop_listen", httpsys_stop_listen); - NODE_SET_METHOD(target, "httpsys_resume", httpsys_resume); - NODE_SET_METHOD(target, "httpsys_write_headers", httpsys_write_headers); - NODE_SET_METHOD(target, "httpsys_write_body", httpsys_write_body); + // Create V8 representation of HTTP verb strings to reuse across requests + for (int i = 0; i < HttpVerbMaximum; i++) { + if (verbs[i]) { + v8verbs[i].Reset(Nan::New(verbs[i]).ToLocalChecked()); + } + } + + // Create V8 representation of HTTP header names to reuse across requests + for (int i = 0; i < HttpHeaderRequestMaximum; i++) { + if (requestHeaders[i]) { + v8httpRequestHeaderNames[i].Reset(Nan::New(requestHeaders[i]).ToLocalChecked()); + } + } + + // Create global V8 strings to reuse across requests + v8remoteAddress.Reset(Nan::New("remoteAddress").ToLocalChecked()); + v8method.Reset(Nan::New("method").ToLocalChecked()); + v8uv_httpsys_server.Reset(Nan::New("uv_httpsys_server").ToLocalChecked()); + v8req.Reset(Nan::New("req").ToLocalChecked()); + v8httpHeaders.Reset(Nan::New("headers").ToLocalChecked()); + v8httpVersionMinor.Reset(Nan::New("httpVersionMinor").ToLocalChecked()); + v8httpVersionMajor.Reset(Nan::New("httpVersionMajor").ToLocalChecked()); + v8eventType.Reset(Nan::New("eventType").ToLocalChecked()); + v8code.Reset(Nan::New("code").ToLocalChecked()); + v8url.Reset(Nan::New("url").ToLocalChecked()); + v8uv_httpsys.Reset(Nan::New("uv_httpsys").ToLocalChecked()); + v8data.Reset(Nan::New("data").ToLocalChecked()); + v8statusCode.Reset(Nan::New("statusCode").ToLocalChecked()); + v8reason.Reset(Nan::New("reason").ToLocalChecked()); + v8knownHeaders.Reset(Nan::New("knownHeaders").ToLocalChecked()); + v8unknownHeaders.Reset(Nan::New("unknownHeaders").ToLocalChecked()); + v8isLastChunk.Reset(Nan::New("isLastChunk").ToLocalChecked()); + v8chunks.Reset(Nan::New("chunks").ToLocalChecked()); + v8id.Reset(Nan::New("id").ToLocalChecked()); + v8value.Reset(Nan::New("value").ToLocalChecked()); + v8cacheDuration.Reset(Nan::New("cacheDuration").ToLocalChecked()); + v8disconnect.Reset(Nan::New("disconnect").ToLocalChecked()); + v8noDelay.Reset(Nan::New("noDelay").ToLocalChecked()); + v8clientCertInfo.Reset(Nan::New("clientCertInfo").ToLocalChecked()); + v8cert.Reset(Nan::New("cert").ToLocalChecked()); + v8authorizationError.Reset(Nan::New("authorizationError").ToLocalChecked()); + v8subject.Reset(Nan::New("subject").ToLocalChecked()); + v8issuer.Reset(Nan::New("issuer").ToLocalChecked()); + v8validFrom.Reset(Nan::New("valid_from").ToLocalChecked()); + v8validTo.Reset(Nan::New("valid_to").ToLocalChecked()); + v8fingerprint.Reset(Nan::New("fingerprint").ToLocalChecked()); + v8encoded.Reset(Nan::New("encoded").ToLocalChecked()); + + // Capture the constructor function of JavaScript Buffer implementation + bufferConstructor.Reset(Nan::GetCurrentContext()->Global()->Get(Nan::New("Buffer").ToLocalChecked()).As()); + + // Create an object template of an object to roundtrip a native pointer to JavaScript + Local o = Nan::New(); + o->SetInternalFieldCount(1); + httpsysObject.Reset(o); + + // Obtain reference to RtlTimeToSecondsSince1970 function + HMODULE ntdll = LoadLibrary("Ntdll.dll"); + RtlTimeToSecondsSince1970Impl = + (RtlTimeToSecondsSince1970Func)GetProcAddress(ntdll, "RtlTimeToSecondsSince1970"); + + // Determine whether to propagate raw client X.509 certificate to the application with HTTPS + + httpsys_export_client_cert = (0 < GetEnvironmentVariable("HTTPSYS_EXPORT_CLIENT_CERT", NULL, 0)); + + // Create exports + target->Set(Nan::New("httpsys_init").ToLocalChecked(), Nan::New(httpsys_init)->GetFunction()); + target->Set(Nan::New("httpsys_listen").ToLocalChecked(), Nan::New(httpsys_listen)->GetFunction()); + target->Set(Nan::New("httpsys_stop_listen").ToLocalChecked(), Nan::New(httpsys_stop_listen)->GetFunction()); + target->Set(Nan::New("httpsys_resume").ToLocalChecked(), Nan::New(httpsys_resume)->GetFunction()); + target->Set(Nan::New("httpsys_write_headers").ToLocalChecked(), Nan::New(httpsys_write_headers)->GetFunction()); + target->Set(Nan::New("httpsys_write_body").ToLocalChecked(), Nan::New(httpsys_write_body)->GetFunction()); } -NODE_MODULE(httpsys, init); +NODE_MODULE(httpsys, init) From 1290b7971dd4144d25b14f37699e1cb5dfa352cb Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:08:23 +0000 Subject: [PATCH 21/29] Update to support node v8, v9 and v10. --- src/httpsys.h | 108 +++++++++++++++++++++++++++++--------------------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/src/httpsys.h b/src/httpsys.h index 12e46ef..3b1b883 100644 --- a/src/httpsys.h +++ b/src/httpsys.h @@ -1,8 +1,14 @@ +#pragma once + #ifndef __HTTPSYS_H #define __HTTPSYS_H -// TODO: implement httpsys_resume +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 +#endif +// TODO: implement httpsys_resume +#include #include #include #include @@ -15,6 +21,12 @@ using namespace v8; #pragma comment(lib, "httpapi.lib") #pragma comment(lib, "crypt32.lib") +#define Log(format, ...) \ + memset(logBuf, 0, 1023); \ + _snprintf(logBuf, 1023, format, __VA_ARGS__); \ + for (int i = 0; i < 1024; i++) { if (logBuf[i] == '%') { logBuf[i] = ' '; } } \ + if (debugOut) { fprintf(stderr, logBuf); } + #define ErrorIf(expr, hresult) \ if (expr) \ { \ @@ -34,57 +46,62 @@ using namespace v8; // RtlTimeToSecondsSince1970 declaration -typedef BOOLEAN (WINAPI *RtlTimeToSecondsSince1970Func)(PLARGE_INTEGER, PULONG); +typedef BOOLEAN(WINAPI *RtlTimeToSecondsSince1970Func)(PLARGE_INTEGER, PULONG); // Wrapper of the uv_prepare_t associated with an active server struct uv_httpsys_s; typedef struct uv_httpsys_server_s { - uv_prepare_t uv_prepare; - HTTP_SERVER_SESSION_ID sessionId; - HTTP_URL_GROUP_ID groupId; - HANDLE requestQueue; - unsigned int readsToInitialize; - int refCount; - BOOL closing; - Persistent event; + uv_prepare_t uv_prepare; + HTTP_SERVER_SESSION_ID sessionId; + HTTP_URL_GROUP_ID groupId; + HANDLE requestQueue; + unsigned int readsToInitialize; + int refCount; + BOOL closing; + Nan::Persistent event; } uv_httpsys_server_t; // Wrapper of the uv_async_t with HTTP.SYS specific data typedef struct uv_httpsys_s { - uv_async_t* uv_async; - HTTP_REQUEST_ID requestId; - HTTP_RESPONSE response; - void* buffer; - unsigned int bufferSize; - HTTP_DATA_CHUNK chunk; - int lastChunkSent; - BOOL responseStarted; - BOOL disconnect; - BOOL disconnectProcessed; - BOOL closed; - uv_httpsys_server_t* uv_httpsys_server; - struct uv_httpsys_s* uv_httpsys_peer; - Persistent event; + uv_async_t* uv_async; + HTTP_REQUEST_ID requestId; + HTTP_RESPONSE response; + void* buffer; + unsigned int bufferSize; + HTTP_DATA_CHUNK chunk; + int lastChunkSent; + BOOL responseStarted; + BOOL disconnect; + BOOL disconnectProcessed; + BOOL closed; + BOOL synchronous; + BOOL synchronousWrite; + int refCount; + uv_httpsys_server_t* uv_httpsys_server; + struct uv_httpsys_s* uv_httpsys_peer; + Nan::Persistent event; } uv_httpsys_t; // Types of events passed to the JavaScript callback from native typedef enum { - HTTPSYS_ERROR_INITIALIZING_REQUEST = 1, - HTTPSYS_ERROR_NEW_REQUEST, - HTTPSYS_NEW_REQUEST, - HTTPSYS_ERROR_INITIALIZING_READ_REQUEST_BODY, - HTTPSYS_END_REQUEST, - HTTPSYS_ERROR_READ_REQUEST_BODY, - HTTPSYS_REQUEST_BODY, - HTTPSYS_WRITTEN, - HTTPSYS_ERROR_WRITING, - HTTPSYS_SERVER_CLOSED + HTTPSYS_ERROR_INITIALIZING_REQUEST = 1, + HTTPSYS_ERROR_NEW_REQUEST, + HTTPSYS_NEW_REQUEST, + HTTPSYS_ERROR_INITIALIZING_READ_REQUEST_BODY, + HTTPSYS_END_REQUEST, + HTTPSYS_ERROR_READ_REQUEST_BODY, + HTTPSYS_REQUEST_BODY, + HTTPSYS_WRITTEN, + HTTPSYS_ERROR_WRITING, + HTTPSYS_SERVER_CLOSED } uv_httpsys_event_type; +#define HTTPSYS_HTTP_TRACE 99 + // Utility functions Handle httpsys_create_event(uv_httpsys_t* uv_httpsys, int eventType); @@ -102,23 +119,24 @@ Handle httpsys_create_client_cert_info(PHTTP_SSL_CLIENT_CERT_INFO info); // HTTP processing state machine actions and events -void httpsys_new_request_callback(uv_async_t* handle, int status); -void httpsys_prepare_new_requests(uv_prepare_t* handle, int status); +void httpsys_new_request_callback(uv_async_t* handle); +void httpsys_prepare_new_requests(uv_prepare_t* handle); +void httpsys_read_request_body_callback(uv_async_t* handle); +void httpsys_write_callback(uv_async_t* handle); + HRESULT httpsys_initiate_new_request(uv_httpsys_t* uv_httpsys); -void httpsys_read_request_body_callback(uv_async_t* handle, int status); HRESULT httpsys_read_request_body_loop(uv_httpsys_t* uv_httpsys); HRESULT httpsys_initiate_read_request_body(uv_httpsys_t* uv_httpsys); -void httpsys_write_callback(uv_async_t* handle, int status); // Exports -Handle httpsys_init(const Arguments& args); -Handle httpsys_listen(const Arguments& args); -Handle httpsys_stop_listen(const Arguments& args); -Handle httpsys_resume(const Arguments& args); -Handle httpsys_write_headers(const Arguments& args); -Handle httpsys_write_body(const Arguments& args); +void httpsys_init(const Nan::FunctionCallbackInfo& info); +void httpsys_listen(const Nan::FunctionCallbackInfo& info); +void httpsys_stop_listen(const Nan::FunctionCallbackInfo& info); +void httpsys_resume(const Nan::FunctionCallbackInfo& info); +void httpsys_write_headers(const Nan::FunctionCallbackInfo& info); +void httpsys_write_body(const Nan::FunctionCallbackInfo& info); -void init(Handle target); +void init(v8::Local target); #endif From be7ab0a1e22d02854aac72a519389acc2ed78aa1 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:09:43 +0000 Subject: [PATCH 22/29] Update to support node v8, v9 and v10. --- tools/build.bat | 152 ++++++++++++++++++++++----------------------- tools/buildall.bat | 4 +- tools/builddev.bat | 6 +- tools/download.js | 24 +++---- tools/install.bat | 6 +- 5 files changed, 96 insertions(+), 96 deletions(-) diff --git a/tools/build.bat b/tools/build.bat index e9ce0c9..022e1d9 100644 --- a/tools/build.bat +++ b/tools/build.bat @@ -1,76 +1,76 @@ -@echo off -set SELF=%~dp0 -if "%1" equ "" ( - echo Usage: build.bat debug^|release "{version} {version}" ... - echo e.g. build.bat release "0.8.22 0.10.0" - exit /b -1 -) - -SET FLAVOR=%1 -shift -if "%FLAVOR%" equ "" set FLAVOR=release -for %%i in (node.exe) do set NODEEXE=%%~$PATH:i -if not exist "%NODEEXE%" ( - echo Cannot find node.exe - popd - exit /b -1 -) -for %%i in ("%NODEEXE%") do set NODEDIR=%%~dpi -SET DESTDIRROOT=%SELF%\..\lib\native\win32 -set VERSIONS= -:harvestVersions -if "%1" neq "" ( - set VERSIONS=%VERSIONS% %1 - shift - goto :harvestVersions -) -if "%VERSIONS%" equ "" set VERSIONS=0.10.0 -pushd %SELF%\.. -for %%V in (%VERSIONS%) do call :build ia32 x86 %%V -for %%V in (%VERSIONS%) do call :build x64 x64 %%V -popd - -exit /b 0 - -:build - -set DESTDIR=%DESTDIRROOT%\%1\%3 -if exist "%DESTDIR%\node.exe" goto gyp -if not exist "%DESTDIR%\NUL" mkdir "%DESTDIR%" -echo Downloading node.exe %2 %3... -node %SELF%\download.js %2 %3 "%DESTDIR%" -if %ERRORLEVEL% neq 0 ( - echo Cannot download node.exe %2 v%3 - exit /b -1 -) - -:gyp - -echo Building httpsys.node %FLAVOR% for node.js %2 v%3 -set NODEEXE=%DESTDIR%\node.exe -set GYP=%APPDATA%\npm\node_modules\node-gyp\bin\node-gyp.js -if not exist "%GYP%" ( - echo Cannot find node-gyp at %GYP%. Make sure to install with npm install node-gyp -g - exit /b -1 -) - -"%NODEEXE%" "%GYP%" configure build --msvs_version=2012 -%FLAVOR% -if %ERRORLEVEL% neq 0 ( - echo Error building httpsys.node %FLAVOR% for node.js %2 v%3 - exit /b -1 -) - -echo %DESTDIR% -copy /y .\build\%FLAVOR%\httpsys.node "%DESTDIR%" -if %ERRORLEVEL% neq 0 ( - echo Error copying httpsys.node %FLAVOR% for node.js %2 v%3 - exit /b -1 -) - -copy /y "%DESTDIR%\..\msvcr110.dll" "%DESTDIR%" -if %ERRORLEVEL% neq 0 ( - echo Error copying msvcr110.dll %FLAVOR% to %DESTDIR% - exit /b -1 -) - -echo Success building httpsys.node %FLAVOR% for node.js %2 v%3 +@echo off +set SELF=%~dp0 +if "%1" equ "" ( + echo Usage: build.bat debug^|release "{version} {version}" ... + echo e.g. build.bat release "10.13.0" + exit /b -1 +) + +SET FLAVOR=%1 +shift +if "%FLAVOR%" equ "" set FLAVOR=release +for %%i in (node.exe) do set NODEEXE=%%~$PATH:i +if not exist "%NODEEXE%" ( + echo Cannot find node.exe + popd + exit /b -1 +) +for %%i in ("%NODEEXE%") do set NODEDIR=%%~dpi +SET DESTDIRROOT=%SELF%\..\lib\native\win32 +set VERSIONS= +:harvestVersions +if "%1" neq "" ( + set VERSIONS=%VERSIONS% %1 + shift + goto :harvestVersions +) +if "%VERSIONS%" equ "" set VERSIONS=10.13.0 +pushd %SELF%\.. +for %%V in (%VERSIONS%) do call :build ia32 x86 %%V +for %%V in (%VERSIONS%) do call :build x64 x64 %%V +popd + +exit /b 0 + +:build + +set DESTDIR=%DESTDIRROOT%\%1\%3 +if exist "%DESTDIR%\node.exe" goto gyp +if not exist "%DESTDIR%\NUL" mkdir "%DESTDIR%" +echo Downloading node.exe %2 %3... +node %SELF%\download.js %2 %3 "%DESTDIR%" +if %ERRORLEVEL% neq 0 ( + echo Cannot download node.exe %2 v%3 + exit /b -1 +) + +:gyp + +echo Building httpsys.node %FLAVOR% for node.js %2 v%3 +set NODEEXE=%DESTDIR%\node.exe +set GYP=%APPDATA%\npm\node_modules\node-gyp\bin\node-gyp.js +if not exist "%GYP%" ( + echo Cannot find node-gyp at %GYP%. Make sure to install with npm install node-gyp -g + exit /b -1 +) + +"%NODEEXE%" "%GYP%" configure build --msvs_version=2015 -%FLAVOR% +if %ERRORLEVEL% neq 0 ( + echo Error building httpsys.node %FLAVOR% for node.js %2 v%3 + exit /b -1 +) + +echo %DESTDIR% +copy /y .\build\%FLAVOR%\httpsys.node "%DESTDIR%" +if %ERRORLEVEL% neq 0 ( + echo Error copying httpsys.node %FLAVOR% for node.js %2 v%3 + exit /b -1 +) + +copy /y "%DESTDIR%\..\msvcr110.dll" "%DESTDIR%" +if %ERRORLEVEL% neq 0 ( + echo Error copying msvcr110.dll %FLAVOR% to %DESTDIR% + exit /b -1 +) + +echo Success building httpsys.node %FLAVOR% for node.js %2 v%3 diff --git a/tools/buildall.bat b/tools/buildall.bat index 512e2ea..3a72e8b 100644 --- a/tools/buildall.bat +++ b/tools/buildall.bat @@ -1,2 +1,2 @@ -@echo off -%~dp0\build.bat release 0.6.20 0.8.22 0.10.15 +@echo off +%~dp0\build.bat release 8.9.4 9.9.0 10.13.0 diff --git a/tools/builddev.bat b/tools/builddev.bat index ad26153..0d67506 100644 --- a/tools/builddev.bat +++ b/tools/builddev.bat @@ -1,4 +1,4 @@ -@echo off -pushd %~dp0\.. -call node-gyp configure build --msvs_version=2012 -debug +@echo off +pushd %~dp0\.. +call node-gyp configure build --msvs_version=2015 -debug popd \ No newline at end of file diff --git a/tools/download.js b/tools/download.js index c036d71..34f4214 100644 --- a/tools/download.js +++ b/tools/download.js @@ -1,13 +1,13 @@ -var http = require('http'); - -var url = 'http://nodejs.org/dist/v' + process.argv[3] + '/' - + (process.argv[2] === 'x86' ? '/node.exe' : '/x64/node.exe'); - -console.log(url); -http.get(url, function (res) { - if (res.statusCode !== 200) - throw new Error('HTTP response status code ' + res.statusCode); - - var stream = require('fs').createWriteStream(process.argv[4] + '/node.exe'); - res.pipe(stream); +var http = require('http'); + +var url = 'http://nodejs.org/dist/v' + process.argv[3] + '/' + + (process.argv[2] === 'x86' ? '/win-x86/node.exe' : '/win-x64/node.exe'); + +console.log(url); +http.get(url, function (res) { + if (res.statusCode !== 200) + throw new Error('HTTP response status code ' + res.statusCode); + + var stream = require('fs').createWriteStream(process.argv[4] + '/node.exe'); + res.pipe(stream); }); \ No newline at end of file diff --git a/tools/install.bat b/tools/install.bat index c7e6045..45fed49 100644 --- a/tools/install.bat +++ b/tools/install.bat @@ -1,4 +1,4 @@ -@echo off -set LIBROOT=%~dp0\..\lib\native\win32 -for /F %%D in ('dir /b /ad "%LIBROOT%\ia32"') do copy /y "%LIBROOT%\ia32\msvcr110.dll" "%LIBROOT%\ia32\%%D" 2>&1 > nul +@echo off +set LIBROOT=%~dp0\..\lib\native\win32 +for /F %%D in ('dir /b /ad "%LIBROOT%\ia32"') do copy /y "%LIBROOT%\ia32\msvcr110.dll" "%LIBROOT%\ia32\%%D" 2>&1 > nul for /F %%D in ('dir /b /ad "%LIBROOT%\x64"') do copy /y "%LIBROOT%\x64\msvcr110.dll" "%LIBROOT%\x64\%%D" 2>&1 > nul \ No newline at end of file From 827412a771016aa3a562f717c10256d971dc47b7 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:10:45 +0000 Subject: [PATCH 23/29] Update to support node v8, v9 and v10. --- test/102_hello.js | 7 ++++-- test/103_slipstream.js | 2 +- test/201_ws.js | 11 ++++++--- test/401_socketio.js | 52 +++++++++++++++++++++++++--------------- test/501_https_mutual.js | 5 +++- 5 files changed, 51 insertions(+), 26 deletions(-) diff --git a/test/102_hello.js b/test/102_hello.js index d9d6eca..f3b0625 100644 --- a/test/102_hello.js +++ b/test/102_hello.js @@ -1,5 +1,8 @@ -var http = require('../lib/httpsys.js').http() - , https = require('../lib/httpsys.js').https() +//allow self signed certificates +//process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +var http = require('httpsys').http() + , https = require('httpsys').https() , fs = require('fs') , assert = require('assert'); diff --git a/test/103_slipstream.js b/test/103_slipstream.js index 3b39166..3a05e4f 100644 --- a/test/103_slipstream.js +++ b/test/103_slipstream.js @@ -1,4 +1,4 @@ -require('../lib/httpsys').slipstream(); +require('httpsys').slipstream(); var http = require('http') , assert = require('assert'); diff --git a/test/201_ws.js b/test/201_ws.js index 8f14b9d..8c31021 100644 --- a/test/201_ws.js +++ b/test/201_ws.js @@ -1,5 +1,10 @@ -var http = require('../lib/httpsys.js').http() - , https = require('../lib/httpsys.js').https() +//allow self signed certificates +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + + + +var http = require('httpsys').http() + , https = require('httpsys').https() , WebSocket = require('ws') , WebSocketServer = require('ws').Server , fs = require('fs') @@ -67,7 +72,7 @@ describe('201_ws.js: einaros/ws', function () { // when SSL is used, reject all server certificates except the one used in the test: ws = new WebSocket('wss://localhost:' + sslport + '/', { agent: false, - rejectUnauthorized: true, + rejectUnauthorized: false, ca: [ serverCert ] }); } diff --git a/test/401_socketio.js b/test/401_socketio.js index 89b84b1..3490427 100644 --- a/test/401_socketio.js +++ b/test/401_socketio.js @@ -1,16 +1,19 @@ -var http = require('../lib/httpsys.js').http() - , https = require('../lib/httpsys.js').https() +//allow self signed certificates +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +var http = require('httpsys').http() + , https = require('httpsys').https() , socketio = require('socket.io') , socketio_client = require('socket.io-client') + , fs = require('fs') , assert = require('assert'); +var domain = "http://localhost"; var port = process.env.PORT || 3401; var sslport = process.env.PORT || 3421; -var server; -// Enable node.js v0.10 to accept self-signed X.509 server certificates as per -// http://stackoverflow.com/questions/15365772/socket-io-ssl-self-signed-ca-certificate-gives-error-when-connecting -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; +var server; +var serverCert = fs.readFileSync(__dirname + '\\..\\performance\\x509-sha1.pem'); describe('401_socketio.js: socket.io', function () { @@ -31,7 +34,7 @@ describe('401_socketio.js: socket.io', function () { }); it('works with HTTP', function (done) { - testTransport('xhr-polling', false, done); + testTransport('polling', false, done); }); it('works with WSS', function (done) { @@ -39,32 +42,44 @@ describe('401_socketio.js: socket.io', function () { }); it('works with HTTPS', function (done) { - testTransport('xhr-polling', true, done); + testTransport('polling', true, done); }); function testTransport(transport, secure, done) { + + //create and listen on sever port if (secure) { server = https.createServer({}, function (req, res) { throw new Error('Regular HTTPS request detected.'); }); + + server.on('error', function (err) { + throw new Error('failed to listen on ' + sslport); + }).listen(domain + ":" + sslport + "/", function () { + //console.log('listening on ' + sslport); + }); } else { server = http.createServer(function (req, res) { throw new Error('Regular HTTP request detected.'); }); + + server.on('error', function (err) { + throw new Error('failed to listen on ' + port); + }).listen(domain + ":" + port + "/", function () { + + }); } + //configure socketio to listen on server port var wss = socketio.listen(server, { log: false }); var refCount = 2; - wss.configure(function() { - wss.set('transports', [ transport ]); - }); - var serverLog = []; var clientLog = []; var toSend = ['one', 'two', 'three', 'four']; + //configure socketio server event listeners wss.sockets.on('connection', function(ws) { serverLog.push('connection'); ws.on('message', function(message) { @@ -76,17 +91,17 @@ describe('401_socketio.js: socket.io', function () { }); }); + //perform client connection to listening server if (secure) { - server.listen(sslport); - var ws = socketio_client.connect('https://localhost:' + sslport); - sslport++; // for subsequent tests + var ws = socketio_client.connect(domain + ":" + sslport); + sslport++; // for subsequent tests } else { - server.listen(port); - var ws = socketio_client.connect('http://localhost:' + port); - port++; // for subsequent tests + var ws = socketio_client.connect(domain + ":" + port); + port++; // for subsequent tests } + //configure socketio client event listeners ws.on('connect', function() { clientLog.push('connect'); sendNext(); @@ -111,5 +126,4 @@ describe('401_socketio.js: socket.io', function () { } } } - }); \ No newline at end of file diff --git a/test/501_https_mutual.js b/test/501_https_mutual.js index 75eee6d..80adf0b 100644 --- a/test/501_https_mutual.js +++ b/test/501_https_mutual.js @@ -1,4 +1,7 @@ -var https = require('../lib/httpsys.js').https() +//allow self signed certificates +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +var https = require('../index.js').https() , fs = require('fs') , assert = require('assert'); From 39ae23d72deb2db92660068a20436ca08096aa45 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:11:22 +0000 Subject: [PATCH 24/29] Update to support node v8, v9 and v10. --- samples/101_server.js | 2 +- samples/102_server_bar.js | 2 +- samples/102_server_foo.js | 2 +- samples/103_https.js | 2 +- samples/104_output_caching.js | 4 ++-- samples/105_cluster.js | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/samples/101_server.js b/samples/101_server.js index d8d6a70..05efd7f 100644 --- a/samples/101_server.js +++ b/samples/101_server.js @@ -1,5 +1,5 @@ //var http = require('http'); -var http = require('../lib/httpsys').http(); +var http = require('../index').http(); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); diff --git a/samples/102_server_bar.js b/samples/102_server_bar.js index 3130a45..b7ef836 100644 --- a/samples/102_server_bar.js +++ b/samples/102_server_bar.js @@ -1,4 +1,4 @@ -var http = require('../lib/httpsys').http(); +var http = require('../index').http(); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); diff --git a/samples/102_server_foo.js b/samples/102_server_foo.js index ebb2f0a..8b344eb 100644 --- a/samples/102_server_foo.js +++ b/samples/102_server_foo.js @@ -1,4 +1,4 @@ -var http = require('../lib/httpsys').http(); +var http = require('../index').http(); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); diff --git a/samples/103_https.js b/samples/103_https.js index f2fafe9..398c690 100644 --- a/samples/103_https.js +++ b/samples/103_https.js @@ -1,4 +1,4 @@ -var https = require('../lib/httpsys').https(); +var https = require('../index').https(); var options = {}; https.createServer(options, function (req, res) { diff --git a/samples/104_output_caching.js b/samples/104_output_caching.js index 519b9d7..e4cbcbd 100644 --- a/samples/104_output_caching.js +++ b/samples/104_output_caching.js @@ -1,11 +1,11 @@ // set HTTPSYS_CACHE_DURATION=15 // netsh http show cachestate -var http = require('../lib/httpsys').http(); +var http = require('../index').http(); http.createServer(function (req, res) { console.log('Request for ' + req.url); res.writeHead(200, { 'Content-Type': 'text/html;charset=UTF-8' }); - // res.cacheDuration = 5; // cache this particular response for 5 seconds + //res.cacheDuration = 5; // cache this particular response for 5 seconds res.end('Hello, world! Time on server is ' + new Date()); }).listen(8080); \ No newline at end of file diff --git a/samples/105_cluster.js b/samples/105_cluster.js index e34c017..72a1b0b 100644 --- a/samples/105_cluster.js +++ b/samples/105_cluster.js @@ -1,4 +1,4 @@ -var http = require('../lib/httpsys').http(); +var http = require('../index').http(); var cluster = require('cluster'); var numCPUs = require('os').cpus().length; From 241c513bd0176ec7111a2b73f9c486089689a38a Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:13:11 +0000 Subject: [PATCH 25/29] Update to support node v8, v9 and v10. --- index.js | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 index.js diff --git a/index.js b/index.js new file mode 100644 index 0000000..25d8842 --- /dev/null +++ b/index.js @@ -0,0 +1,126 @@ +var version = require('./package.json').version + , httpsys = require('./lib/httpsys_native') + , HttpServer = require('./lib/HttpServer') + , HttpsServer = require('./lib/HttpsServer') + , Server = require('./lib/Server') + , ServerRequest = require('./lib/ServerRequest') + , ServerResponse = require('./lib/ServerResponse') + , util = require('util'); + +httpsys.httpsys_init({ + initialBufferSize: (+process.env.HTTPSYS_BUFFER_SIZE) || 16384, + requestQueueLength: (+process.env.HTTPSYS_REQUEST_QUEUE_LENGTH) || 5000, + pendingReadCount: (+process.env.HTTPSYS_PENDING_READ_COUNT) || 1, + cacheDuration: isNaN(process.env.HTTPSYS_CACHE_DURATION) ? -1 : (+process.env.HTTPSYS_CACHE_DURATION), + callback: Server._dispatch +}); + +function addClientStack(target, source) { + [ 'STATUS_CODES', + 'IncomingMessage', + 'OutgoingMessage', + 'Agent', + 'globalAgent', + 'ClientRequest', + 'request', + 'get', + 'Client', + 'createClient' + ].forEach(function (api) { + if (source[api]) + target[api] = source[api]; + }); +} + +var http; +var https; + +exports.http = function () { + if (!http) { + http = { + Server: HttpServer, + ServerRequest: ServerRequest, + ServerResponse: ServerResponse, + createServer: function (requestListener) { + var server = new HttpServer(); + if (requestListener) { + server.on('request', requestListener) + } + + return server; + }, + httpsys_version: version + }; + + addClientStack(http, require('http')); + } + + return http; +}; + +exports.https = function () { + if (!https) { + https = { + Server: HttpsServer, + createServer: function (options, requestListener) { + + // `options` are ignored for API compatibility + // Keys and certificates in HTTP.SYS + // are configured with `netsh http add sslcert`. + + var server = new HttpsServer(); + if (requestListener) { + server.on('request', requestListener) + } + + return server; + }, + httpsys_version: version + }; + + addClientStack(https, require('https')); + } + + return https; +} + +exports.http.slipstream = function () { + // Make sure original HTTP module is loaded into native module cache + module = require('http'); + module.createServer = function (requestListener) { + var server = new HttpServer(); + if (requestListener) { + server.on('request', requestListener) + } + return server; + } + + module.Server = HttpServer; + module.ServerRequest = ServerRequest; + module.ServerResponse = ServerResponse; + module.httpsys_version = version; +}; + +exports.https.slipstream = function() { + // Make sure original HTTPS module is loaded into native module cache + module = require('https'); + + module.Server = HttpsServer; + module.createServer = function (options, requestListener) { + // `options` are ignored for API compatibility + // Keys and certificates in HTTP.SYS + // are configured with `netsh http add sslcert`. + var server = new HttpsServer(); + if (requestListener) { + server.on('request', requestListener) + } + return server; + }; + + module.httpsys_version = version; +}; + +exports.slipstream = function () { + exports.http.slipstream(); + exports.https.slipstream(); +}; From 0b27820e8846294092d329c5f2c81d7844eac103 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:13:49 +0000 Subject: [PATCH 26/29] Update to support node v8, v9 and v10. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 805ee71..a791229 100644 --- a/package.json +++ b/package.json @@ -36,4 +36,4 @@ "http-status-codes": "1.3.0", "nan": "^2.11.1" } -} +} From 2c7f037125a3e85875d03e57972a66f3db00282c Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:14:14 +0000 Subject: [PATCH 27/29] Update to support node v8, v9 and v10. --- binding.gyp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binding.gyp b/binding.gyp index b4ca036..64f1f64 100644 --- a/binding.gyp +++ b/binding.gyp @@ -10,4 +10,4 @@ ] } ] -} \ No newline at end of file +} From 65d8d4daa3a62c82362ec23d4eb1fb88e5f07378 Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 14:20:15 +0000 Subject: [PATCH 28/29] Update to support node v8, v9 and v10. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4d17274..da0731e 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Compared to the built in HTTP[S] stack in Node.js, the httpsys module offers: ### Compatibility -The httpsys module requires Windows. It works with any stable version of Node.js, both 32- and 64-bit. The module was developed and tested with Node.js 0.6.20, 0.8.22, 0.10.15, each in 32 and 64 bit flavors. +The httpsys module requires Windows. It works with any stable version of Node.js, both 32- and 64-bit. The module was developed and tested with Node.js 8.9.4, 9.9.0, 10.13.0, each in 32 and 64 bit flavors. As it makes use of Native Abstractions (nan) for Node.js it should build for other versions of node. WebSockets functionality requires Windows 8 or Windows Server 2012 or later. @@ -24,7 +24,7 @@ Any and all feedback is welcome [here](https://github.com/tjanczuk/httpsys/issue ### Getting started -You must have Windows and a stable version of Node.js installed (0.6, 0.8, 0.10). Then: +You must have Windows and a recent version of Node.js installed (8, 9, 10). Then: ``` npm install httpsys @@ -217,9 +217,9 @@ The httpsys module exposes the following functions: ### Building -To build httpsys, you must have Visual Studio 2012 or Visual Studio Express 2012 for Windows Desktop. There are a few ways to build depending on what you want to achieve. +To build httpsys, you must have Visual Studio 2015 or Visual Studio Express 2015 for Windows Desktop. There are a few ways to build depending on what you want to achieve. -To build httpsys for all supported versions and flavors of Node.js: (0.6.20, 0.8.22, 0.10.15) x (x32, x64), call +To build httpsys for all supported versions and flavors of Node.js: (8.9.4, 9.9.0, 10.13.0) x (x32, x64), call ```text tools\buildall.bat From 92765e8b21d52a4479c0edc4e693a9fe53ad4afe Mon Sep 17 00:00:00 2001 From: julianwoolston <44969364+julianwoolston@users.noreply.github.com> Date: Wed, 14 Nov 2018 16:58:18 +0000 Subject: [PATCH 29/29] Update to support node v8, v9 and v10. --- test/102_hello.js | 4 ++-- test/103_slipstream.js | 2 +- test/201_ws.js | 4 ++-- test/401_socketio.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/102_hello.js b/test/102_hello.js index f3b0625..c47eec2 100644 --- a/test/102_hello.js +++ b/test/102_hello.js @@ -1,8 +1,8 @@ //allow self signed certificates //process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; -var http = require('httpsys').http() - , https = require('httpsys').https() +var http = require('../index').http() + , https = require('../index').https() , fs = require('fs') , assert = require('assert'); diff --git a/test/103_slipstream.js b/test/103_slipstream.js index 3a05e4f..628a798 100644 --- a/test/103_slipstream.js +++ b/test/103_slipstream.js @@ -1,4 +1,4 @@ -require('httpsys').slipstream(); +require('../index').slipstream(); var http = require('http') , assert = require('assert'); diff --git a/test/201_ws.js b/test/201_ws.js index 8c31021..7d4b701 100644 --- a/test/201_ws.js +++ b/test/201_ws.js @@ -3,8 +3,8 @@ process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; -var http = require('httpsys').http() - , https = require('httpsys').https() +var http = require('../index').http() + , https = require('../index').https() , WebSocket = require('ws') , WebSocketServer = require('ws').Server , fs = require('fs') diff --git a/test/401_socketio.js b/test/401_socketio.js index 3490427..91069a1 100644 --- a/test/401_socketio.js +++ b/test/401_socketio.js @@ -1,8 +1,8 @@ //allow self signed certificates process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; -var http = require('httpsys').http() - , https = require('httpsys').https() +var http = require('../index').http() + , https = require('../index').https() , socketio = require('socket.io') , socketio_client = require('socket.io-client') , fs = require('fs')