From b319fc703d96fdbb8b08e87bb4ddf04620e3ab6f Mon Sep 17 00:00:00 2001 From: RogueException Date: Wed, 16 Sep 2015 11:18:41 -0300 Subject: [PATCH] (Hopefully) fixed the SSL error --- src/Discord.Net/Net/API/RestClient.cs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net/Net/API/RestClient.cs b/src/Discord.Net/Net/API/RestClient.cs index 8c6959b32..c29ac40b1 100644 --- a/src/Discord.Net/Net/API/RestClient.cs +++ b/src/Discord.Net/Net/API/RestClient.cs @@ -1,6 +1,7 @@ using Newtonsoft.Json; using System; using System.Diagnostics; +using System.Net; using System.Net.Http; using System.Reflection; using System.Threading; @@ -20,12 +21,13 @@ namespace Discord.Net.API private readonly IRestEngine _engine; private readonly LogMessageSeverity _logLevel; private CancellationToken _cancelToken; + private ServicePoint _servicePoint; public RestClient(LogMessageSeverity logLevel) { _logLevel = logLevel; - - string version = typeof(RestClient).GetTypeInfo().Assembly.GetName().Version.ToString(2); + + string version = typeof(RestClient).GetTypeInfo().Assembly.GetName().Version.ToString(2); string userAgent = $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)"; #if DNXCORE50 _engine = new BuiltInRestEngine(userAgent); @@ -107,8 +109,11 @@ namespace Discord.Net.API if (_logLevel >= LogMessageSeverity.Verbose) stopwatch = Stopwatch.StartNew(); - + string responseJson = await _engine.Send(method, path, requestJson, _cancelToken).ConfigureAwait(false); + if (_servicePoint == null) + ConfigureServicePoint(); + #if TEST_RESPONSES if (!hasResponse && !string.IsNullOrEmpty(responseJson)) throw new Exception("API check failed: Response is not empty."); @@ -147,6 +152,9 @@ namespace Discord.Net.API stopwatch = Stopwatch.StartNew(); string responseJson = await _engine.SendFile(method, path, filePath, _cancelToken).ConfigureAwait(false); + if (_servicePoint == null) + ConfigureServicePoint(); + #if TEST_RESPONSES if (!hasResponse && !string.IsNullOrEmpty(responseJson)) throw new Exception("API check failed: Response is not empty."); @@ -184,5 +192,14 @@ namespace Discord.Net.API internal void SetToken(string token) => _engine.SetToken(token); internal void SetCancelToken(CancellationToken token) => _cancelToken = token; + + private void ConfigureServicePoint() + { + _servicePoint = ServicePointManager.FindServicePoint(new Uri(Endpoints.BaseApi)); + _servicePoint.Expect100Continue = true; + _servicePoint.UseNagleAlgorithm = false; + //_servicePoint.MaxIdleTime = int.MaxValue; + //_servicePoint.ConnectionLeaseTimeout = int.MaxValue; + } } }