diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 55 |
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; | |||
47 | using OpenSim.Services.Interfaces; | 47 | using OpenSim.Services.Interfaces; |
48 | using Timer = System.Timers.Timer; | 48 | using Timer = System.Timers.Timer; |
49 | using AssetLandmark = OpenSim.Framework.AssetLandmark; | 49 | using AssetLandmark = OpenSim.Framework.AssetLandmark; |
50 | using RegionFlags = OpenMetaverse.RegionFlags; | ||
50 | using Nini.Config; | 51 | using Nini.Config; |
51 | 52 | ||
52 | using System.IO; | 53 | using 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]; |