enterExtendedPassiveMode method
Future<void>
enterExtendedPassiveMode(
)
Implementation
Future<void> enterExtendedPassiveMode() async {
try {
// Close any previous passive listener to avoid leaking sockets
dataListener?.close();
dataListener = null;
_secureDataListener?.close();
_secureDataListener = null;
dataSocket?.close();
dataSocket = null;
if (protectionLevel == ProtectionLevel.private_ &&
securityContext != null) {
_secureDataListener = await SecureServerSocket.bind(
InternetAddress.anyIPv4,
0,
securityContext!,
);
int port = _secureDataListener!.port;
sendResponse('229 Entering Extended Passive Mode (|||$port|)');
} else {
dataListener = await ServerSocket.bind(InternetAddress.anyIPv4, 0);
int port = dataListener!.port;
sendResponse('229 Entering Extended Passive Mode (|||$port|)');
}
_gettingDataSocket =
waitForClientDataSocket(timeout: Duration(seconds: 30));
} catch (e) {
if (e is TlsException || e is HandshakeException) {
sendResponse('522 TLS negotiation failed on data connection');
logger.generalLog('TLS negotiation failed on data connection: $e');
} else {
sendResponse('425 Can\'t enter extended passive mode');
logger.generalLog('Error entering extended passive mode: $e');
}
}
}