Skip to content

Commit

Permalink
proper bypass lludp header extra bytes, even if not seen so far; a fe…
Browse files Browse the repository at this point in the history
…w changes to acks decode
  • Loading branch information
UbitUmarov committed Jan 10, 2022
1 parent fad4427 commit ceb5895
Show file tree
Hide file tree
Showing 7 changed files with 439 additions and 437 deletions.
2 changes: 1 addition & 1 deletion OpenMetaverse.Tests/PacketTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public void ToBytesMultiple()
for (int i = 0; i < splitPackets.Length; i++)
{
byte[] packetData = splitPackets[i];
int len = packetData.Length - 1;
int len = packetData.Length;
DirPlacesReplyPacket packet = (DirPlacesReplyPacket)Packet.BuildPacket(packetData, ref len, packetData);

Assert.IsTrue(packet.AgentData.AgentID == bigPacket.AgentData.AgentID);
Expand Down
2 changes: 1 addition & 1 deletion OpenMetaverse/Simulator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1052,7 +1052,7 @@ protected override void PacketReceived(UDPPacketBuffer buffer)

#region Packet Decoding

int packetEnd = buffer.DataLength - 1;
int packetEnd = buffer.DataLength;

try
{
Expand Down
830 changes: 409 additions & 421 deletions OpenMetaverse/_Packets_.cs

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions OpenMetaverseTypes/UtilsConversions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,15 @@ public static int BytesToIntBig(byte[] bytes)
bytes[3];
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static int BytesToIntBig(byte[] bytes, int pos)
{
return (bytes[pos] << 24) |
(bytes[pos + 1] << 16) |
(bytes[pos + 2] << 8) |
bytes[pos + 3];
}

/// <summary>
/// Convert the first eight bytes of the given array in little endian
/// ordering to a signed long integer
Expand Down
4 changes: 2 additions & 2 deletions Programs/GridProxy/GridProxy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1384,7 +1384,7 @@ private void ReceiveFromSim(IAsyncResult ar)

// interpret the packet according to the SL protocol
Packet packet;
int end = length - 1;
int end = length;

packet = Packet.BuildPacket(receiveBuffer, ref end, zeroBuffer);

Expand Down Expand Up @@ -1722,7 +1722,7 @@ private void ReceiveFromClient(IAsyncResult ar)
if (length != 0)
{
// interpret the packet according to the SL protocol
int end = length - 1;
int end = length;
Packet packet = OpenMetaverse.Packets.Packet.BuildPacket(receiveBuffer, ref end, zeroBuffer);

//OpenMetaverse.Logger.Log("-> " + packet.Type + " #" + packet.Header.Sequence, Helpers.LogLevel.Debug);
Expand Down
2 changes: 1 addition & 1 deletion Programs/WinGridProxy/SessionTypes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public override Session Deserialize(byte[] bytes)
byte[] packetData = map["PacketBytes"].AsBinary();
this.Length = packetData.Length;

int packetEnd = packetData.Length - 1;
int packetEnd = packetData.Length;
this.Packet = Packet.BuildPacket(packetData, ref packetEnd, null);
this.Name = this.Packet.Type.ToString();
return this;
Expand Down
27 changes: 16 additions & 11 deletions Programs/mapgenerator/mapgenerator.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace mapgenerator
{
Expand Down Expand Up @@ -1032,37 +1033,41 @@ static int Main(string[] args)
" return PacketType.Default;" + Environment.NewLine + " }" + Environment.NewLine);

// Write the Packet.BuildPacket(PacketType) function
writer.WriteLine(" public static Packet BuildPacket(PacketType type)");
writer.WriteLine(" {");
writer.WriteLine(" public static Packet BuildPacket(PacketType type)");
writer.WriteLine(" {");
writer.WriteLine(" switch(type)");
writer.WriteLine(" {");
foreach (MapPacket packet in protocol.HighMaps)
if (packet != null)
writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();");
writer.WriteLine(" case PacketType." + packet.Name + ": return new " + packet.Name + "Packet();");

foreach (MapPacket packet in protocol.MediumMaps)
if (packet != null)
writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();");
writer.WriteLine(" case PacketType." + packet.Name + ": return new " + packet.Name + "Packet();");
foreach (MapPacket packet in protocol.LowMaps)
if (packet != null)
writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();");
writer.WriteLine(" return null;" + Environment.NewLine);
writer.WriteLine(" }");
writer.WriteLine(" case PacketType." + packet.Name + ": return new " + packet.Name + "Packet();");
writer.WriteLine(" }");
writer.WriteLine(" return null;");
writer.WriteLine(" }");

// Write the Packet.BuildPacket() function
writer.WriteLine(@"
public static Packet BuildPacket(byte[] packetBuffer, ref int packetEnd, byte[] zeroBuffer)
public static Packet BuildPacket(byte[] packetBuffer, ref int packetLength, byte[] zeroBuffer)
{
byte[] bytes;
int i = 0;
Header header = Header.BuildHeader(packetBuffer, ref i, ref packetEnd);
Header header = Header.BuildHeader(packetBuffer, ref i, ref packetLength);
if (header.Zerocoded)
{
packetEnd = Helpers.ZeroDecode(packetBuffer, packetEnd + 1, zeroBuffer) - 1;
packetLength = Helpers.ZeroDecode(packetBuffer, packetLength, zeroBuffer);
bytes = zeroBuffer;
}
else
{
bytes = packetBuffer;
}
Array.Clear(bytes, packetEnd + 1, bytes.Length - packetEnd - 1);
//Array.Clear(bytes, packetEnd + 1, bytes.Length - packetEnd - 1);
switch (header.Frequency)
{
Expand Down

0 comments on commit ceb5895

Please sign in to comment.