From 85e1231ff4a184d4bd684b46a47a4e66c00f79c5 Mon Sep 17 00:00:00 2001
From: atraczyk <andreastraczyk@gmail.com>
Date: Thu, 3 Nov 2016 10:31:23 -0400
Subject: [PATCH] video: move renderer callbacks to UI thread

- moves renderer callbacks to UI thread

- removes natpmp from dependencies

- adds openssl dlls for restbed/namedirectory features

- reverts 7e326091b01bd818ea57a8e90a61ac05e3d50b4b

Change-Id: I8d6d99bd16e9a2bcaa3bd8db4bee5888e12af821
Tuleap: #1242
---
 Globals.h                       |   6 +-
 MainPage.xaml.cpp               |  12 ++--
 Package.appxmanifest            |   2 +-
 RingD.cpp                       |  77 ++++++++++++---------
 RingDebug.cpp                   |   2 +-
 SmartPanel.xaml.cpp             |   7 +-
 SmartPanelItem.cpp              |   2 +-
 VideoPage.xaml.cpp              |  28 ++++----
 VideoRendererManager.cpp        |  13 ++--
 ring-client-uwp.sln             | 119 --------------------------------
 ring-client-uwp.vcxproj         |   2 -
 ring-client-uwp.vcxproj.filters |   6 ++
 12 files changed, 93 insertions(+), 183 deletions(-)

diff --git a/Globals.h b/Globals.h
index ccfc974..18766cb 100644
--- a/Globals.h
+++ b/Globals.h
@@ -3,10 +3,12 @@ namespace RingClientUWP
 /* public enumerations. */
 public enum class CallStatus {
     NONE,
-    RINGING,
-    CONNECTING,
+    INCOMING_RINGING,
+    OUTGOING_RINGING,
+    SEARCHING,
     IN_PROGRESS,
     PAUSED,
+    ENDED,
     TERMINATING
 };
 
diff --git a/MainPage.xaml.cpp b/MainPage.xaml.cpp
index 02057e2..1833453 100644
--- a/MainPage.xaml.cpp
+++ b/MainPage.xaml.cpp
@@ -79,11 +79,11 @@ MainPage::MainPage()
                        Platform::Object^>(this, &MainPage::DisplayProperties_DpiChanged));
 
     visibilityChangedEventToken = Window::Current->VisibilityChanged +=
-                                      ref new WindowVisibilityChangedEventHandler(this, &MainPage::Application_VisibilityChanged);
+        ref new WindowVisibilityChangedEventHandler(this, &MainPage::Application_VisibilityChanged);
     applicationSuspendingEventToken = Application::Current->Suspending +=
-                                          ref new SuspendingEventHandler(this, &MainPage::Application_Suspending);
+        ref new SuspendingEventHandler(this, &MainPage::Application_Suspending);
     applicationResumingEventToken = Application::Current->Resuming +=
-                                        ref new EventHandler<Object^>(this, &MainPage::Application_Resuming);
+        ref new EventHandler<Object^>(this, &MainPage::Application_Resuming);
 }
 
 void
