Hi, the attached patch turns FtpServer::EarlyErrorKind from a C enum into c++11 strongly-typed enum. The code did not require any change, just a bit of search-and-replace.
-- Francesco
=== modified file 'src/servers/FtpServer.cc' --- src/servers/FtpServer.cc 2015-08-19 10:18:02 +0000 +++ src/servers/FtpServer.cc 2015-08-20 12:04:36 +0000 @@ -557,43 +557,43 @@ const char *errUri = "error:ftp-internal-early-error"; switch (eek) { - case eekHugeRequest: + case EarlyErrorKind::HugeRequest: scode = 421; reason = "Huge request"; errUri = "error:ftp-huge-request"; break; - case eekMissingLogin: + case EarlyErrorKind::MissingLogin: scode = 530; reason = "Must login first"; errUri = "error:ftp-must-login-first"; break; - case eekMissingUsername: + case EarlyErrorKind::MissingUsername: scode = 501; reason = "Missing username"; errUri = "error:ftp-missing-username"; break; - case eekMissingHost: + case EarlyErrorKind::MissingHost: scode = 501; reason = "Missing host"; errUri = "error:ftp-missing-host"; break; - case eekUnsupportedCommand: + case EarlyErrorKind::UnsupportedCommand: scode = 502; reason = "Unknown or unsupported command"; errUri = "error:ftp-unsupported-command"; break; - case eekInvalidUri: + case EarlyErrorKind::InvalidUri: scode = 501; reason = "Invalid URI"; errUri = "error:ftp-invalid-uri"; break; - case eekMalformedCommand: + case EarlyErrorKind::MalformedCommand: scode = 421; reason = "Malformed command"; errUri = "error:ftp-malformed-command"; @@ -661,7 +661,7 @@ if (cmd.length() > tokenMax || params.length() > tokenMax) { changeState(fssError, "huge req token"); quitAfterError(NULL); - return earlyError(eekHugeRequest); + return earlyError(EarlyErrorKind::HugeRequest); } // technically, we may skip multiple NLs below, but that is OK @@ -670,7 +670,7 @@ if (in.buf.length() >= Config.maxRequestHeaderSize) { changeState(fssError, "huge req"); quitAfterError(NULL); - return earlyError(eekHugeRequest); + return earlyError(EarlyErrorKind::HugeRequest); } else { flags.readMore = true; debugs(33, 5, "Waiting for more, up to " << @@ -691,7 +691,7 @@ if (!master->clientReadGreeting) { // the first command must be USER if (!pinning.pinned && cmd != cmdUser()) - return earlyError(eekMissingLogin); + return earlyError(EarlyErrorKind::MissingLogin); } // process USER request now because it sets FTP peer host name @@ -702,7 +702,7 @@ } if (!Ftp::SupportedCommand(cmd)) - return earlyError(eekUnsupportedCommand); + return earlyError(EarlyErrorKind::UnsupportedCommand); const HttpRequestMethod method = cmd == cmdAppe() || cmd == cmdStor() || cmd == cmdStou() ? @@ -717,7 +717,7 @@ debugs(33, 5, "Invalid FTP URL: " << uri); uri.clear(); safe_free(newUri); - return earlyError(eekInvalidUri); + return earlyError(EarlyErrorKind::InvalidUri); } request->flags.ftpNative = true; @@ -1342,12 +1342,12 @@ Ftp::Server::handleUserRequest(const SBuf &, SBuf ¶ms) { if (params.isEmpty()) - return earlyError(eekMissingUsername); + return earlyError(EarlyErrorKind::MissingUsername); // find the [end of] user name const SBuf::size_type eou = params.rfind('@'); if (eou == SBuf::npos || eou + 1 >= params.length()) - return earlyError(eekMissingHost); + return earlyError(EarlyErrorKind::MissingHost); // Determine the intended destination. host = params.substr(eou + 1, params.length()); === modified file 'src/servers/FtpServer.h' --- src/servers/FtpServer.h 2015-08-20 09:55:56 +0000 +++ src/servers/FtpServer.h 2015-08-20 12:04:44 +0000 @@ -70,15 +70,15 @@ friend void StartListening(); // errors detected before it is possible to create an HTTP request wrapper - typedef enum { - eekHugeRequest, - eekMissingLogin, - eekMissingUsername, - eekMissingHost, - eekUnsupportedCommand, - eekInvalidUri, - eekMalformedCommand - } EarlyErrorKind; + enum class EarlyErrorKind { + HugeRequest, + MissingLogin, + MissingUsername, + MissingHost, + UnsupportedCommand, + InvalidUri, + MalformedCommand + }; /* ConnStateData API */ virtual ClientSocketContext *parseOneRequest();
_______________________________________________ squid-dev mailing list squid-dev@lists.squid-cache.org http://lists.squid-cache.org/listinfo/squid-dev