aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs312
1 files changed, 198 insertions, 114 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index c934b9e..612c0d9 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -155,6 +155,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
155 public event RequestTaskInventory OnRequestTaskInventory; 155 public event RequestTaskInventory OnRequestTaskInventory;
156 public event UpdateInventoryItem OnUpdateInventoryItem; 156 public event UpdateInventoryItem OnUpdateInventoryItem;
157 public event CopyInventoryItem OnCopyInventoryItem; 157 public event CopyInventoryItem OnCopyInventoryItem;
158 public event MoveItemsAndLeaveCopy OnMoveItemsAndLeaveCopy;
158 public event MoveInventoryItem OnMoveInventoryItem; 159 public event MoveInventoryItem OnMoveInventoryItem;
159 public event RemoveInventoryItem OnRemoveInventoryItem; 160 public event RemoveInventoryItem OnRemoveInventoryItem;
160 public event RemoveInventoryFolder OnRemoveInventoryFolder; 161 public event RemoveInventoryFolder OnRemoveInventoryFolder;
@@ -335,6 +336,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
335// protected HashSet<uint> m_attachmentsSent; 336// protected HashSet<uint> m_attachmentsSent;
336 337
337 private int m_moneyBalance; 338 private int m_moneyBalance;
339 private bool m_deliverPackets = true;
338 private int m_animationSequenceNumber = 1; 340 private int m_animationSequenceNumber = 1;
339 private bool m_SendLogoutPacketWhenClosing = true; 341 private bool m_SendLogoutPacketWhenClosing = true;
340 private AgentUpdateArgs lastarg; 342 private AgentUpdateArgs lastarg;
@@ -377,6 +379,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
377 get { return m_startpos; } 379 get { return m_startpos; }
378 set { m_startpos = value; } 380 set { m_startpos = value; }
379 } 381 }
382 public bool DeliverPackets
383 {
384 get { return m_deliverPackets; }
385 set {
386 m_deliverPackets = value;
387 m_udpClient.m_deliverPackets = value;
388 }
389 }
380 public UUID AgentId { get { return m_agentId; } } 390 public UUID AgentId { get { return m_agentId; } }
381 public UUID ActiveGroupId { get { return m_activeGroupID; } } 391 public UUID ActiveGroupId { get { return m_activeGroupID; } }
382 public string ActiveGroupName { get { return m_activeGroupName; } } 392 public string ActiveGroupName { get { return m_activeGroupName; } }
@@ -475,18 +485,30 @@ namespace OpenSim.Region.ClientStack.LindenUDP
475 485
476 #region Client Methods 486 #region Client Methods
477 487
488
478 /// <summary> 489 /// <summary>
479 /// Shut down the client view 490 /// Shut down the client view
480 /// </summary> 491 /// </summary>
481 public void Close() 492 public void Close()
482 { 493 {
494 Close(true);
495 }
496
497 /// <summary>
498 /// Shut down the client view
499 /// </summary>
500 public void Close(bool sendStop)
501 {
483 m_log.DebugFormat( 502 m_log.DebugFormat(
484 "[CLIENT]: Close has been called for {0} attached to scene {1}", 503 "[CLIENT]: Close has been called for {0} attached to scene {1}",
485 Name, m_scene.RegionInfo.RegionName); 504 Name, m_scene.RegionInfo.RegionName);
486 505
487 // Send the STOP packet 506 if (sendStop)
488 DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator); 507 {
489 OutPacket(disable, ThrottleOutPacketType.Unknown); 508 // Send the STOP packet
509 DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator);
510 OutPacket(disable, ThrottleOutPacketType.Unknown);
511 }
490 512
491 IsActive = false; 513 IsActive = false;
492 514
@@ -767,7 +789,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
767 reply.ChatData.OwnerID = fromAgentID; 789 reply.ChatData.OwnerID = fromAgentID;
768 reply.ChatData.SourceID = fromAgentID; 790 reply.ChatData.SourceID = fromAgentID;
769 791
770 OutPacket(reply, ThrottleOutPacketType.Task); 792 OutPacket(reply, ThrottleOutPacketType.Unknown);
771 } 793 }
772 794
773 /// <summary> 795 /// <summary>
@@ -1053,6 +1075,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1053 public virtual void SendLayerData(float[] map) 1075 public virtual void SendLayerData(float[] map)
1054 { 1076 {
1055 Util.FireAndForget(DoSendLayerData, map); 1077 Util.FireAndForget(DoSendLayerData, map);
1078
1079 // Send it sync, and async. It's not that much data
1080 // and it improves user experience just so much!
1081 DoSendLayerData(map);
1056 } 1082 }
1057 1083
1058 /// <summary> 1084 /// <summary>
@@ -1065,16 +1091,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1065 1091
1066 try 1092 try
1067 { 1093 {
1068 //for (int y = 0; y < 16; y++) 1094 for (int y = 0; y < 16; y++)
1069 //{ 1095 {
1070 // for (int x = 0; x < 16; x++) 1096 for (int x = 0; x < 16; x+=4)
1071 // { 1097 {
1072 // SendLayerData(x, y, map); 1098 SendLayerPacket(x, y, map);
1073 // } 1099 }
1074 //} 1100 }
1075
1076 // Send LayerData in a spiral pattern. Fun!
1077 SendLayerTopRight(map, 0, 0, 15, 15);
1078 } 1101 }
1079 catch (Exception e) 1102 catch (Exception e)
1080 { 1103 {
@@ -1082,51 +1105,35 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1082 } 1105 }
1083 } 1106 }
1084 1107
1085 private void SendLayerTopRight(float[] map, int x1, int y1, int x2, int y2)
1086 {
1087 // Row
1088 for (int i = x1; i <= x2; i++)
1089 SendLayerData(i, y1, map);
1090
1091 // Column
1092 for (int j = y1 + 1; j <= y2; j++)
1093 SendLayerData(x2, j, map);
1094
1095 if (x2 - x1 > 0)
1096 SendLayerBottomLeft(map, x1, y1 + 1, x2 - 1, y2);
1097 }
1098
1099 void SendLayerBottomLeft(float[] map, int x1, int y1, int x2, int y2)
1100 {
1101 // Row in reverse
1102 for (int i = x2; i >= x1; i--)
1103 SendLayerData(i, y2, map);
1104
1105 // Column in reverse
1106 for (int j = y2 - 1; j >= y1; j--)
1107 SendLayerData(x1, j, map);
1108
1109 if (x2 - x1 > 0)
1110 SendLayerTopRight(map, x1 + 1, y1, x2, y2 - 1);
1111 }
1112
1113 /// <summary> 1108 /// <summary>
1114 /// Sends a set of four patches (x, x+1, ..., x+3) to the client 1109 /// Sends a set of four patches (x, x+1, ..., x+3) to the client
1115 /// </summary> 1110 /// </summary>
1116 /// <param name="map">heightmap</param> 1111 /// <param name="map">heightmap</param>
1117 /// <param name="px">X coordinate for patches 0..12</param> 1112 /// <param name="px">X coordinate for patches 0..12</param>
1118 /// <param name="py">Y coordinate for patches 0..15</param> 1113 /// <param name="py">Y coordinate for patches 0..15</param>
1119 // private void SendLayerPacket(float[] map, int y, int x) 1114 private void SendLayerPacket(int x, int y, float[] map)
1120 // { 1115 {
1121 // int[] patches = new int[4]; 1116 int[] patches = new int[4];
1122 // patches[0] = x + 0 + y * 16; 1117 patches[0] = x + 0 + y * 16;
1123 // patches[1] = x + 1 + y * 16; 1118 patches[1] = x + 1 + y * 16;
1124 // patches[2] = x + 2 + y * 16; 1119 patches[2] = x + 2 + y * 16;
1125 // patches[3] = x + 3 + y * 16; 1120 patches[3] = x + 3 + y * 16;
1126 1121
1127 // Packet layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches); 1122 float[] heightmap = (map.Length == 65536) ?
1128 // OutPacket(layerpack, ThrottleOutPacketType.Land); 1123 map :
1129 // } 1124 LLHeightFieldMoronize(map);
1125
1126 try
1127 {
1128 Packet layerpack = TerrainCompressor.CreateLandPacket(heightmap, patches);
1129 OutPacket(layerpack, ThrottleOutPacketType.Land);
1130 }
1131 catch
1132 {
1133 for (int px = x ; px < x + 4 ; px++)
1134 SendLayerData(px, y, map);
1135 }
1136 }
1130 1137
1131 /// <summary> 1138 /// <summary>
1132 /// Sends a specified patch to a client 1139 /// Sends a specified patch to a client
@@ -1146,7 +1153,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1146 LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(heightmap, patches); 1153 LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(heightmap, patches);
1147 layerpack.Header.Reliable = true; 1154 layerpack.Header.Reliable = true;
1148 1155
1149 OutPacket(layerpack, ThrottleOutPacketType.Land); 1156 OutPacket(layerpack, ThrottleOutPacketType.Task);
1150 } 1157 }
1151 catch (Exception e) 1158 catch (Exception e)
1152 { 1159 {
@@ -1507,35 +1514,46 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1507 OutPacket(pc, ThrottleOutPacketType.Unknown); 1514 OutPacket(pc, ThrottleOutPacketType.Unknown);
1508 } 1515 }
1509 1516
1510 public void SendKillObject(ulong regionHandle, uint localID) 1517 public void SendKillObject(ulong regionHandle, List<uint> localIDs)
1511 { 1518 {
1512// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); 1519// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle);
1513 1520
1514 KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); 1521 KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject);
1515 // TODO: don't create new blocks if recycling an old packet 1522 // TODO: don't create new blocks if recycling an old packet
1516 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; 1523 kill.ObjectData = new KillObjectPacket.ObjectDataBlock[localIDs.Count];
1517 kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); 1524 for (int i = 0 ; i < localIDs.Count ; i++ )
1518 kill.ObjectData[0].ID = localID; 1525 {
1526 kill.ObjectData[i] = new KillObjectPacket.ObjectDataBlock();
1527 kill.ObjectData[i].ID = localIDs[i];
1528 }
1519 kill.Header.Reliable = true; 1529 kill.Header.Reliable = true;
1520 kill.Header.Zerocoded = true; 1530 kill.Header.Zerocoded = true;
1521 1531
1522 if (m_scene.GetScenePresence(localID) == null) 1532 if (localIDs.Count == 1)
1523 { 1533 {
1524 lock (m_entityUpdates.SyncRoot) 1534 if (m_scene.GetScenePresence(localIDs[0]) != null)
1525 { 1535 {
1526 m_killRecord.Add(localID); 1536 OutPacket(kill, ThrottleOutPacketType.State);
1527 1537 return;
1528 // The throttle queue used here must match that being used for updates. Otherwise, there is a
1529 // chance that a kill packet put on a separate queue will be sent to the client before an existing
1530 // update packet on another queue. Receiving updates after kills results in unowned and undeletable
1531 // scene objects in a viewer until that viewer is relogged in.
1532 OutPacket(kill, ThrottleOutPacketType.Task);
1533 } 1538 }
1539 m_killRecord.Add(localIDs[0]);
1534 } 1540 }
1535 else 1541 else
1536 { 1542 {
1537 OutPacket(kill, ThrottleOutPacketType.State); 1543 lock (m_entityUpdates.SyncRoot)
1544 {
1545 foreach (uint localID in localIDs)
1546 m_killRecord.Add(localID);
1547 }
1538 } 1548 }
1549
1550 // The throttle queue used here must match that being used for
1551 // updates. Otherwise, there is a chance that a kill packet put
1552 // on a separate queue will be sent to the client before an
1553 // existing update packet on another queue. Receiving updates
1554 // after kills results in unowned and undeletable
1555 // scene objects in a viewer until that viewer is relogged in.
1556 OutPacket(kill, ThrottleOutPacketType.Task);
1539 } 1557 }
1540 1558
1541 /// <summary> 1559 /// <summary>
@@ -2241,6 +2259,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2241 OutPacket(sound, ThrottleOutPacketType.Task); 2259 OutPacket(sound, ThrottleOutPacketType.Task);
2242 } 2260 }
2243 2261
2262 public void SendTransferAbort(TransferRequestPacket transferRequest)
2263 {
2264 TransferAbortPacket abort = (TransferAbortPacket)PacketPool.Instance.GetPacket(PacketType.TransferAbort);
2265 abort.TransferInfo.TransferID = transferRequest.TransferInfo.TransferID;
2266 abort.TransferInfo.ChannelType = transferRequest.TransferInfo.ChannelType;
2267 m_log.Debug("[Assets] Aborting transfer; asset request failed");
2268 OutPacket(abort, ThrottleOutPacketType.Task);
2269 }
2270
2244 public void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain) 2271 public void SendTriggeredSound(UUID soundID, UUID ownerID, UUID objectID, UUID parentID, ulong handle, Vector3 position, float gain)
2245 { 2272 {
2246 SoundTriggerPacket sound = (SoundTriggerPacket)PacketPool.Instance.GetPacket(PacketType.SoundTrigger); 2273 SoundTriggerPacket sound = (SoundTriggerPacket)PacketPool.Instance.GetPacket(PacketType.SoundTrigger);
@@ -3542,6 +3569,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3542 /// </summary> 3569 /// </summary>
3543 public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) 3570 public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
3544 { 3571 {
3572 if (entity is SceneObjectPart)
3573 {
3574 SceneObjectPart e = (SceneObjectPart)entity;
3575 SceneObjectGroup g = e.ParentGroup;
3576 if (g.RootPart.Shape.State > 30) // HUD
3577 if (g.OwnerID != AgentId)
3578 return; // Don't send updates for other people's HUDs
3579 }
3580
3545 double priority = m_prioritizer.GetUpdatePriority(this, entity); 3581 double priority = m_prioritizer.GetUpdatePriority(this, entity);
3546 3582
3547 lock (m_entityUpdates.SyncRoot) 3583 lock (m_entityUpdates.SyncRoot)
@@ -3565,25 +3601,43 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3565 if (update.Entity is SceneObjectPart) 3601 if (update.Entity is SceneObjectPart)
3566 { 3602 {
3567 SceneObjectPart part = (SceneObjectPart)update.Entity; 3603 SceneObjectPart part = (SceneObjectPart)update.Entity;
3604 if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId))
3605 continue;
3568 3606
3569 // Please do not remove this unless you can demonstrate on the OpenSim mailing list that a client
3570 // will never receive an update after a prim kill. Even then, keeping the kill record may be a good
3571 // safety measure.
3572 //
3573 // If a Linden Lab 1.23.5 client (and possibly later and earlier) receives an object update
3574 // after a kill, it will keep displaying the deleted object until relog. OpenSim currently performs
3575 // updates and kills on different threads with different scheduling strategies, hence this protection.
3576 //
3577 // This doesn't appear to apply to child prims - a client will happily ignore these updates
3578 // after the root prim has been deleted.
3579 if (m_killRecord.Contains(part.LocalId)) 3607 if (m_killRecord.Contains(part.LocalId))
3580 {
3581 // m_log.WarnFormat(
3582 // "[CLIENT]: Preventing update for prim with local id {0} after client for user {1} told it was deleted",
3583 // part.LocalId, Name);
3584 continue; 3608 continue;
3585 }
3586 3609
3610 if (part.ParentGroup.IsDeleted)
3611 continue;
3612
3613 if (part.ParentGroup.IsAttachment)
3614 { // Someone else's HUD, why are we getting these?
3615 if (part.ParentGroup.OwnerID != AgentId &&
3616 part.ParentGroup.RootPart.Shape.State >= 30)
3617 continue;
3618 ScenePresence sp;
3619 // Owner is not in the sim, don't update it to
3620 // anyone
3621 if (!m_scene.TryGetScenePresence(part.OwnerID, out sp))
3622 continue;
3623
3624 List<SceneObjectGroup> atts = sp.Attachments;
3625 bool found = false;
3626 foreach (SceneObjectGroup att in atts)
3627 {
3628 if (att == part.ParentGroup)
3629 {
3630 found = true;
3631 break;
3632 }
3633 }
3634
3635 // It's an attachment of a valid avatar, but
3636 // doesn't seem to be attached, skip
3637 if (!found)
3638 continue;
3639 }
3640
3587 if (part.ParentGroup.IsAttachment && m_disableFacelights) 3641 if (part.ParentGroup.IsAttachment && m_disableFacelights)
3588 { 3642 {
3589 if (part.ParentGroup.RootPart.Shape.State != (byte)AttachmentPoint.LeftHand && 3643 if (part.ParentGroup.RootPart.Shape.State != (byte)AttachmentPoint.LeftHand &&
@@ -4016,6 +4070,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4016 { 4070 {
4017 m_propertiesPacketTimer.Stop(); 4071 m_propertiesPacketTimer.Stop();
4018 4072
4073 if (m_propertiesBlocks.Count == 0)
4074 return;
4075
4019 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[m_propertiesBlocks.Count]; 4076 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[m_propertiesBlocks.Count];
4020 4077
4021 int index = 0; 4078 int index = 0;
@@ -4407,14 +4464,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4407 4464
4408 if (notifyCount > 0) 4465 if (notifyCount > 0)
4409 { 4466 {
4410 if (notifyCount > 32) 4467// if (notifyCount > 32)
4411 { 4468// {
4412 m_log.InfoFormat( 4469// m_log.InfoFormat(
4413 "[LAND]: More than {0} avatars own prims on this parcel. Only sending back details of first {0}" 4470// "[LAND]: More than {0} avatars own prims on this parcel. Only sending back details of first {0}"
4414 + " - a developer might want to investigate whether this is a hard limit", 32); 4471// + " - a developer might want to investigate whether this is a hard limit", 32);
4415 4472//
4416 notifyCount = 32; 4473// notifyCount = 32;
4417 } 4474// }
4418 4475
4419 ParcelObjectOwnersReplyPacket.DataBlock[] dataBlock 4476 ParcelObjectOwnersReplyPacket.DataBlock[] dataBlock
4420 = new ParcelObjectOwnersReplyPacket.DataBlock[notifyCount]; 4477 = new ParcelObjectOwnersReplyPacket.DataBlock[notifyCount];
@@ -4922,6 +4979,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4922 AddLocalPacketHandler(PacketType.TransferAbort, HandleTransferAbort, false); 4979 AddLocalPacketHandler(PacketType.TransferAbort, HandleTransferAbort, false);
4923 AddLocalPacketHandler(PacketType.MuteListRequest, HandleMuteListRequest, false); 4980 AddLocalPacketHandler(PacketType.MuteListRequest, HandleMuteListRequest, false);
4924 AddLocalPacketHandler(PacketType.UseCircuitCode, HandleUseCircuitCode); 4981 AddLocalPacketHandler(PacketType.UseCircuitCode, HandleUseCircuitCode);
4982 AddLocalPacketHandler(PacketType.CreateNewOutfitAttachments, HandleCreateNewOutfitAttachments);
4925 AddLocalPacketHandler(PacketType.AgentHeightWidth, HandleAgentHeightWidth, false); 4983 AddLocalPacketHandler(PacketType.AgentHeightWidth, HandleAgentHeightWidth, false);
4926 AddLocalPacketHandler(PacketType.InventoryDescendents, HandleInventoryDescendents); 4984 AddLocalPacketHandler(PacketType.InventoryDescendents, HandleInventoryDescendents);
4927 AddLocalPacketHandler(PacketType.DirPlacesQuery, HandleDirPlacesQuery); 4985 AddLocalPacketHandler(PacketType.DirPlacesQuery, HandleDirPlacesQuery);
@@ -5021,6 +5079,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5021 (x.CameraLeftAxis != lastarg.CameraLeftAxis) || 5079 (x.CameraLeftAxis != lastarg.CameraLeftAxis) ||
5022 (x.CameraUpAxis != lastarg.CameraUpAxis) || 5080 (x.CameraUpAxis != lastarg.CameraUpAxis) ||
5023 (x.ControlFlags != lastarg.ControlFlags) || 5081 (x.ControlFlags != lastarg.ControlFlags) ||
5082 (x.ControlFlags != 0) ||
5024 (x.Far != lastarg.Far) || 5083 (x.Far != lastarg.Far) ||
5025 (x.Flags != lastarg.Flags) || 5084 (x.Flags != lastarg.Flags) ||
5026 (x.State != lastarg.State) || 5085 (x.State != lastarg.State) ||
@@ -5394,7 +5453,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5394 args.Channel = ch; 5453 args.Channel = ch;
5395 args.From = String.Empty; 5454 args.From = String.Empty;
5396 args.Message = Utils.BytesToString(msg); 5455 args.Message = Utils.BytesToString(msg);
5397 args.Type = ChatTypeEnum.Shout; 5456 args.Type = ChatTypeEnum.Region; //Behaviour in SL is that the response can be heard from any distance
5398 args.Position = new Vector3(); 5457 args.Position = new Vector3();
5399 args.Scene = Scene; 5458 args.Scene = Scene;
5400 args.Sender = this; 5459 args.Sender = this;
@@ -9438,6 +9497,37 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9438 { 9497 {
9439 return true; 9498 return true;
9440 } 9499 }
9500
9501 private bool HandleCreateNewOutfitAttachments(IClientAPI sender, Packet Pack)
9502 {
9503 CreateNewOutfitAttachmentsPacket packet = (CreateNewOutfitAttachmentsPacket)Pack;
9504
9505 #region Packet Session and User Check
9506 if (m_checkPackets)
9507 {
9508 if (packet.AgentData.SessionID != SessionId ||
9509 packet.AgentData.AgentID != AgentId)
9510 return true;
9511 }
9512 #endregion
9513 MoveItemsAndLeaveCopy handlerMoveItemsAndLeaveCopy = null;
9514 List<InventoryItemBase> items = new List<InventoryItemBase>();
9515 foreach (CreateNewOutfitAttachmentsPacket.ObjectDataBlock n in packet.ObjectData)
9516 {
9517 InventoryItemBase b = new InventoryItemBase();
9518 b.ID = n.OldItemID;
9519 b.Folder = n.OldFolderID;
9520 items.Add(b);
9521 }
9522
9523 handlerMoveItemsAndLeaveCopy = OnMoveItemsAndLeaveCopy;
9524 if (handlerMoveItemsAndLeaveCopy != null)
9525 {
9526 handlerMoveItemsAndLeaveCopy(this, items, packet.HeaderData.NewFolderID);
9527 }
9528
9529 return true;
9530 }
9441 9531
9442 private bool HandleAgentHeightWidth(IClientAPI sender, Packet Pack) 9532 private bool HandleAgentHeightWidth(IClientAPI sender, Packet Pack)
9443 { 9533 {
@@ -10436,11 +10526,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
10436 10526
10437 StartLure handlerStartLure = OnStartLure; 10527 StartLure handlerStartLure = OnStartLure;
10438 if (handlerStartLure != null) 10528 if (handlerStartLure != null)
10439 handlerStartLure(startLureRequest.Info.LureType, 10529 {
10440 Utils.BytesToString( 10530 for (int i = 0 ; i < startLureRequest.TargetData.Length ; i++)
10441 startLureRequest.Info.Message), 10531 {
10442 startLureRequest.TargetData[0].TargetID, 10532 handlerStartLure(startLureRequest.Info.LureType,
10443 this); 10533 Utils.BytesToString(
10534 startLureRequest.Info.Message),
10535 startLureRequest.TargetData[i].TargetID,
10536 this);
10537 }
10538 }
10444 return true; 10539 return true;
10445 } 10540 }
10446 private bool HandleTeleportLureRequest(IClientAPI sender, Packet Pack) 10541 private bool HandleTeleportLureRequest(IClientAPI sender, Packet Pack)
@@ -10935,7 +11030,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
10935 { 11030 {
10936 // It's a ghost! tell the client to delete it from view. 11031 // It's a ghost! tell the client to delete it from view.
10937 simClient.SendKillObject(Scene.RegionInfo.RegionHandle, 11032 simClient.SendKillObject(Scene.RegionInfo.RegionHandle,
10938 localId); 11033 new List<uint>() { localId });
10939 } 11034 }
10940 else 11035 else
10941 { 11036 {
@@ -11305,22 +11400,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11305 /// <param name="Pack">OpenMetaverse.packet</param> 11400 /// <param name="Pack">OpenMetaverse.packet</param>
11306 public void ProcessInPacket(Packet packet) 11401 public void ProcessInPacket(Packet packet)
11307 { 11402 {
11308 if (m_debugPacketLevel > 0) 11403 if (m_debugPacketLevel >= 255)
11309 { 11404 m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type);
11310 bool outputPacket = true;
11311
11312 if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate)
11313 outputPacket = false;
11314
11315 if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage)
11316 outputPacket = false;
11317
11318 if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation))
11319 outputPacket = false;
11320
11321 if (outputPacket)
11322 m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type);
11323 }
11324 11405
11325 if (!ProcessPacketMethod(packet)) 11406 if (!ProcessPacketMethod(packet))
11326 m_log.Warn("[CLIENT]: unhandled packet " + packet.Type); 11407 m_log.Warn("[CLIENT]: unhandled packet " + packet.Type);
@@ -11562,7 +11643,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11562 11643
11563// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID); 11644// m_log.DebugFormat("[CLIENT]: {0} requesting asset {1}", Name, requestID);
11564 11645
11646
11647 //Note, the bool returned from the below function is useless since it is always false.
11565 m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived); 11648 m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived);
11649
11566 } 11650 }
11567 11651
11568 /// <summary> 11652 /// <summary>