@@ -253,7 +253,7 @@ void RingClientUWP::MainPage::OnstateChange(Platform::String ^callId, RingClient
 
     switch (state) {
     /* send the user to the peer's message text page */
-    case CallStatus::NONE:
+    case CallStatus::ENDED:
     {
         if (item)
             OnsummonMessageTextPage();
@@ -373,9 +373,9 @@ MainPage::BeginExtendedExecution()
     newSession->Reason = ExtendedExecutionReason::SavingData;
     newSession->Description = "Extended Execution";
     sessionRevokedToken = (newSession->Revoked += ref new TypedEventHandler<Object^,
-                           ExtendedExecutionRevokedEventArgs^>(this, &MainPage::SessionRevoked));
+        ExtendedExecutionRevokedEventArgs^>(this, &MainPage::SessionRevoked));
     return create_task(newSession->RequestExtensionAsync())
-    .then([=](ExtendedExecutionResult result) {
+        .then([=](ExtendedExecutionResult result){
         try {
             switch (result)
             {
diff --git a/Package.appxmanifest b/Package.appxmanifest
index 1be2b1f..6836591 100644
--- a/Package.appxmanifest
+++ b/Package.appxmanifest
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
-  <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.5.0" />
+  <Identity Name="Savoir-faireLinux.GNURing" Publisher="CN=8121A5F7-3CA1-4CAA-92B2-4F595B011941" Version="1.1.12.0" />
   <mp:PhoneIdentity PhoneProductId="2385953f-9019-423d-aa82-d1bbacfa258b" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
   <Properties>
     <DisplayName>GNU Ring</DisplayName>
diff --git a/RingD.cpp b/RingD.cpp
index 307cc90..4e48cb8 100644
--- a/RingD.cpp
+++ b/RingD.cpp
@@ -28,8 +28,7 @@
 #include "account_schema.h"
 #include "account_const.h"
 #include "string_utils.h" // used to get some const expr like TRUE_STR
-#include <gnutls\gnutls.h>
-
+#include "gnutls\gnutls.h"
 
 #include "SmartPanel.xaml.h"
 
@@ -116,6 +115,8 @@ RingClientUWP::RingD::reloadAccountList()
         }
     }
 
+    DRing::lookupName("", "", "wagaf");
+
     // load user preferences
     Configuration::UserPreferences::instance->load();
 }
@@ -368,7 +369,6 @@ RingClientUWP::RingD::startDaemon()
     //eraseCacheFolder();
     editModeOn_ = true;
 
-
     create_task([&]()
     {
         using SharedCallback = std::shared_ptr<DRing::CallbackWrapperBase>;
@@ -399,7 +399,7 @@ RingClientUWP::RingD::startDaemon()
                     CoreDispatcherPriority::High, ref new DispatchedHandler([=]()
                 {
                     incomingCall(accountId2, callId2, from2);
-                    stateChange(callId2, CallStatus::RINGING, 0);
+                    stateChange(callId2, CallStatus::INCOMING_RINGING, 0);
 
                     auto contact = ContactsViewModel::instance->findContactByName(from2);
                     auto item = SmartPanelItemsViewModel::instance->findItem(contact);
@@ -421,7 +421,7 @@ RingClientUWP::RingD::startDaemon()
 
                 auto state3 = translateCallStatus(state2);
 
-                if (state3 == CallStatus::NONE)
+                if (state3 == CallStatus::ENDED)
                     DRing::hangUp(callId); // solve a bug in the daemon API.
 
 
@@ -540,8 +540,6 @@ RingClientUWP::RingD::startDaemon()
                     exportOnRingEnded(accountId2, pin2);
                 }));
             })
-
-
         };
         registerCallHandlers(callHandlers);
 
@@ -573,15 +571,21 @@ RingClientUWP::RingD::startDaemon()
                 MSG_("<DeviceEvent>");
             }),
             DRing::exportable_callback<DRing::VideoSignal::DecodingStarted>
-            ([this](const std::string &id, const std::string &shmPath, int width, int height, bool isMixer) {
-                Video::VideoManager::instance->rendererManager()->startedDecoding(
-                    Utils::toPlatformString(id),
-                    width,
-                    height);
+            ([&](const std::string &id, const std::string &shmPath, int width, int height, bool isMixer) {
+                dispatcher->RunAsync(CoreDispatcherPriority::High,
+                ref new DispatchedHandler([=]() {
+                    Video::VideoManager::instance->rendererManager()->startedDecoding(
+                        Utils::toPlatformString(id),
+                        width,
+                        height);
+                }));
             }),
             DRing::exportable_callback<DRing::VideoSignal::DecodingStopped>
-            ([this](const std::string &id, const std::string &shmPath, bool isMixer) {
-                Video::VideoManager::instance->rendererManager()->removeRenderer(Utils::toPlatformString(id));
+            ([&](const std::string &id, const std::string &shmPath, bool isMixer) {
+                dispatcher->RunAsync(CoreDispatcherPriority::High,
+                ref new DispatchedHandler([=]() {
+                    Video::VideoManager::instance->rendererManager()->removeRenderer(Utils::toPlatformString(id));
+                }));
             })
         };
         registerVideoHandlers(incomingVideoHandlers);
@@ -611,13 +615,16 @@ RingClientUWP::RingD::startDaemon()
                 }
             }),
             DRing::exportable_callback<DRing::VideoSignal::SetParameters>
-            ([this](const std::string& device,
-                    std::string format,
-                    const int width,
-                    const int height,
+            ([&](const std::string& device,
+                 std::string format,
+                 const int width,
+                 const int height,
             const int rate) {
-                VideoManager::instance->captureManager()->activeDevice->SetDeviceProperties(
-                    Utils::toPlatformString(format),width,height,rate);
+                dispatcher->RunAsync(CoreDispatcherPriority::High,
+                ref new DispatchedHandler([=]() {
+                    VideoManager::instance->captureManager()->activeDevice->SetDeviceProperties(
+                        Utils::toPlatformString(format),width,height,rate);
+                }));
             }),
             DRing::exportable_callback<DRing::VideoSignal::StartCapture>
             ([&](const std::string& device) {
@@ -642,16 +649,17 @@ RingClientUWP::RingD::startDaemon()
 
         std::map<std::string, SharedCallback> nameRegistrationHandlers =
         {
-            /*}),
-            	DRing::exportable_callback<ConfigurationSignal::NameRegistrationEnded>(
-            		[this](const std::string &accountId, int status, const std::string &name) {
-            	MSG_("\n<NameRegistrationEnded>\n");
+            DRing::exportable_callback<DRing::ConfigurationSignal::NameRegistrationEnded>(
+            [this](const std::string &accountId, int status, const std::string &name) {
+                MSG_("\n<NameRegistrationEnded>\n");
 
             }),
-            	DRing::exportable_callback<ConfigurationSignal::RegisteredNameFound>(
-            		[this](const std::string &accountId, int status, const std::string &address, const std::string &name) {
-            	MSG_("\n<RegisteredNameFound>\n");*/
+            DRing::exportable_callback<DRing::ConfigurationSignal::RegisteredNameFound>(
+            [this](const std::string &accountId, int status, const std::string &address, const std::string &name) {
+                MSG_("<RegisteredNameFound>" + name + " : " + address);
+            })
         };
+        registerConfHandlers(nameRegistrationHandlers);
 
         gnutls_global_init();
 
@@ -682,7 +690,6 @@ RingClientUWP::RingD::startDaemon()
             }
             }
 
-
             /* at this point the config.yml is safe. */
             Utils::fileExists(ApplicationData::Current->LocalFolder, "creation.token")
             .then([this](bool token_exists)
@@ -703,6 +710,8 @@ RingClientUWP::RingD::startDaemon()
                 Sleep(5);
             }
             DRing::fini();
+
+            gnutls_global_deinit();
         }
     });
 }
