From 4ee368785db1d278c1bd664b4fcad2dd4c192ffd Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Thu, 17 Apr 2008 15:58:50 +0000 Subject: * Acks the first UseCircuitCode packet * Implements Teleport One Agent Home --- OpenSim/Region/ClientStack/ClientView.cs | 2 +- OpenSim/Region/ClientStack/UDPServer.cs | 11 +++++++++++ OpenSim/Region/Environment/EstateManager.cs | 25 +++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index 7a3cff1..89b0400 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs @@ -324,7 +324,7 @@ namespace OpenSim.Region.ClientStack m_userEndPoint = remoteEP; m_proxyEndPoint = proxyEP; - + m_startpos = m_authenticateSessionsHandler.GetPosition(circuitCode); // While working on this, the BlockingQueue had me fooled for a bit. diff --git a/OpenSim/Region/ClientStack/UDPServer.cs b/OpenSim/Region/ClientStack/UDPServer.cs index 3d1512f..7a4cc97 100644 --- a/OpenSim/Region/ClientStack/UDPServer.cs +++ b/OpenSim/Region/ClientStack/UDPServer.cs @@ -295,6 +295,17 @@ namespace OpenSim.Region.ClientStack // new client m_log.Debug("[UDPSERVER]: Adding New Client"); AddNewClient(packet); + + UseCircuitCodePacket p = (UseCircuitCodePacket)packet; + + // Ack the first UseCircuitCode packet + PacketAckPacket ack_it = (PacketAckPacket)PacketPool.Instance.GetPacket(PacketType.PacketAck); + // TODO: don't create new blocks if recycling an old packet + ack_it.Packets = new PacketAckPacket.PacketsBlock[1]; + ack_it.Packets[0] = new PacketAckPacket.PacketsBlock(); + ack_it.Packets[0].ID = packet.Header.Sequence; + ack_it.Header.Reliable = false; + SendPacketTo(ack_it.ToBytes(),ack_it.ToBytes().Length,SocketFlags.None,p.CircuitCode.Code); } else { diff --git a/OpenSim/Region/Environment/EstateManager.cs b/OpenSim/Region/Environment/EstateManager.cs index ec556a6..ba4f0c6 100644 --- a/OpenSim/Region/Environment/EstateManager.cs +++ b/OpenSim/Region/Environment/EstateManager.cs @@ -221,10 +221,35 @@ namespace OpenSim.Region.Environment SetRegionDebug(remote_client, packet); } break; + case "teleporthomeuser": + if (m_scene.PermissionsMngr.GenericEstatePermission(remote_client.AgentId)) + { + TeleportOneUserHome(remote_client,packet); + } + break; default: m_log.Error("EstateOwnerMessage: Unknown method requested\n" + packet.ToString()); break; } + + + } + + private void TeleportOneUserHome(object remove_client,EstateOwnerMessagePacket packet) + { + LLUUID invoice = packet.MethodData.Invoice; + LLUUID SenderID = packet.AgentData.AgentID; + LLUUID Prey = LLUUID.Zero; + + Helpers.TryParse(Helpers.FieldToUTF8String(packet.ParamList[1].Parameter),out Prey); + if (Prey != LLUUID.Zero) + { + ScenePresence s = m_scene.GetScenePresence(Prey); + if (s != null) + { + m_scene.TeleportClientHome(Prey, s.ControllingClient); + } + } } private void SetRegionDebug(IClientAPI remote_client, EstateOwnerMessagePacket packet) -- cgit v1.1