change uuids on scripts gather
parent
ce72aa2eac
commit
c239269762
|
@ -843,6 +843,130 @@ namespace OpenSim.Framework
|
||||||
return ids;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
|
||||||
|
static bool IsHexa(byte c)
|
||||||
|
{
|
||||||
|
if (c >= '0' && c <= '9')
|
||||||
|
return true;
|
||||||
|
if (c >= 'a' && c <= 'f')
|
||||||
|
return true;
|
||||||
|
if (c >= 'A' && c <= 'F')
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<UUID> GetUUIDsOnData(byte[] s, int indx, int len)
|
||||||
|
{
|
||||||
|
var ids = new List<UUID>();
|
||||||
|
|
||||||
|
int endA = indx + len;
|
||||||
|
if (endA > s.Length)
|
||||||
|
endA = s.Length;
|
||||||
|
if (endA - indx < 36)
|
||||||
|
return ids;
|
||||||
|
|
||||||
|
int endB = endA - 26;
|
||||||
|
endA -= 35;
|
||||||
|
|
||||||
|
int idbase;
|
||||||
|
int next;
|
||||||
|
int retry;
|
||||||
|
|
||||||
|
while (indx < endA)
|
||||||
|
{
|
||||||
|
for (; indx < endA; ++indx)
|
||||||
|
{
|
||||||
|
if (IsHexa(s[indx]))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (indx == endA)
|
||||||
|
break;
|
||||||
|
|
||||||
|
idbase = indx;
|
||||||
|
for (; indx < endB; ++indx)
|
||||||
|
{
|
||||||
|
if (!IsHexa(s[indx]))
|
||||||
|
break;
|
||||||
|
if (indx - idbase >= 8)
|
||||||
|
++idbase;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s[indx] != '-')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
++indx;
|
||||||
|
retry = indx;
|
||||||
|
next = indx + 4;
|
||||||
|
for (; indx < next; ++indx)
|
||||||
|
{
|
||||||
|
if (!IsHexa(s[indx]))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (indx != next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (s[indx] != '-')
|
||||||
|
{
|
||||||
|
indx = retry;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
++indx;
|
||||||
|
retry = indx;
|
||||||
|
next = indx + 4;
|
||||||
|
for (; indx < next; ++indx)
|
||||||
|
{
|
||||||
|
if (!IsHexa(s[indx]))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (indx != next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (s[indx] != '-')
|
||||||
|
{
|
||||||
|
indx = retry;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
++indx;
|
||||||
|
retry = indx;
|
||||||
|
next = indx + 4;
|
||||||
|
for (; indx < next; ++indx)
|
||||||
|
{
|
||||||
|
if (!IsHexa(s[indx]))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (indx != next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (s[indx] != '-')
|
||||||
|
{
|
||||||
|
indx = retry;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
++indx;
|
||||||
|
retry = indx;
|
||||||
|
|
||||||
|
next = indx + 12;
|
||||||
|
for (; indx < next; ++indx)
|
||||||
|
{
|
||||||
|
if (!IsHexa(s[indx]))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (indx != next)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (UUID.TryParse(Encoding.ASCII.GetString(s, idbase, 36), out UUID u))
|
||||||
|
{
|
||||||
|
ids.Add(u);
|
||||||
|
}
|
||||||
|
++indx;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is the platform Windows?
|
/// Is the platform Windows?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -558,7 +558,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else if ((sbyte)AssetType.LSLText == assetType)
|
else if ((sbyte)AssetType.LSLText == assetType)
|
||||||
{
|
{
|
||||||
RecordTextEmbeddedAssetUuids(assetBase);
|
RecordEmbeddedAssetDataUuids(assetBase);
|
||||||
}
|
}
|
||||||
else if ((sbyte)OpenSimAssetType.Material == assetType)
|
else if ((sbyte)OpenSimAssetType.Material == assetType)
|
||||||
{
|
{
|
||||||
|
@ -716,15 +716,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Record the asset uuids embedded within the given text (e.g. a script).
|
/// Record the asset uuids embedded within the given text (e.g. a script).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="textAsset"></param>
|
/// <param name="textAsset"></param>
|
||||||
private void RecordTextEmbeddedAssetUuids(AssetBase textAsset)
|
private void RecordEmbeddedAssetDataUuids(AssetBase textAsset)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[ASSET GATHERER]: Getting assets for uuid references in asset {0}", embeddingAssetId);
|
// m_log.DebugFormat("[ASSET GATHERER]: Getting assets for uuid references in asset {0}", embeddingAssetId);
|
||||||
|
|
||||||
string text = Utils.BytesToString(textAsset.Data);
|
if(textAsset.Data.Length < 36)
|
||||||
if(text.Length < 36)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
List<UUID> ids = Util.GetUUIDsOnString(ref text, 0, text.Length);
|
List<UUID> ids = Util.GetUUIDsOnData(textAsset.Data, 0, textAsset.Data.Length);
|
||||||
if (ids == null || ids.Count == 0)
|
if (ids == null || ids.Count == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue