Comparing version 0.3.4 to 0.3.5
@@ -75,2 +75,3 @@ var fs = require('fs'), | ||
secure: false, | ||
secureOptions: undefined, | ||
connTimeout: undefined, | ||
@@ -94,2 +95,3 @@ pasvTimeout: undefined, | ||
this.options.secure = options.secure || false; | ||
this.options.secureOptions = options.secureOptions; | ||
this.options.connTimeout = options.connTimeout || 10000; | ||
@@ -102,5 +104,9 @@ this.options.pasvTimeout = options.pasvTimeout || 10000; | ||
var debug = this._debug; | ||
var socket = this._socket = new Socket(); | ||
var secureOptions, | ||
debug = this._debug, | ||
socket = new Socket(); | ||
socket.setTimeout(0); | ||
socket.setKeepAlive(true); | ||
this._parser = new Parser({ debug: debug }); | ||
@@ -130,14 +136,17 @@ this._parser.on('response', function(code, text) { | ||
this._socket.setTimeout(0); | ||
if (this.options.secure) { | ||
secureOptions = {}; | ||
for (var k in this.options.secureOptions) | ||
secureOptions[k] = this.options.secureOptions[k]; | ||
secureOptions.socket = socket; | ||
this.options.secureOptions = secureOptions; | ||
} | ||
if (this.options.secure === 'implicit') | ||
socket = tls.connect({ socket: this._socket }, onconnect); | ||
else | ||
this._socket.once('connect', onconnect); | ||
this._socket = tls.connect(secureOptions, onconnect); | ||
else { | ||
socket.once('connect', onconnect); | ||
this._socket = socket; | ||
} | ||
var timer = setTimeout(function() { | ||
self.emit('error', new Error('Timeout while connecting to server')); | ||
self._socket.destroy(); | ||
self._reset(); | ||
}, this.options.connTimeout); | ||
var noopreq = { | ||
@@ -188,3 +197,3 @@ cmd: 'NOOP', | ||
self.emit('error', err); | ||
return self._socket.end(); | ||
return self._socket && self._socket.end(); | ||
} | ||
@@ -196,3 +205,3 @@ if ((cmd === 'AUTH TLS' && code !== 234 && self.options.secure !== true) | ||
self.emit('error', makeError(code, 'Unable to secure connection(s)')); | ||
return self._socket.end(); | ||
return self._socket && self._socket.end(); | ||
} | ||
@@ -217,3 +226,3 @@ | ||
self.emit('error', makeError(code, 'Password required')); | ||
return self._socket.end(); | ||
return self._socket && self._socket.end(); | ||
} | ||
@@ -252,9 +261,13 @@ cmd = 'PASS'; | ||
socket.removeAllListeners('data'); | ||
socket.removeAllListeners('error'); | ||
socket._decoder = null; | ||
self._curReq = null; // prevent queue from being processed during | ||
// TLS/SSL negotiation | ||
socket = tls.connect({ socket: self._socket }, onconnect); | ||
secureOptions.socket = self._socket; | ||
secureOptions.session = undefined; | ||
socket = tls.connect(secureOptions, onconnect); | ||
socket.setEncoding('binary'); | ||
socket.on('data', ondata); | ||
socket.once('end', onend); | ||
socket.on('error', onerror); | ||
} | ||
@@ -271,10 +284,10 @@ } | ||
this._socket.once('error', function(err) { | ||
socket.on('error', onerror); | ||
function onerror(err) { | ||
clearTimeout(timer); | ||
clearTimeout(self._keepalive); | ||
self.emit('error', err); | ||
}); | ||
} | ||
var hasReset = false; | ||
this._socket.once('end', onend); | ||
socket.once('end', onend); | ||
function onend() { | ||
@@ -285,3 +298,3 @@ ondone(); | ||
this._socket.once('close', function(had_err) { | ||
socket.once('close', function(had_err) { | ||
ondone(); | ||
@@ -291,2 +304,3 @@ self.emit('close', had_err); | ||
var hasReset = false; | ||
function ondone() { | ||
@@ -300,2 +314,8 @@ if (!hasReset) { | ||
var timer = setTimeout(function() { | ||
self.emit('error', new Error('Timeout while connecting to server')); | ||
self._socket && self._socket.destroy(); | ||
self._reset(); | ||
}, this.options.connTimeout); | ||
this._socket.connect(this.options.port, this.options.host); | ||
@@ -662,3 +682,3 @@ }; | ||
else { | ||
function nextDir() { | ||
var nextDir = function() { | ||
if (++i === dirslen) { | ||
@@ -692,3 +712,3 @@ // return to original working directory | ||
} | ||
} | ||
}; | ||
this.pwd(function(err, cwd) { | ||
@@ -846,6 +866,7 @@ if (err) | ||
if (self.options.secure === true) { | ||
socket = tls.connect({ | ||
socket: socket, | ||
session: self._socket.getSession() // re-use existing session | ||
}); | ||
self.options.secureOptions.socket = socket; | ||
self.options.secureOptions.session = self._socket.getSession(); | ||
//socket.removeAllListeners('error'); | ||
socket = tls.connect(self.options.secureOptions); | ||
//socket.once('error', onerror); | ||
socket.setTimeout(0); | ||
@@ -857,5 +878,6 @@ } | ||
}); | ||
socket.once('error', function(err) { | ||
socket.once('error', onerror); | ||
function onerror(err) { | ||
sockerr = err; | ||
}); | ||
} | ||
socket.once('end', function() { | ||
@@ -862,0 +884,0 @@ clearTimeout(timer); |
@@ -1,2 +0,3 @@ | ||
var WritableStream = require('readable-stream').Writable, | ||
var WritableStream = require('stream').Writable | ||
|| require('readable-stream').Writable, | ||
inherits = require('util').inherits, | ||
@@ -3,0 +4,0 @@ inspect = require('util').inspect; |
{ "name": "ftp", | ||
"version": "0.3.4", | ||
"version": "0.3.5", | ||
"author": "Brian White <mscdex@mscdex.net>", | ||
@@ -9,3 +9,3 @@ "description": "An FTP client module for node.js", | ||
"xregexp": "2.0.0", | ||
"readable-stream": "1.0.2" | ||
"readable-stream": "1.1.x" | ||
}, | ||
@@ -12,0 +12,0 @@ "keywords": [ "ftp", "client", "transfer" ], |
@@ -107,2 +107,4 @@ Description | ||
* secureOptions - _object_ - Additional options to be passed to `tls.connect()`. **Default:** (none) | ||
* user - _string_ - Username for authentication. **Default:** 'anonymous' | ||
@@ -109,0 +111,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
44593
1054
192
+ Addedcore-util-is@1.0.3(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedisarray@0.0.1(transitive)
+ Addedreadable-stream@1.1.14(transitive)
+ Addedstring_decoder@0.10.31(transitive)
- Removedreadable-stream@1.0.2(transitive)
Updatedreadable-stream@1.1.x