Merge branch 'opensim:master' into master

This commit is contained in:
Adil El Farissi
2024-06-07 21:03:53 +00:00
committed by GitHub
56 changed files with 855 additions and 6431 deletions

View File

@@ -174,11 +174,15 @@ namespace OpenSim.Framework
private static readonly string regexInvalidPathChars = $"[{new String(Path.GetInvalidPathChars())}]";
private static readonly object XferLock = new();
public static readonly char[] SplitCommaArray = new char[] { ',' };
public static readonly char[] SplitDotArray = new char[] { '.' };
public static readonly char[] SplitColonArray = new char[] { ':' };
public static readonly char[] SplitSemicolonArray = new char[] { ';' };
public static readonly char[] SplitSlashArray = new char[] { '/' };
public static readonly char[] SplitCommaArray = [','];
public static readonly char[] SplitDotArray = ['.'];
public static readonly char[] SplitColonArray = [':'];
public static readonly char[] SplitSemicolonArray = [';'];
public static readonly char[] SplitSlashArray = ['/'];
public static readonly char[] SplitSpaceArray = [' '];
public static readonly char[] SplitSlashSpaceArray = ['/', ' '];
public static readonly char[] SplitDoubleQuoteSpaceArray = ['"', ' '];
public static readonly char[] SplitSlashColonArray = ['/', ':'];
public static readonly XmlReaderSettings SharedXmlReaderSettings = new()
{
@@ -521,9 +525,9 @@ namespace OpenSim.Framework
Uri uri = new(uristr);
serviceURI = uri.AbsoluteUri;
if (uri.Port == 80)
serviceURI = $"{serviceURI.Trim(new char[] { '/', ' ' })}:80/";
serviceURI = $"{serviceURI.Trim(SplitSlashSpaceArray)}:80/";
else if (uri.Port == 443)
serviceURI = $"{serviceURI.Trim(new char[] { '/', ' ' })}:443/";
serviceURI = $"{serviceURI.Trim(SplitSlashSpaceArray)}:443/";
serviceHost = uri.Host;
IPEndPoint ep = Util.getEndPoint(serviceHost, uri.Port);
@@ -647,15 +651,16 @@ namespace OpenSim.Framework
}
if (!string.IsNullOrEmpty(regionName))
regionName = regionName.Trim(new char[] { '"', ' ' });
regionName = regionName.Trim(SplitDoubleQuoteSpaceArray);
serverURI = uri.AbsoluteUri;
if (uri.Port == 80)
serverURI = $"{serverURI.Trim(new char[] { '/', ' ' })}:80/";
serverURI = $"{serverURI.Trim(SplitSlashSpaceArray)}:80/";
else if (uri.Port == 443)
serverURI = $"{serverURI.Trim(new char[] { '/', ' ' })}:443/";
serverURI = $"{serverURI.Trim(SplitSlashSpaceArray)}:443/";
return true;
}
//obsolete use Math.Clamp
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static T Clamp<T>(T x, T min, T max)
where T : IComparable<T>
@@ -1136,9 +1141,9 @@ namespace OpenSim.Framework
public static bool IsEnvironmentSupported(ref string reason)
{
if (Environment.Version.Major < 6)
if (Environment.Version.Major < 8)
{
reason = "Dotnet 6.0 is required";
reason = "Dotnet 8.0 is required";
return false;
}
return true;
@@ -1207,16 +1212,14 @@ namespace OpenSim.Framework
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static byte[] ComputeMD5Hash(string data, Encoding encoding)
{
using MD5 md5 = MD5.Create();
return md5.ComputeHash(encoding.GetBytes(data));
return MD5.HashData(encoding.GetBytes(data));
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static UUID ComputeASCIIMD5UUID(string data)
{
using MD5 md5 = MD5.Create();
byte[] bytes = md5.ComputeHash(Encoding.ASCII.GetBytes(data));
UUID uuid = new(bytes,2);
byte[] bytes = MD5.HashData(Encoding.ASCII.GetBytes(data));
UUID uuid = new(bytes, 2);
uuid.c &= 0x0fff;
uuid.c |= 0x3000;
uuid.d &= 0x3f;
@@ -1338,8 +1341,7 @@ namespace OpenSim.Framework
private static byte[] ComputeSHA1Hash(byte[] src)
{
using SHA1 sha = SHA1.Create();
return sha.ComputeHash(src);
return SHA1.HashData(src);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -1357,9 +1359,7 @@ namespace OpenSim.Framework
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static UUID ComputeSHA1UUID(byte[] src)
{
byte[] ret;
using (SHA1 sha = SHA1.Create())
ret = sha.ComputeHash(src);
byte[] ret = SHA1.HashData(src);
UUID uuid = new(ret, 2);
uuid.c &= 0x0fff;
uuid.c |= 0x5000;
@@ -1457,7 +1457,7 @@ namespace OpenSim.Framework
{
iv = ivString.Length == 0 ?
Convert.FromHexString(encryptedText[..sep]):
MD5.Create().ComputeHash(Utils.StringToBytesNoTerm(ivString));
MD5.HashData(Utils.StringToBytesNoTerm(ivString));
buffer = Convert.FromHexString(encryptedText[(sep + 1)..]);
}
catch
@@ -1465,7 +1465,7 @@ namespace OpenSim.Framework
return string.Empty;
}
byte[] aesKey = SHA256.Create().ComputeHash(Utils.StringToBytesNoTerm(secret));
byte[] aesKey = SHA256.HashData(Utils.StringToBytesNoTerm(secret));
using Aes aes = Aes.Create();
aes.Key = aesKey;
@@ -1683,7 +1683,21 @@ namespace OpenSim.Framework
return output.ToString();
}
private static readonly ExpiringCacheOS<string, IPAddress> dnscache = new(10000);
private static readonly IPEndPoint dummyIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
private static readonly ExpiringCacheOS<string, IPAddress> dnscache = new(30000);
private static readonly ExpiringCacheOS<SocketAddress, EndPoint> EndpointsCache = new(300000);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static EndPoint GetEndPoint(SocketAddress sckaddr)
{
if (!EndpointsCache.TryGetValue(sckaddr, 300000, out EndPoint ep))
{
ep = dummyIPEndPoint.Create(sckaddr);
EndpointsCache.AddOrUpdate(sckaddr, ep, 300);
}
return ep;
}
/// <summary>
/// Converts a URL to a IPAddress
@@ -1693,7 +1707,7 @@ namespace OpenSim.Framework
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static IPAddress GetHostFromURL(string url)
{
return GetHostFromDNS(url.Split(new char[] { '/', ':' })[3]);
return GetHostFromDNS(url.Split(SplitSlashColonArray)[3]);
}
/// <summary>
@@ -1752,16 +1766,14 @@ namespace OpenSim.Framework
if (ia == null)
return null;
IPEndPoint newEP;
try
{
newEP = new IPEndPoint(ia, port);
return new IPEndPoint(ia, port);
}
catch
{
newEP = null;
return null;
}
return newEP;
}
public static IPEndPoint getEndPoint(string hostname, int port)
@@ -2306,7 +2318,7 @@ namespace OpenSim.Framework
public static void SerializeToFile(string filename, Object obj)
{
IFormatter formatter = new BinaryFormatter();
var formatter = new BinaryFormatter();
try
{
using Stream stream = new FileStream(filename, FileMode.Create,FileAccess.Write, FileShare.None);
@@ -2323,7 +2335,7 @@ namespace OpenSim.Framework
try
{
using Stream stream = new FileStream(filename, FileMode.Open,FileAccess.Read, FileShare.None);
IFormatter formatter = new BinaryFormatter();
var formatter = new BinaryFormatter();
return formatter.Deserialize(stream);
}
catch (Exception e)
@@ -2560,10 +2572,10 @@ namespace OpenSim.Framework
passPosition = connectionString.IndexOf("password", StringComparison.OrdinalIgnoreCase);
if (passPosition == -1)
return connectionString;
passPosition = connectionString.IndexOf("=", passPosition);
passPosition = connectionString.IndexOf('=', passPosition);
if (passPosition < connectionString.Length)
passPosition += 1;
passEndPosition = connectionString.IndexOf(";", passPosition);
passEndPosition = connectionString.IndexOf(';', passPosition);
return $"{connectionString[..passPosition]}***{connectionString[passEndPosition..]}";
}
@@ -3812,7 +3824,7 @@ namespace OpenSim.Framework
};
reader.ReadEndElement();
UUID.TryParse(idStr, out UUID id);
_ = UUID.TryParse(idStr, out UUID id);
return id;
}
@@ -3949,7 +3961,7 @@ namespace OpenSim.Framework
secret = value[indxA..];
}
string[] name = n.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string[] name = n.Split(SplitSpaceArray, StringSplitOptions.RemoveEmptyEntries);
if (name.Length == 0)
{
firstname = string.Empty;
@@ -4024,7 +4036,7 @@ namespace OpenSim.Framework
secret = value[indxA..];
}
string[] name = n.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string[] name = n.Split(SplitSpaceArray, StringSplitOptions.RemoveEmptyEntries);
if (name.Length == 0)
{
firstname = string.Empty;
@@ -4098,7 +4110,7 @@ namespace OpenSim.Framework
else
n = value[indxB..seps[2]];
string[] name = n.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string[] name = n.Split(SplitSpaceArray, StringSplitOptions.RemoveEmptyEntries);
if (name.Length == 0)
{
firstname = string.Empty;
@@ -4164,7 +4176,7 @@ namespace OpenSim.Framework
else
n = value[indxB..seps[2]];
string[] name = n.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string[] name = n.Split(SplitSpaceArray, StringSplitOptions.RemoveEmptyEntries);
if (name.Length == 0)
{
firstname = string.Empty;
@@ -4422,8 +4434,8 @@ namespace OpenSim.Framework
/// <returns>uuid[;homeURI[;first last]]</returns>
public static string ProduceUserUniversalIdentifier(AgentCircuitData acircuit)
{
if (acircuit.ServiceURLs.ContainsKey("HomeURI"))
return UniversalIdentifier(acircuit.AgentID, acircuit.firstname, acircuit.lastname, acircuit.ServiceURLs["HomeURI"].ToString());
if (acircuit.ServiceURLs.TryGetValue("HomeURI", out object homeobj))
return UniversalIdentifier(acircuit.AgentID, acircuit.firstname, acircuit.lastname, homeobj.ToString());
else
return acircuit.AgentID.ToString();
}