diff options
Diffstat (limited to '')
5 files changed, 35 insertions, 100 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 7c5aee7..3b0c775 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -1209,8 +1209,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1209 | 1209 | ||
1210 | public virtual bool CanSendLayerData() | 1210 | public virtual bool CanSendLayerData() |
1211 | { | 1211 | { |
1212 | int n = m_udpClient.GetCatBytesInSendQueue(ThrottleOutPacketType.Land); | 1212 | int n = m_udpClient.GetPacketsQueuedCount(ThrottleOutPacketType.Land); |
1213 | if ( n > 100000) | 1213 | if ( n > 256) |
1214 | return false; | 1214 | return false; |
1215 | return true; | 1215 | return true; |
1216 | } | 1216 | } |
@@ -1355,15 +1355,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1355 | { | 1355 | { |
1356 | try | 1356 | try |
1357 | { | 1357 | { |
1358 | /* test code using the terrain compressor in libOpenMetaverse | 1358 | int PatchesAssumedToFit = 3; |
1359 | int[] patchInd = new int[1]; | ||
1360 | patchInd[0] = px + (py * Constants.TerrainPatchSize); | ||
1361 | LayerDataPacket layerpack = TerrainCompressor.CreateLandPacket(terrData.GetFloatsSerialized(), patchInd); | ||
1362 | */ | ||
1363 | // Many, many patches could have been passed to us. Since the patches will be compressed | ||
1364 | // into variable sized blocks, we cannot pre-compute how many will fit into one | ||
1365 | // packet. While some fancy packing algorithm is possible, 4 seems to always fit. | ||
1366 | int PatchesAssumedToFit = 4; | ||
1367 | for (int pcnt = 0; pcnt < px.Length; pcnt += PatchesAssumedToFit) | 1359 | for (int pcnt = 0; pcnt < px.Length; pcnt += PatchesAssumedToFit) |
1368 | { | 1360 | { |
1369 | int remaining = Math.Min(px.Length - pcnt, PatchesAssumedToFit); | 1361 | int remaining = Math.Min(px.Length - pcnt, PatchesAssumedToFit); |
@@ -1377,10 +1369,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1377 | LayerDataPacket layerpack = OpenSimTerrainCompressor.CreateLandPacket(terrData, xPatches, yPatches); | 1369 | LayerDataPacket layerpack = OpenSimTerrainCompressor.CreateLandPacket(terrData, xPatches, yPatches); |
1378 | // DebugSendingPatches("SendLayerDataInternal", xPatches, yPatches); | 1370 | // DebugSendingPatches("SendLayerDataInternal", xPatches, yPatches); |
1379 | 1371 | ||
1380 | SendTheLayerPacket(layerpack); | 1372 | OutPacket(layerpack, ThrottleOutPacketType.Land); |
1381 | } | 1373 | } |
1382 | // LayerDataPacket layerpack = OpenSimTerrainCompressor.CreateLandPacket(terrData, px, py); | ||
1383 | |||
1384 | } | 1374 | } |
1385 | catch (Exception e) | 1375 | catch (Exception e) |
1386 | { | 1376 | { |
@@ -1388,11 +1378,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1388 | } | 1378 | } |
1389 | } | 1379 | } |
1390 | 1380 | ||
1391 | private void SendTheLayerPacket(LayerDataPacket layerpack) | ||
1392 | { | ||
1393 | OutPacket(layerpack, ThrottleOutPacketType.Land); | ||
1394 | } | ||
1395 | |||
1396 | /// <summary> | 1381 | /// <summary> |
1397 | /// Send the wind matrix to the client | 1382 | /// Send the wind matrix to the client |
1398 | /// </summary> | 1383 | /// </summary> |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs index 8d4117d..507c07c 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs | |||
@@ -122,11 +122,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
122 | /// <summary>Sequence numbers of packets we've received (for duplicate checking)</summary> | 122 | /// <summary>Sequence numbers of packets we've received (for duplicate checking)</summary> |
123 | public readonly IncomingPacketHistoryCollection PacketArchive = new IncomingPacketHistoryCollection(200); | 123 | public readonly IncomingPacketHistoryCollection PacketArchive = new IncomingPacketHistoryCollection(200); |
124 | 124 | ||
125 | /// <summary> | ||
126 | /// If true then we take action in response to unacked reliably sent packets such as resending the packet. | ||
127 | /// </summary> | ||
128 | public bool ProcessUnackedSends { get; set; } | ||
129 | |||
130 | /// <summary>Packets we have sent that need to be ACKed by the client</summary> | 125 | /// <summary>Packets we have sent that need to be ACKed by the client</summary> |
131 | public readonly UnackedPacketCollection NeedAcks = new UnackedPacketCollection(); | 126 | public readonly UnackedPacketCollection NeedAcks = new UnackedPacketCollection(); |
132 | 127 | ||
@@ -252,8 +247,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
252 | if (maxRTO != 0) | 247 | if (maxRTO != 0) |
253 | m_maxRTO = maxRTO; | 248 | m_maxRTO = maxRTO; |
254 | 249 | ||
255 | ProcessUnackedSends = true; | ||
256 | |||
257 | m_burstTime = rates.BrustTime; | 250 | m_burstTime = rates.BrustTime; |
258 | float m_burst = rates.ClientMaxRate * m_burstTime; | 251 | float m_burst = rates.ClientMaxRate * m_burstTime; |
259 | 252 | ||
@@ -357,8 +350,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
357 | /// <param name="throttleType"></param> | 350 | /// <param name="throttleType"></param> |
358 | public int GetPacketsQueuedCount(ThrottleOutPacketType throttleType) | 351 | public int GetPacketsQueuedCount(ThrottleOutPacketType throttleType) |
359 | { | 352 | { |
360 | if ((int)throttleType > 0) | 353 | int icat = (int)throttleType; |
361 | return m_packetOutboxes[(int)throttleType].Count; | 354 | if (icat > 0 && icat < THROTTLE_CATEGORY_COUNT) |
355 | return m_packetOutboxes[icat].Count; | ||
362 | else | 356 | else |
363 | return 0; | 357 | return 0; |
364 | } | 358 | } |
@@ -544,21 +538,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
544 | 538 | ||
545 | return data; | 539 | return data; |
546 | } | 540 | } |
547 | 541 | ||
548 | public int GetCatBytesInSendQueue(ThrottleOutPacketType cat) | ||
549 | { | ||
550 | ; | ||
551 | int icat = (int)cat; | ||
552 | if (icat > 0 && icat < THROTTLE_CATEGORY_COUNT) | ||
553 | { | ||
554 | TokenBucket bucket = m_throttleCategories[icat]; | ||
555 | return m_packetOutboxes[icat].Count; | ||
556 | } | ||
557 | else | ||
558 | return 0; | ||
559 | } | ||
560 | |||
561 | |||
562 | public int GetCatBytesCanSend(ThrottleOutPacketType cat, int timeMS) | 542 | public int GetCatBytesCanSend(ThrottleOutPacketType cat, int timeMS) |
563 | { | 543 | { |
564 | int icat = (int)cat; | 544 | int icat = (int)cat; |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index b5bdd46..8f345e7 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -991,8 +991,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
991 | bufferSize = dataLength; | 991 | bufferSize = dataLength; |
992 | buffer = new UDPPacketBuffer(udpClient.RemoteEndPoint, bufferSize); | 992 | buffer = new UDPPacketBuffer(udpClient.RemoteEndPoint, bufferSize); |
993 | 993 | ||
994 | // m_log.Error("[LLUDPSERVER]: Packet exceeded buffer size! This could be an indication of packet assembly not obeying the MTU. Type=" + | 994 | m_log.Error("[LLUDPSERVER]: Packet exceeded buffer size! This could be an indication of packet assembly not obeying the MTU. Type=" + |
995 | // type + ", DataLength=" + dataLength + ", BufferLength=" + buffer.Data.Length + ". Dropping packet"); | 995 | type + ", DataLength=" + dataLength + ", BufferLength=" + buffer.Data.Length); |
996 | Buffer.BlockCopy(data, 0, buffer.Data, 0, dataLength); | 996 | Buffer.BlockCopy(data, 0, buffer.Data, 0, dataLength); |
997 | } | 997 | } |
998 | } | 998 | } |
@@ -1200,7 +1200,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1200 | Utils.UIntToBytesBig(sequenceNumber, buffer.Data, 1); | 1200 | Utils.UIntToBytesBig(sequenceNumber, buffer.Data, 1); |
1201 | outgoingPacket.SequenceNumber = sequenceNumber; | 1201 | outgoingPacket.SequenceNumber = sequenceNumber; |
1202 | 1202 | ||
1203 | if (udpClient.ProcessUnackedSends && isReliable) | 1203 | if (isReliable) |
1204 | { | 1204 | { |
1205 | // Add this packet to the list of ACK responses we are waiting on from the server | 1205 | // Add this packet to the list of ACK responses we are waiting on from the server |
1206 | udpClient.NeedAcks.Add(outgoingPacket); | 1206 | udpClient.NeedAcks.Add(outgoingPacket); |
@@ -1418,37 +1418,30 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1418 | 1418 | ||
1419 | #region ACK Receiving | 1419 | #region ACK Receiving |
1420 | 1420 | ||
1421 | if (udpClient.ProcessUnackedSends) | 1421 | // Handle appended ACKs |
1422 | if (packet.Header.AppendedAcks && packet.Header.AckList != null) | ||
1422 | { | 1423 | { |
1423 | // Handle appended ACKs | 1424 | // m_log.DebugFormat( |
1424 | if (packet.Header.AppendedAcks && packet.Header.AckList != null) | 1425 | // "[LLUDPSERVER]: Handling {0} appended acks from {1} in {2}", |
1425 | { | 1426 | // packet.Header.AckList.Length, client.Name, m_scene.Name); |
1426 | // m_log.DebugFormat( | ||
1427 | // "[LLUDPSERVER]: Handling {0} appended acks from {1} in {2}", | ||
1428 | // packet.Header.AckList.Length, client.Name, m_scene.Name); | ||
1429 | 1427 | ||
1430 | for (int i = 0; i < packet.Header.AckList.Length; i++) | 1428 | for (int i = 0; i < packet.Header.AckList.Length; i++) |
1431 | udpClient.NeedAcks.Acknowledge(packet.Header.AckList[i], now, packet.Header.Resent); | 1429 | udpClient.NeedAcks.Acknowledge(packet.Header.AckList[i], now, packet.Header.Resent); |
1432 | } | 1430 | } |
1433 | 1431 | ||
1434 | // Handle PacketAck packets | 1432 | // Handle PacketAck packets |
1435 | if (packet.Type == PacketType.PacketAck) | 1433 | if (packet.Type == PacketType.PacketAck) |
1436 | { | 1434 | { |
1437 | PacketAckPacket ackPacket = (PacketAckPacket)packet; | 1435 | PacketAckPacket ackPacket = (PacketAckPacket)packet; |
1438 | 1436 | ||
1439 | // m_log.DebugFormat( | 1437 | // m_log.DebugFormat( |
1440 | // "[LLUDPSERVER]: Handling {0} packet acks for {1} in {2}", | 1438 | // "[LLUDPSERVER]: Handling {0} packet acks for {1} in {2}", |
1441 | // ackPacket.Packets.Length, client.Name, m_scene.Name); | 1439 | // ackPacket.Packets.Length, client.Name, m_scene.Name); |
1442 | 1440 | ||
1443 | for (int i = 0; i < ackPacket.Packets.Length; i++) | 1441 | for (int i = 0; i < ackPacket.Packets.Length; i++) |
1444 | udpClient.NeedAcks.Acknowledge(ackPacket.Packets[i].ID, now, packet.Header.Resent); | 1442 | udpClient.NeedAcks.Acknowledge(ackPacket.Packets[i].ID, now, packet.Header.Resent); |
1445 | 1443 | ||
1446 | // We don't need to do anything else with PacketAck packets | 1444 | // We don't need to do anything else with PacketAck packets |
1447 | return; | ||
1448 | } | ||
1449 | } | ||
1450 | else if (packet.Type == PacketType.PacketAck) | ||
1451 | { | ||
1452 | return; | 1445 | return; |
1453 | } | 1446 | } |
1454 | 1447 | ||
@@ -1510,7 +1503,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1510 | #endregion BinaryStats | 1503 | #endregion BinaryStats |
1511 | 1504 | ||
1512 | 1505 | ||
1513 | //Ubit AgentUpdate mess removed from here | 1506 | //AgentUpdate removed from here |
1514 | 1507 | ||
1515 | 1508 | ||
1516 | #region Ping Check Handling | 1509 | #region Ping Check Handling |
@@ -2168,7 +2161,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2168 | 2161 | ||
2169 | if (udpClient.IsConnected) | 2162 | if (udpClient.IsConnected) |
2170 | { | 2163 | { |
2171 | if (udpClient.ProcessUnackedSends && m_resendUnacked) | 2164 | if (m_resendUnacked) |
2172 | HandleUnacked(llClient); | 2165 | HandleUnacked(llClient); |
2173 | 2166 | ||
2174 | if (m_sendAcks) | 2167 | if (m_sendAcks) |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs index 3dab5d2..6e6a2d1 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs | |||
@@ -558,6 +558,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
558 | m_console.OutputFormat("{0} set to {1} in {2}", param, rawValue, m_udpServer.Scene.Name); | 558 | m_console.OutputFormat("{0} set to {1} in {2}", param, rawValue, m_udpServer.Scene.Name); |
559 | } | 559 | } |
560 | 560 | ||
561 | /* not in use, nothing to set/get from lludp | ||
561 | private void HandleClientGetCommand(string module, string[] args) | 562 | private void HandleClientGetCommand(string module, string[] args) |
562 | { | 563 | { |
563 | if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_udpServer.Scene) | 564 | if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_udpServer.Scene) |
@@ -584,11 +585,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
584 | m_console.OutputFormat( | 585 | m_console.OutputFormat( |
585 | "Client debug parameters for {0} ({1}) in {2}", | 586 | "Client debug parameters for {0} ({1}) in {2}", |
586 | sp.Name, sp.IsChildAgent ? "child" : "root", m_udpServer.Scene.Name); | 587 | sp.Name, sp.IsChildAgent ? "child" : "root", m_udpServer.Scene.Name); |
587 | |||
588 | ConsoleDisplayList cdl = new ConsoleDisplayList(); | ||
589 | cdl.AddRow("process-unacked-sends", udpClient.ProcessUnackedSends); | ||
590 | |||
591 | m_console.Output(cdl.ToString()); | ||
592 | } | 588 | } |
593 | }); | 589 | }); |
594 | } | 590 | } |
@@ -611,28 +607,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
611 | 607 | ||
612 | if (args.Length == 8) | 608 | if (args.Length == 8) |
613 | name = string.Format("{0} {1}", args[6], args[7]); | 609 | name = string.Format("{0} {1}", args[6], args[7]); |
614 | 610 | // nothing here now | |
615 | if (param == "process-unacked-sends") | ||
616 | { | ||
617 | bool newValue; | ||
618 | |||
619 | if (!ConsoleUtil.TryParseConsoleBool(MainConsole.Instance, rawValue, out newValue)) | ||
620 | return; | ||
621 | |||
622 | m_udpServer.Scene.ForEachScenePresence( | ||
623 | sp => | ||
624 | { | ||
625 | if ((name == null || sp.Name == name) && sp.ControllingClient is LLClientView) | ||
626 | { | ||
627 | LLUDPClient udpClient = ((LLClientView)sp.ControllingClient).UDPClient; | ||
628 | udpClient.ProcessUnackedSends = newValue; | ||
629 | |||
630 | m_console.OutputFormat("{0} set to {1} for {2} in {3}", param, newValue, sp.Name, m_udpServer.Scene.Name); | ||
631 | } | ||
632 | }); | ||
633 | } | ||
634 | } | 611 | } |
635 | 612 | */ | |
636 | private void HandlePacketCommand(string module, string[] args) | 613 | private void HandlePacketCommand(string module, string[] args) |
637 | { | 614 | { |
638 | if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_udpServer.Scene) | 615 | if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_udpServer.Scene) |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs b/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs index 14099fe..fd369c4 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs | |||
@@ -289,7 +289,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
289 | public int GetCatBytesCanSend(int timeMS) | 289 | public int GetCatBytesCanSend(int timeMS) |
290 | { | 290 | { |
291 | // return (int)(m_tokenCount + timeMS * m_dripRate * 1e-3); | 291 | // return (int)(m_tokenCount + timeMS * m_dripRate * 1e-3); |
292 | return (int)(timeMS * m_dripRate * 1e-3); | 292 | return (int)(timeMS * DripRate * 1e-3); |
293 | } | 293 | } |
294 | 294 | ||
295 | /// <summary> | 295 | /// <summary> |