diff --git a/src/Tgstation.Server.Client/ApiClient.cs b/src/Tgstation.Server.Client/ApiClient.cs
index 9913a10184..c3e6dc7e94 100644
--- a/src/Tgstation.Server.Client/ApiClient.cs
+++ b/src/Tgstation.Server.Client/ApiClient.cs
@@ -318,7 +318,7 @@ namespace Tgstation.Server.Client
await Task.WhenAll(requestLoggers.Select(x => x.LogRequest(request, cancellationToken))).ConfigureAwait(false);
- response = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
+ response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
}
finally
{
diff --git a/src/Tgstation.Server.Common/HttpClient.cs b/src/Tgstation.Server.Common/HttpClient.cs
index 41dcf6dec4..264b09fed0 100644
--- a/src/Tgstation.Server.Common/HttpClient.cs
+++ b/src/Tgstation.Server.Common/HttpClient.cs
@@ -45,6 +45,7 @@ namespace Tgstation.Server.Common
public void Dispose() => httpClient.Dispose();
///
- public Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) => httpClient.SendAsync(request, cancellationToken);
+ public Task SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
+ => httpClient.SendAsync(request, completionOption, cancellationToken);
}
}
diff --git a/src/Tgstation.Server.Common/IHttpClient.cs b/src/Tgstation.Server.Common/IHttpClient.cs
index a1ce0190e0..474d54e003 100644
--- a/src/Tgstation.Server.Common/IHttpClient.cs
+++ b/src/Tgstation.Server.Common/IHttpClient.cs
@@ -25,8 +25,9 @@ namespace Tgstation.Server.Common
/// Send an HTTP request.
///
/// The .
+ /// The .
/// The for the operation.
/// A resulting in the of the request.
- Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken);
+ Task SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken);
}
}
diff --git a/src/Tgstation.Server.Host/IO/FileDownloader.cs b/src/Tgstation.Server.Host/IO/FileDownloader.cs
index 4aff37090e..d7262001b4 100644
--- a/src/Tgstation.Server.Host/IO/FileDownloader.cs
+++ b/src/Tgstation.Server.Host/IO/FileDownloader.cs
@@ -51,7 +51,7 @@ namespace Tgstation.Server.Host.IO
if (bearerToken != null)
request.Headers.Authorization = new AuthenticationHeaderValue(ApiHeaders.BearerAuthenticationScheme, bearerToken);
- var webRequestTask = httpClient.SendAsync(request, cancellationToken);
+ var webRequestTask = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
using var response = await webRequestTask;
response.EnsureSuccessStatusCode();
await using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken);
diff --git a/src/Tgstation.Server.Host/Security/OAuth/GenericOAuthValidator.cs b/src/Tgstation.Server.Host/Security/OAuth/GenericOAuthValidator.cs
index 8b98dabc0d..4b4fd51950 100644
--- a/src/Tgstation.Server.Host/Security/OAuth/GenericOAuthValidator.cs
+++ b/src/Tgstation.Server.Host/Security/OAuth/GenericOAuthValidator.cs
@@ -100,7 +100,7 @@ namespace Tgstation.Server.Host.Security.OAuth
var tokenRequestDictionary = JsonConvert.DeserializeObject>(tokenRequestJson);
tokenRequest.Content = new FormUrlEncodedContent(tokenRequestDictionary);
- using var tokenResponse = await httpClient.SendAsync(tokenRequest, cancellationToken);
+ using var tokenResponse = await httpClient.SendAsync(tokenRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
tokenResponse.EnsureSuccessStatusCode();
tokenResponsePayload = await tokenResponse.Content.ReadAsStringAsync(cancellationToken);
var tokenResponseJson = JObject.Parse(tokenResponsePayload);
diff --git a/src/Tgstation.Server.Host/Swarm/SwarmService.cs b/src/Tgstation.Server.Host/Swarm/SwarmService.cs
index d53456c8ac..266d45e245 100644
--- a/src/Tgstation.Server.Host/Swarm/SwarmService.cs
+++ b/src/Tgstation.Server.Host/Swarm/SwarmService.cs
@@ -304,7 +304,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -365,7 +365,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
- using var commitReadyResponse = await httpClient.SendAsync(commitReadyRequest, cancellationToken);
+ using var commitReadyResponse = await httpClient.SendAsync(commitReadyRequest, HttpCompletionOption.ResponseContentRead, cancellationToken);
commitReadyResponse.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -421,7 +421,7 @@ namespace Tgstation.Server.Host.Swarm
{
// I know using the cancellationToken after this point doesn't seem very sane
// It's the token for Ctrl+C on server's console though, so we must respect it
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -516,7 +516,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex)
@@ -782,7 +782,7 @@ namespace Tgstation.Server.Host.Swarm
UpdateVersion = version,
});
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
return response.IsSuccessStatusCode;
}
@@ -943,7 +943,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
return;
}
@@ -1014,7 +1014,7 @@ namespace Tgstation.Server.Host.Swarm
HttpMethod.Get,
String.Empty,
null);
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
logger.LogTrace("Controller health check successful");
return;
@@ -1079,7 +1079,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
- using var response = await httpClient.SendAsync(registrationRequest, cancellationToken);
+ using var response = await httpClient.SendAsync(registrationRequest, HttpCompletionOption.ResponseContentRead, cancellationToken);
if (response.IsSuccessStatusCode)
{
logger.LogInformation("Sucessfully registered with ID {registrationId}", requestedRegistrationId);
@@ -1151,7 +1151,7 @@ namespace Tgstation.Server.Host.Swarm
try
{
- using var response = await httpClient.SendAsync(request, cancellationToken);
+ using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead, cancellationToken);
response.EnsureSuccessStatusCode();
}
catch (Exception ex) when (ex is not OperationCanceledException)
diff --git a/tests/Tgstation.Server.Client.Tests/TestApiClient.cs b/tests/Tgstation.Server.Client.Tests/TestApiClient.cs
index 49ab83e74a..c848cb32c2 100644
--- a/tests/Tgstation.Server.Client.Tests/TestApiClient.cs
+++ b/tests/Tgstation.Server.Client.Tests/TestApiClient.cs
@@ -39,7 +39,7 @@ namespace Tgstation.Server.Client.Tests
};
var httpClient = new Mock();
- httpClient.Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny())).Returns(Task.FromResult(response));
+ httpClient.Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny(), It.IsAny())).Returns(Task.FromResult(response));
var client = new ApiClient(httpClient.Object, new Uri("http://fake.com"), new ApiHeaders(new ProductHeaderValue("fake"), "fake"), null, false);
@@ -64,7 +64,7 @@ namespace Tgstation.Server.Client.Tests
};
var httpClient = new Mock();
- httpClient.Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny())).Returns(Task.FromResult(response));
+ httpClient.Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny(), It.IsAny())).Returns(Task.FromResult(response));
var client = new ApiClient(httpClient.Object, new Uri("http://fake.com"), new ApiHeaders(new ProductHeaderValue("fake"), "fake"), null, true);
diff --git a/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs b/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs
index f0678cd37d..acab0e6bbb 100644
--- a/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs
+++ b/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs
@@ -41,7 +41,7 @@ namespace Tgstation.Server.Host.Swarm.Tests
{
this.createSwarmController = createSwarmController;
clientMock
- .Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny()))
+ .Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny(), It.IsAny()))
.Returns(MapRequest);
this.logger = logger;
AsyncRequests = true;
@@ -59,6 +59,7 @@ namespace Tgstation.Server.Host.Swarm.Tests
async Task MapRequest(
HttpRequestMessage request,
+ HttpCompletionOption httpCompletionOption,
CancellationToken cancellationToken)
{
var (config, node) = configToNodes.FirstOrDefault(
diff --git a/tools/Tgstation.Server.Migrator/Program.cs b/tools/Tgstation.Server.Migrator/Program.cs
index fb6810da0b..1bd41582cd 100644
--- a/tools/Tgstation.Server.Migrator/Program.cs
+++ b/tools/Tgstation.Server.Migrator/Program.cs
@@ -282,7 +282,7 @@ try
using var httpClient = httpClientFactory.CreateClient();
using var request = new HttpRequestMessage(HttpMethod.Get, downloadUri);
- var webRequestTask = httpClient.SendAsync(request, default);
+ var webRequestTask = httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, default);
using var response = await webRequestTask;
response.EnsureSuccessStatusCode();
await using (var responseStream = await response.Content.ReadAsStreamAsync())