diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 0369369..7cd324c 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -140,6 +140,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
140 | protected int m_primTerseUpdateRate = 10; | 140 | protected int m_primTerseUpdateRate = 10; |
141 | protected int m_primFullUpdateRate = 14; | 141 | protected int m_primFullUpdateRate = 14; |
142 | 142 | ||
143 | protected int m_packetMTU = 1400; | ||
144 | |||
143 | // LLClientView Only | 145 | // LLClientView Only |
144 | public delegate void BinaryGenericMessage(Object sender, string method, byte[][] args); | 146 | public delegate void BinaryGenericMessage(Object sender, string method, byte[][] args); |
145 | 147 | ||
@@ -537,6 +539,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
537 | m_primFullUpdateRate = clientConfig.GetInt("FullUpdateRate", | 539 | m_primFullUpdateRate = clientConfig.GetInt("FullUpdateRate", |
538 | m_primFullUpdateRate); | 540 | m_primFullUpdateRate); |
539 | 541 | ||
542 | m_packetMTU = clientConfig.GetInt("PacketMTU", 1400); | ||
540 | } | 543 | } |
541 | } | 544 | } |
542 | 545 | ||
@@ -3013,9 +3016,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3013 | outPacket.RegionData.TimeDilation = | 3016 | outPacket.RegionData.TimeDilation = |
3014 | (ushort)(Scene.TimeDilation * ushort.MaxValue); | 3017 | (ushort)(Scene.TimeDilation * ushort.MaxValue); |
3015 | 3018 | ||
3016 | int count = m_primFullUpdates.Count; | 3019 | int max = m_primFullUpdates.Count; |
3017 | if (count > m_primFullUpdatesPerPacket) | 3020 | if (max > m_primFullUpdatesPerPacket) |
3018 | count = m_primFullUpdatesPerPacket; | 3021 | max = m_primFullUpdatesPerPacket; |
3022 | |||
3023 | int count = 0; | ||
3024 | int size = 0; | ||
3025 | |||
3026 | byte[] zerobuffer = new byte[1024]; | ||
3027 | byte[] blockbuffer = new byte[1024]; | ||
3028 | |||
3029 | for (count = 0 ; count < max ; count++) | ||
3030 | { | ||
3031 | int length = 0; | ||
3032 | m_primFullUpdates[count].ToBytes(blockbuffer, ref length); | ||
3033 | length = Helpers.ZeroEncode(blockbuffer, length, zerobuffer); | ||
3034 | if (size + length > m_packetMTU) | ||
3035 | break; | ||
3036 | size += length; | ||
3037 | } | ||
3019 | 3038 | ||
3020 | outPacket.ObjectData = | 3039 | outPacket.ObjectData = |
3021 | new ObjectUpdatePacket.ObjectDataBlock[count]; | 3040 | new ObjectUpdatePacket.ObjectDataBlock[count]; |
@@ -3083,9 +3102,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3083 | outPacket.RegionData.TimeDilation = | 3102 | outPacket.RegionData.TimeDilation = |
3084 | (ushort)(Scene.TimeDilation * ushort.MaxValue); | 3103 | (ushort)(Scene.TimeDilation * ushort.MaxValue); |
3085 | 3104 | ||
3086 | int count = m_primTerseUpdates.Count; | 3105 | int max = m_primTerseUpdates.Count; |
3087 | if (count > m_primTerseUpdatesPerPacket) | 3106 | if (max > m_primTerseUpdatesPerPacket) |
3088 | count = m_primTerseUpdatesPerPacket; | 3107 | max = m_primTerseUpdatesPerPacket; |
3108 | |||
3109 | int count = 0; | ||
3110 | int size = 0; | ||
3111 | |||
3112 | byte[] zerobuffer = new byte[1024]; | ||
3113 | byte[] blockbuffer = new byte[1024]; | ||
3114 | |||
3115 | for (count = 0 ; count < max ; count++) | ||
3116 | { | ||
3117 | int length = 0; | ||
3118 | m_primTerseUpdates[count].ToBytes(blockbuffer, ref length); | ||
3119 | length = Helpers.ZeroEncode(blockbuffer, length, zerobuffer); | ||
3120 | if (size + length > m_packetMTU) | ||
3121 | break; | ||
3122 | size += length; | ||
3123 | } | ||
3089 | 3124 | ||
3090 | outPacket.ObjectData = | 3125 | outPacket.ObjectData = |
3091 | new ImprovedTerseObjectUpdatePacket. | 3126 | new ImprovedTerseObjectUpdatePacket. |