diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7253c92..56123c2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -34,6 +34,7 @@ jobs:
name: xray-16-dependencies ${{ matrix.configuration }} ${{ matrix.platform }} (github-${{ github.run_number }})
path: |
cryptopp/*.h
+ GameSpy/src/GameSpy/**/*.h
*/include/**/*.h
bin/**/*.dll
bin/**/*.lib
@@ -54,7 +55,12 @@ jobs:
call :flatten_directory "theora",
call :flatten_directory "vorbis",
call :flatten_directory "lzo",
+
move cryptopp include
+
+ move GameSpy/src/GameSpy include
+ rmdir /s /q GameSpy
+
exit /b
:flatten_directory
diff --git a/.gitmodules b/.gitmodules
index d3341b0..2fc0fd9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
[submodule "cryptopp"]
path = cryptopp
url = https://github.com/weidai11/cryptopp.git
+[submodule "GameSpy"]
+ path = GameSpy
+ url = https://github.com/OpenXRay/GameSpy.git
diff --git a/GameSpy b/GameSpy
new file mode 160000
index 0000000..61d061b
--- /dev/null
+++ b/GameSpy
@@ -0,0 +1 @@
+Subproject commit 61d061b4b3f860865f97e659e496e11704f61eb3
diff --git a/GameSpy.vcxproj b/GameSpy.vcxproj
new file mode 100644
index 0000000..25c4100
--- /dev/null
+++ b/GameSpy.vcxproj
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+ {67FF193E-2C20-402A-9026-9F5F6327503C}
+ Win32Proj
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+ NotUsing
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/GameSpy.vcxproj.filters b/GameSpy.vcxproj.filters
new file mode 100644
index 0000000..089b311
--- /dev/null
+++ b/GameSpy.vcxproj.filters
@@ -0,0 +1,515 @@
+
+
+
+
+ {0b746804-0031-43d9-b9cf-0d64dafe2e1d}
+
+
+ {fba75b57-2ac6-4b34-843a-6f4c531837b1}
+
+
+ {5284f491-a6fd-4ab6-82f4-dc31d12ba9dc}
+
+
+ {be055a0e-cf77-4611-b105-368bb0562ee7}
+
+
+ {fdcfbdda-d1f6-4662-82b7-90232843c5da}
+
+
+ {b16bab2d-ef6e-43b2-8aa4-95b8682f430f}
+
+
+ {a424aaf8-e3d0-41a3-908a-c2d324dba5e4}
+
+
+ {c2b4541d-20cf-4bc7-a6ec-64d233f5180a}
+
+
+ {8e98b125-e43b-458f-bf42-2717935242b4}
+
+
+ {f86c59bb-c309-4af8-b313-10ba9a5043ef}
+
+
+ {9516808d-f132-4667-88f0-1bd577b71fc8}
+
+
+ {7aea7c26-7a7a-46ee-84ec-5a6258221f89}
+
+
+ {f8224574-8bcd-4498-a635-a4a2a9db4269}
+
+
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ gcdkey
+
+
+ gcdkey
+
+
+ qr2
+
+
+ qr2
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ pt
+
+
+ gstats
+
+
+ gstats
+
+
+ sake
+
+
+ sake
+
+
+ sake
+
+
+ sake
+
+
+ sake
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ natneg
+
+
+ natneg
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ webservices
+
+
+
+
+
+
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ common
+
+
+ gcdkey
+
+
+ gcdkey
+
+
+ qr2
+
+
+ qr2
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ ghttp
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ serverbrowsing
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ GP
+
+
+ pt
+
+
+ gstats
+
+
+ gstats
+
+
+ gstats
+
+
+ sake
+
+
+ sake
+
+
+ sake
+
+
+ sake
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ qt2
+
+
+ natneg
+
+
+ natneg
+
+
+ natneg
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ sc
+
+
+ webservices
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dependencies.sln b/dependencies.sln
index 378702d..0208784 100644
--- a/dependencies.sln
+++ b/dependencies.sln
@@ -15,6 +15,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lzo", "lzo.vcxproj", "{614A
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "cryptlib.vcxproj", "{C39F4B46-6E89-4074-902E-CA57073044D2}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GameSpy", "GameSpy.vcxproj", "{67FF193E-2C20-402A-9026-9F5F6327503C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
@@ -219,6 +221,38 @@ Global
{C39F4B46-6E89-4074-902E-CA57073044D2}.Release|x64.Build.0 = Release|x64
{C39F4B46-6E89-4074-902E-CA57073044D2}.Release|x86.ActiveCfg = Release|Win32
{C39F4B46-6E89-4074-902E-CA57073044D2}.Release|x86.Build.0 = Release|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|ARM.ActiveCfg = Debug|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|ARM.Build.0 = Debug|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|ARM64.Build.0 = Debug|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|x64.ActiveCfg = Debug|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|x64.Build.0 = Debug|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|x86.ActiveCfg = Debug|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Debug|x86.Build.0 = Debug|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|ARM.ActiveCfg = Mixed|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|ARM.Build.0 = Mixed|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|ARM64.ActiveCfg = Mixed|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|ARM64.Build.0 = Mixed|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|x64.ActiveCfg = Mixed|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|x64.Build.0 = Mixed|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|x86.ActiveCfg = Mixed|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Mixed|x86.Build.0 = Mixed|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|ARM.ActiveCfg = Release Master Gold|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|ARM.Build.0 = Release Master Gold|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|ARM64.ActiveCfg = Release Master Gold|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|ARM64.Build.0 = Release Master Gold|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|x64.ActiveCfg = Release Master Gold|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|x64.Build.0 = Release Master Gold|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|x86.ActiveCfg = Release Master Gold|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release Master Gold|x86.Build.0 = Release Master Gold|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|ARM.ActiveCfg = Release|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|ARM.Build.0 = Release|ARM
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|ARM64.ActiveCfg = Release|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|ARM64.Build.0 = Release|ARM64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|x64.ActiveCfg = Release|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|x64.Build.0 = Release|x64
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|x86.ActiveCfg = Release|Win32
+ {67FF193E-2C20-402A-9026-9F5F6327503C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE