diff --git a/README.md b/README.md index d463e1a..a624126 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,17 @@ smb2Client.readdir('Windows\\System32', function(err, files){ }); ``` +### smb2Client.readdirextra ( path, callback ) +Asynchronous readdir(3). Reads the contents of a directory. The callback gets two arguments (err, files) where files is an array of objects representing all files and their properties in the directory, including '.' and '..'. + +Example: +```javascript +smb2Client.readdirextra('Windows\\System32', function(err, files){ + if(err) throw err; + console.log(files); +}); +``` + ### smb2Client.readFile ( filename, [options], callback ) - ```filename``` String - ```options``` Object diff --git a/lib/api/readdirextra.js b/lib/api/readdirextra.js new file mode 100644 index 0000000..b9df7af --- /dev/null +++ b/lib/api/readdirextra.js @@ -0,0 +1,40 @@ + + +var SMB2Forge = require('../tools/smb2-forge') + , SMB2Request = SMB2Forge.request + ; + +/* + * readdirextra + * ======= + * + * list the file / directory and file data from the path provided: + * + * - open the directory + * + * - query directory content + * + * - close the directory + * + */ +module.exports = function(path, cb){ + var connection = this; + + // SMB2 open directory + SMB2Request('open', {path:path}, connection, function(err, file){ + if(err) cb && cb(err); + // SMB2 query directory + else SMB2Request('query_directory', file, connection, function(err, files){ + if(err) cb && cb(err); + // SMB2 close directory + else SMB2Request('close', file, connection, function(err){ + cb && cb( + null + , files + ); + }); + }); + }); +} + + diff --git a/lib/smb2.js b/lib/smb2.js index 5b34789..e0d8288 100644 --- a/lib/smb2.js +++ b/lib/smb2.js @@ -98,6 +98,7 @@ proto.writeFile = SMB2Connection.requireConnect(require('./api/writefile')); proto.unlink = SMB2Connection.requireConnect(require('./api/unlink')); proto.readdir = SMB2Connection.requireConnect(require('./api/readdir')); +proto.readdirextra = SMB2Connection.requireConnect(require('./api/readdirextra')); proto.rmdir = SMB2Connection.requireConnect(require('./api/rmdir')); proto.mkdir = SMB2Connection.requireConnect(require('./api/mkdir'));