diff --git a/OpenSim/Framework/RestClient.cs b/OpenSim/Framework/RestClient.cs
index 5c168722b0..49c7f632a5 100644
--- a/OpenSim/Framework/RestClient.cs
+++ b/OpenSim/Framework/RestClient.cs
@@ -88,7 +88,7 @@ namespace OpenSim.Framework
///
/// Default time out period
///
- private const int DefaultTimeout = 90; // 90 seconds timeout
+ private const int DefaultTimeout = 90000; // 90 seconds timeout
///
/// Default Buffer size of a block requested from the web-server
@@ -258,10 +258,10 @@ namespace OpenSim.Framework
Uri uri = null;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(DefaultTimeout);
uri = buildUri();
request = new(new HttpMethod(RequestMethod), uri);
@@ -278,13 +278,12 @@ namespace OpenSim.Framework
//else
// request.Headers.TryAddWithoutValidation("Connection", "close");
- cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(DefaultTimeout));
if (WebUtil.DebugLevel >= 3)
m_log.DebugFormat("[REST CLIENT] {0} to {1}", RequestMethod, uri);
//_request.ContentType = "application/xml";
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
Stream respStream = responseMessage.Content.ReadAsStream();
@@ -326,7 +325,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
if (_resource != null)
@@ -348,10 +347,10 @@ namespace OpenSim.Framework
Uri uri = null;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(DefaultTimeout);
uri = buildUri();
request = new(HttpMethod.Post, uri);
@@ -368,13 +367,11 @@ namespace OpenSim.Framework
//else
// request.Headers.TryAddWithoutValidation("Connection", "close");
- cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(DefaultTimeout));
-
request.Content = new ByteArrayContent(src);
request.Content.Headers.TryAddWithoutValidation("Content-Type", "application/xml");
request.Content.Headers.TryAddWithoutValidation("Content-Length", src.Length.ToString());
- responseMessage = client.Send(request, HttpCompletionOption.ResponseContentRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseContentRead);
responseMessage.EnsureSuccessStatusCode();
}
catch (HttpRequestException e)
@@ -402,7 +399,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
}
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 6543295c08..56ec2b08d6 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -55,6 +55,7 @@ using OpenMetaverse;
using OpenMetaverse.StructuredData;
using Amib.Threading;
using System.Collections.Concurrent;
+using System.Net.Http;
namespace OpenSim.Framework
{
@@ -2194,6 +2195,7 @@ namespace OpenSim.Framework
return ms;
}
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static XmlRpcResponse XmlRpcCommand(string url, string methodName, params object[] args)
{
return SendXmlRpcCommand(url, methodName, args);
@@ -2201,8 +2203,9 @@ namespace OpenSim.Framework
public static XmlRpcResponse SendXmlRpcCommand(string url, string methodName, object[] args)
{
- XmlRpcRequest client = new(methodName, args);
- return client.Send(url, WebUtil.SharedHttpClientWithRedir, 6000);
+ XmlRpcRequest xmlclient = new(methodName, args);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ return xmlclient.Send(url, hclient);
}
///
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index afbb29050e..1a9d9cc1e5 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -60,11 +60,8 @@ namespace OpenSim.Framework
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ public static SocketsHttpHandler SharedSocketsHttpHandlerNoRedir = null;
public static SocketsHttpHandler SharedSocketsHttpHandler = null;
- public static HttpClient SharedHttpClient = null;
-
- public static SocketsHttpHandler SharedSocketsHttpHandlerWithRedir = null;
- public static HttpClient SharedHttpClientWithRedir = null;
public static ExpiringKey GlobalExpiringBadURLs = new(30000);
///
@@ -177,15 +174,7 @@ namespace OpenSim.Framework
shh.UseProxy = true;
}
- var client = new HttpClient(shh)
- {
- Timeout = TimeSpan.FromMilliseconds(30000),
- MaxResponseContentBufferSize = 250 * 1024 * 1024,
- };
- client.DefaultRequestHeaders.ExpectContinue = false;
-
- SharedSocketsHttpHandler = shh;
- SharedHttpClient = client;
+ SharedSocketsHttpHandlerNoRedir = shh;
// ****************
@@ -250,16 +239,29 @@ namespace OpenSim.Framework
shh.Proxy = proxy;
shh.UseProxy = true;
}
+ SharedSocketsHttpHandler = shh;
+ }
- client = new HttpClient(shh)
+ public static HttpClient GetNewGlobalHttpClient(int timeout)
+ {
+ var client = new HttpClient(SharedSocketsHttpHandler, false)
{
- Timeout = TimeSpan.FromMilliseconds(30000),
+ Timeout = TimeSpan.FromMilliseconds(timeout > 0 ? timeout : 30000),
MaxResponseContentBufferSize = 250 * 1024 * 1024,
};
client.DefaultRequestHeaders.ExpectContinue = false;
+ return client;
+ }
- SharedSocketsHttpHandlerWithRedir = shh;
- SharedHttpClientWithRedir = client;
+ public static HttpClient GetGlobalNoRedirHttpClient(int timeout)
+ {
+ var client = new HttpClient(SharedSocketsHttpHandlerNoRedir, false)
+ {
+ Timeout = TimeSpan.FromMilliseconds(timeout > 0 ? timeout : 30000),
+ MaxResponseContentBufferSize = 250 * 1024 * 1024,
+ };
+ client.DefaultRequestHeaders.ExpectContinue = false;
+ return client;
}
///
@@ -366,11 +368,10 @@ namespace OpenSim.Framework
int rcvlen = 0;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = SharedHttpClientWithRedir;
-
+ client = GetNewGlobalHttpClient(timeout);
request = new(new HttpMethod(method), url);
if (data is not null)
@@ -418,16 +419,9 @@ namespace OpenSim.Framework
else
request.Headers.TryAddWithoutValidation("Connection", "close");
- if(timeout > 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromMilliseconds(timeout));
-
request.Headers.TryAddWithoutValidation(OSHeaderRequestID, reqnum.ToString());
- if (cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
-
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
Stream resStream = responseMessage.Content.ReadAsStream();
@@ -455,7 +449,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
ticks = Util.EnvironmentTickCountSubtract(ticks);
if (ticks > LongCallTime)
@@ -549,10 +543,10 @@ namespace OpenSim.Framework
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = GetNewGlobalHttpClient(timeout);
request = new(HttpMethod.Post, url);
@@ -568,9 +562,6 @@ namespace OpenSim.Framework
//else
request.Headers.TryAddWithoutValidation("Connection", "close");
- if (timeout > 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromMilliseconds(timeout));
-
request.Headers.TryAddWithoutValidation(OSHeaderRequestID, reqnum.ToString());
if (data is not null)
@@ -596,10 +587,7 @@ namespace OpenSim.Framework
request.Content.Headers.TryAddWithoutValidation("Content-Length", "0");
}
- if (cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
using StreamReader reader = new(responseMessage.Content.ReadAsStream());
@@ -627,7 +615,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
ticks = Util.EnvironmentTickCountSubtract(ticks);
if (ticks > LongCallTime)
@@ -1160,13 +1148,13 @@ namespace OpenSim.Framework
int ticks = Util.EnvironmentTickCount();
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
string respstring = String.Empty;
int sendlen = 0;
int rcvlen = 0;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(timeoutsecs * 1000);
request = new(new HttpMethod(method), requestUrl);
@@ -1175,9 +1163,6 @@ namespace OpenSim.Framework
request.Headers.ExpectContinue = false;
request.Headers.TransferEncodingChunked = false; if (timeoutsecs > 0)
- if(timeoutsecs > 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutsecs));
-
if (keepalive)
{
request.Headers.TryAddWithoutValidation("Keep-Alive", "timeout=30, max=10");
@@ -1202,10 +1187,7 @@ namespace OpenSim.Framework
request.Content.Headers.TryAddWithoutValidation("Content-Length", sendlen.ToString());
}
- if (cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
if ((responseMessage.Content.Headers.ContentLength is long contentLength) && contentLength != 0)
@@ -1224,7 +1206,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
ticks = Util.EnvironmentTickCountSubtract(ticks);
@@ -1259,14 +1241,13 @@ namespace OpenSim.Framework
int ticks = Util.EnvironmentTickCount();
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
string respstring = String.Empty;
int sendlen = 0;
int rcvlen = 0;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
-
+ client = WebUtil.GetNewGlobalHttpClient(timeoutsecs * 1000);
request = new(HttpMethod.Post, requestUrl);
auth?.AddAuthorization(request.Headers);
@@ -1283,9 +1264,6 @@ namespace OpenSim.Framework
else
request.Headers.TryAddWithoutValidation("Connection", "close");
- if (timeoutsecs > 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutsecs));
-
byte[] data = Util.UTF8NBGetbytes(obj);
sendlen = data.Length;
request.Content = new ByteArrayContent(data);
@@ -1295,10 +1273,7 @@ namespace OpenSim.Framework
if (WebUtil.DebugLevel >= 5)
WebUtil.LogOutgoingDetail("SEND", reqnum, System.Text.Encoding.UTF8.GetString(data));
- if (cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
if ((responseMessage.Content.Headers.ContentLength is long contentLength) && contentLength != 0)
{
@@ -1315,7 +1290,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
ticks = Util.EnvironmentTickCountSubtract(ticks);
@@ -1401,11 +1376,11 @@ namespace OpenSim.Framework
TResponse deserial = default;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(pTimeout);
request = new(new HttpMethod(method), requestUrl);
@@ -1423,9 +1398,6 @@ namespace OpenSim.Framework
//else
// request.Headers.TryAddWithoutValidation("Connection", "close");
- if (pTimeout != 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromMilliseconds(pTimeout));
-
if (method.Equals("POST",StringComparison.OrdinalIgnoreCase) || method.Equals("PUT", StringComparison.OrdinalIgnoreCase))
{
byte[] data;
@@ -1448,10 +1420,7 @@ namespace OpenSim.Framework
request.Content.Headers.TryAddWithoutValidation("Content-Length", sendlen.ToString());
}
- if(cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
int rcvlen = 0;
@@ -1508,7 +1477,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
return deserial;
@@ -1525,12 +1494,10 @@ namespace OpenSim.Framework
TResponse deserial = default;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
-
-
+ client = WebUtil.GetNewGlobalHttpClient(pTimeout);
request = new(HttpMethod.Get, requestUrl);
auth?.AddAuthorization(request.Headers);
@@ -1547,13 +1514,7 @@ namespace OpenSim.Framework
//else
// request.Headers.TryAddWithoutValidation("Connection", "close");
- if (pTimeout != 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromMilliseconds(pTimeout));
-
- if (cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
int rcvlen = 0;
@@ -1608,7 +1569,7 @@ namespace OpenSim.Framework
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
return deserial;
}
@@ -1674,7 +1635,7 @@ namespace OpenSim.Framework
int tickstart = Util.EnvironmentTickCount();
string responseStr = null;
-
+ HttpClient client = null;
try
{
ArrayList SendParams = new()
@@ -1691,7 +1652,8 @@ namespace OpenSim.Framework
WebUtil.LogOutgoingDetail("SEND", reqnum, str);
}
- XmlRpcResponse Resp = Req.Send(url, WebUtil.SharedHttpClientWithRedir, 30000);
+ client = WebUtil.GetNewGlobalHttpClient(-1);
+ XmlRpcResponse Resp = Req.Send(url, client);
try
{
@@ -1719,6 +1681,8 @@ namespace OpenSim.Framework
}
finally
{
+ client?.Dispose();
+
int tickdiff = Util.EnvironmentTickCountSubtract(tickstart);
if (tickdiff > WebUtil.LongCallTime)
{
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 558ef4cdb3..5bed9deffe 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -41,6 +41,7 @@ using OpenSim.Region.Framework.Scenes;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo;
using OpenSim.Services.Interfaces;
+using System.Net.Http;
namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
{
@@ -597,9 +598,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
ArrayList SendParams = new ArrayList();
SendParams.Add(xmlrpcdata);
XmlRpcRequest GridReq = new XmlRpcRequest("grid_instant_message", SendParams);
+ HttpClient hclient = null;
try
{
- XmlRpcResponse GridResp = GridReq.Send(reginfo.ServerURI, WebUtil.SharedHttpClientWithRedir, 6000);
+ hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ XmlRpcResponse GridResp = GridReq.Send(reginfo.ServerURI, hclient);
Hashtable responseData = (Hashtable)GridResp.Value;
if (responseData.ContainsKey("success"))
{
@@ -621,6 +624,10 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
{
m_log.ErrorFormat("[GRID INSTANT MESSAGE]: Error sending message to {0} : {1}", reginfo.ServerURI.ToString(), e.Message);
}
+ finally
+ {
+ hclient?.Dispose();
+ }
return false;
}
diff --git a/OpenSim/Region/CoreModules/Scripting/XMLRPC/XMLRPCModule.cs b/OpenSim/Region/CoreModules/Scripting/XMLRPC/XMLRPCModule.cs
index fd7ba447a7..0839ee0910 100644
--- a/OpenSim/Region/CoreModules/Scripting/XMLRPC/XMLRPCModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/XMLRPC/XMLRPCModule.cs
@@ -42,6 +42,7 @@ using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
using Mono.Addins;
+using System.Net.Http;
/*****************************************************
*
@@ -686,9 +687,11 @@ namespace OpenSim.Region.CoreModules.Scripting.XMLRPC
ArrayList parameters = new ArrayList();
parameters.Add(param);
XmlRpcRequest req = new XmlRpcRequest(mName, parameters);
+ HttpClient hclient = null;
try
{
- XmlRpcResponse resp = req.Send(DestURL, WebUtil.SharedHttpClientWithRedir, 30000);
+ hclient = WebUtil.GetNewGlobalHttpClient(-1);
+ XmlRpcResponse resp = req.Send(DestURL, hclient);
if (resp != null)
{
Hashtable respParms;
@@ -733,6 +736,7 @@ namespace OpenSim.Region.CoreModules.Scripting.XMLRPC
_finished = true;
httpThread = null;
Watchdog.RemoveThread();
+ hclient?.Dispose();
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
index bb96a7eca0..6e05ef90cb 100755
--- a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
@@ -283,9 +283,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(-1);
request = new(HttpMethod.Post, m_uri);
request.Headers.ExpectContinue = false;
@@ -307,6 +308,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
{
request?.Dispose();
responseMessage?.Dispose();
+ client?.Dispose();
}
}
}
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
index 66d97cc1a5..05355fb18d 100644
--- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs
@@ -42,6 +42,7 @@ using Nwc.XmlRpc;
using log4net;
using OpenSim.Services.Connectors.Simulation;
+using System.Net.Http;
namespace OpenSim.Services.Connectors.Hypergrid
{
@@ -94,7 +95,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
- response = request.Send(info.ServerURI, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ response = request.Send(info.ServerURI, hclient);
}
catch (Exception e)
{
@@ -230,7 +232,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
- response = request.Send(gatekeeper.ServerURI, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ response = request.Send(gatekeeper.ServerURI, hclient);
}
catch (Exception e)
{
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
index f7b322e4e9..b7090fcae0 100644
--- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs
@@ -41,6 +41,7 @@ using OpenMetaverse.StructuredData;
using log4net;
using Nwc.XmlRpc;
using Nini.Config;
+using System.Net.Http;
namespace OpenSim.Services.Connectors.Hypergrid
{
@@ -162,7 +163,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
- response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ response = request.Send(m_ServerURL, hclient);
}
catch (Exception e)
{
@@ -336,7 +338,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
- response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 6000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ response = request.Send(m_ServerURL, hclient);
}
catch
{
@@ -408,7 +411,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
- response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ response = request.Send(m_ServerURL, hclient);
}
catch
{
@@ -558,7 +562,8 @@ namespace OpenSim.Services.Connectors.Hypergrid
XmlRpcResponse response = null;
try
{
- response = request.Send(m_ServerURL, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ response = request.Send(m_ServerURL, hclient);
}
catch (Exception e)
{
diff --git a/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs b/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs
index 58a16ed36f..08bf11507c 100644
--- a/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs
+++ b/OpenSim/Services/Connectors/InstantMessage/InstantMessageServiceConnector.cs
@@ -35,6 +35,7 @@ using Nwc.XmlRpc;
using log4net;
using OpenSim.Framework;
+using System.Net.Http;
namespace OpenSim.Services.Connectors.InstantMessage
{
@@ -60,8 +61,8 @@ namespace OpenSim.Services.Connectors.InstantMessage
XmlRpcRequest GridReq = new XmlRpcRequest("grid_instant_message", SendParams);
try
{
-
- XmlRpcResponse GridResp = GridReq.Send(url, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ XmlRpcResponse GridResp = GridReq.Send(url, hclient);
Hashtable responseData = (Hashtable)GridResp.Value;
diff --git a/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs b/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs
index 5b37f4520e..02679ed599 100644
--- a/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Inventory/XInventoryServicesConnector.cs
@@ -62,7 +62,7 @@ namespace OpenSim.Services.Connectors
///
/// In this case, -1 is default timeout (100 seconds), not infinite.
///
- private int m_requestTimeoutSecs = -1;
+ private int m_requestTimeout = -1;
private readonly string m_configName = "InventoryService";
private const double CACHE_EXPIRATION_SECONDS = 30.0;
@@ -114,7 +114,7 @@ namespace OpenSim.Services.Connectors
else
m_InventoryURL = serviceURI + "/xinventory";
- m_requestTimeoutSecs = config.GetInt("RemoteRequestTimeout", m_requestTimeoutSecs);
+ m_requestTimeout = 1000 * config.GetInt("RemoteRequestTimeout", -1);
StatsManager.RegisterStat(
new Stat(
@@ -761,10 +761,10 @@ namespace OpenSim.Services.Connectors
int rcvlen = 0;
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(m_requestTimeout);
request = new(HttpMethod.Post, m_InventoryURL);
@@ -782,9 +782,6 @@ namespace OpenSim.Services.Connectors
request.Headers.ExpectContinue = false;
request.Headers.TransferEncodingChunked = false;
- if (m_requestTimeoutSecs > 0)
- cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(m_requestTimeoutSecs));
-
byte[] data = Util.UTF8NBGetbytes(obj);
sendlen = data.Length;
@@ -792,10 +789,7 @@ namespace OpenSim.Services.Connectors
request.Content.Headers.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
request.Content.Headers.TryAddWithoutValidation("Content-Length", sendlen.ToString());
- if (cancellationToken is null)
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
- else
- responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseHeadersRead);
responseMessage.EnsureSuccessStatusCode();
if ((responseMessage.Content.Headers.ContentLength is long contentLength) && contentLength != 0)
@@ -813,7 +807,7 @@ namespace OpenSim.Services.Connectors
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
ticks = Util.EnvironmentTickCountSubtract(ticks);
diff --git a/OpenSim/Services/Connectors/Land/LandServicesConnector.cs b/OpenSim/Services/Connectors/Land/LandServicesConnector.cs
index 5e5f1fc726..977176f6e8 100644
--- a/OpenSim/Services/Connectors/Land/LandServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Land/LandServicesConnector.cs
@@ -38,6 +38,7 @@ using OpenSim.Services.Interfaces;
using OpenMetaverse;
using Nwc.XmlRpc;
using GridRegion = OpenSim.Services.Interfaces.GridRegion;
+using System.Net.Http;
namespace OpenSim.Services.Connectors
{
@@ -92,7 +93,8 @@ namespace OpenSim.Services.Connectors
paramList.Add(hash);
XmlRpcRequest request = new XmlRpcRequest("land_data", paramList);
- XmlRpcResponse response = request.Send(info.ServerURI, WebUtil.SharedHttpClientWithRedir, 10000);
+ using HttpClient hclient = WebUtil.GetNewGlobalHttpClient(10000);
+ XmlRpcResponse response = request.Send(info.ServerURI, hclient);
if (response.IsFault)
{
m_log.ErrorFormat("[LAND CONNECTOR]: remote call returned an error: {0}", response.FaultString);
diff --git a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
index 8fc7fe90ab..30411111db 100644
--- a/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
+++ b/OpenSim/Services/Connectors/Neighbour/NeighbourServicesConnector.cs
@@ -108,10 +108,10 @@ namespace OpenSim.Services.Connectors
HttpResponseMessage responseMessage = null;
HttpRequestMessage request = null;
- CancellationTokenSource cancellationToken = null;
+ HttpClient client = null;
try
{
- HttpClient client = WebUtil.SharedHttpClientWithRedir;
+ client = WebUtil.GetNewGlobalHttpClient(10000);
request = new(HttpMethod.Post, uri);
request.Headers.ExpectContinue = false;
request.Headers.TransferEncodingChunked = false;
@@ -127,10 +127,9 @@ namespace OpenSim.Services.Connectors
request.Content.Headers.TryAddWithoutValidation("Content-Type", "application/json");
request.Content.Headers.TryAddWithoutValidation("Content-Length", buffer.Length.ToString());
- cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(10));
//m_log.InfoFormat("[REST COMMS]: Posted HelloNeighbour request to remote sim {0}", uri);
- responseMessage = client.Send(request, HttpCompletionOption.ResponseContentRead, cancellationToken.Token);
+ responseMessage = client.Send(request, HttpCompletionOption.ResponseContentRead);
responseMessage.EnsureSuccessStatusCode();
//using StreamReader sr = new(responseMessage.Content.ReadAsStream());
@@ -149,7 +148,7 @@ namespace OpenSim.Services.Connectors
{
request?.Dispose();
responseMessage?.Dispose();
- cancellationToken?.Dispose();
+ client?.Dispose();
}
return false;
}
diff --git a/bin/XMLRPC.dll b/bin/XMLRPC.dll
index bc7c01a8dc..1800342e51 100755
Binary files a/bin/XMLRPC.dll and b/bin/XMLRPC.dll differ