1010var Net = require ( "net" ) ;
1111var EventEmitter = require ( "events" ) . EventEmitter ;
1212var es = require ( "event-stream" ) ;
13- var responseHandler = require ( "./ response" ) ;
13+ var ResponseParser = require ( "ftp- response-parser " ) ;
1414var Utils = require ( "./utils" ) ;
1515var util = require ( "util" ) ;
1616var fs = require ( "fs" ) ;
@@ -63,7 +63,7 @@ var Ftp = module.exports = function(cfg) {
6363 this . port = this . port || FTP_PORT ;
6464 this . pending = [ ] ; // Pending requests
6565 this . cmdBuffer_ = [ ] ;
66- this . responseHandler = responseHandler ( ) ;
66+ this . resParser = new ResponseParser ( ) ;
6767
6868 // Generate generic methods from parameter names. they can easily be
6969 // overriden if we need special behavior. they accept any parameters given,
@@ -98,10 +98,7 @@ Ftp.prototype._createSocket = function(port, host, firstAction) {
9898} ;
9999
100100Ftp . prototype . _createStreams = function ( socket ) {
101- this . pipeline = es . pipeline (
102- socket ,
103- es . split ( ) ,
104- es . mapSync ( this . responseHandler ) ) ;
101+ this . pipeline = es . pipeline ( socket , this . resParser ) ;
105102
106103 var self = this ;
107104 this . pipeline . on ( 'data' , function ( data ) {
@@ -119,7 +116,7 @@ Ftp.prototype.parseResponse = function(data) {
119116 return ;
120117
121118 var next = this . cmdBuffer_ [ 0 ] [ 1 ] ;
122- if ( Utils . isMark ( data . code ) ) {
119+ if ( data . isMark ) {
123120 // If we receive a Mark and it is not expected, we ignore
124121 // that command
125122 if ( ! next . expectsMark || next . expectsMark . marks . indexOf ( data . code ) === - 1 )
@@ -189,7 +186,6 @@ Ftp.prototype.execute = function(action, callback) {
189186
190187Ftp . prototype . _executeCommand = function ( action , callback ) {
191188 var self = this ;
192-
193189 function executeCmd ( ) {
194190 self . cmdBuffer_ . push ( [ action , callback ] ) ;
195191 self . nextCmd ( ) ;
@@ -215,11 +211,8 @@ Ftp.prototype._executeCommand = function(action, callback) {
215211 * @param action {Array} Contains server response and client command info.
216212 */
217213Ftp . prototype . parse = function ( response , command ) {
218- // In FTP every response code above 399 means error in some way.
219- // Since the RFC is not respected by many servers, we are going to
220- // overgeneralize and consider every value above 399 as an error.
221214 var err = null ;
222- if ( response . code > 399 ) {
215+ if ( response . isError ) {
223216 err = new Error ( response . text || "Unknown FTP error." ) ;
224217 err . code = response . code ;
225218 }
@@ -259,18 +252,15 @@ Ftp.prototype._parseFeats = function(features) {
259252
260253Ftp . prototype . getFeatures = function ( callback ) {
261254 var self = this ;
262- if ( ! this . features )
263- this . raw . feat ( function ( err , response ) {
264- self . features = err ? [ ] : self . _parseFeats ( response . text ) ;
265- self . raw . syst ( function ( err , res ) {
266- if ( ! err && res . code === 215 )
267- self . system = res . text . toLowerCase ( ) ;
268-
269- callback ( null , self . features ) ;
270- } ) ;
255+ this . raw . feat ( function ( err , response ) {
256+ self . features = err ? [ ] : self . _parseFeats ( response . text ) ;
257+ self . raw . syst ( function ( err , res ) {
258+ if ( ! err && res . code === 215 )
259+ self . system = res . text . toLowerCase ( ) ;
260+
261+ callback ( null , self . features ) ;
271262 } ) ;
272- else
273- callback ( null , self . features ) ;
263+ } ) ;
274264} ;
275265
276266/**
0 commit comments