aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs379
1 files changed, 373 insertions, 6 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index c515ded..c914d81 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -4283,6 +4283,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4283 AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest); 4283 AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest);
4284 AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer); 4284 AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4285 AddLocalPacketHandler(PacketType.AvatarPropertiesUpdate, HandlerAvatarPropertiesUpdate); 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.ChatFromViewer, HandleChatFromViewer);
4299 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4300 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4286 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer); 4301 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4287 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer); 4302 //AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
4288 } 4303 }
@@ -4592,6 +4607,356 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4592 return true; 4607 return true;
4593 } 4608 }
4594 4609
4610 private bool HandlerScriptDialogReply(IClientAPI sender, Packet Pack)
4611 {
4612 ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack;
4613
4614 #region Packet Session and User Check
4615 if (m_checkPackets)
4616 {
4617 if (rdialog.AgentData.SessionID != SessionId ||
4618 rdialog.AgentData.AgentID != AgentId)
4619 return true;
4620 }
4621 #endregion
4622
4623 int ch = rdialog.Data.ChatChannel;
4624 byte[] msg = rdialog.Data.ButtonLabel;
4625 if (OnChatFromClient != null)
4626 {
4627 OSChatMessage args = new OSChatMessage();
4628 args.Channel = ch;
4629 args.From = String.Empty;
4630 args.Message = Utils.BytesToString(msg);
4631 args.Type = ChatTypeEnum.Shout;
4632 args.Position = new Vector3();
4633 args.Scene = Scene;
4634 args.Sender = this;
4635 ChatMessage handlerChatFromClient2 = OnChatFromClient;
4636 if (handlerChatFromClient2 != null)
4637 handlerChatFromClient2(this, args);
4638 }
4639
4640 return true;
4641 }
4642
4643 private bool HandlerImprovedInstantMessage(IClientAPI sender, Packet Pack)
4644 {
4645 ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack;
4646
4647 #region Packet Session and User Check
4648 if (m_checkPackets)
4649 {
4650 if (msgpack.AgentData.SessionID != SessionId ||
4651 msgpack.AgentData.AgentID != AgentId)
4652 return true;
4653 }
4654 #endregion
4655
4656 string IMfromName = Util.FieldToString(msgpack.MessageBlock.FromAgentName);
4657 string IMmessage = Utils.BytesToString(msgpack.MessageBlock.Message);
4658 ImprovedInstantMessage handlerInstantMessage = OnInstantMessage;
4659
4660 if (handlerInstantMessage != null)
4661 {
4662 GridInstantMessage im = new GridInstantMessage(Scene,
4663 msgpack.AgentData.AgentID,
4664 IMfromName,
4665 msgpack.MessageBlock.ToAgentID,
4666 msgpack.MessageBlock.Dialog,
4667 msgpack.MessageBlock.FromGroup,
4668 IMmessage,
4669 msgpack.MessageBlock.ID,
4670 msgpack.MessageBlock.Offline != 0 ? true : false,
4671 msgpack.MessageBlock.Position,
4672 msgpack.MessageBlock.BinaryBucket);
4673
4674 handlerInstantMessage(this, im);
4675 }
4676 return true;
4677
4678 }
4679
4680 private bool HandlerAcceptFriendship(IClientAPI sender, Packet Pack)
4681 {
4682 AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack;
4683
4684 #region Packet Session and User Check
4685 if (m_checkPackets)
4686 {
4687 if (afriendpack.AgentData.SessionID != SessionId ||
4688 afriendpack.AgentData.AgentID != AgentId)
4689 return true;
4690 }
4691 #endregion
4692
4693 // My guess is this is the folder to stick the calling card into
4694 List<UUID> callingCardFolders = new List<UUID>();
4695
4696 UUID agentID = afriendpack.AgentData.AgentID;
4697 UUID transactionID = afriendpack.TransactionBlock.TransactionID;
4698
4699 for (int fi = 0; fi < afriendpack.FolderData.Length; fi++)
4700 {
4701 callingCardFolders.Add(afriendpack.FolderData[fi].FolderID);
4702 }
4703
4704 FriendActionDelegate handlerApproveFriendRequest = OnApproveFriendRequest;
4705 if (handlerApproveFriendRequest != null)
4706 {
4707 handlerApproveFriendRequest(this, agentID, transactionID, callingCardFolders);
4708 }
4709 return true;
4710
4711 }
4712
4713 private bool HandlerDeclineFriendship(IClientAPI sender, Packet Pack)
4714 {
4715 DeclineFriendshipPacket dfriendpack = (DeclineFriendshipPacket)Pack;
4716
4717 #region Packet Session and User Check
4718 if (m_checkPackets)
4719 {
4720 if (dfriendpack.AgentData.SessionID != SessionId ||
4721 dfriendpack.AgentData.AgentID != AgentId)
4722 return true;
4723 }
4724 #endregion
4725
4726 if (OnDenyFriendRequest != null)
4727 {
4728 OnDenyFriendRequest(this,
4729 dfriendpack.AgentData.AgentID,
4730 dfriendpack.TransactionBlock.TransactionID,
4731 null);
4732 }
4733 return true;
4734 }
4735
4736 private bool HandlerTerminateFrendship(IClientAPI sender, Packet Pack)
4737 {
4738 TerminateFriendshipPacket tfriendpack = (TerminateFriendshipPacket)Pack;
4739
4740 #region Packet Session and User Check
4741 if (m_checkPackets)
4742 {
4743 if (tfriendpack.AgentData.SessionID != SessionId ||
4744 tfriendpack.AgentData.AgentID != AgentId)
4745 return true;
4746 }
4747 #endregion
4748
4749 UUID listOwnerAgentID = tfriendpack.AgentData.AgentID;
4750 UUID exFriendID = tfriendpack.ExBlock.OtherID;
4751
4752 FriendshipTermination handlerTerminateFriendship = OnTerminateFriendship;
4753 if (handlerTerminateFriendship != null)
4754 {
4755 handlerTerminateFriendship(this, listOwnerAgentID, exFriendID);
4756 }
4757 return true;
4758 }
4759
4760 private bool HandlerRezObject(IClientAPI sender, Packet Pack)
4761 {
4762 RezObjectPacket rezPacket = (RezObjectPacket)Pack;
4763
4764 #region Packet Session and User Check
4765 if (m_checkPackets)
4766 {
4767 if (rezPacket.AgentData.SessionID != SessionId ||
4768 rezPacket.AgentData.AgentID != AgentId)
4769 return true;
4770 }
4771 #endregion
4772
4773 RezObject handlerRezObject = OnRezObject;
4774 if (handlerRezObject != null)
4775 {
4776 handlerRezObject(this, rezPacket.InventoryData.ItemID, rezPacket.RezData.RayEnd,
4777 rezPacket.RezData.RayStart, rezPacket.RezData.RayTargetID,
4778 rezPacket.RezData.BypassRaycast, rezPacket.RezData.RayEndIsIntersection,
4779 rezPacket.RezData.RezSelected, rezPacket.RezData.RemoveItem,
4780 rezPacket.RezData.FromTaskID);
4781 }
4782 return true;
4783 }
4784
4785 private bool HandlerDeRezObject(IClientAPI sender, Packet Pack)
4786 {
4787 DeRezObjectPacket DeRezPacket = (DeRezObjectPacket)Pack;
4788
4789 #region Packet Session and User Check
4790 if (m_checkPackets)
4791 {
4792 if (DeRezPacket.AgentData.SessionID != SessionId ||
4793 DeRezPacket.AgentData.AgentID != AgentId)
4794 return true;
4795 }
4796 #endregion
4797
4798 DeRezObject handlerDeRezObject = OnDeRezObject;
4799 if (handlerDeRezObject != null)
4800 {
4801 List<uint> deRezIDs = new List<uint>();
4802
4803 foreach (DeRezObjectPacket.ObjectDataBlock data in
4804 DeRezPacket.ObjectData)
4805 {
4806 deRezIDs.Add(data.ObjectLocalID);
4807 }
4808 // It just so happens that the values on the DeRezAction enumerator match the Destination
4809 // values given by a Second Life client
4810 handlerDeRezObject(this, deRezIDs,
4811 DeRezPacket.AgentBlock.GroupID,
4812 (DeRezAction)DeRezPacket.AgentBlock.Destination,
4813 DeRezPacket.AgentBlock.DestinationID);
4814
4815 }
4816 return true;
4817 }
4818
4819 private bool HandlerModifyLand(IClientAPI sender, Packet Pack)
4820 {
4821 ModifyLandPacket modify = (ModifyLandPacket)Pack;
4822
4823 #region Packet Session and User Check
4824 if (m_checkPackets)
4825 {
4826 if (modify.AgentData.SessionID != SessionId ||
4827 modify.AgentData.AgentID != AgentId)
4828 return true;
4829 }
4830
4831 #endregion
4832 //m_log.Info("[LAND]: LAND:" + modify.ToString());
4833 if (modify.ParcelData.Length > 0)
4834 {
4835 if (OnModifyTerrain != null)
4836 {
4837 for (int i = 0; i < modify.ParcelData.Length; i++)
4838 {
4839 ModifyTerrain handlerModifyTerrain = OnModifyTerrain;
4840 if (handlerModifyTerrain != null)
4841 {
4842 handlerModifyTerrain(AgentId, modify.ModifyBlock.Height, modify.ModifyBlock.Seconds,
4843 modify.ModifyBlock.BrushSize,
4844 modify.ModifyBlock.Action, modify.ParcelData[i].North,
4845 modify.ParcelData[i].West, modify.ParcelData[i].South,
4846 modify.ParcelData[i].East, AgentId);
4847 }
4848 }
4849 }
4850 }
4851
4852 return true;
4853 }
4854
4855 private bool HandlerRegionHandshakeReply(IClientAPI sender, Packet Pack)
4856 {
4857 Action<IClientAPI> handlerRegionHandShakeReply = OnRegionHandShakeReply;
4858 if (handlerRegionHandShakeReply != null)
4859 {
4860 handlerRegionHandShakeReply(this);
4861 }
4862
4863 return true;
4864 }
4865
4866 private bool HandlerAgentWearablesRequest(IClientAPI sender, Packet Pack)
4867 {
4868 GenericCall2 handlerRequestWearables = OnRequestWearables;
4869
4870 if (handlerRequestWearables != null)
4871 {
4872 handlerRequestWearables();
4873 }
4874
4875 Action<IClientAPI> handlerRequestAvatarsData = OnRequestAvatarsData;
4876
4877 if (handlerRequestAvatarsData != null)
4878 {
4879 handlerRequestAvatarsData(this);
4880 }
4881
4882 return true;
4883 }
4884
4885 private bool HandlerAgentSetAppearance(IClientAPI sender, Packet Pack)
4886 {
4887 AgentSetAppearancePacket appear = (AgentSetAppearancePacket)Pack;
4888
4889 #region Packet Session and User Check
4890 if (m_checkPackets)
4891 {
4892 if (appear.AgentData.SessionID != SessionId ||
4893 appear.AgentData.AgentID != AgentId)
4894 return true;
4895 }
4896 #endregion
4897
4898 SetAppearance handlerSetAppearance = OnSetAppearance;
4899 if (handlerSetAppearance != null)
4900 {
4901 // Temporarily protect ourselves from the mantis #951 failure.
4902 // However, we could do this for several other handlers where a failure isn't terminal
4903 // for the client session anyway, in order to protect ourselves against bad code in plugins
4904 try
4905 {
4906 byte[] visualparams = new byte[appear.VisualParam.Length];
4907 for (int i = 0; i < appear.VisualParam.Length; i++)
4908 visualparams[i] = appear.VisualParam[i].ParamValue;
4909
4910 Primitive.TextureEntry te = null;
4911 if (appear.ObjectData.TextureEntry.Length > 1)
4912 te = new Primitive.TextureEntry(appear.ObjectData.TextureEntry, 0, appear.ObjectData.TextureEntry.Length);
4913
4914 handlerSetAppearance(te, visualparams);
4915 }
4916 catch (Exception e)
4917 {
4918 m_log.ErrorFormat(
4919 "[CLIENT VIEW]: AgentSetApperance packet handler threw an exception, {0}",
4920 e);
4921 }
4922 }
4923
4924 return true;
4925 }
4926
4927 private bool HandlerAgentIsNowWearing(IClientAPI sender, Packet Pack)
4928 {
4929 if (OnAvatarNowWearing != null)
4930 {
4931 AgentIsNowWearingPacket nowWearing = (AgentIsNowWearingPacket)Pack;
4932
4933 #region Packet Session and User Check
4934 if (m_checkPackets)
4935 {
4936 if (nowWearing.AgentData.SessionID != SessionId ||
4937 nowWearing.AgentData.AgentID != AgentId)
4938 return true;
4939 }
4940 #endregion
4941
4942 AvatarWearingArgs wearingArgs = new AvatarWearingArgs();
4943 for (int i = 0; i < nowWearing.WearableData.Length; i++)
4944 {
4945 AvatarWearingArgs.Wearable wearable =
4946 new AvatarWearingArgs.Wearable(nowWearing.WearableData[i].ItemID,
4947 nowWearing.WearableData[i].WearableType);
4948 wearingArgs.NowWearing.Add(wearable);
4949 }
4950
4951 AvatarNowWearing handlerAvatarNowWearing = OnAvatarNowWearing;
4952 if (handlerAvatarNowWearing != null)
4953 {
4954 handlerAvatarNowWearing(this, wearingArgs);
4955 }
4956 }
4957 return true;
4958 }
4959
4595 #endregion Packet Handlers 4960 #endregion Packet Handlers
4596 4961
4597 public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question) 4962 public void SendScriptQuestion(UUID taskID, string taskName, string ownerName, UUID itemID, int question)
@@ -5089,6 +5454,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5089 switch (Pack.Type) 5454 switch (Pack.Type)
5090 { 5455 {
5091 #region Scene/Avatar 5456 #region Scene/Avatar
5457 #region CommentedOut
5092 /* 5458 /*
5093 case PacketType.AvatarPropertiesRequest: 5459 case PacketType.AvatarPropertiesRequest:
5094 AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack; 5460 AvatarPropertiesRequestPacket avatarProperties = (AvatarPropertiesRequestPacket)Pack;
@@ -5176,7 +5542,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5176 handlerUpdateAvatarProperties(this, UserProfile); 5542 handlerUpdateAvatarProperties(this, UserProfile);
5177 } 5543 }
5178 break; 5544 break;
5179 */ 5545
5180 case PacketType.ScriptDialogReply: 5546 case PacketType.ScriptDialogReply:
5181 ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack; 5547 ScriptDialogReplyPacket rdialog = (ScriptDialogReplyPacket)Pack;
5182 5548
@@ -5207,7 +5573,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5207 } 5573 }
5208 5574
5209 break; 5575 break;
5210 5576
5211 case PacketType.ImprovedInstantMessage: 5577 case PacketType.ImprovedInstantMessage:
5212 ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack; 5578 ImprovedInstantMessagePacket msgpack = (ImprovedInstantMessagePacket)Pack;
5213 5579
@@ -5241,7 +5607,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5241 handlerInstantMessage(this, im); 5607 handlerInstantMessage(this, im);
5242 } 5608 }
5243 break; 5609 break;
5244 5610
5245 case PacketType.AcceptFriendship: 5611 case PacketType.AcceptFriendship:
5246 AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack; 5612 AcceptFriendshipPacket afriendpack = (AcceptFriendshipPacket)Pack;
5247 5613
@@ -5314,7 +5680,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5314 handlerTerminateFriendship(this, listOwnerAgentID, exFriendID); 5680 handlerTerminateFriendship(this, listOwnerAgentID, exFriendID);
5315 } 5681 }
5316 break; 5682 break;
5317 5683
5318 case PacketType.RezObject: 5684 case PacketType.RezObject:
5319 RezObjectPacket rezPacket = (RezObjectPacket)Pack; 5685 RezObjectPacket rezPacket = (RezObjectPacket)Pack;
5320 5686
@@ -5369,7 +5735,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5369 5735
5370 } 5736 }
5371 break; 5737 break;
5372 5738
5373 case PacketType.ModifyLand: 5739 case PacketType.ModifyLand:
5374 ModifyLandPacket modify = (ModifyLandPacket)Pack; 5740 ModifyLandPacket modify = (ModifyLandPacket)Pack;
5375 5741
@@ -5501,7 +5867,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5501 } 5867 }
5502 } 5868 }
5503 break; 5869 break;
5504 5870*/
5871 #endregion
5505 case PacketType.RezSingleAttachmentFromInv: 5872 case PacketType.RezSingleAttachmentFromInv:
5506 RezSingleAttachmentFromInv handlerRezSingleAttachment = OnRezSingleAttachmentFromInv; 5873 RezSingleAttachmentFromInv handlerRezSingleAttachment = OnRezSingleAttachmentFromInv;
5507 if (handlerRezSingleAttachment != null) 5874 if (handlerRezSingleAttachment != null)