From bd1d9a214b7f8750427d670566c8f99ff62f33c4 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 11 Sep 2012 17:28:13 +0200
Subject: Add the option to have variable costing for uploads
---
.../Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 51 +++++++++++++++++++---
1 file changed, 44 insertions(+), 7 deletions(-)
(limited to 'OpenSim/Region/ClientStack')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 88c4d7f..097e224 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -60,7 +60,7 @@ namespace OpenSim.Region.ClientStack.Linden
public delegate void UpdateTaskScript(UUID itemID, UUID primID, bool isScriptRunning, byte[] data, ref ArrayList errors);
- public delegate void NewInventoryItem(UUID userID, InventoryItemBase item);
+ public delegate void NewInventoryItem(UUID userID, InventoryItemBase item, uint cost);
public delegate void NewAsset(AssetBase asset);
@@ -386,6 +386,38 @@ namespace OpenSim.Region.ClientStack.Linden
return UUID.Zero;
}
+ private delegate void UploadWithCostCompleteDelegate(string assetName,
+ string assetDescription, UUID assetID, UUID inventoryItem,
+ UUID parentFolder, byte[] data, string inventoryType,
+ string assetType, uint cost);
+
+ private class AssetUploaderWithCost : AssetUploader
+ {
+ private uint m_cost;
+
+ public event UploadWithCostCompleteDelegate OnUpLoad;
+
+ public AssetUploaderWithCost(string assetName, string description, UUID assetID,
+ UUID inventoryItem, UUID parentFolderID, string invType, string assetType,
+ string path, IHttpServer httpServer, bool dumpAssetsToFile, uint cost) :
+ base(assetName, description, assetID, inventoryItem, parentFolderID,
+ invType, assetType, path, httpServer, dumpAssetsToFile)
+ {
+ m_cost = cost;
+
+ base.OnUpLoad += UploadCompleteHandler;
+ }
+
+ private void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID,
+ UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
+ string assetType)
+ {
+ OnUpLoad(assetName, assetDescription, assetID, inventoryItem, parentFolder,
+ data, inventoryType, assetType, m_cost);
+ }
+ }
+
+
///
///
///
@@ -396,6 +428,8 @@ namespace OpenSim.Region.ClientStack.Linden
//m_log.Debug("[CAPS]: NewAgentInventoryRequest Request is: " + llsdRequest.ToString());
//m_log.Debug("asset upload request via CAPS" + llsdRequest.inventory_type + " , " + llsdRequest.asset_type);
+ uint cost = 0;
+
if (llsdRequest.asset_type == "texture" ||
llsdRequest.asset_type == "animation" ||
llsdRequest.asset_type == "sound")
@@ -428,7 +462,10 @@ namespace OpenSim.Region.ClientStack.Linden
if (mm != null)
{
- if (!mm.UploadCovered(client.AgentId, mm.UploadCharge))
+ // XPTO: The cost should be calculated about here
+ cost = (uint)mm.UploadCharge;
+
+ if (!mm.UploadCovered(client.AgentId, (int)cost))
{
client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false);
@@ -449,9 +486,9 @@ namespace OpenSim.Region.ClientStack.Linden
UUID parentFolder = llsdRequest.folder_id;
string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
- AssetUploader uploader =
- new AssetUploader(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type,
- llsdRequest.asset_type, capsBase + uploaderPath, m_HostCapsObj.HttpListener, m_dumpAssetsToFile);
+ AssetUploaderWithCost uploader =
+ new AssetUploaderWithCost(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type,
+ llsdRequest.asset_type, capsBase + uploaderPath, m_HostCapsObj.HttpListener, m_dumpAssetsToFile, cost);
m_HostCapsObj.HttpListener.AddStreamHandler(
new BinaryStreamHandler(
@@ -484,7 +521,7 @@ namespace OpenSim.Region.ClientStack.Linden
///
public void UploadCompleteHandler(string assetName, string assetDescription, UUID assetID,
UUID inventoryItem, UUID parentFolder, byte[] data, string inventoryType,
- string assetType)
+ string assetType, uint cost)
{
m_log.DebugFormat(
"[BUNCH OF CAPS]: Uploaded asset {0} for inventory item {1}, inv type {2}, asset type {3}",
@@ -703,7 +740,7 @@ namespace OpenSim.Region.ClientStack.Linden
if (AddNewInventoryItem != null)
{
- AddNewInventoryItem(m_HostCapsObj.AgentID, item);
+ AddNewInventoryItem(m_HostCapsObj.AgentID, item, cost);
}
}
--
cgit v1.1