diff --git a/Http2Client.sln b/Http2Client.sln
index 6aada4b..3534efd 100644
--- a/Http2Client.sln
+++ b/Http2Client.sln
@@ -9,30 +9,44 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{4A
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{F245E407-5E9D-427E-98C8-D79116882421}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2Client.Console", "examples\Http2Client.Console\Http2Client.Console.csproj", "{16B97360-39EA-4A84-B3A0-D028DB8C8635}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2Client.Console", "examples\Http2Client.Console.csproj", "{16B97360-39EA-4A84-B3A0-D028DB8C8635}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2Client", "src\Http2Client\Http2Client.csproj", "{5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2Client", "src\Http2Client.csproj", "{5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2Client.Test", "tests\Http2Client.Test\Http2Client.Test.csproj", "{00D83329-045D-4431-819E-C3A45034A4EF}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Http2Client.Test", "tests\Http2Client.Test.csproj", "{00D83329-045D-4431-819E-C3A45034A4EF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{16B97360-39EA-4A84-B3A0-D028DB8C8635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16B97360-39EA-4A84-B3A0-D028DB8C8635}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {16B97360-39EA-4A84-B3A0-D028DB8C8635}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {16B97360-39EA-4A84-B3A0-D028DB8C8635}.Debug|x64.Build.0 = Debug|Any CPU
{16B97360-39EA-4A84-B3A0-D028DB8C8635}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16B97360-39EA-4A84-B3A0-D028DB8C8635}.Release|Any CPU.Build.0 = Release|Any CPU
+ {16B97360-39EA-4A84-B3A0-D028DB8C8635}.Release|x64.ActiveCfg = Release|x64
+ {16B97360-39EA-4A84-B3A0-D028DB8C8635}.Release|x64.Build.0 = Release|x64
{5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Debug|x64.ActiveCfg = Debug|x64
+ {5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Debug|x64.Build.0 = Debug|x64
{5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Release|x64.ActiveCfg = Release|x64
+ {5D33478C-EF54-4CFE-BC78-7CB6D40D0DCB}.Release|x64.Build.0 = Release|x64
{00D83329-045D-4431-819E-C3A45034A4EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00D83329-045D-4431-819E-C3A45034A4EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {00D83329-045D-4431-819E-C3A45034A4EF}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {00D83329-045D-4431-819E-C3A45034A4EF}.Debug|x64.Build.0 = Debug|Any CPU
{00D83329-045D-4431-819E-C3A45034A4EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00D83329-045D-4431-819E-C3A45034A4EF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {00D83329-045D-4431-819E-C3A45034A4EF}.Release|x64.ActiveCfg = Release|Any CPU
+ {00D83329-045D-4431-819E-C3A45034A4EF}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/Http2Client.Console.csproj b/examples/Http2Client.Console.csproj
new file mode 100644
index 0000000..614be42
--- /dev/null
+++ b/examples/Http2Client.Console.csproj
@@ -0,0 +1,21 @@
+
+
+
+ Exe
+ net8.0
+ disable
+ enable
+ Latest
+
+
+
+
+
+
+
+
+ Always
+
+
+
+
diff --git a/examples/Http2Client.Console/Http2Client.Console.csproj b/examples/Http2Client.Console/Http2Client.Console.csproj
deleted file mode 100644
index f5df637..0000000
--- a/examples/Http2Client.Console/Http2Client.Console.csproj
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
- Exe
- net8.0
- enable
- enable
- Latest
-
-
-
-
-
-
-
diff --git a/examples/Http2Client.Console/Program.cs b/examples/Http2Client.Console/Program.cs
deleted file mode 100644
index 3751555..0000000
--- a/examples/Http2Client.Console/Program.cs
+++ /dev/null
@@ -1,2 +0,0 @@
-// See https://aka.ms/new-console-template for more information
-Console.WriteLine("Hello, World!");
diff --git a/examples/Native/tls-client-windows-64-1.11.0.dll b/examples/Native/tls-client-windows-64-1.11.0.dll
new file mode 100644
index 0000000..2838324
Binary files /dev/null and b/examples/Native/tls-client-windows-64-1.11.0.dll differ
diff --git a/examples/Program.cs b/examples/Program.cs
new file mode 100644
index 0000000..8e24e3a
--- /dev/null
+++ b/examples/Program.cs
@@ -0,0 +1,39 @@
+using Http2Client.Builders;
+using Http2Client.Core.Enums;
+using Http2Client.Core.Request;
+
+using System;
+
+internal class Program
+{
+ private const string PATH_LIB = "Native\\tls-client-windows-64-1.11.0.dll";
+
+ private static void Main(string[] args)
+ {
+ using var client = CreateClientBuilder().Build();
+
+ var request = new HttpRequest()
+ {
+ RequestUrl = "https://tls.peet.ws/api/all",
+ RequestMethod = "GET",
+ BrowserType = BrowserType.Chrome133,
+ };
+
+ var response = client.Send(request);
+
+ Console.WriteLine(response.Status);
+ Console.WriteLine(response.Body);
+ }
+
+ private static HttpClientBuilder CreateClientBuilder()
+ {
+ //const string Proxy = "https://localhost:1777";
+ const string UserAgent = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36";
+
+ return new HttpClientBuilder()
+ .WithUserAgent(UserAgent)
+ .WithCookies()
+ .WithLibraryPath(PATH_LIB)
+ .WithRandomTlsExtensions();
+ }
+}
\ No newline at end of file
diff --git a/src/Http2Client/Builders/HttpClientBuilder.cs b/src/Builders/HttpClientBuilder.cs
similarity index 100%
rename from src/Http2Client/Builders/HttpClientBuilder.cs
rename to src/Builders/HttpClientBuilder.cs
diff --git a/src/Http2Client/Builders/HttpRequestBuilder.cs b/src/Builders/HttpRequestBuilder.cs
similarity index 100%
rename from src/Http2Client/Builders/HttpRequestBuilder.cs
rename to src/Builders/HttpRequestBuilder.cs
diff --git a/src/Http2Client/Core/Converters/JsonBrowserTypeConverter.cs b/src/Core/Converters/JsonBrowserTypeConverter.cs
similarity index 100%
rename from src/Http2Client/Core/Converters/JsonBrowserTypeConverter.cs
rename to src/Core/Converters/JsonBrowserTypeConverter.cs
diff --git a/src/Http2Client/Core/Enums/BrowserType.cs b/src/Core/Enums/BrowserType.cs
similarity index 100%
rename from src/Http2Client/Core/Enums/BrowserType.cs
rename to src/Core/Enums/BrowserType.cs
diff --git a/src/Http2Client/Core/Models/CandidateCipherSuite.cs b/src/Core/Models/CandidateCipherSuite.cs
similarity index 100%
rename from src/Http2Client/Core/Models/CandidateCipherSuite.cs
rename to src/Core/Models/CandidateCipherSuite.cs
diff --git a/src/Http2Client/Core/Models/ClientCookie.cs b/src/Core/Models/ClientCookie.cs
similarity index 100%
rename from src/Http2Client/Core/Models/ClientCookie.cs
rename to src/Core/Models/ClientCookie.cs
diff --git a/src/Http2Client/Core/Models/CustomHttp2Client.cs b/src/Core/Models/CustomHttp2Client.cs
similarity index 100%
rename from src/Http2Client/Core/Models/CustomHttp2Client.cs
rename to src/Core/Models/CustomHttp2Client.cs
diff --git a/src/Http2Client/Core/Models/PriorityFrame.cs b/src/Core/Models/PriorityFrame.cs
similarity index 100%
rename from src/Http2Client/Core/Models/PriorityFrame.cs
rename to src/Core/Models/PriorityFrame.cs
diff --git a/src/Http2Client/Core/Models/TransportOptions.cs b/src/Core/Models/TransportOptions.cs
similarity index 100%
rename from src/Http2Client/Core/Models/TransportOptions.cs
rename to src/Core/Models/TransportOptions.cs
diff --git a/src/Http2Client/Core/Request/CookiesRequest.cs b/src/Core/Request/CookiesRequest.cs
similarity index 100%
rename from src/Http2Client/Core/Request/CookiesRequest.cs
rename to src/Core/Request/CookiesRequest.cs
diff --git a/src/Http2Client/Core/Request/HttpRequest.cs b/src/Core/Request/HttpRequest.cs
similarity index 100%
rename from src/Http2Client/Core/Request/HttpRequest.cs
rename to src/Core/Request/HttpRequest.cs
diff --git a/src/Http2Client/Core/Response/CookiesResponse.cs b/src/Core/Response/CookiesResponse.cs
similarity index 100%
rename from src/Http2Client/Core/Response/CookiesResponse.cs
rename to src/Core/Response/CookiesResponse.cs
diff --git a/src/Http2Client/Core/Response/HttpResponse.cs b/src/Core/Response/HttpResponse.cs
similarity index 100%
rename from src/Http2Client/Core/Response/HttpResponse.cs
rename to src/Core/Response/HttpResponse.cs
diff --git a/src/Http2Client/Extensions/BrowserTypeExtension.cs b/src/Extensions/BrowserTypeExtension.cs
similarity index 100%
rename from src/Http2Client/Extensions/BrowserTypeExtension.cs
rename to src/Extensions/BrowserTypeExtension.cs
diff --git a/src/Http2Client/Http2Client.cs b/src/Http2Client.cs
similarity index 100%
rename from src/Http2Client/Http2Client.cs
rename to src/Http2Client.cs
diff --git a/src/Http2Client/Http2Client.csproj b/src/Http2Client.csproj
similarity index 93%
rename from src/Http2Client/Http2Client.csproj
rename to src/Http2Client.csproj
index fb2b858..c156635 100644
--- a/src/Http2Client/Http2Client.csproj
+++ b/src/Http2Client.csproj
@@ -4,6 +4,7 @@
netstandard2.0;net5.0;net6.0;net8.0;net9.0
Latest
enable
+ AnyCPU;x64
diff --git a/src/Http2Client/Native/NativeLoader.cs b/src/Http2Client/Native/NativeLoader.cs
deleted file mode 100644
index 62cd8ab..0000000
--- a/src/Http2Client/Native/NativeLoader.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-using Http2Client.Utilities;
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace Http2Client.Native;
-
-///
-/// Cross-platform native library loader. Handles OS-specific loading of .dll/.so/.dylib files.
-///
-internal static class NativeLoader
-{
- ///
- /// Resolve all symbols immediately.
- ///
- private const int RTLD_NOW = 2;
-
- ///
- /// Loads native library and returns handle for function calls.
- ///
- public static nint LoadLibrary(string path)
- {
- if (PlatformSupport.IsLinux) return Linux.dlopen(path, RTLD_NOW);
- if (PlatformSupport.IsMacOS) return MacOS.dlopen(path, RTLD_NOW);
- if (PlatformSupport.IsWindows) return Windows.LoadLibrary(path);
-
- throw new PlatformNotSupportedException("Don't know how to load libraries on this platform");
- }
-
- ///
- /// Finds function in loaded library by name.
- ///
- /// Library handle
- /// Function name
- public static nint GetProcAddress(nint handle, string name)
- {
- if (PlatformSupport.IsLinux) return Linux.dlsym(handle, name);
- if (PlatformSupport.IsMacOS) return MacOS.dlsym(handle, name);
- if (PlatformSupport.IsWindows) return Windows.GetProcAddress(handle, name);
-
- throw new PlatformNotSupportedException("Don't know how to find functions on this platform");
- }
-
- ///
- /// Unloads library and frees memory.
- ///
- /// Library handle
- public static bool FreeLibrary(nint handle)
- {
- // Linux and macOS return 0 on success, non-zero on failure
- if (PlatformSupport.IsLinux) return Linux.dlclose(handle) == 0;
- if (PlatformSupport.IsMacOS) return MacOS.dlclose(handle) == 0;
- if (PlatformSupport.IsWindows) return Windows.FreeLibrary(handle);
-
- throw new PlatformNotSupportedException("Don't know how to unload libraries on this platform");
- }
-
- ///
- /// Windows native library functions.
- ///
- private static class Windows
- {
- [DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, EntryPoint = "LoadLibraryW")]
- public static extern nint LoadLibrary(string path);
-
- [DllImport("kernel32.dll", SetLastError = true)]
- public static extern nint GetProcAddress(nint handle, string name);
-
- [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "FreeLibrary")]
- [return: MarshalAs(UnmanagedType.Bool)]
- public static extern bool FreeLibrary(nint handle);
- }
-
- ///
- /// Linux dynamic loading functions.
- ///
- private static class Linux
- {
- [DllImport("libdl.so.2", SetLastError = true)]
- public static extern nint dlopen(string path, int flags);
-
- [DllImport("libdl.so.2", SetLastError = true)]
- public static extern nint dlsym(nint handle, string name);
-
- [DllImport("libdl.so.2", SetLastError = true)]
- public static extern int dlclose(nint handle);
- }
-
- ///
- /// macOS dynamic loading functions.
- ///
- private static class MacOS
- {
- [DllImport("libdl.dylib", SetLastError = true)]
- public static extern nint dlopen(string path, int flags);
-
- [DllImport("libdl.dylib", SetLastError = true)]
- public static extern nint dlsym(nint handle, string name);
-
- [DllImport("libdl.dylib", SetLastError = true)]
- public static extern int dlclose(nint handle);
- }
-}
\ No newline at end of file
diff --git a/src/Http2Client/Http2ClientOptions.cs b/src/Http2ClientOptions.cs
similarity index 100%
rename from src/Http2Client/Http2ClientOptions.cs
rename to src/Http2ClientOptions.cs
diff --git a/src/Native/NativeLoader.cs b/src/Native/NativeLoader.cs
new file mode 100644
index 0000000..0c9a6b4
--- /dev/null
+++ b/src/Native/NativeLoader.cs
@@ -0,0 +1,128 @@
+using Http2Client.Utilities;
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Http2Client.Native;
+
+///
+/// Cross-platform native library loader. Handles OS-specific loading of .dll/.so/.dylib files.
+///
+internal static class NativeLoader
+{
+ ///
+ /// Loads native library and returns handle for function calls.
+ ///
+ public static IntPtr LoadLibrary(string path)
+ {
+ if (PlatformSupport.IsLinux) return Linux.LoadLibrary(path);
+ if (PlatformSupport.IsMacOS) return MacOS.LoadLibrary(path);
+ if (PlatformSupport.IsWindows) return Windows.LoadLibrary(path);
+
+ throw new PlatformNotSupportedException("Don't know how to load libraries on this platform");
+ }
+
+ ///
+ /// Finds function in loaded library by name.
+ ///
+ /// Library handle
+ /// Function name
+ public static IntPtr GetProcAddress(nint handle, string name)
+ {
+ if (PlatformSupport.IsLinux) return Linux.GetProcAddress(handle, name);
+ if (PlatformSupport.IsMacOS) return MacOS.GetProcAddress(handle, name);
+ if (PlatformSupport.IsWindows) return Windows.GetProcAddress(handle, name);
+
+ throw new PlatformNotSupportedException("Don't know how to find functions on this platform");
+ }
+
+ ///
+ /// Unloads library and frees memory.
+ ///
+ /// Library handle
+ public static bool FreeLibrary(nint handle)
+ {
+ // Linux and macOS return 0 on success, non-zero on failure
+ if (PlatformSupport.IsLinux) return Linux.FreeLibrary(handle) == 0;
+ if (PlatformSupport.IsMacOS) return MacOS.FreeLibrary(handle) == 0;
+ if (PlatformSupport.IsWindows) return Windows.FreeLibrary(handle);
+
+ throw new PlatformNotSupportedException("Don't know how to unload libraries on this platform");
+ }
+
+ ///
+ /// Windows native library functions.
+ ///
+ private static class Windows
+ {
+ [DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, EntryPoint = "LoadLibraryW")]
+ public static extern IntPtr LoadLibrary([In][MarshalAs(UnmanagedType.LPWStr)] string path);
+
+ [DllImport("kernel32.dll", SetLastError = true)]
+ public static extern IntPtr GetProcAddress([In] IntPtr hModule, [In] string procName);
+
+ [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "FreeLibrary")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool FreeLibrary([In] IntPtr hLibrary);
+ }
+
+ ///
+ /// Linux dynamic loading functions.
+ ///
+ private static class Linux
+ {
+ [Flags]
+ public enum LoadLibraryFlags
+ {
+ None = 0,
+ Lazy = 0x0001,
+ Now = 0x0002,
+ BindingMask = 0x0003,
+ NoLoad = 0x0004,
+ DeepBind = 0x0008,
+ Local = None,
+ Global = 0x0100,
+ NoDelete = 0x1000
+ }
+
+ [DllImport("libdl.so.2", EntryPoint = "dlopen")]
+ public static extern IntPtr LoadLibrary(
+ [In][MarshalAs(UnmanagedType.LPStr)] string path,
+ [In]LoadLibraryFlags flags = LoadLibraryFlags.Now | LoadLibraryFlags.Global);
+
+ [DllImport("libdl.so.2", EntryPoint = "dlclose")]
+ public static extern int FreeLibrary([In] IntPtr hLibrary);
+
+ [DllImport("libdl.so.2", EntryPoint = "dlsym")]
+ public static extern IntPtr GetProcAddress([In] IntPtr handle, [In] string symbol);
+ }
+
+ ///
+ /// macOS dynamic loading functions.
+ ///
+ private static class MacOS
+ {
+ [Flags]
+ public enum LoadLibraryFlags
+ {
+ None = 0,
+ Lazy = 0x01,
+ Now = 0x02,
+ Local = 0x04,
+ Global = 0x08,
+ NoLoad = 0x10,
+ NoDelete = 0x80
+ }
+
+ [DllImport("libdl.dylib", EntryPoint = "dlopen")]
+ public static extern IntPtr LoadLibrary(
+ [In][MarshalAs(UnmanagedType.LPStr)] string path,
+ [In]LoadLibraryFlags flags = LoadLibraryFlags.Now | LoadLibraryFlags.Global);
+
+ [DllImport("libdl.dylib", EntryPoint = "dlclose")]
+ public static extern int FreeLibrary([In] IntPtr hLibrary);
+
+ [DllImport("libdl.dylib", EntryPoint = "dlsym")]
+ public static extern IntPtr GetProcAddress([In] IntPtr handle, [In] string symbol);
+ }
+}
\ No newline at end of file
diff --git a/src/Http2Client/Native/NativeWrapper.cs b/src/Native/NativeWrapper.cs
similarity index 91%
rename from src/Http2Client/Native/NativeWrapper.cs
rename to src/Native/NativeWrapper.cs
index 8384b76..37806a9 100644
--- a/src/Http2Client/Native/NativeWrapper.cs
+++ b/src/Native/NativeWrapper.cs
@@ -11,24 +11,24 @@ namespace Http2Client.Native;
internal class NativeWrapper : IDisposable
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- private delegate nint RequestDelegate(byte[] payload);
+ private delegate IntPtr RequestDelegate(byte[] payload);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void FreeMemoryDelegate(string sessionID);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- private delegate nint GetCookiesFromSessionDelegate(byte[] payload);
+ private delegate IntPtr GetCookiesFromSessionDelegate(byte[] payload);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- private delegate nint AddCookiesToSessionDelegate(byte[] payload);
+ private delegate IntPtr AddCookiesToSessionDelegate(byte[] payload);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- private delegate nint DestroySessionDelegate(byte[] payload);
+ private delegate IntPtr DestroySessionDelegate(byte[] payload);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
- private delegate nint DestroyAllDelegate();
+ private delegate IntPtr DestroyAllDelegate();
- private readonly nint _libraryHandle;
+ private readonly IntPtr _libraryHandle;
private readonly RequestDelegate _requestDelegate;
private readonly FreeMemoryDelegate _freeMemoryDelegate;
private readonly GetCookiesFromSessionDelegate _getCookiesDelegate;
@@ -130,7 +130,7 @@ public void FreeMemory(string responseId)
///
private T GetDelegate(string functionName)
{
- nint functionPtr = NativeLoader.GetProcAddress(_libraryHandle, functionName);
+ var functionPtr = NativeLoader.GetProcAddress(_libraryHandle, functionName);
if (functionPtr == IntPtr.Zero)
{
diff --git a/src/Http2Client/Utilities/PlatformSupport.cs b/src/Utilities/PlatformSupport.cs
similarity index 100%
rename from src/Http2Client/Utilities/PlatformSupport.cs
rename to src/Utilities/PlatformSupport.cs
diff --git a/src/Http2Client/Utilities/Serializer.cs b/src/Utilities/Serializer.cs
similarity index 100%
rename from src/Http2Client/Utilities/Serializer.cs
rename to src/Utilities/Serializer.cs
diff --git a/src/Http2Client/Utilities/ThrowException.cs b/src/Utilities/ThrowException.cs
similarity index 100%
rename from src/Http2Client/Utilities/ThrowException.cs
rename to src/Utilities/ThrowException.cs
diff --git a/tests/Http2Client.Test/Builders/HttpClientBuilderTests.cs b/tests/Builders/HttpClientBuilderTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Builders/HttpClientBuilderTests.cs
rename to tests/Builders/HttpClientBuilderTests.cs
diff --git a/tests/Http2Client.Test/Builders/HttpRequestBuilderTests.cs b/tests/Builders/HttpRequestBuilderTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Builders/HttpRequestBuilderTests.cs
rename to tests/Builders/HttpRequestBuilderTests.cs
diff --git a/tests/Http2Client.Test/Core/Converters/JsonBrowserTypeConverterTests.cs b/tests/Core/Converters/JsonBrowserTypeConverterTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Core/Converters/JsonBrowserTypeConverterTests.cs
rename to tests/Core/Converters/JsonBrowserTypeConverterTests.cs
diff --git a/tests/Http2Client.Test/Core/Response/HttpResponseTests.cs b/tests/Core/Response/HttpResponseTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Core/Response/HttpResponseTests.cs
rename to tests/Core/Response/HttpResponseTests.cs
diff --git a/tests/Http2Client.Test/Http2Client.Test.csproj b/tests/Http2Client.Test.csproj
similarity index 91%
rename from tests/Http2Client.Test/Http2Client.Test.csproj
rename to tests/Http2Client.Test.csproj
index 0dcdc82..de217f7 100644
--- a/tests/Http2Client.Test/Http2Client.Test.csproj
+++ b/tests/Http2Client.Test.csproj
@@ -19,11 +19,11 @@
-
+
-
+
diff --git a/tests/Http2Client.Test/Http2ClientOptionsTests.cs b/tests/Http2ClientOptionsTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Http2ClientOptionsTests.cs
rename to tests/Http2ClientOptionsTests.cs
diff --git a/tests/Http2Client.Test/Http2ClientTests.cs b/tests/Http2ClientTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Http2ClientTests.cs
rename to tests/Http2ClientTests.cs
diff --git a/tests/Http2Client.Test/Utilities/PlatformSupportTests.cs b/tests/Utilities/PlatformSupportTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Utilities/PlatformSupportTests.cs
rename to tests/Utilities/PlatformSupportTests.cs
diff --git a/tests/Http2Client.Test/Utilities/SerializerTests.cs b/tests/Utilities/SerializerTests.cs
similarity index 100%
rename from tests/Http2Client.Test/Utilities/SerializerTests.cs
rename to tests/Utilities/SerializerTests.cs