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/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
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
From a6928a479eb84b14e949c5f589b9ce753edf457a Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 11 Sep 2012 17:50:55 +0200
Subject: Add cost calculation suppor tto the VariablePrice one as well
---
OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 1 -
1 file changed, 1 deletion(-)
(limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 097e224..328dc75 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -417,7 +417,6 @@ namespace OpenSim.Region.ClientStack.Linden
}
}
-
///
///
///
--
cgit v1.1
From 245763b1b08d667aede3be7c092fa4c7200549c0 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Tue, 11 Sep 2012 20:30:30 +0100
Subject: let LLSDAssetUploadRequest include asset_resources information plus
let NewAgentInventoryRequest know about mesh (does nothing with it still)
---
OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 1 +
1 file changed, 1 insertion(+)
(limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 328dc75..df43991 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -431,6 +431,7 @@ namespace OpenSim.Region.ClientStack.Linden
if (llsdRequest.asset_type == "texture" ||
llsdRequest.asset_type == "animation" ||
+ llsdRequest.asset_type == "mesh" ||
llsdRequest.asset_type == "sound")
{
ScenePresence avatar = null;
--
cgit v1.1
From 013e94af5d45a7c99e46e01d9c5965a79ac1b231 Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Tue, 11 Sep 2012 23:06:29 +0100
Subject: report mesh upload costs ( fake values)
---
.../Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 48 +++++++++++++++++++++-
1 file changed, 46 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index df43991..90ac8ce 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -463,7 +463,26 @@ namespace OpenSim.Region.ClientStack.Linden
if (mm != null)
{
// XPTO: The cost should be calculated about here
- cost = (uint)mm.UploadCharge;
+
+ if (llsdRequest.asset_type == "mesh")
+ {
+ if (llsdRequest.asset_resources == null)
+ {
+ client.SendAgentAlertMessage("Unable to upload asset. missing information.", false);
+
+ LLSDAssetUploadResponse errorResponse = new LLSDAssetUploadResponse();
+ errorResponse.uploader = "";
+ errorResponse.state = "error";
+ return errorResponse;
+ }
+
+ uint textures_cost = (uint)llsdRequest.asset_resources.texture_list.Array.Count;
+ textures_cost *= (uint)mm.UploadCharge;
+
+ cost = textures_cost;
+ }
+ else
+ cost = (uint)mm.UploadCharge;
if (!mm.UploadCovered(client.AgentId, (int)cost))
{
@@ -486,9 +505,14 @@ namespace OpenSim.Region.ClientStack.Linden
UUID parentFolder = llsdRequest.folder_id;
string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
+ uint uploadCost = cost;
+ // don't charge for meshs until we done them
+ if (llsdRequest.asset_type == "mesh")
+ uploadCost = 0;
+
AssetUploaderWithCost uploader =
new AssetUploaderWithCost(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type,
- llsdRequest.asset_type, capsBase + uploaderPath, m_HostCapsObj.HttpListener, m_dumpAssetsToFile, cost);
+ llsdRequest.asset_type, capsBase + uploaderPath, m_HostCapsObj.HttpListener, m_dumpAssetsToFile, uploadCost);
m_HostCapsObj.HttpListener.AddStreamHandler(
new BinaryStreamHandler(
@@ -506,11 +530,31 @@ namespace OpenSim.Region.ClientStack.Linden
string uploaderURL = protocol + m_HostCapsObj.HostName + ":" + m_HostCapsObj.Port.ToString() + capsBase +
uploaderPath;
+
LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse();
uploadResponse.uploader = uploaderURL;
uploadResponse.state = "upload";
+ uploadResponse.upload_price = (int)cost;
+
+ // use fake values for now
+ if (llsdRequest.asset_type == "mesh")
+ {
+ uploadResponse.data = new LLSDAssetUploadResponseData();
+ uploadResponse.data.model_streaming_cost = 1.0;
+ uploadResponse.data.simulation_cost = 1.5;
+
+ uploadResponse.data.physics_cost = 2.0;
+ uploadResponse.data.resource_cost = 3.0;
+ uploadResponse.data.upload_price_breakdown.mesh_instance = 1;
+ uploadResponse.data.upload_price_breakdown.mesh_physics = 2;
+ uploadResponse.data.upload_price_breakdown.mesh_streaming = 3;
+ uploadResponse.data.upload_price_breakdown.texture = 5;
+ uploadResponse.data.upload_price_breakdown.model = 4;
+ }
+
uploader.OnUpLoad += UploadCompleteHandler;
return uploadResponse;
+
}
///
--
cgit v1.1
From fd1ee58f87dfbad96e89675bf5ab002d2d3a347f Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 11 Sep 2012 22:52:11 +0200
Subject: Add a missing brace, remove a useless temp variable, enable charging.
---
.../Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
(limited to 'OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs')
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 90ac8ce..9982556 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -482,7 +482,9 @@ namespace OpenSim.Region.ClientStack.Linden
cost = textures_cost;
}
else
+ {
cost = (uint)mm.UploadCharge;
+ }
if (!mm.UploadCovered(client.AgentId, (int)cost))
{
@@ -505,14 +507,9 @@ namespace OpenSim.Region.ClientStack.Linden
UUID parentFolder = llsdRequest.folder_id;
string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
- uint uploadCost = cost;
- // don't charge for meshs until we done them
- if (llsdRequest.asset_type == "mesh")
- uploadCost = 0;
-
AssetUploaderWithCost uploader =
new AssetUploaderWithCost(assetName, assetDes, newAsset, newInvItem, parentFolder, llsdRequest.inventory_type,
- llsdRequest.asset_type, capsBase + uploaderPath, m_HostCapsObj.HttpListener, m_dumpAssetsToFile, uploadCost);
+ llsdRequest.asset_type, capsBase + uploaderPath, m_HostCapsObj.HttpListener, m_dumpAssetsToFile, cost);
m_HostCapsObj.HttpListener.AddStreamHandler(
new BinaryStreamHandler(
--
cgit v1.1