diff options
Diffstat (limited to 'OpenSim')
7 files changed, 164 insertions, 22 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetTransactions.cs b/OpenSim/Framework/Communications/Cache/AssetTransactions.cs index e12d234..8909bdf 100644 --- a/OpenSim/Framework/Communications/Cache/AssetTransactions.cs +++ b/OpenSim/Framework/Communications/Cache/AssetTransactions.cs | |||
@@ -89,7 +89,7 @@ namespace OpenSim.Framework.Communications.Caches | |||
89 | private string uploaderPath = ""; | 89 | private string uploaderPath = ""; |
90 | 90 | ||
91 | // Events | 91 | // Events |
92 | public event UpLoadedTexture OnUpLoad; | 92 | public event UpLoadedAsset OnUpLoad; |
93 | 93 | ||
94 | // Methods | 94 | // Methods |
95 | public void Initialise(string assetName, string assetDescription, LLUUID assetID, LLUUID inventoryItem, LLUUID folderID, string path, BaseHttpServer httpServer) | 95 | public void Initialise(string assetName, string assetDescription, LLUUID assetID, LLUUID inventoryItem, LLUUID folderID, string path, BaseHttpServer httpServer) |
@@ -230,7 +230,7 @@ namespace OpenSim.Framework.Communications.Caches | |||
230 | private string uploaderPath = ""; | 230 | private string uploaderPath = ""; |
231 | 231 | ||
232 | // Events | 232 | // Events |
233 | public event UpLoadedTexture OnUpLoad; | 233 | public event UpLoadedAsset OnUpLoad; |
234 | 234 | ||
235 | // Methods | 235 | // Methods |
236 | public void Initialise(LLUUID inventoryItem, string path, BaseHttpServer httpServer) | 236 | public void Initialise(LLUUID inventoryItem, string path, BaseHttpServer httpServer) |
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 57c79b4..9970d80 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs | |||
@@ -104,6 +104,14 @@ namespace OpenSim.Framework.Communications.Caches | |||
104 | this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); | 104 | this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); |
105 | } | 105 | } |
106 | } | 106 | } |
107 | |||
108 | public void updateItem(LLUUID userID, InventoryItemBase itemInfo) | ||
109 | { | ||
110 | if ((userID == this.UserProfile.UUID) && (this.RootFolder != null)) | ||
111 | { | ||
112 | this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); | ||
113 | } | ||
114 | } | ||
107 | } | 115 | } |
108 | 116 | ||
109 | 117 | ||
diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs index eb88aa7..14f9c95 100644 --- a/OpenSim/Framework/Communications/Capabilities/Caps.cs +++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs | |||
@@ -39,8 +39,10 @@ using OpenSim.Framework.Data; | |||
39 | 39 | ||
40 | namespace OpenSim.Region.Capabilities | 40 | namespace OpenSim.Region.Capabilities |
41 | { | 41 | { |
42 | public delegate void UpLoadedTexture(string assetName, string description, LLUUID assetID, LLUUID inventoryItem, LLUUID parentFolder, byte[] data); | 42 | public delegate void UpLoadedAsset(string assetName, string description, LLUUID assetID, LLUUID inventoryItem, LLUUID parentFolder, byte[] data); |
43 | public delegate LLUUID UpdateItem(LLUUID itemID, byte[] data); | ||
43 | public delegate void NewInventoryItem(LLUUID userID, InventoryItemBase item); | 44 | public delegate void NewInventoryItem(LLUUID userID, InventoryItemBase item); |
45 | public delegate LLUUID ItemUpdatedCallback(LLUUID userID, LLUUID itemID, byte[] data); | ||
44 | 46 | ||
45 | public class Caps | 47 | public class Caps |
46 | { | 48 | { |
@@ -59,6 +61,7 @@ namespace OpenSim.Region.Capabilities | |||
59 | private int eventQueueCount = 1; | 61 | private int eventQueueCount = 1; |
60 | private Queue<string> CapsEventQueue = new Queue<string>(); | 62 | private Queue<string> CapsEventQueue = new Queue<string>(); |
61 | public NewInventoryItem AddNewInventoryItem = null; | 63 | public NewInventoryItem AddNewInventoryItem = null; |
64 | public ItemUpdatedCallback ItemUpdatedCall = null; | ||
62 | 65 | ||
63 | public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, int httpPort, string capsPath, LLUUID agent) | 66 | public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, int httpPort, string capsPath, LLUUID agent) |
64 | { | 67 | { |
@@ -125,7 +128,8 @@ namespace OpenSim.Region.Capabilities | |||
125 | string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; | 128 | string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; |
126 | caps.MapLayer = capsBaseUrl + m_mapLayerPath; | 129 | caps.MapLayer = capsBaseUrl + m_mapLayerPath; |
127 | caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; | 130 | caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; |
128 | // caps.UpdateNotecardAgentInventory = capsBaseUrl + m_notecardUpdatePath; | 131 | caps.UpdateNotecardAgentInventory = capsBaseUrl + m_notecardUpdatePath; |
132 | caps.UpdateScriptAgentInventory = capsBaseUrl + m_notecardUpdatePath; | ||
129 | return caps; | 133 | return caps; |
130 | } | 134 | } |
131 | 135 | ||
@@ -238,21 +242,24 @@ namespace OpenSim.Region.Capabilities | |||
238 | /// <returns></returns> | 242 | /// <returns></returns> |
239 | public string NoteCardAgentInventory(string request, string path, string param) | 243 | public string NoteCardAgentInventory(string request, string path, string param) |
240 | { | 244 | { |
241 | Console.WriteLine("notecard update request " + request); | 245 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(Helpers.StringToField(request)); |
242 | string assetName = "notecardupdate"; | 246 | LLSDItemUpdate llsdRequest = new LLSDItemUpdate(); |
247 | LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest); | ||
248 | |||
243 | string capsBase = "/CAPS/" + m_capsObjectPath; | 249 | string capsBase = "/CAPS/" + m_capsObjectPath; |
244 | LLUUID newAsset = LLUUID.Random(); | 250 | LLUUID newInvItem = llsdRequest.item_id; |
245 | LLUUID newInvItem = LLUUID.Random(); | ||
246 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); | 251 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); |
247 | 252 | ||
248 | AssetUploader uploader = new AssetUploader(assetName, "description", newAsset, newInvItem, LLUUID.Zero, "", "", capsBase + uploaderPath, this.httpListener); | 253 | ItemUpdater uploader = new ItemUpdater(newInvItem, capsBase + uploaderPath, this.httpListener); |
254 | uploader.OnUpLoad += this.ItemUpdated; | ||
255 | |||
249 | httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); | 256 | httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); |
250 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + capsBase + uploaderPath; | 257 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + capsBase + uploaderPath; |
251 | 258 | ||
252 | LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); | 259 | LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); |
253 | uploadResponse.uploader = uploaderURL; | 260 | uploadResponse.uploader = uploaderURL; |
254 | uploadResponse.state = "upload"; | 261 | uploadResponse.state = "upload"; |
255 | // uploader.OnUpLoad += this.UploadCompleteHandler; | 262 | |
256 | return LLSDHelpers.SerialiseLLSDReply(uploadResponse); | 263 | return LLSDHelpers.SerialiseLLSDReply(uploadResponse); |
257 | } | 264 | } |
258 | 265 | ||
@@ -321,9 +328,18 @@ namespace OpenSim.Region.Capabilities | |||
321 | 328 | ||
322 | } | 329 | } |
323 | 330 | ||
331 | public LLUUID ItemUpdated(LLUUID itemID, byte[] data) | ||
332 | { | ||
333 | if (ItemUpdatedCall != null) | ||
334 | { | ||
335 | return ItemUpdatedCall(this.agentID, itemID, data); | ||
336 | } | ||
337 | return LLUUID.Zero; | ||
338 | } | ||
339 | |||
324 | public class AssetUploader | 340 | public class AssetUploader |
325 | { | 341 | { |
326 | public event UpLoadedTexture OnUpLoad; | 342 | public event UpLoadedAsset OnUpLoad; |
327 | 343 | ||
328 | private string uploaderPath = ""; | 344 | private string uploaderPath = ""; |
329 | private LLUUID newAssetID; | 345 | private LLUUID newAssetID; |
@@ -392,6 +408,74 @@ namespace OpenSim.Region.Capabilities | |||
392 | fs.Close(); | 408 | fs.Close(); |
393 | } | 409 | } |
394 | } | 410 | } |
411 | |||
412 | public class ItemUpdater | ||
413 | { | ||
414 | public event UpdateItem OnUpLoad; | ||
415 | |||
416 | private string uploaderPath = ""; | ||
417 | private LLUUID inventoryItemID; | ||
418 | private BaseHttpServer httpListener; | ||
419 | private bool SaveAssets = false; | ||
420 | |||
421 | |||
422 | /// <summary> | ||
423 | /// | ||
424 | /// </summary> | ||
425 | /// <param name="assetID"></param> | ||
426 | /// <param name="inventoryItem"></param> | ||
427 | /// <param name="path"></param> | ||
428 | /// <param name="httpServer"></param> | ||
429 | public ItemUpdater( LLUUID inventoryItem, string path, BaseHttpServer httpServer) | ||
430 | { | ||
431 | |||
432 | inventoryItemID = inventoryItem; | ||
433 | uploaderPath = path; | ||
434 | httpListener = httpServer; | ||
435 | } | ||
436 | |||
437 | /// <summary> | ||
438 | /// | ||
439 | /// </summary> | ||
440 | /// <param name="data"></param> | ||
441 | /// <param name="path"></param> | ||
442 | /// <param name="param"></param> | ||
443 | /// <returns></returns> | ||
444 | public string uploaderCaps(byte[] data, string path, string param) | ||
445 | { | ||
446 | LLUUID inv = this.inventoryItemID; | ||
447 | string res = ""; | ||
448 | LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); | ||
449 | LLUUID assetID = LLUUID.Zero; | ||
450 | |||
451 | if (OnUpLoad != null) | ||
452 | { | ||
453 | assetID = OnUpLoad(inv, data); | ||
454 | } | ||
455 | |||
456 | uploadComplete.new_asset = assetID.ToStringHyphenated(); | ||
457 | uploadComplete.new_inventory_item = inv; | ||
458 | uploadComplete.state = "complete"; | ||
459 | |||
460 | res = LLSDHelpers.SerialiseLLSDReply(uploadComplete); | ||
461 | |||
462 | httpListener.RemoveStreamHandler("POST", uploaderPath); | ||
463 | |||
464 | if (this.SaveAssets) | ||
465 | this.SaveAssetToFile("updateditem"+Util.RandomClass.Next(1,1000) + ".dat", data); | ||
466 | |||
467 | return res; | ||
468 | } | ||
469 | |||
470 | private void SaveAssetToFile(string filename, byte[] data) | ||
471 | { | ||
472 | FileStream fs = File.Create(filename); | ||
473 | BinaryWriter bw = new BinaryWriter(fs); | ||
474 | bw.Write(data); | ||
475 | bw.Close(); | ||
476 | fs.Close(); | ||
477 | } | ||
478 | } | ||
395 | } | 479 | } |
396 | } | 480 | } |
397 | 481 | ||
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs b/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs index 913d7ab..af20468 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs | |||
@@ -9,6 +9,7 @@ namespace OpenSim.Region.Capabilities | |||
9 | // public string RequestTextureDownload = ""; | 9 | // public string RequestTextureDownload = ""; |
10 | // public string ChatSessionRequest = ""; | 10 | // public string ChatSessionRequest = ""; |
11 | public string UpdateNotecardAgentInventory = ""; | 11 | public string UpdateNotecardAgentInventory = ""; |
12 | public string UpdateScriptAgentInventory = ""; | ||
12 | // public string ParcelVoiceInfoRequest = ""; | 13 | // public string ParcelVoiceInfoRequest = ""; |
13 | 14 | ||
14 | public LLSDCapsDetails() | 15 | public LLSDCapsDetails() |
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs b/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs new file mode 100644 index 0000000..d47bb07 --- /dev/null +++ b/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs | |||
@@ -0,0 +1,17 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | |||
6 | namespace OpenSim.Region.Capabilities | ||
7 | { | ||
8 | [LLSDMap] | ||
9 | public class LLSDItemUpdate | ||
10 | { | ||
11 | public LLUUID item_id; | ||
12 | |||
13 | public LLSDItemUpdate() | ||
14 | { | ||
15 | } | ||
16 | } | ||
17 | } | ||
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index e61a5bd..bba0138 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs | |||
@@ -732,15 +732,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
732 | } | 732 | } |
733 | } | 733 | } |
734 | 734 | ||
735 | /// <summary> | ||
736 | /// Sends prims to a client | ||
737 | /// </summary> | ||
738 | /// <param name="RemoteClient">Client to send to</param> | ||
739 | public void GetInitialPrims(IClientAPI RemoteClient) | ||
740 | { | ||
741 | |||
742 | } | ||
743 | |||
744 | public void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) | 735 | public void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) |
745 | { | 736 | { |
746 | this.EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); | 737 | this.EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 73133d4..bfc3ee8 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -827,6 +827,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
827 | agent.CapsPath, agent.AgentID); | 827 | agent.CapsPath, agent.AgentID); |
828 | cap.RegisterHandlers(); | 828 | cap.RegisterHandlers(); |
829 | cap.AddNewInventoryItem = this.AddInventoryItem; | 829 | cap.AddNewInventoryItem = this.AddInventoryItem; |
830 | cap.ItemUpdatedCall = this.UpdateInventoryItemAsset; | ||
830 | if (capsHandlers.ContainsKey(agent.AgentID)) | 831 | if (capsHandlers.ContainsKey(agent.AgentID)) |
831 | { | 832 | { |
832 | MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " + | 833 | MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " + |
@@ -1023,7 +1024,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1023 | { | 1024 | { |
1024 | ScriptEngines.Add(ScriptEngine); | 1025 | ScriptEngines.Add(ScriptEngine); |
1025 | 1026 | ||
1026 | ScriptEngine.InitializeEngine(this, m_logger); | 1027 | ScriptEngine.InitializeEngine(this, m_logger); |
1027 | } | 1028 | } |
1028 | #endregion | 1029 | #endregion |
1029 | 1030 | ||
@@ -1046,7 +1047,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1046 | 1047 | ||
1047 | public void AddInventoryItem(LLUUID userID, InventoryItemBase item) | 1048 | public void AddInventoryItem(LLUUID userID, InventoryItemBase item) |
1048 | { | 1049 | { |
1049 | if(this.Avatars.ContainsKey(userID)) | 1050 | if (this.Avatars.ContainsKey(userID)) |
1050 | { | 1051 | { |
1051 | this.AddInventoryItem(this.Avatars[userID].ControllingClient, item); | 1052 | this.AddInventoryItem(this.Avatars[userID].ControllingClient, item); |
1052 | } | 1053 | } |
@@ -1062,5 +1063,45 @@ namespace OpenSim.Region.Environment.Scenes | |||
1062 | } | 1063 | } |
1063 | } | 1064 | } |
1064 | 1065 | ||
1066 | public LLUUID UpdateInventoryItemAsset(LLUUID userID, LLUUID itemID, byte[] data) | ||
1067 | { | ||
1068 | if (this.Avatars.ContainsKey(userID)) | ||
1069 | { | ||
1070 | return this.UpdateInventoryItemAsset(this.Avatars[userID].ControllingClient, itemID, data); | ||
1071 | } | ||
1072 | return LLUUID.Zero; | ||
1073 | } | ||
1074 | |||
1075 | public LLUUID UpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) | ||
1076 | { | ||
1077 | CachedUserInfo userInfo = commsManager.UserProfiles.GetUserDetails(remoteClient.AgentId); | ||
1078 | if (userInfo != null) | ||
1079 | { | ||
1080 | if (userInfo.RootFolder != null) | ||
1081 | { | ||
1082 | InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); | ||
1083 | if (item != null) | ||
1084 | { | ||
1085 | AssetBase asset; | ||
1086 | asset = new AssetBase(); | ||
1087 | asset.FullID = LLUUID.Random(); | ||
1088 | asset.Type = (sbyte)item.assetType; | ||
1089 | asset.InvType = (sbyte)item.invType; | ||
1090 | asset.Name = item.inventoryName; | ||
1091 | asset.Data = data; | ||
1092 | this.assetCache.AddAsset(asset); | ||
1093 | |||
1094 | item.assetID = asset.FullID; | ||
1095 | userInfo.updateItem(remoteClient.AgentId, item); | ||
1096 | |||
1097 | remoteClient.SendInventoryItemUpdate(item); | ||
1098 | |||
1099 | return (asset.FullID); | ||
1100 | } | ||
1101 | } | ||
1102 | } | ||
1103 | return LLUUID.Zero; | ||
1104 | } | ||
1105 | |||
1065 | } | 1106 | } |
1066 | } | 1107 | } |