diff options
Diffstat (limited to 'cpp/src/IceSSL/WinRTEngine.cpp')
-rwxr-xr-x | cpp/src/IceSSL/WinRTEngine.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/cpp/src/IceSSL/WinRTEngine.cpp b/cpp/src/IceSSL/WinRTEngine.cpp index a6dc675c581..651fd2ace53 100755 --- a/cpp/src/IceSSL/WinRTEngine.cpp +++ b/cpp/src/IceSSL/WinRTEngine.cpp @@ -12,26 +12,59 @@ #ifdef ICE_OS_WINRT #include <IceSSL/SSLEngine.h> +#include <Ice/Communicator.h> +#include <Ice/Properties.h> #include <IceUtil/Shared.h> +#include <string> + IceUtil::Shared* IceSSL::upCast(IceSSL::WinRTEngine* p) { return p; } +using namespace std; using namespace IceSSL; WinRTEngine::WinRTEngine(const Ice::CommunicatorPtr& communicator) : SSLEngine(communicator) { - } void WinRTEngine::initialize() { + lock_guard<mutex> lock(_mutex); + if(_initialized) + { + return; + } + + SSLEngine::initialize(); + + const auto properties = communicator()->getProperties(); + + // + // Load client certificate + // + string findCert = properties->getProperty("IceSSL.FindCert"); + if(!findCert.empty()) + { + auto certs = findCertificates(properties->getPropertyWithDefault("IceSSL.CertStore", "My"), findCert); + if(certs->Size > 0) + { + _certificate = make_shared<IceSSL::Certificate>(certs->GetAt(0)); + } + } + _initialized = true; } bool WinRTEngine::initialized() const { - return true; + return _initialized; +} + +shared_ptr<Certificate> +WinRTEngine::certificate() +{ + return _certificate; } void |