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.cs55
1 files changed, 38 insertions, 17 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index ee28914..7686b94 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -47,6 +47,7 @@ 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;
50using Nini.Config; 51using Nini.Config;
51 52
52using System.IO; 53using System.IO;
@@ -509,19 +510,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
509 /// </summary> 510 /// </summary>
510 public void Close() 511 public void Close()
511 { 512 {
512 Close(true); 513 Close(true, false);
513 } 514 }
514 515
515 /// <summary> 516 public void Close(bool sendStop, bool force)
516 /// Shut down the client view
517 /// </summary>
518 public void Close(bool sendStop)
519 { 517 {
520 // We lock here to prevent race conditions between two threads calling close simultaneously (e.g. 518 // We lock here to prevent race conditions between two threads calling close simultaneously (e.g.
521 // a simultaneous relog just as a client is being closed out due to no packet ack from the old connection. 519 // a simultaneous relog just as a client is being closed out due to no packet ack from the old connection.
522 lock (CloseSyncLock) 520 lock (CloseSyncLock)
523 { 521 {
524 if (!IsActive) 522 // We still perform a force close inside the sync lock since this is intended to attempt close where
523 // there is some unidentified connection problem, not where we have issues due to deadlock
524 if (!IsActive && !force)
525 return; 525 return;
526 526
527 IsActive = false; 527 IsActive = false;
@@ -3984,7 +3984,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3984 { 3984 {
3985 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseAgentUpdateBlocks.Value; 3985 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseAgentUpdateBlocks.Value;
3986 3986
3987 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); 3987 ImprovedTerseObjectUpdatePacket packet
3988 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate);
3988 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; 3989 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
3989 packet.RegionData.TimeDilation = timeDilation; 3990 packet.RegionData.TimeDilation = timeDilation;
3990 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count]; 3991 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count];
@@ -4029,7 +4030,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4029 { 4030 {
4030 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseUpdateBlocks.Value; 4031 List<ImprovedTerseObjectUpdatePacket.ObjectDataBlock> blocks = terseUpdateBlocks.Value;
4031 4032
4032 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); 4033 ImprovedTerseObjectUpdatePacket packet
4034 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
4035 PacketType.ImprovedTerseObjectUpdate);
4033 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; 4036 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
4034 packet.RegionData.TimeDilation = timeDilation; 4037 packet.RegionData.TimeDilation = timeDilation;
4035 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count]; 4038 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[blocks.Count];
@@ -4037,7 +4040,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4037 for (int i = 0; i < blocks.Count; i++) 4040 for (int i = 0; i < blocks.Count; i++)
4038 packet.ObjectData[i] = blocks[i]; 4041 packet.ObjectData[i] = blocks[i];
4039 4042
4040 OutPacket(packet, ThrottleOutPacketType.Task, true); 4043 OutPacket(packet, ThrottleOutPacketType.Task, true, delegate(OutgoingPacket oPacket) { ResendPrimUpdates(terseUpdates.Value, oPacket); });
4041 } 4044 }
4042 4045
4043 #endregion Packet Sending 4046 #endregion Packet Sending
@@ -4534,7 +4537,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4534 { 4537 {
4535 returnblock[j] = new EstateOwnerMessagePacket.ParamListBlock(); 4538 returnblock[j] = new EstateOwnerMessagePacket.ParamListBlock();
4536 } 4539 }
4537 j = 0; 4540 j = 0;
4538 4541
4539 returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++; 4542 returnblock[j].Parameter = Utils.StringToBytes(estateID.ToString()); j++;
4540 returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++; 4543 returnblock[j].Parameter = Utils.StringToBytes(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++;
@@ -5038,7 +5041,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5038 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Y, -64.0f, 64.0f), data, pos); pos += 2; 5041 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Y, -64.0f, 64.0f), data, pos); pos += 2;
5039 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2; 5042 Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2;
5040 5043
5041 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); 5044 ImprovedTerseObjectUpdatePacket.ObjectDataBlock block
5045 = PacketPool.Instance.GetDataBlock<ImprovedTerseObjectUpdatePacket.ObjectDataBlock>();
5046
5042 block.Data = data; 5047 block.Data = data;
5043 5048
5044 if (textureEntry != null && textureEntry.Length > 0) 5049 if (textureEntry != null && textureEntry.Length > 0)
@@ -5963,7 +5968,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5963 msgpack.MessageBlock.ID, 5968 msgpack.MessageBlock.ID,
5964 msgpack.MessageBlock.Offline != 0 ? true : false, 5969 msgpack.MessageBlock.Offline != 0 ? true : false,
5965 msgpack.MessageBlock.Position, 5970 msgpack.MessageBlock.Position,
5966 msgpack.MessageBlock.BinaryBucket); 5971 msgpack.MessageBlock.BinaryBucket,
5972 true);
5967 5973
5968 handlerInstantMessage(this, im); 5974 handlerInstantMessage(this, im);
5969 } 5975 }
@@ -9245,7 +9251,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9245 } 9251 }
9246 #endregion 9252 #endregion
9247 9253
9248 switch (Utils.BytesToString(messagePacket.MethodData.Method)) 9254 string method = Utils.BytesToString(messagePacket.MethodData.Method);
9255
9256 switch (method)
9249 { 9257 {
9250 case "getinfo": 9258 case "getinfo":
9251 if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false)) 9259 if (((Scene)m_scene).Permissions.CanIssueEstateCommand(AgentId, false))
@@ -9561,7 +9569,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
9561 return true; 9569 return true;
9562 9570
9563 default: 9571 default:
9564 m_log.Error("EstateOwnerMessage: Unknown method requested\n" + messagePacket); 9572 m_log.WarnFormat(
9573 "[LLCLIENTVIEW]: EstateOwnerMessage: Unknown method {0} requested for {1} in {2}",
9574 method, Name, Scene.Name);
9575
9576 for (int i = 0; i < messagePacket.ParamList.Length; i++)
9577 {
9578 EstateOwnerMessagePacket.ParamListBlock block = messagePacket.ParamList[i];
9579 string data = (string)Utils.BytesToString(block.Parameter);
9580 m_log.DebugFormat("[LLCLIENTVIEW]: Param {0}={1}", i, data);
9581 }
9582
9565 return true; 9583 return true;
9566 } 9584 }
9567 9585
@@ -11949,7 +11967,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11949 logPacket = false; 11967 logPacket = false;
11950 11968
11951 if (DebugPacketLevel <= 50 11969 if (DebugPacketLevel <= 50
11952 & (packet.Type == PacketType.ImprovedTerseObjectUpdate || packet.Type == PacketType.ObjectUpdate)) 11970 && (packet.Type == PacketType.ImprovedTerseObjectUpdate || packet.Type == PacketType.ObjectUpdate))
11953 logPacket = false; 11971 logPacket = false;
11954 11972
11955 if (DebugPacketLevel <= 25 && packet.Type == PacketType.ObjectPropertiesFamily) 11973 if (DebugPacketLevel <= 25 && packet.Type == PacketType.ObjectPropertiesFamily)
@@ -12193,7 +12211,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12193 { 12211 {
12194 Kick(reason); 12212 Kick(reason);
12195 Thread.Sleep(1000); 12213 Thread.Sleep(1000);
12196 Close(); 12214 Disconnect();
12197 } 12215 }
12198 12216
12199 public void Disconnect() 12217 public void Disconnect()
@@ -12481,7 +12499,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12481 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f); 12499 ushort timeDilation = Utils.FloatToUInt16(TIME_DILATION, 0.0f, 1.0f);
12482 12500
12483 12501
12484 ImprovedTerseObjectUpdatePacket packet = new ImprovedTerseObjectUpdatePacket(); 12502 ImprovedTerseObjectUpdatePacket packet
12503 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
12504 PacketType.ImprovedTerseObjectUpdate);
12505
12485 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; 12506 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
12486 packet.RegionData.TimeDilation = timeDilation; 12507 packet.RegionData.TimeDilation = timeDilation;
12487 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; 12508 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];