From 5bbc3aef1368cc1fcc59304013f0999b0827115b Mon Sep 17 00:00:00 2001
From: Morph <39850852+Morph1984@users.noreply.github.com>
Date: Mon, 17 Jul 2023 15:36:03 -0400
Subject: [PATCH 1/3] network: Forward declarations

---
 src/core/hle/service/nifm/nifm.cpp         | 1 +
 src/core/hle/service/nifm/nifm.h           | 7 ++++---
 src/core/internal_network/socket_proxy.cpp | 1 +
 src/core/internal_network/socket_proxy.h   | 4 +++-
 src/core/internal_network/sockets.h        | 3 ++-
 5 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp
index 91d42853e7..21b06d10ba 100644
--- a/src/core/hle/service/nifm/nifm.cpp
+++ b/src/core/hle/service/nifm/nifm.cpp
@@ -7,6 +7,7 @@
 #include "core/hle/service/kernel_helpers.h"
 #include "core/hle/service/nifm/nifm.h"
 #include "core/hle/service/server_manager.h"
+#include "network/network.h"
 
 namespace {
 
diff --git a/src/core/hle/service/nifm/nifm.h b/src/core/hle/service/nifm/nifm.h
index 9b20e68236..ae99c46955 100644
--- a/src/core/hle/service/nifm/nifm.h
+++ b/src/core/hle/service/nifm/nifm.h
@@ -4,14 +4,15 @@
 #pragma once
 
 #include "core/hle/service/service.h"
-#include "network/network.h"
-#include "network/room.h"
-#include "network/room_member.h"
 
 namespace Core {
 class System;
 }
 
+namespace Network {
+class RoomNetwork;
+}
+
 namespace Service::NIFM {
 
 void LoopProcess(Core::System& system);
diff --git a/src/core/internal_network/socket_proxy.cpp b/src/core/internal_network/socket_proxy.cpp
index 44e9e30937..ce0dee9705 100644
--- a/src/core/internal_network/socket_proxy.cpp
+++ b/src/core/internal_network/socket_proxy.cpp
@@ -10,6 +10,7 @@
 #include "core/internal_network/network.h"
 #include "core/internal_network/network_interface.h"
 #include "core/internal_network/socket_proxy.h"
+#include "network/network.h"
 
 #if YUZU_UNIX
 #include <sys/socket.h>
diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h
index e12c413d1e..70500cf4a2 100644
--- a/src/core/internal_network/socket_proxy.h
+++ b/src/core/internal_network/socket_proxy.h
@@ -10,10 +10,12 @@
 
 #include "common/common_funcs.h"
 #include "core/internal_network/sockets.h"
-#include "network/network.h"
+#include "network/room_member.h"
 
 namespace Network {
 
+class RoomNetwork;
+
 class ProxySocket : public SocketBase {
 public:
     explicit ProxySocket(RoomNetwork& room_network_) noexcept;
diff --git a/src/core/internal_network/sockets.h b/src/core/internal_network/sockets.h
index 46a53ef795..4ba51f62c9 100644
--- a/src/core/internal_network/sockets.h
+++ b/src/core/internal_network/sockets.h
@@ -15,12 +15,13 @@
 
 #include "common/common_types.h"
 #include "core/internal_network/network.h"
-#include "network/network.h"
 
 // TODO: C++20 Replace std::vector usages with std::span
 
 namespace Network {
 
+struct ProxyPacket;
+
 class SocketBase {
 public:
 #ifdef YUZU_UNIX

From e0fb1d3d172d4372a1216e939b3cac941782b09e Mon Sep 17 00:00:00 2001
From: Morph <39850852+Morph1984@users.noreply.github.com>
Date: Mon, 17 Jul 2023 15:38:28 -0400
Subject: [PATCH 2/3] ssl: Reorder inclusions

---
 src/common/socket_types.h                        |  5 +++--
 src/core/hle/service/ssl/ssl_backend.h           |  8 ++++----
 src/core/hle/service/ssl/ssl_backend_none.cpp    |  4 ++--
 src/core/hle/service/ssl/ssl_backend_openssl.cpp | 16 ++++++++--------
 .../hle/service/ssl/ssl_backend_schannel.cpp     |  8 ++++----
 .../service/ssl/ssl_backend_securetransport.cpp  | 15 +++++++++------
 6 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/src/common/socket_types.h b/src/common/socket_types.h
index b2191c2e88..63824a5c48 100644
--- a/src/common/socket_types.h
+++ b/src/common/socket_types.h
@@ -3,9 +3,10 @@
 
 #pragma once
 
-#include "common/common_types.h"
-
 #include <optional>
+#include <string>
+
+#include "common/common_types.h"
 
 namespace Network {
 
diff --git a/src/core/hle/service/ssl/ssl_backend.h b/src/core/hle/service/ssl/ssl_backend.h
index 25c16bcc16..409f4367ca 100644
--- a/src/core/hle/service/ssl/ssl_backend.h
+++ b/src/core/hle/service/ssl/ssl_backend.h
@@ -3,15 +3,15 @@
 
 #pragma once
 
-#include "core/hle/result.h"
-
-#include "common/common_types.h"
-
 #include <memory>
 #include <span>
 #include <string>
 #include <vector>
 
+#include "common/common_types.h"
+
+#include "core/hle/result.h"
+
 namespace Network {
 class SocketBase;
 }
diff --git a/src/core/hle/service/ssl/ssl_backend_none.cpp b/src/core/hle/service/ssl/ssl_backend_none.cpp
index f2f0ef706e..2f4f23c42d 100644
--- a/src/core/hle/service/ssl/ssl_backend_none.cpp
+++ b/src/core/hle/service/ssl/ssl_backend_none.cpp
@@ -1,10 +1,10 @@
 // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "core/hle/service/ssl/ssl_backend.h"
-
 #include "common/logging/log.h"
 
+#include "core/hle/service/ssl/ssl_backend.h"
+
 namespace Service::SSL {
 
 ResultVal<std::unique_ptr<SSLConnectionBackend>> CreateSSLConnectionBackend() {
diff --git a/src/core/hle/service/ssl/ssl_backend_openssl.cpp b/src/core/hle/service/ssl/ssl_backend_openssl.cpp
index f69674f77e..6ca869dbf2 100644
--- a/src/core/hle/service/ssl/ssl_backend_openssl.cpp
+++ b/src/core/hle/service/ssl/ssl_backend_openssl.cpp
@@ -1,14 +1,6 @@
 // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "core/hle/service/ssl/ssl_backend.h"
-#include "core/internal_network/network.h"
-#include "core/internal_network/sockets.h"
-
-#include "common/fs/file.h"
-#include "common/hex_util.h"
-#include "common/string_util.h"
-
 #include <mutex>
 
 #include <openssl/bio.h>
@@ -16,6 +8,14 @@
 #include <openssl/ssl.h>
 #include <openssl/x509.h>
 
+#include "common/fs/file.h"
+#include "common/hex_util.h"
+#include "common/string_util.h"
+
+#include "core/hle/service/ssl/ssl_backend.h"
+#include "core/internal_network/network.h"
+#include "core/internal_network/sockets.h"
+
 using namespace Common::FS;
 
 namespace Service::SSL {
diff --git a/src/core/hle/service/ssl/ssl_backend_schannel.cpp b/src/core/hle/service/ssl/ssl_backend_schannel.cpp
index a1d6a186ef..368735d8c2 100644
--- a/src/core/hle/service/ssl/ssl_backend_schannel.cpp
+++ b/src/core/hle/service/ssl/ssl_backend_schannel.cpp
@@ -1,16 +1,16 @@
 // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "core/hle/service/ssl/ssl_backend.h"
-#include "core/internal_network/network.h"
-#include "core/internal_network/sockets.h"
+#include <mutex>
 
 #include "common/error.h"
 #include "common/fs/file.h"
 #include "common/hex_util.h"
 #include "common/string_util.h"
 
-#include <mutex>
+#include "core/hle/service/ssl/ssl_backend.h"
+#include "core/internal_network/network.h"
+#include "core/internal_network/sockets.h"
 
 namespace {
 
diff --git a/src/core/hle/service/ssl/ssl_backend_securetransport.cpp b/src/core/hle/service/ssl/ssl_backend_securetransport.cpp
index be40a5aeb3..b3083cbadf 100644
--- a/src/core/hle/service/ssl/ssl_backend_securetransport.cpp
+++ b/src/core/hle/service/ssl/ssl_backend_securetransport.cpp
@@ -1,18 +1,21 @@
 // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "core/hle/service/ssl/ssl_backend.h"
-#include "core/internal_network/network.h"
-#include "core/internal_network/sockets.h"
-
 #include <mutex>
 
-#include <Security/SecureTransport.h>
-
 // SecureTransport has been deprecated in its entirety in favor of
 // Network.framework, but that does not allow layering TLS on top of an
 // arbitrary socket.
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#include <Security/SecureTransport.h>
+#pragma GCC diagnostic pop
+#endif
+
+#include "core/hle/service/ssl/ssl_backend.h"
+#include "core/internal_network/network.h"
+#include "core/internal_network/sockets.h"
 
 namespace {
 

From 16c238e4b92fc20a8a49e2a6713366fd3cfafad8 Mon Sep 17 00:00:00 2001
From: Morph <39850852+Morph1984@users.noreply.github.com>
Date: Mon, 17 Jul 2023 15:44:15 -0400
Subject: [PATCH 3/3] ssl: Link with crypt32 for secure channel backend

---
 src/core/CMakeLists.txt                           | 2 +-
 src/core/hle/service/ssl/ssl_backend_schannel.cpp | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index c3b688c5d6..4b7395be88 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -876,7 +876,7 @@ elseif (APPLE)
 elseif (WIN32)
     target_sources(core PRIVATE
         hle/service/ssl/ssl_backend_schannel.cpp)
-    target_link_libraries(core PRIVATE secur32)
+    target_link_libraries(core PRIVATE crypt32 secur32)
 else()
     target_sources(core PRIVATE
         hle/service/ssl/ssl_backend_none.cpp)
diff --git a/src/core/hle/service/ssl/ssl_backend_schannel.cpp b/src/core/hle/service/ssl/ssl_backend_schannel.cpp
index 368735d8c2..d8074339a4 100644
--- a/src/core/hle/service/ssl/ssl_backend_schannel.cpp
+++ b/src/core/hle/service/ssl/ssl_backend_schannel.cpp
@@ -20,6 +20,7 @@ namespace {
 #define SECURITY_WIN32
 #include <schnlsp.h>
 #include <security.h>
+#include <wincrypt.h>
 
 std::once_flag one_time_init_flag;
 bool one_time_init_success = false;