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