handleMlsd method
Implementation
Future<void> handleMlsd(String argument, FtpSession session) async {
if (!await openDataConnection()) {
return;
}
try {
transferInProgress = true;
var dirContents = await fileOperations.listDirectory(argument);
logger.generalLog('Listing directory with MLSD: $argument');
for (FileSystemEntity entity in dirContents) {
if (!transferInProgress || dataSocket == null) break;
try {
var stat = await entity.stat();
String facts = _formatMlsdFacts(entity, stat);
try {
dataSocket!.write(facts);
} catch (socketError) {
logger.generalLog('Socket write error during MLSD: $socketError');
transferInProgress = false;
break;
}
} catch (entityError) {
logger
.generalLog('Error processing entity during MLSD: $entityError');
// Continue with next entity
continue;
}
}
if (transferInProgress) {
transferInProgress = false;
await _closeDataSocket();
sendResponse('226 Transfer complete.');
} else {
await _closeDataSocket();
sendResponse('426 Transfer aborted');
}
} catch (e) {
logger.generalLog('Error listing directory with MLSD: $e');
sendResponse('550 Failed to list directory: $e');
transferInProgress = false;
await _closeDataSocket();
}
}