aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs169
1 files changed, 66 insertions, 103 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index c9aa4ca..ae9ed7f 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -47,7 +47,6 @@ using OpenSim.Region.Framework.Scenes;
47using OpenSim.Services.Interfaces; 47using OpenSim.Services.Interfaces;
48using Timer = System.Timers.Timer; 48using Timer = System.Timers.Timer;
49using AssetLandmark = OpenSim.Framework.AssetLandmark; 49using AssetLandmark = OpenSim.Framework.AssetLandmark;
50using RegionFlags = OpenMetaverse.RegionFlags;
51using Nini.Config; 50using Nini.Config;
52 51
53using System.IO; 52using System.IO;
@@ -356,17 +355,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
356 private bool m_deliverPackets = true; 355 private bool m_deliverPackets = true;
357 private int m_animationSequenceNumber = 1; 356 private int m_animationSequenceNumber = 1;
358 private bool m_SendLogoutPacketWhenClosing = true; 357 private bool m_SendLogoutPacketWhenClosing = true;
359 358 private AgentUpdateArgs lastarg;
360 /// <summary>
361 /// We retain a single AgentUpdateArgs so that we can constantly reuse it rather than construct a new one for
362 /// every single incoming AgentUpdate. Every client sends 10 AgentUpdate UDP messages per second, even if it
363 /// is doing absolutely nothing.
364 /// </summary>
365 /// <remarks>
366 /// This does mean that agent updates must be processed synchronously, at least for each client, and called methods
367 /// cannot retain a reference to it outside of that method.
368 /// </remarks>
369 private AgentUpdateArgs m_lastAgentUpdateArgs;
370 359
371 protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>(); 360 protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>();
372 protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers 361 protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
@@ -521,18 +510,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
521 /// </summary> 510 /// </summary>
522 public void Close() 511 public void Close()
523 { 512 {
524 Close(true, false); 513 Close(true);
525 } 514 }
526 515
527 public void Close(bool sendStop, bool force) 516 /// <summary>
517 /// Shut down the client view
518 /// </summary>
519 public void Close(bool sendStop)
528 { 520 {
529 // We lock here to prevent race conditions between two threads calling close simultaneously (e.g. 521 // We lock here to prevent race conditions between two threads calling close simultaneously (e.g.
530 // a simultaneous relog just as a client is being closed out due to no packet ack from the old connection. 522 // a simultaneous relog just as a client is being closed out due to no packet ack from the old connection.
531 lock (CloseSyncLock) 523 lock (CloseSyncLock)
532 { 524 {
533 // We still perform a force close inside the sync lock since this is intended to attempt close where 525 if (!IsActive)
534 // there is some unidentified connection problem, not where we have issues due to deadlock
535 if (!IsActive && !force)
536 return; 526 return;
537 527
538 IsActive = false; 528 IsActive = false;
@@ -847,9 +837,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
847 OutPacket(mov, ThrottleOutPacketType.Unknown); 837 OutPacket(mov, ThrottleOutPacketType.Unknown);
848 } 838 }
849 839
850 public void SendChatMessage( 840 public void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName,
851 string message, byte type, Vector3 fromPos, string fromName, 841 UUID fromAgentID, byte source, byte audible)
852 UUID fromAgentID, UUID ownerID, byte source, byte audible)
853 { 842 {
854 ChatFromSimulatorPacket reply = (ChatFromSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.ChatFromSimulator); 843 ChatFromSimulatorPacket reply = (ChatFromSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.ChatFromSimulator);
855 reply.ChatData.Audible = audible; 844 reply.ChatData.Audible = audible;
@@ -858,7 +847,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
858 reply.ChatData.SourceType = source; 847 reply.ChatData.SourceType = source;
859 reply.ChatData.Position = fromPos; 848 reply.ChatData.Position = fromPos;
860 reply.ChatData.FromName = Util.StringToBytes256(fromName); 849 reply.ChatData.FromName = Util.StringToBytes256(fromName);
861 reply.ChatData.OwnerID = ownerID; 850 reply.ChatData.OwnerID = fromAgentID;
862 reply.ChatData.SourceID = fromAgentID; 851 reply.ChatData.SourceID = fromAgentID;
863 852
864 OutPacket(reply, ThrottleOutPacketType.Unknown); 853 OutPacket(reply, ThrottleOutPacketType.Unknown);
@@ -3996,8 +3985,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3996 { 3985 {
3997 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseAgentUpdateBlocks.Value; 3986 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseAgentUpdateBlocks.Value;
3998 3987
3999 ImprovedTerseObjectUpdatePacket packet 3988 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket();
4000 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate);
4001 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; 3989 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
4002 packet.RegionData.TimeDilation = timeDilation; 3990 packet.RegionData.TimeDilation = timeDilation;
4003 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count]; 3991 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count];
@@ -4042,9 +4030,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4042 { 4030 {
4043 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseUpdateBlocks.Value; 4031 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseUpdateBlocks.Value;
4044 4032
4045 ImprovedTerseObjectUpdatePacket packet 4033 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket();
4046 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
4047 PacketType.ImprovedTerseObjectUpdate);
4048 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; 4034 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
4049 packet.RegionData.TimeDilation = timeDilation; 4035 packet.RegionData.TimeDilation = timeDilation;
4050 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count]; 4036 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count];
@@ -4052,7 +4038,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4052 for (int i = 0; i < blocks.Count; i++) 4038 for (int i = 0; i < blocks.Count; i++)
4053 packet.ObjectData[i] = blocks[i]; 4039 packet.ObjectData[i] = blocks[i];
4054 4040
4055 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate(OutgoingPacket oPacket) { ResendPrimUpdates(terseUpdates.Value, oPacket); }); 4041 OutPacket(packet, ThrottleOutPacketType.Task, true);
4056 } 4042 }
4057 4043
4058 #endregion Packet Sending 4044 #endregion Packet Sending
@@ -4549,7 +4535,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4549 { 4535 {
4550 returnblock[j] = new EstateOwnerMessagePacket.ParamListBlock(); 4536 returnblock[j] = new EstateOwnerMessagePacket.ParamListBlock();
4551 } 4537 }
4552 j = 0; 4538 j = 0;
4553 4539
4554 returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++; 4540 returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++;
4555 returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++; 4541 returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++;
@@ -5053,9 +5039,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5053 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Y, -64.0f, 64.0f), data, pos); pos += 2; 5039 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Y, -64.0f, 64.0f), data, pos); pos += 2;
5054 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2; 5040 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2;
5055 5041
5056 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block 5042 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock();
5057 = PacketPool.Instance.GetDataBlock<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>();
5058
5059 block.Data = data; 5043 block.Data = data;
5060 5044
5061 if (textureEntry != null && textureEntry.Length > 0) 5045 if (textureEntry != null && textureEntry.Length > 0)
@@ -5305,18 +5289,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5305 protected virtual void RegisterLocalPacketHandlers() 5289 protected virtual void RegisterLocalPacketHandlers()
5306 { 5290 {
5307 AddLocalPacketHandler(PacketType.LogoutRequest, HandleLogout); 5291 AddLocalPacketHandler(PacketType.LogoutRequest, HandleLogout);
5308
5309 // If AgentUpdate is ever handled asynchronously, then we will also need to construct a new AgentUpdateArgs
5310 // for each AgentUpdate packet.
5311 AddLocalPacketHandler(PacketType.AgentUpdate, HandleAgentUpdate, false); 5292 AddLocalPacketHandler(PacketType.AgentUpdate, HandleAgentUpdate, false);
5312
5313 AddLocalPacketHandler(PacketType.ViewerEffect, HandleViewerEffect, false); 5293 AddLocalPacketHandler(PacketType.ViewerEffect, HandleViewerEffect, false);
5314 AddLocalPacketHandler(PacketType.AgentCachedTexture, HandleAgentTextureCached, false); 5294 AddLocalPacketHandler(PacketType.AgentCachedTexture, HandleAgentTextureCached, false);
5315 AddLocalPacketHandler(PacketType.MultipleObjectUpdate, HandleMultipleObjUpdate, false); 5295 AddLocalPacketHandler(PacketType.MultipleObjectUpdate, HandleMultipleObjUpdate, false);
5316 AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest, false); 5296 AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest, false);
5317 AddLocalPacketHandler(PacketType.ParcelBuy, HandleParcelBuyRequest, false); 5297 AddLocalPacketHandler(PacketType.ParcelBuy, HandleParcelBuyRequest, false);
5318 AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest); 5298 AddLocalPacketHandler(PacketType.UUIDGroupNameRequest, HandleUUIDGroupNameRequest, false);
5319 AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest); 5299 AddLocalPacketHandler(PacketType.ObjectGroup, HandleObjectGroupRequest, false);
5320 AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage); 5300 AddLocalPacketHandler(PacketType.GenericMessage, HandleGenericMessage);
5321 AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest); 5301 AddLocalPacketHandler(PacketType.AvatarPropertiesRequest, HandleAvatarPropertiesRequest);
5322 AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer); 5302 AddLocalPacketHandler(PacketType.ChatFromViewer, HandleChatFromViewer);
@@ -5538,84 +5518,81 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5538 5518
5539 #region Scene/Avatar 5519 #region Scene/Avatar
5540 5520
5541 private bool HandleAgentUpdate(IClientAPI sener, Packet packet) 5521 private bool HandleAgentUpdate(IClientAPI sener, Packet Pack)
5542 { 5522 {
5543 if (OnAgentUpdate != null) 5523 if (OnAgentUpdate != null)
5544 { 5524 {
5545 AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet; 5525 bool update = false;
5526 AgentUpdatePacket agenUpdate = (AgentUpdatePacket)Pack;
5546 5527
5547 #region Packet Session and User Check 5528 #region Packet Session and User Check
5548 if (agentUpdate.AgentData.SessionID != SessionId || agentUpdate.AgentData.AgentID != AgentId) 5529 if (agenUpdate.AgentData.SessionID != SessionId || agenUpdate.AgentData.AgentID != AgentId)
5549 {
5550 PacketPool.Instance.ReturnPacket(packet);
5551 return false; 5530 return false;
5552 }
5553 #endregion 5531 #endregion
5554 5532
5555 bool update = false; 5533 AgentUpdatePacket.AgentDataBlock x = agenUpdate.AgentData;
5556 AgentUpdatePacket.AgentDataBlock x = agentUpdate.AgentData; 5534
5535 // We can only check when we have something to check
5536 // against.
5557 5537
5558 if (m_lastAgentUpdateArgs != null) 5538 if (lastarg != null)
5559 { 5539 {
5560 // These should be ordered from most-likely to
5561 // least likely to change. I've made an initial
5562 // guess at that.
5563 update = 5540 update =
5564 ( 5541 (
5565 (x.BodyRotation != m_lastAgentUpdateArgs.BodyRotation) || 5542 (x.BodyRotation != lastarg.BodyRotation) ||
5566 (x.CameraAtAxis != m_lastAgentUpdateArgs.CameraAtAxis) || 5543 (x.CameraAtAxis != lastarg.CameraAtAxis) ||
5567 (x.CameraCenter != m_lastAgentUpdateArgs.CameraCenter) || 5544 (x.CameraCenter != lastarg.CameraCenter) ||
5568 (x.CameraLeftAxis != m_lastAgentUpdateArgs.CameraLeftAxis) || 5545 (x.CameraLeftAxis != lastarg.CameraLeftAxis) ||
5569 (x.CameraUpAxis != m_lastAgentUpdateArgs.CameraUpAxis) || 5546 (x.CameraUpAxis != lastarg.CameraUpAxis) ||
5570 (x.ControlFlags != m_lastAgentUpdateArgs.ControlFlags) || 5547 (x.ControlFlags != lastarg.ControlFlags) ||
5571 (x.ControlFlags != 0) || 5548 (x.ControlFlags != 0) ||
5572 (x.Far != m_lastAgentUpdateArgs.Far) || 5549 (x.Far != lastarg.Far) ||
5573 (x.Flags != m_lastAgentUpdateArgs.Flags) || 5550 (x.Flags != lastarg.Flags) ||
5574 (x.State != m_lastAgentUpdateArgs.State) || 5551 (x.State != lastarg.State) ||
5575 (x.HeadRotation != m_lastAgentUpdateArgs.HeadRotation) || 5552 (x.HeadRotation != lastarg.HeadRotation) ||
5576 (x.SessionID != m_lastAgentUpdateArgs.SessionID) || 5553 (x.SessionID != lastarg.SessionID) ||
5577 (x.AgentID != m_lastAgentUpdateArgs.AgentID) 5554 (x.AgentID != lastarg.AgentID)
5578 ); 5555 );
5579 } 5556 }
5580 else 5557 else
5581 { 5558 {
5582 m_lastAgentUpdateArgs = new AgentUpdateArgs();
5583 update = true; 5559 update = true;
5584 } 5560 }
5585 5561
5562 // These should be ordered from most-likely to
5563 // least likely to change. I've made an initial
5564 // guess at that.
5565
5586 if (update) 5566 if (update)
5587 { 5567 {
5588// m_log.DebugFormat("[LLCLIENTVIEW]: Triggered AgentUpdate for {0}", sener.Name); 5568// m_log.DebugFormat("[LLCLIENTVIEW]: Triggered AgentUpdate for {0}", sener.Name);
5589 5569
5590 m_lastAgentUpdateArgs.AgentID = x.AgentID; 5570 AgentUpdateArgs arg = new AgentUpdateArgs();
5591 m_lastAgentUpdateArgs.BodyRotation = x.BodyRotation; 5571 arg.AgentID = x.AgentID;
5592 m_lastAgentUpdateArgs.CameraAtAxis = x.CameraAtAxis; 5572 arg.BodyRotation = x.BodyRotation;
5593 m_lastAgentUpdateArgs.CameraCenter = x.CameraCenter; 5573 arg.CameraAtAxis = x.CameraAtAxis;
5594 m_lastAgentUpdateArgs.CameraLeftAxis = x.CameraLeftAxis; 5574 arg.CameraCenter = x.CameraCenter;
5595 m_lastAgentUpdateArgs.CameraUpAxis = x.CameraUpAxis; 5575 arg.CameraLeftAxis = x.CameraLeftAxis;
5596 m_lastAgentUpdateArgs.ControlFlags = x.ControlFlags; 5576 arg.CameraUpAxis = x.CameraUpAxis;
5597 m_lastAgentUpdateArgs.Far = x.Far; 5577 arg.ControlFlags = x.ControlFlags;
5598 m_lastAgentUpdateArgs.Flags = x.Flags; 5578 arg.Far = x.Far;
5599 m_lastAgentUpdateArgs.HeadRotation = x.HeadRotation; 5579 arg.Flags = x.Flags;
5600 m_lastAgentUpdateArgs.SessionID = x.SessionID; 5580 arg.HeadRotation = x.HeadRotation;
5601 m_lastAgentUpdateArgs.State = x.State; 5581 arg.SessionID = x.SessionID;
5602 5582 arg.State = x.State;
5603 UpdateAgent handlerAgentUpdate = OnAgentUpdate; 5583 UpdateAgent handlerAgentUpdate = OnAgentUpdate;
5604 UpdateAgent handlerPreAgentUpdate = OnPreAgentUpdate; 5584 UpdateAgent handlerPreAgentUpdate = OnPreAgentUpdate;
5605 5585 lastarg = arg; // save this set of arguments for nexttime
5606 if (handlerPreAgentUpdate != null) 5586 if (handlerPreAgentUpdate != null)
5607 OnPreAgentUpdate(this, m_lastAgentUpdateArgs); 5587 OnPreAgentUpdate(this, arg);
5608
5609 if (handlerAgentUpdate != null) 5588 if (handlerAgentUpdate != null)
5610 OnAgentUpdate(this, m_lastAgentUpdateArgs); 5589 OnAgentUpdate(this, arg);
5611 5590
5612 handlerAgentUpdate = null; 5591 handlerAgentUpdate = null;
5613 handlerPreAgentUpdate = null; 5592 handlerPreAgentUpdate = null;
5614 } 5593 }
5615 } 5594 }
5616 5595
5617 PacketPool.Instance.ReturnPacket(packet);
5618
5619 return true; 5596 return true;
5620 } 5597 }
5621 5598
@@ -5987,8 +5964,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5987 msgpack.MessageBlock.ID, 5964 msgpack.MessageBlock.ID,
5988 msgpack.MessageBlock.Offline != 0 ? true : false, 5965 msgpack.MessageBlock.Offline != 0 ? true : false,
5989 msgpack.MessageBlock.Position, 5966 msgpack.MessageBlock.Position,
5990 msgpack.MessageBlock.BinaryBucket, 5967 msgpack.MessageBlock.BinaryBucket);
5991 true);
5992 5968
5993 handlerInstantMessage(this, im); 5969 handlerInstantMessage(this, im);
5994 } 5970 }
@@ -9275,9 +9251,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9275 } 9251 }
9276 #endregion 9252 #endregion
9277 9253
9278 string method = Utils.BytesToString(messagePacket.MethodData.Method); 9254 switch (Utils.BytesToString(messagePacket.MethodData.Method))
9279
9280 switch (method)
9281 { 9255 {
9282 case "getinfo": 9256 case "getinfo":
9283 if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) 9257 if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false))
@@ -9593,17 +9567,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9593 return true; 9567 return true;
9594 9568
9595 default: 9569 default:
9596 m_log.WarnFormat( 9570 m_log.Error("EstateOwnerMessage: Unknown method requested\n" + messagePacket);
9597 "[LLCLIENTVIEW]: EstateOwnerMessage: Unknown method {0} requested for {1} in {2}",
9598 method, Name, Scene.Name);
9599
9600 for (int i = 0; i < messagePacket.ParamList.Length; i++)
9601 {
9602 EstateOwnerMessagePacket.ParamListBlock block = messagePacket.ParamList[i];
9603 string data = (string)Utils.BytesToString(block.Parameter);
9604 m_log.DebugFormat("[LLCLIENTVIEW]: Param {0}={1}", i, data);
9605 }
9606
9607 return true; 9571 return true;
9608 } 9572 }
9609 9573
@@ -11996,7 +11960,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11996 logPacket = false; 11960 logPacket = false;
11997 11961
11998 if (DebugPacketLevel <= 50 11962 if (DebugPacketLevel <= 50
11999 && (packet.Type == PacketType.ImprovedTerseObjectUpdate || packet.Type == PacketType.ObjectUpdate)) 11963 & (packet.Type == PacketType.ImprovedTerseObjectUpdate || packet.Type == PacketType.ObjectUpdate))
12000 logPacket = false; 11964 logPacket = false;
12001 11965
12002 if (DebugPacketLevel <= 25 && packet.Type == PacketType.ObjectPropertiesFamily) 11966 if (DebugPacketLevel <= 25 && packet.Type == PacketType.ObjectPropertiesFamily)
@@ -12070,6 +12034,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12070 12034
12071 if (!ProcessPacketMethod(packet)) 12035 if (!ProcessPacketMethod(packet))
12072 m_log.Warn("[CLIENT]: unhandled packet " + packet.Type); 12036 m_log.Warn("[CLIENT]: unhandled packet " + packet.Type);
12037
12038 PacketPool.Instance.ReturnPacket(packet);
12073 } 12039 }
12074 12040
12075 private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket) 12041 private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket)
@@ -12238,7 +12204,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12238 { 12204 {
12239 Kick(reason); 12205 Kick(reason);
12240 Thread.Sleep(1000); 12206 Thread.Sleep(1000);
12241 Disconnect(); 12207 Close();
12242 } 12208 }
12243 12209
12244 public void Disconnect() 12210 public void Disconnect()
@@ -12526,10 +12492,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12526 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); 12492 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f);
12527 12493
12528 12494
12529 ImprovedTerseObjectUpdatePacket packet 12495 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket();
12530 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
12531 PacketType.ImprovedTerseObjectUpdate);
12532
12533 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; 12496 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
12534 packet.RegionData.TimeDilation = timeDilation; 12497 packet.RegionData.TimeDilation = timeDilation;
12535 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 12498 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];