@@ -853,13 +862,19 @@ RingD::dequeueTasks()
 RingClientUWP::CallStatus RingClientUWP::RingD::translateCallStatus(String^ state)
 {
     if (state == "INCOMING")
-        return CallStatus::RINGING;
+        return CallStatus::INCOMING_RINGING;
 
     if (state == "CURRENT")
         return CallStatus::IN_PROGRESS;
 
-    if (state == "CONNECTING" || state == "RINGING")
-        return CallStatus::CONNECTING;
+    if (state == "OVER")
+        return CallStatus::ENDED;
+
+    if (state == "RINGING")
+        return CallStatus::OUTGOING_RINGING;
+
+    if (state == "CONNECTING")
+        return CallStatus::SEARCHING;
 
 
     return CallStatus::NONE;
diff --git a/RingDebug.cpp b/RingDebug.cpp
index 2524ff0..8835c79 100644
--- a/RingDebug.cpp
+++ b/RingDebug.cpp
@@ -62,7 +62,7 @@ RingDebug::print(const std::string& message,
 void RingClientUWP::RingDebug::WriteLine(String^ str)
 {
     /* save in file */
-    FileIO::AppendTextAsync(_videoFile, str + "\n");
+    //FileIO::AppendTextAsync(_videoFile, str + "\n");
 
     /* screen in visual studio console */
     std::wstringstream wStringstream;
diff --git a/SmartPanel.xaml.cpp b/SmartPanel.xaml.cpp
index 6b5bc15..29ede5a 100644
--- a/SmartPanel.xaml.cpp
+++ b/SmartPanel.xaml.cpp
@@ -113,6 +113,7 @@ SmartPanel::SmartPanel()
 
         switch (state) {
         case CallStatus::NONE:
+        case CallStatus::ENDED:
         {
             item->_callId = "";
             break;
@@ -536,7 +537,7 @@ Object ^ RingClientUWP::Views::IncomingVisibility::Convert(Object ^ value, Windo
 {
     auto state = static_cast<CallStatus>(value);
 
-    if (state == CallStatus::RINGING)
+    if (state == CallStatus::INCOMING_RINGING)
         return  Windows::UI::Xaml::Visibility::Visible;
     else
         return  Windows::UI::Xaml::Visibility::Collapsed;
@@ -555,7 +556,7 @@ Object ^ RingClientUWP::Views::OutGoingVisibility::Convert(Object ^ value, Windo
 {
     auto state = static_cast<CallStatus>(value);
 
-    if (state == CallStatus::CONNECTING || state == CallStatus::RINGING)
+    if (state == CallStatus::SEARCHING || state == CallStatus::OUTGOING_RINGING)
         return  Windows::UI::Xaml::Visibility::Visible;
     else
         return  Windows::UI::Xaml::Visibility::Collapsed;
@@ -573,7 +574,7 @@ Object ^ RingClientUWP::Views::HasAnActiveCall::Convert(Object ^ value, Windows:
 {
     auto state = static_cast<CallStatus>(value);
 
-    if (state == CallStatus::NONE)
+    if (state == CallStatus::NONE || state == CallStatus::ENDED)
         return Windows::UI::Xaml::Visibility::Collapsed;
     else
         return Windows::UI::Xaml::Visibility::Visible;
diff --git a/SmartPanelItem.cpp b/SmartPanelItem.cpp
index ebe9dc3..ebf3eee 100644
--- a/SmartPanelItem.cpp
+++ b/SmartPanelItem.cpp
@@ -51,6 +51,6 @@ SmartPanelItem::NotifyPropertyChanged(String^ propertyName)
 void RingClientUWP::Controls::SmartPanelItem::OncallPlaced(Platform::String ^callId)
 {
     if (_callId == callId) {
-        _callStatus = CallStatus::CONNECTING;
+        _callStatus = CallStatus::SEARCHING;
     }
 }
diff --git a/VideoPage.xaml.cpp b/VideoPage.xaml.cpp
index 2c5fd07..ab004b8 100644
--- a/VideoPage.xaml.cpp
+++ b/VideoPage.xaml.cpp
@@ -64,18 +64,22 @@ VideoPage::VideoPage()
         CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::High,
         ref new DispatchedHandler([=]() {
             try {
-                if (!VideoManager::instance->rendererManager()->renderers->Size)
+                auto renderer_w = VideoManager::instance->rendererManager()->renderer(id);
+                if (!renderer_w) {
                     return;
-                VideoManager::instance->rendererManager()->renderer(id)->isRendering = true;
-                create_task(WriteFrameAsSoftwareBitmapAsync(id, buf, width, height))
-                .then([=](task<void> previousTask) {
-                    try {
-                        previousTask.get();
-                    }
-                    catch (Platform::Exception^ e) {
-                        RingDebug::instance->WriteLine( "Caught exception from previous task.\n" );
-                    }
-                });
+                }
+                else {
+                    renderer_w->isRendering = true;
+                    create_task(WriteFrameAsSoftwareBitmapAsync(id, buf, width, height))
+                    .then([=](task<void> previousTask) {
+                        try {
+                            previousTask.get();
+                        }
+                        catch (Platform::Exception^ e) {
+                            RingDebug::instance->WriteLine( "Caught exception from previous task.\n" );
+                        }
+                    });
+                }
             }
             catch(Platform::COMException^ e) {
                 RingDebug::instance->WriteLine(e->ToString());
@@ -120,7 +124,7 @@ VideoPage::VideoPage()
     RingD::instance->stateChange +=
         ref new StateChange([&](String^ callId, CallStatus state, int code)
     {
-        if (state == CallStatus::NONE) {
+        if (state == CallStatus::ENDED) {
             Video::VideoManager::instance->rendererManager()->raiseClearRenderTarget();
         }
     });
diff --git a/VideoRendererManager.cpp b/VideoRendererManager.cpp
index 84220a5..3bb2795 100644
--- a/VideoRendererManager.cpp
+++ b/VideoRendererManager.cpp
@@ -106,11 +106,14 @@ VideoRendererManager::removeRenderer(String^ id)
 {
     if(!renderers)
         return;
-    std::unique_lock<std::mutex> lk(renderers->Lookup(id)->render_mutex);
-    renderers->Lookup(id)->frame_cv.wait(lk, [=] {
-        return !renderers->Lookup(id)->isRendering;
-    });
-    renderers->Remove(id);
+    auto renderer_w = renderer(id);
+    if (renderer_w) {
+        std::unique_lock<std::mutex> lk(renderer_w->render_mutex);
+        renderer_w->frame_cv.wait(lk, [=] {
+            return !renderer_w->isRendering;
+        });
+        renderers->Remove(id);
+    }
 }
 
 VideoRendererWrapper^
diff --git a/ring-client-uwp.sln b/ring-client-uwp.sln
index bee1def..74bca61 100644
--- a/ring-client-uwp.sln
+++ b/ring-client-uwp.sln
@@ -124,7 +124,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dependencies", "dependencie
 		{6227F51A-1498-4C4A-B213-F6FDED605125} = {6227F51A-1498-4C4A-B213-F6FDED605125}
 		{1E6C2C1C-6453-4129-AE3F-0EE8E6599C89} = {1E6C2C1C-6453-4129-AE3F-0EE8E6599C89}
 		{0C4EAC26-4AAC-3525-BA45-916F44CFD660} = {0C4EAC26-4AAC-3525-BA45-916F44CFD660}
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301} = {D59B6527-F3DE-4D26-A08D-52F1EE989301}
 		{C00D492D-9474-4F78-80BF-86F6F337E81B} = {C00D492D-9474-4F78-80BF-86F6F337E81B}
 		{0DC9504B-4FF5-4590-97B3-FFD4C04F2893} = {0DC9504B-4FF5-4590-97B3-FFD4C04F2893}
 		{23913386-5333-4C93-B3F0-0227AFF77B49} = {23913386-5333-4C93-B3F0-0227AFF77B49}
@@ -203,10 +202,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpjproject", "..\ring-dae
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyuv", "..\ring-daemon\contrib\pjproject\third_party\build\yuv\libyuv.vcxproj", "{6AC9B65F-0862-4A5C-8A9D-141516993130}"
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libnatpmp", "libnatpmp", "{A63F4502-E0B5-46C7-AC43-5EFB5361E1DE}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnatpmp", "..\ring-daemon\contrib\libnatpmp\msvc\libnatpmp.vcxproj", "{D59B6527-F3DE-4D26-A08D-52F1EE989301}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|ARM = Debug|ARM
@@ -5977,118 +5972,6 @@ Global
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x64.Build.0 = Release-Static|x64
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x86.ActiveCfg = Release-Static|Win32
 		{6AC9B65F-0862-4A5C-8A9D-141516993130}.Release-Static|x86.Build.0 = Release-Static|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|ARM.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLL|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLL|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dll|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dll|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLL|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLL|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dll|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dll|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLL|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLL|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dll|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dll|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLLStaticDeps|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLLStaticDeps|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLLStaticDeps|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLLStaticDeps|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLLStaticDeps|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugDLLStaticDeps|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dynamic|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dynamic|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dynamic|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dynamic|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dynamic|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Dynamic|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugLib|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugLib|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Lib|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Lib|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugLib|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugLib|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Lib|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Lib|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugLib|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DebugLib|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Lib|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Lib|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Static|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Static|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Static|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Static|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Static|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug-Static|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Debug|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Debug|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Debug|x64.Build.0 = Debug|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Debug|x86.ActiveCfg = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Debug|x86.Build.0 = Debug|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Release|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Release|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Release|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Release|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Release|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.DLL-Import Release|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|ARM.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLL|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLL|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dll|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dll|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLL|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLL|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dll|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dll|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLL|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLL|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dll|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dll|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLLStaticDeps|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLLStaticDeps|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLLStaticDeps|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLLStaticDeps|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLLStaticDeps|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseDLLStaticDeps|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dynamic|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dynamic|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dynamic|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dynamic|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dynamic|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Dynamic|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLib|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLib|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Lib|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Lib|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLib|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLib|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Lib|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Lib|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLib|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLib|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Lib|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Lib|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLTO|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLTO|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLTO|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLTO|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLTO|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.ReleaseLTO|x86.Build.0 = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Static|ARM.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Static|ARM.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Static|x64.ActiveCfg = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Static|x64.Build.0 = Release|x64
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Static|x86.ActiveCfg = Release|Win32
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release-Static|x86.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -6158,7 +6041,5 @@ Global
 		{F0DBAA03-1BA3-4E3B-A2CA-727E3D3AB858} = {F6875B41-FE04-419C-B591-0301263BEA45}
 		{23D7679C-764C-4E02-8B29-BB882CEEEFE2} = {F6875B41-FE04-419C-B591-0301263BEA45}
 		{6AC9B65F-0862-4A5C-8A9D-141516993130} = {F6875B41-FE04-419C-B591-0301263BEA45}
-		{A63F4502-E0B5-46C7-AC43-5EFB5361E1DE} = {96846C59-E0A1-4132-B779-065C2EAE3E51}
-		{D59B6527-F3DE-4D26-A08D-52F1EE989301} = {A63F4502-E0B5-46C7-AC43-5EFB5361E1DE}
 	EndGlobalSection
 EndGlobal
diff --git a/ring-client-uwp.vcxproj b/ring-client-uwp.vcxproj
index 817c41b..fea695b 100644
--- a/ring-client-uwp.vcxproj
+++ b/ring-client-uwp.vcxproj
@@ -259,11 +259,9 @@
       <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
     </None>
     <None Include="..\restbed\dependency\openssl\out32dll\libeay32.dll">
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
       <DeploymentContent>true</DeploymentContent>
     </None>
     <None Include="..\restbed\dependency\openssl\out32dll\ssleay32.dll">
-      <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
       <DeploymentContent>true</DeploymentContent>
     </None>
     <None Include="ring-client-uwp_StoreKey.pfx" />
diff --git a/ring-client-uwp.vcxproj.filters b/ring-client-uwp.vcxproj.filters
index 73bf3fc..3dfcd35 100644
--- a/ring-client-uwp.vcxproj.filters
+++ b/ring-client-uwp.vcxproj.filters
@@ -230,6 +230,12 @@
     <None Include="..\FFmpegInterop\ffmpeg\Build\Windows10\x64\bin\swresample-2.dll">
       <Filter>Assets\Dlls</Filter>
     </None>
+    <None Include="..\restbed\dependency\openssl\out32dll\libeay32.dll">
+      <Filter>Assets\Dlls</Filter>
+    </None>
+    <None Include="..\restbed\dependency\openssl\out32dll\ssleay32.dll">
+      <Filter>Assets\Dlls</Filter>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <Page Include="MainPage.xaml" />
-- 
GitLab