handleProt method

void handleProt(
  1. String argument,
  2. FtpSession session
)

PROT: Data Channel Protection Level (RFC 4217 ยง9).

Implementation

void handleProt(String argument, FtpSession session) {
  if (!session.tlsActive) {
    session.sendResponse('503 AUTH TLS required first');
    return;
  }
  if (!session.pbszReceived) {
    session.sendResponse('503 PBSZ required before PROT');
    return;
  }
  if (argument.isEmpty) {
    session.sendResponse('501 Syntax error in parameters');
    return;
  }
  final level = argument.toUpperCase();
  switch (level) {
    case 'P':
      session.protectionLevel = ProtectionLevel.private_;
      session.sendResponse('200 Data protection set to Private');
      break;
    case 'C':
      if (session.requireEncryptedData) {
        session.sendResponse('534 PROT C denied by server policy');
      } else {
        session.protectionLevel = ProtectionLevel.clear;
        session.sendResponse('200 Data protection set to Clear');
      }
      break;
    case 'S':
    case 'E':
      session.sendResponse('504 Protection level not supported');
      break;
    default:
      session.sendResponse('504 Protection level not supported');
      break;
  }
}