From d1c3f8eef58b29eb8760eeb1ac03852a2387f927 Mon Sep 17 00:00:00 2001
From: Oren Hurvitz
Date: Mon, 31 Mar 2014 11:53:12 +0300
Subject: Added assets service method AssetsExist(), which returns whether the
given list of assets exist.
This method is used to optimize sending assets with embedded assets: e.g., when a Hypergrid visitor takes an item into the inventory.
---
OpenSim/Framework/Util.cs | 50 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
(limited to 'OpenSim/Framework/Util.cs')
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index c7a7341..b133ff3 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -52,6 +52,8 @@ using OpenMetaverse;
using OpenMetaverse.StructuredData;
using Amib.Threading;
using System.Collections.Concurrent;
+using System.Collections.Specialized;
+using System.Web;
namespace OpenSim.Framework
{
@@ -866,6 +868,54 @@ namespace OpenSim.Framework
}
///
+ /// Parses a foreign asset ID.
+ ///
+ /// A possibly-foreign asset ID: http://grid.example.com:8002/00000000-0000-0000-0000-000000000000
+ /// The URL: http://grid.example.com:8002
+ /// The asset ID: 00000000-0000-0000-0000-000000000000. Returned even if 'id' isn't foreign.
+ /// True: this is a foreign asset ID; False: it isn't
+ public static bool ParseForeignAssetID(string id, out string url, out string assetID)
+ {
+ url = String.Empty;
+ assetID = String.Empty;
+
+ UUID uuid;
+ if (UUID.TryParse(id, out uuid))
+ {
+ assetID = uuid.ToString();
+ return false;
+ }
+
+ if ((id.Length == 0) || (id[0] != 'h' && id[0] != 'H'))
+ return false;
+
+ Uri assetUri;
+ if (!Uri.TryCreate(id, UriKind.Absolute, out assetUri) || assetUri.Scheme != Uri.UriSchemeHttp)
+ return false;
+
+ // Simian
+ if (assetUri.Query != string.Empty)
+ {
+ NameValueCollection qscoll = HttpUtility.ParseQueryString(assetUri.Query);
+ assetID = qscoll["id"];
+ if (assetID != null)
+ url = id.Replace(assetID, ""); // Malformed again, as simian expects
+ else
+ url = id; // !!! best effort
+ }
+ else // robust
+ {
+ url = "http://" + assetUri.Authority;
+ assetID = assetUri.LocalPath.Trim(new char[] { '/' });
+ }
+
+ if (!UUID.TryParse(assetID, out uuid))
+ return false;
+
+ return true;
+ }
+
+ ///
/// Removes all invalid path chars (OS dependent)
///
/// path
--
cgit v1.1