From 7322e1921249f4b64a87a1825de1b3b5707b24d6 Mon Sep 17 00:00:00 2001
From: diva
Date: Fri, 3 Apr 2009 16:08:07 +0000
Subject: Added one more delegate to Caps, and a few guards, so that these
 objects can be used from more than just Scenes. Added the
 NewFileAgentInvengory cap to HGInventoryService.

---
 .../Framework/Communications/Capabilities/Caps.cs  | 42 ++++++++++++++--------
 .../Communications/Services/HGInventoryService.cs  | 14 ++++++++
 2 files changed, 42 insertions(+), 14 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs
index 94614a1..1423e3a 100644
--- a/OpenSim/Framework/Communications/Capabilities/Caps.cs
+++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs
@@ -49,6 +49,8 @@ namespace OpenSim.Framework.Communications.Capabilities
 
     public delegate void NewInventoryItem(UUID userID, InventoryItemBase item);
 
+    public delegate void NewAsset(AssetBase asset);
+
     public delegate UUID ItemUpdatedCallback(UUID userID, UUID itemID, byte[] data);
 
     public delegate void TaskScriptUpdatedCallback(UUID userID, UUID itemID, UUID primID,
@@ -120,6 +122,7 @@ namespace OpenSim.Framework.Communications.Capabilities
         // These are callbacks which will be setup by the scene so that we can update scene data when we
         // receive capability calls
         public NewInventoryItem AddNewInventoryItem = null;
+        public NewAsset AddNewAsset = null;
         public ItemUpdatedCallback ItemUpdatedCall = null;
         public TaskScriptUpdatedCallback TaskScriptUpdatedCall = null;
         public FetchInventoryDescendentsCAPS CAPSFetchInventoryDescendents = null;
@@ -674,30 +677,38 @@ namespace OpenSim.Framework.Communications.Capabilities
         /// <returns></returns>
         public LLSDAssetUploadResponse NewAgentInventoryRequest(LLSDAssetUploadRequest llsdRequest)
         {
+            //m_log.Debug("[CAPS]: NewAgentInventoryRequest Request is: " + llsdRequest.ToString());
+            //m_log.Debug("asset upload request via CAPS" + llsdRequest.inventory_type + " , " + llsdRequest.asset_type);
+
             if (llsdRequest.asset_type == "texture" ||
                 llsdRequest.asset_type == "animation" ||
                 llsdRequest.asset_type == "sound")
             {
-                IClientAPI client = GetClient(m_agentID);
-                IScene scene = client.Scene;
+                IClientAPI client = null;
+                IScene scene = null;
+                if (GetClient != null)
+                {
+                    client = GetClient(m_agentID);
+                    scene = client.Scene;
 
-                IMoneyModule mm = scene.RequestModuleInterface<IMoneyModule>();
+                    IMoneyModule mm = scene.RequestModuleInterface<IMoneyModule>();
 
-                if (mm != null)
-                {
-                    if (!mm.UploadCovered(client))
+                    if (mm != null)
                     {
-                        client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false);
-
-                        LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse();
-                        errorResponse.uploader = "";
-                        errorResponse.state = "error";
-                        return errorResponse;
+                        if (!mm.UploadCovered(client))
+                        {
+                            if (client != null)
+                                client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false);
+
+                            LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse();
+                            errorResponse.uploader = "";
+                            errorResponse.state = "error";
+                            return errorResponse;
+                        }
                     }
                 }
             }
 
-            //m_log.Debug("asset upload request via CAPS" + llsdRequest.inventory_type +" , "+ llsdRequest.asset_type);
 
             string assetName = llsdRequest.name;
             string assetDes = llsdRequest.description;
@@ -771,7 +782,10 @@ namespace OpenSim.Framework.Communications.Capabilities
             asset.Type = assType;
             asset.Name = assetName;
             asset.Data = data;
-            m_assetCache.AddAsset(asset);
+            if (AddNewAsset != null)
+                AddNewAsset(asset);
+            else if (m_assetCache != null)
+                m_assetCache.AddAsset(asset);
 
             InventoryItemBase item = new InventoryItemBase();
             item.Owner = m_agentID;
diff --git a/OpenSim/Framework/Communications/Services/HGInventoryService.cs b/OpenSim/Framework/Communications/Services/HGInventoryService.cs
index 7eaed89..d59d1ae 100644
--- a/OpenSim/Framework/Communications/Services/HGInventoryService.cs
+++ b/OpenSim/Framework/Communications/Services/HGInventoryService.cs
@@ -234,6 +234,11 @@ namespace OpenSim.Framework.Communications.Services
             }
         }
 
+        public void AddUploadedInventoryItem(UUID agentID, InventoryItemBase item)
+        {
+            AddItem(item);
+        }
+
         public InventoryItemBase UpdateItem(InventoryItemBase item)
         {
             m_log.DebugFormat("[HGStandaloneInvService]: Update item {0} from {1}", item.ID, item.Owner);
@@ -372,6 +377,11 @@ namespace OpenSim.Framework.Communications.Services
             return true;
         }
 
+        public void PostAnAsset(AssetBase asset)
+        {
+            PostAsset(asset);
+        }
+
         /// <summary>
         /// <see>CapsUpdatedInventoryItemAsset(IClientAPI, UUID, byte[])</see>
         /// </summary>
@@ -598,6 +608,10 @@ namespace OpenSim.Framework.Communications.Services
             Caps caps = new Caps(null, httpServer, m_thisHostname, m_thisPort, authToken, userID, false, "Inventory");
             caps.RegisterInventoryServiceHandlers("/" + authToken + "/InventoryCap/");
             caps.ItemUpdatedCall = UpdateInventoryItemAsset;
+            caps.AddNewInventoryItem = AddUploadedInventoryItem;
+            caps.AddNewAsset = PostAnAsset;
+            //caps.GetClient = 
+
             Hashtable capsHandlers = caps.CapsHandlers.CapsDetails;
 
             httpServer.AddStreamHandler(new RestDeserialiseSecureHandler<Guid, InventoryCollection>(
-- 
cgit v1.1