diff options
Diffstat (limited to 'common/rfb/Security.cxx')
-rw-r--r-- | common/rfb/Security.cxx | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/common/rfb/Security.cxx b/common/rfb/Security.cxx index 3b0d95bf..1d4124f9 100644 --- a/common/rfb/Security.cxx +++ b/common/rfb/Security.cxx @@ -24,17 +24,19 @@ #include <string.h> #include <algorithm> +#include <stdexcept> + +#include <core/LogWriter.h> +#include <core/string.h> -#include <rfb/LogWriter.h> #include <rfb/Security.h> -#include <rfb/util.h> using namespace rfb; -static LogWriter vlog("Security"); +static core::LogWriter vlog("Security"); #ifdef HAVE_GNUTLS -StringParameter Security::GnuTLSPriority("GnuTLSPriority", +core::StringParameter Security::GnuTLSPriority("GnuTLSPriority", "GnuTLS priority string that controls the TLS session’s handshake algorithms", ""); #endif @@ -43,9 +45,16 @@ Security::Security() { } -Security::Security(StringParameter &secTypes) +Security::Security(core::EnumListParameter &secTypes) { - enabledSecTypes = parseSecTypes(secTypes); + for (core::EnumListEntry type : secTypes) { + uint32_t typeNum = secTypeNum(type.getValueStr().c_str()); + // Should have been filtered by EnumListParameter, but let's have + // a safety net + if (typeNum == secTypeInvalid) + throw std::logic_error("Unknown security type"); + enabledSecTypes.push_back(typeNum); + } } const std::list<uint8_t> Security::GetEnabledSecTypes(void) @@ -179,16 +188,3 @@ const char* rfb::secTypeName(uint32_t num) default: return "[unknown secType]"; } } - -std::list<uint32_t> rfb::parseSecTypes(const char* types_) -{ - std::list<uint32_t> result; - std::vector<std::string> types; - types = split(types_, ','); - for (size_t i = 0; i < types.size(); i++) { - uint32_t typeNum = secTypeNum(types[i].c_str()); - if (typeNum != secTypeInvalid) - result.push_back(typeNum); - } - return result; -} |