aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs63
1 files changed, 55 insertions, 8 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index f46d9f7..120fd43 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -175,8 +175,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
175 if (im.binaryBucket.Length < 17) // Invalid 175 if (im.binaryBucket.Length < 17) // Invalid
176 return; 176 return;
177 177
178 UUID receipientID = new UUID(im.toAgentID); 178 UUID recipientID = new UUID(im.toAgentID);
179 ScenePresence user = scene.GetScenePresence(receipientID); 179 ScenePresence user = scene.GetScenePresence(recipientID);
180 UUID copyID; 180 UUID copyID;
181 181
182 // First byte is the asset type 182 // First byte is the asset type
@@ -191,7 +191,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
191 folderID, new UUID(im.toAgentID)); 191 folderID, new UUID(im.toAgentID));
192 192
193 InventoryFolderBase folderCopy 193 InventoryFolderBase folderCopy
194 = scene.GiveInventoryFolder(receipientID, client.AgentId, folderID, UUID.Zero); 194 = scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero);
195 195
196 if (folderCopy == null) 196 if (folderCopy == null)
197 { 197 {
@@ -244,6 +244,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
244 im.imSessionID = itemID.Guid; 244 im.imSessionID = itemID.Guid;
245 } 245 }
246 246
247 im.offline = 1; // Remember these
248
247 // Send the IM to the recipient. The item is already 249 // Send the IM to the recipient. The item is already
248 // in their inventory, so it will not be lost if 250 // in their inventory, so it will not be lost if
249 // they are offline. 251 // they are offline.
@@ -427,22 +429,67 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
427 /// 429 ///
428 /// </summary> 430 /// </summary>
429 /// <param name="msg"></param> 431 /// <param name="msg"></param>
430 private void OnGridInstantMessage(GridInstantMessage msg) 432 private void OnGridInstantMessage(GridInstantMessage im)
431 { 433 {
432 // Check if this is ours to handle 434 // Check if this is ours to handle
433 // 435 //
434 Scene scene = FindClientScene(new UUID(msg.toAgentID)); 436 Scene scene = FindClientScene(new UUID(im.toAgentID));
435 437
436 if (scene == null) 438 if (scene == null)
437 return; 439 return;
438 440
439 // Find agent to deliver to 441 // Find agent to deliver to
440 // 442 //
441 ScenePresence user = scene.GetScenePresence(new UUID(msg.toAgentID)); 443 ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID));
444 if (user == null)
445 return;
446
447 // This requires a little bit of processing because we have to make the
448 // new item visible in the recipient's inventory here
449 //
450 if (im.dialog == (byte) InstantMessageDialog.InventoryOffered)
451 {
452 if (im.binaryBucket.Length < 17) // Invalid
453 return;
454
455 UUID recipientID = new UUID(im.toAgentID);
456
457 // First byte is the asset type
458 AssetType assetType = (AssetType)im.binaryBucket[0];
459
460 if (AssetType.Folder == assetType)
461 {
462 UUID folderID = new UUID(im.binaryBucket, 1);
463
464 InventoryFolderBase given =
465 new InventoryFolderBase(folderID, recipientID);
466 InventoryFolderBase folder =
467 scene.InventoryService.GetFolder(given);
468
469 if (folder != null)
470 user.ControllingClient.SendBulkUpdateInventory(folder);
471 }
472 else
473 {
474 UUID itemID = new UUID(im.binaryBucket, 1);
442 475
443 // Just forward to local handling 476 InventoryItemBase given =
444 OnInstantMessage(user.ControllingClient, msg); 477 new InventoryItemBase(itemID, recipientID);
478 InventoryItemBase item =
479 scene.InventoryService.GetItem(given);
445 480
481 if (item != null)
482 {
483 user.ControllingClient.SendBulkUpdateInventory(item);
484 }
485 }
486 user.ControllingClient.SendInstantMessage(im);
487 }
488 else if (im.dialog == (byte) InstantMessageDialog.InventoryAccepted ||
489 im.dialog == (byte) InstantMessageDialog.InventoryDeclined)
490 {
491 user.ControllingClient.SendInstantMessage(im);
492 }
446 } 493 }
447 } 494 }
448} 495}