aboutsummaryrefslogtreecommitdiffstats
path: root/common/rfb/Security.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'common/rfb/Security.cxx')
-rw-r--r--common/rfb/Security.cxx34
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;
-}