mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 08:55:56 +08:00
Merge branch 'opensim:master' into master
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user