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.cs783
1 files changed, 765 insertions, 18 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 49b9378..47251b7 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -350,7 +350,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
350 350
351 protected IAssetService m_assetService; 351 protected IAssetService m_assetService;
352 private IHyperAssetService m_hyperAssets; 352 private IHyperAssetService m_hyperAssets;
353 353 private const bool m_checkPackets = true;
354 354
355 #endregion Class Members 355 #endregion Class Members
356 356
@@ -1266,10 +1266,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1266 // 1266 //
1267 if (totalItems == 0 && totalFolders == 0) 1267 if (totalItems == 0 && totalFolders == 0)
1268 currentPacket = CreateInventoryDescendentsPacket(ownerID, folderID, version, items.Count + folders.Count, 0, 0); 1268 currentPacket = CreateInventoryDescendentsPacket(ownerID, folderID, version, items.Count + folders.Count, 0, 0);
1269 1269
1270 // To preserve SL compatibility, we will NOT combine folders and items in one packet 1270 // To preserve SL compatibility, we will NOT combine folders and items in one packet
1271 // 1271 //
1272 while(itemsSent < totalItems || foldersSent < totalFolders) 1272 while (itemsSent < totalItems || foldersSent < totalFolders)
1273 { 1273 {
1274 if (currentPacket == null) // Start a new packet 1274 if (currentPacket == null) // Start a new packet
1275 { 1275 {
@@ -1289,7 +1289,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1289 1289
1290 if (foldersToSend-- > 0) 1290 if (foldersToSend-- > 0)
1291 currentPacket.FolderData[foldersSent % MAX_FOLDERS_PER_PACKET] = CreateFolderDataBlock(folders[foldersSent++]); 1291 currentPacket.FolderData[foldersSent % MAX_FOLDERS_PER_PACKET] = CreateFolderDataBlock(folders[foldersSent++]);
1292 else if(itemsToSend-- > 0) 1292 else if (itemsToSend-- > 0)
1293 currentPacket.ItemData[itemsSent % MAX_ITEMS_PER_PACKET] = CreateItemDataBlock(items[itemsSent++]); 1293 currentPacket.ItemData[itemsSent % MAX_ITEMS_PER_PACKET] = CreateItemDataBlock(items[itemsSent++]);
1294 else 1294 else
1295 { 1295 {
@@ -2043,7 +2043,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2043 packet.AgentData.SessionID = SessionId; 2043 packet.AgentData.SessionID = SessionId;
2044 2044
2045 packet.Effect = effectBlocks; 2045 packet.Effect = effectBlocks;
2046 2046
2047 OutPacket(packet, ThrottleOutPacketType.State); 2047 OutPacket(packet, ThrottleOutPacketType.State);
2048 } 2048 }
2049 2049
@@ -2742,7 +2742,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2742 } 2742 }
2743 llsd.Add("GroupData", GroupData); 2743 llsd.Add("GroupData", GroupData);
2744 llsd.Add("NewGroupData", NewGroupData); 2744 llsd.Add("NewGroupData", NewGroupData);
2745 2745
2746 IEventQueue eq = this.Scene.RequestModuleInterface<IEventQueue>(); 2746 IEventQueue eq = this.Scene.RequestModuleInterface<IEventQueue>();
2747 if (eq != null) 2747 if (eq != null)
2748 { 2748 {
@@ -3121,7 +3121,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3121 3121
3122 objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1]; 3122 objupdate.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[1];
3123 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(data); 3123 objupdate.ObjectData[0] = CreateAvatarUpdateBlock(data);
3124
3125 OutPacket(objupdate, ThrottleOutPacketType.Task); 3124 OutPacket(objupdate, ThrottleOutPacketType.Task);
3126 } 3125 }
3127 3126
@@ -3172,8 +3171,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3172 terse.ObjectData[i] = m_avatarTerseUpdates.Dequeue(); 3171 terse.ObjectData[i] = m_avatarTerseUpdates.Dequeue();
3173 } 3172 }
3174 3173
3175 // HACK: Using the task category until the tiered reprioritization code is in 3174 OutPacket(terse, ThrottleOutPacketType.State);
3176 OutPacket(terse, ThrottleOutPacketType.Task);
3177 } 3175 }
3178 3176
3179 public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations) 3177 public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
@@ -4045,7 +4043,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4045 4043
4046 if (collisionPlane == Vector4.Zero) 4044 if (collisionPlane == Vector4.Zero)
4047 collisionPlane = Vector4.UnitW; 4045 collisionPlane = Vector4.UnitW;
4048 4046 //m_log.DebugFormat("CollisionPlane: {0}",collisionPlane);
4049 collisionPlane.ToBytes(data, pos); 4047 collisionPlane.ToBytes(data, pos);
4050 pos += 16; 4048 pos += 16;
4051 } 4049 }
@@ -4130,12 +4128,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4130 update.PCode = (byte)PCode.Avatar; 4128 update.PCode = (byte)PCode.Avatar;
4131 update.ProfileCurve = 1; 4129 update.ProfileCurve = 1;
4132 update.PSBlock = Utils.EmptyBytes; 4130 update.PSBlock = Utils.EmptyBytes;
4133 update.Scale = Vector3.One; 4131 update.Scale = new Vector3(0.45f,0.6f,1.9f);
4134 update.Text = Utils.EmptyBytes; 4132 update.Text = Utils.EmptyBytes;
4135 update.TextColor = new byte[4]; 4133 update.TextColor = new byte[4];
4136 update.TextureAnim = Utils.EmptyBytes; 4134 update.TextureAnim = Utils.EmptyBytes;
4137 update.TextureEntry = data.TextureEntry ?? Utils.EmptyBytes; 4135 update.TextureEntry = data.TextureEntry ?? Utils.EmptyBytes;
4138 update.UpdateFlags = 61 + (9 << 8) + (130 << 16) + (16 << 24); // TODO: Replace these numbers with PrimFlags 4136 update.UpdateFlags = (uint)(PrimFlags.Physics | PrimFlags.ObjectModify | PrimFlags.ObjectCopy | PrimFlags.ObjectAnyOwner | PrimFlags.ObjectYouOwner | PrimFlags.ObjectMove | PrimFlags.InventoryEmpty | PrimFlags.ObjectTransfer | PrimFlags.ObjectOwnerModify);//61 + (9 << 8) + (130 << 16) + (16 << 24); // TODO: Replace these numbers with PrimFlags
4139 4137
4140 return update; 4138 return update;
4141 } 4139 }
@@ -4282,6 +4280,38 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4282 AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest); 4280 AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest);
4283 AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest); 4281 AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest);
4284 AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage); 4282 AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage);
4283 AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest);
4284 AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4285 AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate);
4286 AddLocalPacketHandler(PacketType.ScriptDialogReply, HandlerScriptDialogReply);
4287 AddLocalPacketHandler(PacketType.ImprovedInstantMessage, HandlerImprovedInstantMessage);
4288 AddLocalPacketHandler(PacketType.AcceptFriendship, HandlerAcceptFriendship);
4289 AddLocalPacketHandler(PacketType.DeclineFriendship, HandlerDeclineFriendship);
4290 AddLocalPacketHandler(PacketType.TerminateFriendship, HandlerTerminateFrendship);
4291 AddLocalPacketHandler(PacketType.RezObject, HandlerRezObject);
4292 AddLocalPacketHandler(PacketType.DeRezObject, HandlerDeRezObject);
4293 AddLocalPacketHandler(PacketType.ModifyLand, HandlerModifyLand);
4294 AddLocalPacketHandler(PacketType.RegionHandshakeReply, HandlerRegionHandshakeReply);
4295 AddLocalPacketHandler(PacketType.AgentWearablesRequest, HandlerAgentWearablesRequest);
4296 AddLocalPacketHandler(PacketType.AgentSetAppearance, HandlerAgentSetAppearance);
4297 AddLocalPacketHandler(PacketType.AgentIsNowWearing, HandlerAgentIsNowWearing);
4298 AddLocalPacketHandler(PacketType.RezSingleAttachmentFromInv, HandlerRezSingleAttachmentFromInv);
4299 AddLocalPacketHandler(PacketType.RezMultipleAttachmentsFromInv, HandleRezMultipleAttachmentsFromInv);
4300 AddLocalPacketHandler(PacketType.DetachAttachmentIntoInv, HandleDetachAttachmentIntoInv);
4301 AddLocalPacketHandler(PacketType.ObjectAttach, HandleObjectAttach);
4302 AddLocalPacketHandler(PacketType.ObjectDetach, HandleObjectDetach);
4303 AddLocalPacketHandler(PacketType.ObjectDrop, HandleObjectDrop);
4304 AddLocalPacketHandler(PacketType.SetAlwaysRun, HandleSetAlwaysRun);
4305 AddLocalPacketHandler(PacketType.CompleteAgentMovement, HandleCompleteAgentMovement);
4306 AddLocalPacketHandler(PacketType.AgentAnimation, HandleAgentAnimation);
4307 AddLocalPacketHandler(PacketType.AgentRequestSit, HandleAgentRequestSit);
4308 AddLocalPacketHandler(PacketType.AgentSit, HandleAgentSit);
4309 AddLocalPacketHandler(PacketType.SoundTrigger, HandleSoundTrigger);
4310 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4311 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4312 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4313 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4314
4285 } 4315 }
4286 4316
4287 #region Packet Handlers 4317 #region Packet Handlers
@@ -4497,6 +4527,723 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4497 return true; 4527 return true;
4498 } 4528 }
4499 4529
4530 private bool HandleAvatarPropertiesRequest(IClientAPI sender, Packet Pack)
4531 {
4532 AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack;
4533
4534 #region Packet Session and User Check
4535 if (m_checkPackets)
4536 {
4537 if (avatarProperties.AgentData.SessionID != SessionId ||
4538 avatarProperties.AgentData.AgentID != AgentId)
4539 return true;
4540 }
4541 #endregion
4542
4543 RequestAvatarProperties handlerRequestAvatarProperties = OnRequestAvatarProperties;
4544 if (handlerRequestAvatarProperties != null)
4545 {
4546 handlerRequestAvatarProperties(this, avatarProperties.AgentData.AvatarID);
4547 }
4548 return true;
4549 }
4550
4551 private bool HandleChatFromViewer(IClientAPI sender, Packet Pack)
4552 {
4553 ChatFromViewerPacket inchatpack = (ChatFromViewerPacket)Pack;
4554
4555 #region Packet Session and User Check
4556 if (m_checkPackets)
4557 {
4558 if (inchatpack.AgentData.SessionID != SessionId ||
4559 inchatpack.AgentData.AgentID != AgentId)
4560 return true;
4561 }
4562 #endregion
4563
4564 string fromName = String.Empty; //ClientAvatar.firstname + " " + ClientAvatar.lastname;
4565 byte[] message = inchatpack.ChatData.Message;
4566 byte type = inchatpack.ChatData.Type;
4567 Vector3 fromPos = new Vector3(); // ClientAvatar.Pos;
4568 // UUID fromAgentID = AgentId;
4569
4570 int channel = inchatpack.ChatData.Channel;
4571
4572 if (OnChatFromClient != null)
4573 {
4574 OSChatMessage args = new OSChatMessage();
4575 args.Channel = channel;
4576 args.From = fromName;
4577 args.Message = Utils.BytesToString(message);
4578 args.Type = (ChatTypeEnum)type;
4579 args.Position = fromPos;
4580
4581 args.Scene = Scene;
4582 args.Sender = this;
4583 args.SenderUUID = this.AgentId;
4584
4585 ChatMessage handlerChatFromClient = OnChatFromClient;
4586 if (handlerChatFromClient != null)
4587 handlerChatFromClient(this, args);
4588 }
4589 return true;
4590 }
4591
4592 private bool HandlerAvatarPropertiesUpdate(IClientAPI sender, Packet Pack)
4593 {
4594 AvatarPropertiesUpdatePacket avatarProps = (AvatarPropertiesUpdatePacket)Pack;
4595
4596 #region Packet Session and User Check
4597 if (m_checkPackets)
4598 {
4599 if (avatarProps.AgentData.SessionID != SessionId ||
4600 avatarProps.AgentData.AgentID != AgentId)
4601 return true;
4602 }
4603 #endregion
4604
4605 UpdateAvatarProperties handlerUpdateAvatarProperties = OnUpdateAvatarProperties;
4606 if (handlerUpdateAvatarProperties != null)
4607 {
4608 AvatarPropertiesUpdatePacket.PropertiesDataBlock Properties = avatarProps.PropertiesData;
4609 UserProfileData UserProfile = new UserProfileData();
4610 UserProfile.ID = AgentId;
4611 UserProfile.AboutText = Utils.BytesToString(Properties.AboutText);
4612 UserProfile.FirstLifeAboutText = Utils.BytesToString(Properties.FLAboutText);
4613 UserProfile.FirstLifeImage = Properties.FLImageID;
4614 UserProfile.Image = Properties.ImageID;
4615 UserProfile.ProfileUrl = Utils.BytesToString(Properties.ProfileURL);
4616
4617 handlerUpdateAvatarProperties(this, UserProfile);
4618 }
4619 return true;
4620 }
4621
4622 private bool HandlerScriptDialogReply(IClientAPI sender, Packet Pack)
4623 {
4624 ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack;
4625
4626 #region Packet Session and User Check
4627 if (m_checkPackets)
4628 {
4629 if (rdialog.AgentData.SessionID != SessionId ||
4630 rdialog.AgentData.AgentID != AgentId)
4631 return true;
4632 }
4633 #endregion
4634
4635 int ch = rdialog.Data.ChatChannel;
4636 byte[] msg = rdialog.Data.ButtonLabel;
4637 if (OnChatFromClient != null)
4638 {
4639 OSChatMessage args = new OSChatMessage();
4640 args.Channel = ch;
4641 args.From = String.Empty;
4642 args.Message = Utils.BytesToString(msg);
4643 args.Type = ChatTypeEnum.Shout;
4644 args.Position = new Vector3();
4645 args.Scene = Scene;
4646 args.Sender = this;
4647 ChatMessage handlerChatFromClient2 = OnChatFromClient;
4648 if (handlerChatFromClient2 != null)
4649 handlerChatFromClient2(this, args);
4650 }
4651
4652 return true;
4653 }
4654
4655 private bool HandlerImprovedInstantMessage(IClientAPI sender, Packet Pack)
4656 {
4657 ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack;
4658
4659 #region Packet Session and User Check
4660 if (m_checkPackets)
4661 {
4662 if (msgpack.AgentData.SessionID != SessionId ||
4663 msgpack.AgentData.AgentID != AgentId)
4664 return true;
4665 }
4666 #endregion
4667
4668 string IMfromName = Util.FieldToString(msgpack.MessageBlock.FromAgentName);
4669 string IMmessage = Utils.BytesToString(msgpack.MessageBlock.Message);
4670 ImprovedInstantMessage handlerInstantMessage = OnInstantMessage;
4671
4672 if (handlerInstantMessage != null)
4673 {
4674 GridInstantMessage im = new GridInstantMessage(Scene,
4675 msgpack.AgentData.AgentID,
4676 IMfromName,
4677 msgpack.MessageBlock.ToAgentID,
4678 msgpack.MessageBlock.Dialog,
4679 msgpack.MessageBlock.FromGroup,
4680 IMmessage,
4681 msgpack.MessageBlock.ID,
4682 msgpack.MessageBlock.Offline != 0 ? true : false,
4683 msgpack.MessageBlock.Position,
4684 msgpack.MessageBlock.BinaryBucket);
4685
4686 handlerInstantMessage(this, im);
4687 }
4688 return true;
4689
4690 }
4691
4692 private bool HandlerAcceptFriendship(IClientAPI sender, Packet Pack)
4693 {
4694 AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack;
4695
4696 #region Packet Session and User Check
4697 if (m_checkPackets)
4698 {
4699 if (afriendpack.AgentData.SessionID != SessionId ||
4700 afriendpack.AgentData.AgentID != AgentId)
4701 return true;
4702 }
4703 #endregion
4704
4705 // My guess is this is the folder to stick the calling card into
4706 List<UUID> callingCardFolders = new List<UUID>();
4707
4708 UUID agentID = afriendpack.AgentData.AgentID;
4709 UUID transactionID = afriendpack.TransactionBlock.TransactionID;
4710
4711 for (int fi = 0; fi < afriendpack.FolderData.Length; fi++)
4712 {
4713 callingCardFolders.Add(afriendpack.FolderData[fi].FolderID);
4714 }
4715
4716 FriendActionDelegate handlerApproveFriendRequest = OnApproveFriendRequest;
4717 if (handlerApproveFriendRequest != null)
4718 {
4719 handlerApproveFriendRequest(this, agentID, transactionID, callingCardFolders);
4720 }
4721 return true;
4722
4723 }
4724
4725 private bool HandlerDeclineFriendship(IClientAPI sender, Packet Pack)
4726 {
4727 DeclineFriendshipPacket dfriendpack = (DeclineFriendshipPacket)Pack;
4728
4729 #region Packet Session and User Check
4730 if (m_checkPackets)
4731 {
4732 if (dfriendpack.AgentData.SessionID != SessionId ||
4733 dfriendpack.AgentData.AgentID != AgentId)
4734 return true;
4735 }
4736 #endregion
4737
4738 if (OnDenyFriendRequest != null)
4739 {
4740 OnDenyFriendRequest(this,
4741 dfriendpack.AgentData.AgentID,
4742 dfriendpack.TransactionBlock.TransactionID,
4743 null);
4744 }
4745 return true;
4746 }
4747
4748 private bool HandlerTerminateFrendship(IClientAPI sender, Packet Pack)
4749 {
4750 TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack;
4751
4752 #region Packet Session and User Check
4753 if (m_checkPackets)
4754 {
4755 if (tfriendpack.AgentData.SessionID != SessionId ||
4756 tfriendpack.AgentData.AgentID != AgentId)
4757 return true;
4758 }
4759 #endregion
4760
4761 UUID listOwnerAgentID = tfriendpack.AgentData.AgentID;
4762 UUID exFriendID = tfriendpack.ExBlock.OtherID;
4763
4764 FriendshipTermination handlerTerminateFriendship = OnTerminateFriendship;
4765 if (handlerTerminateFriendship != null)
4766 {
4767 handlerTerminateFriendship(this, listOwnerAgentID, exFriendID);
4768 }
4769 return true;
4770 }
4771
4772 private bool HandlerRezObject(IClientAPI sender, Packet Pack)
4773 {
4774 RezObjectPacket rezPacket = (RezObjectPacket)Pack;
4775
4776 #region Packet Session and User Check
4777 if (m_checkPackets)
4778 {
4779 if (rezPacket.AgentData.SessionID != SessionId ||
4780 rezPacket.AgentData.AgentID != AgentId)
4781 return true;
4782 }
4783 #endregion
4784
4785 RezObject handlerRezObject = OnRezObject;
4786 if (handlerRezObject != null)
4787 {
4788 handlerRezObject(this, rezPacket.InventoryData.ItemID, rezPacket.RezData.RayEnd,
4789 rezPacket.RezData.RayStart, rezPacket.RezData.RayTargetID,
4790 rezPacket.RezData.BypassRaycast, rezPacket.RezData.RayEndIsIntersection,
4791 rezPacket.RezData.RezSelected, rezPacket.RezData.RemoveItem,
4792 rezPacket.RezData.FromTaskID);
4793 }
4794 return true;
4795 }
4796
4797 private bool HandlerDeRezObject(IClientAPI sender, Packet Pack)
4798 {
4799 DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)Pack;
4800
4801 #region Packet Session and User Check
4802 if (m_checkPackets)
4803 {
4804 if (DeRezPacket.AgentData.SessionID != SessionId ||
4805 DeRezPacket.AgentData.AgentID != AgentId)
4806 return true;
4807 }
4808 #endregion
4809
4810 DeRezObject handlerDeRezObject = OnDeRezObject;
4811 if (handlerDeRezObject != null)
4812 {
4813 List<uint> deRezIDs = new List<uint>();
4814
4815 foreach (DeRezObjectPacket.ObjectDataBlock data in
4816 DeRezPacket.ObjectData)
4817 {
4818 deRezIDs.Add(data.ObjectLocalID);
4819 }
4820 // It just so happens that the values on the DeRezAction enumerator match the Destination
4821 // values given by a Second Life client
4822 handlerDeRezObject(this, deRezIDs,
4823 DeRezPacket.AgentBlock.GroupID,
4824 (DeRezAction)DeRezPacket.AgentBlock.Destination,
4825 DeRezPacket.AgentBlock.DestinationID);
4826
4827 }
4828 return true;
4829 }
4830
4831 private bool HandlerModifyLand(IClientAPI sender, Packet Pack)
4832 {
4833 ModifyLandPacket modify = (ModifyLandPacket)Pack;
4834
4835 #region Packet Session and User Check
4836 if (m_checkPackets)
4837 {
4838 if (modify.AgentData.SessionID != SessionId ||
4839 modify.AgentData.AgentID != AgentId)
4840 return true;
4841 }
4842
4843 #endregion
4844 //m_log.Info("[LAND]: LAND:" + modify.ToString());
4845 if (modify.ParcelData.Length > 0)
4846 {
4847 if (OnModifyTerrain != null)
4848 {
4849 for (int i = 0; i < modify.ParcelData.Length; i++)
4850 {
4851 ModifyTerrain handlerModifyTerrain = OnModifyTerrain;
4852 if (handlerModifyTerrain != null)
4853 {
4854 handlerModifyTerrain(AgentId, modify.ModifyBlock.Height, modify.ModifyBlock.Seconds,
4855 modify.ModifyBlock.BrushSize,
4856 modify.ModifyBlock.Action, modify.ParcelData[i].North,
4857 modify.ParcelData[i].West, modify.ParcelData[i].South,
4858 modify.ParcelData[i].East, AgentId);
4859 }
4860 }
4861 }
4862 }
4863
4864 return true;
4865 }
4866
4867 private bool HandlerRegionHandshakeReply(IClientAPI sender, Packet Pack)
4868 {
4869 Action<IClientAPI> handlerRegionHandShakeReply = OnRegionHandShakeReply;
4870 if (handlerRegionHandShakeReply != null)
4871 {
4872 handlerRegionHandShakeReply(this);
4873 }
4874
4875 return true;
4876 }
4877
4878 private bool HandlerAgentWearablesRequest(IClientAPI sender, Packet Pack)
4879 {
4880 GenericCall2 handlerRequestWearables = OnRequestWearables;
4881
4882 if (handlerRequestWearables != null)
4883 {
4884 handlerRequestWearables();
4885 }
4886
4887 Action<IClientAPI> handlerRequestAvatarsData = OnRequestAvatarsData;
4888
4889 if (handlerRequestAvatarsData != null)
4890 {
4891 handlerRequestAvatarsData(this);
4892 }
4893
4894 return true;
4895 }
4896
4897 private bool HandlerAgentSetAppearance(IClientAPI sender, Packet Pack)
4898 {
4899 AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack;
4900
4901 #region Packet Session and User Check
4902 if (m_checkPackets)
4903 {
4904 if (appear.AgentData.SessionID != SessionId ||
4905 appear.AgentData.AgentID != AgentId)
4906 return true;
4907 }
4908 #endregion
4909
4910 SetAppearance handlerSetAppearance = OnSetAppearance;
4911 if (handlerSetAppearance != null)
4912 {
4913 // Temporarily protect ourselves from the mantis #951 failure.
4914 // However, we could do this for several other handlers where a failure isn't terminal
4915 // for the client session anyway, in order to protect ourselves against bad code in plugins
4916 try
4917 {
4918 byte[] visualparams = new byte[appear.VisualParam.Length];
4919 for (int i = 0; i < appear.VisualParam.Length; i++)
4920 visualparams[i] = appear.VisualParam[i].ParamValue;
4921
4922 Primitive.TextureEntry te = null;
4923 if (appear.ObjectData.TextureEntry.Length > 1)
4924 te = new Primitive.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
4925
4926 handlerSetAppearance(te, visualparams);
4927 }
4928 catch (Exception e)
4929 {
4930 m_log.ErrorFormat(
4931 "[CLIENT VIEW]: AgentSetApperance packet handler threw an exception, {0}",
4932 e);
4933 }
4934 }
4935
4936 return true;
4937 }
4938
4939 private bool HandlerAgentIsNowWearing(IClientAPI sender, Packet Pack)
4940 {
4941 if (OnAvatarNowWearing != null)
4942 {
4943 AgentIsNowWearingPacket nowWearing = (AgentIsNowWearingPacket)Pack;
4944
4945 #region Packet Session and User Check
4946 if (m_checkPackets)
4947 {
4948 if (nowWearing.AgentData.SessionID != SessionId ||
4949 nowWearing.AgentData.AgentID != AgentId)
4950 return true;
4951 }
4952 #endregion
4953
4954 AvatarWearingArgs wearingArgs = new AvatarWearingArgs();
4955 for (int i = 0; i < nowWearing.WearableData.Length; i++)
4956 {
4957 AvatarWearingArgs.Wearable wearable =
4958 new AvatarWearingArgs.Wearable(nowWearing.WearableData[i].ItemID,
4959 nowWearing.WearableData[i].WearableType);
4960 wearingArgs.NowWearing.Add(wearable);
4961 }
4962
4963 AvatarNowWearing handlerAvatarNowWearing = OnAvatarNowWearing;
4964 if (handlerAvatarNowWearing != null)
4965 {
4966 handlerAvatarNowWearing(this, wearingArgs);
4967 }
4968 }
4969 return true;
4970 }
4971
4972 private bool HandlerRezSingleAttachmentFromInv(IClientAPI sender, Packet Pack)
4973 {
4974 RezSingleAttachmentFromInv handlerRezSingleAttachment = OnRezSingleAttachmentFromInv;
4975 if (handlerRezSingleAttachment != null)
4976 {
4977 RezSingleAttachmentFromInvPacket rez = (RezSingleAttachmentFromInvPacket)Pack;
4978
4979 #region Packet Session and User Check
4980 if (m_checkPackets)
4981 {
4982 if (rez.AgentData.SessionID != SessionId ||
4983 rez.AgentData.AgentID != AgentId)
4984 return true;
4985 }
4986 #endregion
4987
4988 handlerRezSingleAttachment(this, rez.ObjectData.ItemID,
4989 rez.ObjectData.AttachmentPt);
4990 }
4991
4992 return true;
4993 }
4994
4995 private bool HandleRezMultipleAttachmentsFromInv(IClientAPI sender, Packet Pack)
4996 {
4997 RezMultipleAttachmentsFromInv handlerRezMultipleAttachments = OnRezMultipleAttachmentsFromInv;
4998 if (handlerRezMultipleAttachments != null)
4999 {
5000 RezMultipleAttachmentsFromInvPacket rez = (RezMultipleAttachmentsFromInvPacket)Pack;
5001 handlerRezMultipleAttachments(this, rez.HeaderData,
5002 rez.ObjectData);
5003 }
5004
5005 return true;
5006 }
5007
5008 private bool HandleDetachAttachmentIntoInv(IClientAPI sender, Packet Pack)
5009 {
5010 UUIDNameRequest handlerDetachAttachmentIntoInv = OnDetachAttachmentIntoInv;
5011 if (handlerDetachAttachmentIntoInv != null)
5012 {
5013 DetachAttachmentIntoInvPacket detachtoInv = (DetachAttachmentIntoInvPacket)Pack;
5014
5015 #region Packet Session and User Check
5016 // UNSUPPORTED ON THIS PACKET
5017 #endregion
5018
5019 UUID itemID = detachtoInv.ObjectData.ItemID;
5020 // UUID ATTACH_agentID = detachtoInv.ObjectData.AgentID;
5021
5022 handlerDetachAttachmentIntoInv(itemID, this);
5023 }
5024 return true;
5025 }
5026
5027 private bool HandleObjectAttach(IClientAPI sender, Packet Pack)
5028 {
5029 if (OnObjectAttach != null)
5030 {
5031 ObjectAttachPacket att = (ObjectAttachPacket)Pack;
5032
5033 #region Packet Session and User Check
5034 if (m_checkPackets)
5035 {
5036 if (att.AgentData.SessionID != SessionId ||
5037 att.AgentData.AgentID != AgentId)
5038 return true;
5039 }
5040 #endregion
5041
5042 ObjectAttach handlerObjectAttach = OnObjectAttach;
5043
5044 if (handlerObjectAttach != null)
5045 {
5046 if (att.ObjectData.Length > 0)
5047 {
5048 handlerObjectAttach(this, att.ObjectData[0].ObjectLocalID, att.AgentData.AttachmentPoint, att.ObjectData[0].Rotation, false);
5049 }
5050 }
5051 }
5052 return true;
5053 }
5054
5055 private bool HandleObjectDetach(IClientAPI sender, Packet Pack)
5056 {
5057 ObjectDetachPacket dett = (ObjectDetachPacket)Pack;
5058
5059 #region Packet Session and User Check
5060 if (m_checkPackets)
5061 {
5062 if (dett.AgentData.SessionID != SessionId ||
5063 dett.AgentData.AgentID != AgentId)
5064 return true;
5065 }
5066 #endregion
5067
5068 for (int j = 0; j < dett.ObjectData.Length; j++)
5069 {
5070 uint obj = dett.ObjectData[j].ObjectLocalID;
5071 ObjectDeselect handlerObjectDetach = OnObjectDetach;
5072 if (handlerObjectDetach != null)
5073 {
5074 handlerObjectDetach(obj, this);
5075 }
5076
5077 }
5078 return true;
5079 }
5080
5081 private bool HandleObjectDrop(IClientAPI sender, Packet Pack)
5082 {
5083 ObjectDropPacket dropp = (ObjectDropPacket)Pack;
5084
5085 #region Packet Session and User Check
5086 if (m_checkPackets)
5087 {
5088 if (dropp.AgentData.SessionID != SessionId ||
5089 dropp.AgentData.AgentID != AgentId)
5090 return true;
5091 }
5092 #endregion
5093
5094 for (int j = 0; j < dropp.ObjectData.Length; j++)
5095 {
5096 uint obj = dropp.ObjectData[j].ObjectLocalID;
5097 ObjectDrop handlerObjectDrop = OnObjectDrop;
5098 if (handlerObjectDrop != null)
5099 {
5100 handlerObjectDrop(obj, this);
5101 }
5102 }
5103 return true;
5104 }
5105
5106 private bool HandleSetAlwaysRun(IClientAPI sender, Packet Pack)
5107 {
5108 SetAlwaysRunPacket run = (SetAlwaysRunPacket)Pack;
5109
5110 #region Packet Session and User Check
5111 if (m_checkPackets)
5112 {
5113 if (run.AgentData.SessionID != SessionId ||
5114 run.AgentData.AgentID != AgentId)
5115 return true;
5116 }
5117 #endregion
5118
5119 SetAlwaysRun handlerSetAlwaysRun = OnSetAlwaysRun;
5120 if (handlerSetAlwaysRun != null)
5121 handlerSetAlwaysRun(this, run.AgentData.AlwaysRun);
5122
5123 return true;
5124 }
5125
5126 private bool HandleCompleteAgentMovement(IClientAPI sender, Packet Pack)
5127 {
5128 GenericCall2 handlerCompleteMovementToRegion = OnCompleteMovementToRegion;
5129 if (handlerCompleteMovementToRegion != null)
5130 {
5131 handlerCompleteMovementToRegion();
5132 }
5133 handlerCompleteMovementToRegion = null;
5134
5135 return true;
5136 }
5137
5138 private bool HandleAgentAnimation(IClientAPI sender, Packet Pack)
5139 {
5140 AgentAnimationPacket AgentAni = (AgentAnimationPacket)Pack;
5141
5142 #region Packet Session and User Check
5143 if (m_checkPackets)
5144 {
5145 if (AgentAni.AgentData.SessionID != SessionId ||
5146 AgentAni.AgentData.AgentID != AgentId)
5147 return true;
5148 }
5149 #endregion
5150
5151 StartAnim handlerStartAnim = null;
5152 StopAnim handlerStopAnim = null;
5153
5154 for (int i = 0; i < AgentAni.AnimationList.Length; i++)
5155 {
5156 if (AgentAni.AnimationList[i].StartAnim)
5157 {
5158 handlerStartAnim = OnStartAnim;
5159 if (handlerStartAnim != null)
5160 {
5161 handlerStartAnim(this, AgentAni.AnimationList[i].AnimID);
5162 }
5163 }
5164 else
5165 {
5166 handlerStopAnim = OnStopAnim;
5167 if (handlerStopAnim != null)
5168 {
5169 handlerStopAnim(this, AgentAni.AnimationList[i].AnimID);
5170 }
5171 }
5172 }
5173 return true;
5174 }
5175
5176 private bool HandleAgentRequestSit(IClientAPI sender, Packet Pack)
5177 {
5178 if (OnAgentRequestSit != null)
5179 {
5180 AgentRequestSitPacket agentRequestSit = (AgentRequestSitPacket)Pack;
5181
5182 #region Packet Session and User Check
5183 if (m_checkPackets)
5184 {
5185 if (agentRequestSit.AgentData.SessionID != SessionId ||
5186 agentRequestSit.AgentData.AgentID != AgentId)
5187 return true;
5188 }
5189 #endregion
5190
5191 AgentRequestSit handlerAgentRequestSit = OnAgentRequestSit;
5192 if (handlerAgentRequestSit != null)
5193 handlerAgentRequestSit(this, agentRequestSit.AgentData.AgentID,
5194 agentRequestSit.TargetObject.TargetID, agentRequestSit.TargetObject.Offset);
5195 }
5196 return true;
5197 }
5198
5199 private bool HandleAgentSit(IClientAPI sender, Packet Pack)
5200 {
5201 if (OnAgentSit != null)
5202 {
5203 AgentSitPacket agentSit = (AgentSitPacket)Pack;
5204
5205 #region Packet Session and User Check
5206 if (m_checkPackets)
5207 {
5208 if (agentSit.AgentData.SessionID != SessionId ||
5209 agentSit.AgentData.AgentID != AgentId)
5210 return true;
5211 }
5212 #endregion
5213
5214 AgentSit handlerAgentSit = OnAgentSit;
5215 if (handlerAgentSit != null)
5216 {
5217 OnAgentSit(this, agentSit.AgentData.AgentID);
5218 }
5219 }
5220 return true;
5221 }
5222
5223 private bool HandleSoundTrigger(IClientAPI sender, Packet Pack)
5224 {
5225 SoundTriggerPacket soundTriggerPacket = (SoundTriggerPacket)Pack;
5226
5227 #region Packet Session and User Check
5228 if (m_checkPackets)
5229 {
5230 // UNSUPPORTED ON THIS PACKET
5231 }
5232 #endregion
5233
5234 SoundTrigger handlerSoundTrigger = OnSoundTrigger;
5235 if (handlerSoundTrigger != null)
5236 {
5237 handlerSoundTrigger(soundTriggerPacket.SoundData.SoundID, soundTriggerPacket.SoundData.OwnerID,
5238 soundTriggerPacket.SoundData.ObjectID, soundTriggerPacket.SoundData.ParentID,
5239 soundTriggerPacket.SoundData.Gain, soundTriggerPacket.SoundData.Position,
5240 soundTriggerPacket.SoundData.Handle);
5241
5242 }
5243 return true;
5244 }
5245
5246
4500 #endregion Packet Handlers 5247 #endregion Packet Handlers
4501 5248
4502 public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question) 5249 public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question)
@@ -4988,13 +5735,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4988 return; 5735 return;
4989 } 5736 }
4990 5737
4991 const bool m_checkPackets = true;
4992
4993 // Main packet processing conditional 5738 // Main packet processing conditional
4994 switch (Pack.Type) 5739 switch (Pack.Type)
4995 { 5740 {
4996 #region Scene/Avatar 5741 #region Scene/Avatar
4997 5742 #region CommentedOut
5743 /*
4998 case PacketType.AvatarPropertiesRequest: 5744 case PacketType.AvatarPropertiesRequest:
4999 AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack; 5745 AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack;
5000 5746
@@ -5656,7 +6402,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5656 6402
5657 } 6403 }
5658 break; 6404 break;
5659 6405 */
6406 #endregion
5660 case PacketType.AvatarPickerRequest: 6407 case PacketType.AvatarPickerRequest:
5661 AvatarPickerRequestPacket avRequestQuery = (AvatarPickerRequestPacket)Pack; 6408 AvatarPickerRequestPacket avRequestQuery = (AvatarPickerRequestPacket)Pack;
5662 6409
@@ -9713,7 +10460,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9713 Utils.BytesToString(avatarInterestUpdate.PropertiesData.SkillsText), 10460 Utils.BytesToString(avatarInterestUpdate.PropertiesData.SkillsText),
9714 Utils.BytesToString(avatarInterestUpdate.PropertiesData.LanguagesText)); 10461 Utils.BytesToString(avatarInterestUpdate.PropertiesData.LanguagesText));
9715 break; 10462 break;
9716 10463
9717 case PacketType.GrantUserRights: 10464 case PacketType.GrantUserRights:
9718 GrantUserRightsPacket GrantUserRights = 10465 GrantUserRightsPacket GrantUserRights =
9719 (GrantUserRightsPacket)Pack; 10466 (GrantUserRightsPacket)Pack;
@@ -9732,7 +10479,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9732 GrantUserRights.Rights[0].AgentRelated, 10479 GrantUserRights.Rights[0].AgentRelated,
9733 GrantUserRights.Rights[0].RelatedRights); 10480 GrantUserRights.Rights[0].RelatedRights);
9734 break; 10481 break;
9735 10482
9736 case PacketType.PlacesQuery: 10483 case PacketType.PlacesQuery:
9737 PlacesQueryPacket placesQueryPacket = 10484 PlacesQueryPacket placesQueryPacket =
9738 (PlacesQueryPacket)Pack; 10485 (PlacesQueryPacket)Pack;