diff --git a/README.md b/README.md index b989434..73f8876 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # node-XMLHttpRequest # +Fork of [node-XMLHttpRequest](https://github.com/driverdan/node-XMLHttpRequest) by [driverdan](http://driverdan.com). Forked and published to npm because a [pull request](https://github.com/rase-/node-XMLHttpRequest/commit/a6b6f296e0a8278165c2d0270d9840b54d5eeadd) is not being created and merged. Changes made by [rase-](https://github.com/rase-/node-XMLHttpRequest/tree/add/ssl-support) are needed for [engine.io-client](https://github.com/Automattic/engine.io-client). + +# Original README # + node-XMLHttpRequest is a wrapper for the built-in http client to emulate the browser XMLHttpRequest object. diff --git a/lib/XMLHttpRequest.js b/lib/XMLHttpRequest.js index 878fce9..04120c2 100644 --- a/lib/XMLHttpRequest.js +++ b/lib/XMLHttpRequest.js @@ -200,19 +200,23 @@ function XMLHttpRequest(opts) { * * @param string header Header name * @param string value Header value + * @return boolean Header added */ this.setRequestHeader = function(header, value) { if (this.readyState != this.OPENED) { throw "INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN"; + return false; } if (!isAllowedHttpHeader(header)) { console.warn('Refused to set unsafe header "' + header + '"'); - return; + return false; } if (sendFlag) { throw "INVALID_STATE_ERR: send flag is true"; + return false; } headers[header] = value; + return true; }; /** @@ -382,9 +386,20 @@ function XMLHttpRequest(opts) { path: uri, method: settings.method, headers: headers, - agent: agent + agent: agent, + socket: opts.socket }; + if (ssl) { + options.pfx = opts.pfx; + options.key = opts.key; + options.passphrase = opts.passphrase; + options.cert = opts.cert; + options.ca = opts.ca; + options.ciphers = opts.ciphers; + options.rejectUnauthorized = opts.rejectUnauthorized; + } + // Reset error flag errorFlag = false; @@ -418,9 +433,20 @@ function XMLHttpRequest(opts) { port: url.port, path: url.path, method: response.statusCode === 303 ? 'GET' : settings.method, - headers: headers + headers: headers, + socket: opts.socket }; + if (ssl) { + options.pfx = opts.pfx; + options.key = opts.key; + options.passphrase = opts.passphrase; + options.cert = opts.cert; + options.ca = opts.ca; + options.ciphers = opts.ciphers; + options.rejectUnauthorized = opts.rejectUnauthorized; + } + // Issue the new request request = doRequest(newOptions, responseHandler).on('error', errorHandler); request.end(); diff --git a/package.json b/package.json index 5cd17b8..decfc43 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,9 @@ { - "name": "xmlhttprequest", + "name": "xmlhttprequest-ssl", "description": "XMLHttpRequest for Node", - "version": "1.5.0", + "version": "1.5.1", "author": { - "name": "Dan DeFelippi", - "url": "http://driverdan.com" + "name": "Michael de Wit" }, "keywords": [ "xhr", @@ -18,9 +17,9 @@ ], "repository": { "type": "git", - "url": "git://github.com/driverdan/node-XMLHttpRequest.git" + "url": "git://github.com/mjwwit/node-XMLHttpRequest.git" }, - "bugs": "http://github.com/driverdan/node-XMLHttpRequest/issues", + "bugs": "http://github.com/mjwwit/node-XMLHttpRequest/issues", "engines": { "node": ">=0.4.0" }, diff --git a/tests/test-exceptions.js b/tests/test-exceptions.js index f1edd71..10eaea2 100644 --- a/tests/test-exceptions.js +++ b/tests/test-exceptions.js @@ -44,15 +44,12 @@ var forbiddenRequestHeaders = [ "trailer", "transfer-encoding", "upgrade", - "user-agent", "via" ]; for (var i in forbiddenRequestHeaders) { - try { - xhr.setRequestHeader(forbiddenRequestHeaders[i], "Test"); + if(xhr.setRequestHeader(forbiddenRequestHeaders[i], "Test") !== false) { console.log("ERROR: " + forbiddenRequestHeaders[i] + " should have thrown exception"); - } catch(e) { } } diff --git a/tests/test-request-protocols.js b/tests/test-request-protocols.js index cd4e174..543917d 100644 --- a/tests/test-request-protocols.js +++ b/tests/test-request-protocols.js @@ -8,7 +8,6 @@ xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4) { assert.equal("Hello World", this.responseText); - this.close(); runSync(); } }; @@ -25,7 +24,6 @@ var runSync = function() { xhr.onreadystatechange = function() { if (this.readyState == 4) { assert.equal("Hello World", this.responseText); - this.close(); sys.puts("done"); } }; diff --git a/tests/testdata.txt b/tests/testdata.txt index 557db03..5e1c309 100644 --- a/tests/testdata.txt +++ b/tests/testdata.txt @@ -1 +1 @@ -Hello World +Hello World \ No newline at end of file