Patch #9160
Refactor proxy encode/decode methods out of the PacketPool into their own class.0.6.0-stable
parent
22f09fbd21
commit
eaff580abe
|
@ -48,45 +48,6 @@ namespace OpenSim.Framework
|
||||||
get { return instance; }
|
get { return instance; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EncodeProxyMessage(byte[] bytes, ref int numBytes, EndPoint trueEP)
|
|
||||||
{
|
|
||||||
if (numBytes > 4090) // max UPD size = 4096
|
|
||||||
{
|
|
||||||
throw new Exception("ERROR: No space to encode the proxy EP");
|
|
||||||
}
|
|
||||||
|
|
||||||
ushort port = (ushort) ((IPEndPoint) trueEP).Port;
|
|
||||||
bytes[numBytes++] = (byte) (port % 256);
|
|
||||||
bytes[numBytes++] = (byte) (port / 256);
|
|
||||||
|
|
||||||
foreach (byte b in ((IPEndPoint) trueEP).Address.GetAddressBytes())
|
|
||||||
{
|
|
||||||
bytes[numBytes++] = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
int x = numBytes;
|
|
||||||
|
|
||||||
DecodeProxyMessage(bytes, ref numBytes);
|
|
||||||
|
|
||||||
numBytes = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EndPoint DecodeProxyMessage(byte[] bytes, ref int numBytes)
|
|
||||||
{
|
|
||||||
// IPv4 Only
|
|
||||||
byte[] addr = new byte[4];
|
|
||||||
|
|
||||||
addr[3] = bytes[--numBytes];
|
|
||||||
addr[2] = bytes[--numBytes];
|
|
||||||
addr[1] = bytes[--numBytes];
|
|
||||||
addr[0] = bytes[--numBytes];
|
|
||||||
|
|
||||||
ushort port = (ushort) (bytes[--numBytes] * 256);
|
|
||||||
port += (ushort) bytes[--numBytes];
|
|
||||||
|
|
||||||
return (EndPoint) new IPEndPoint(new IPAddress(addr), (int) port);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Packet GetPacket(PacketType type)
|
public Packet GetPacket(PacketType type)
|
||||||
{
|
{
|
||||||
Packet packet;
|
Packet packet;
|
||||||
|
|
|
@ -259,7 +259,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
epProxy = epSender;
|
epProxy = epSender;
|
||||||
if (proxyPortOffset != 0)
|
if (proxyPortOffset != 0)
|
||||||
{
|
{
|
||||||
epSender = PacketPool.DecodeProxyMessage(RecvBuffer, ref numBytes);
|
epSender = ProxyCodec.DecodeProxyMessage(RecvBuffer, ref numBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
int packetEnd = numBytes - 1;
|
int packetEnd = numBytes - 1;
|
||||||
|
@ -463,7 +463,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (proxyPortOffset != 0)
|
if (proxyPortOffset != 0)
|
||||||
{
|
{
|
||||||
//MainLog.Instance.Verbose("UDPSERVER", "SendPacketTo proxy " + proxyCircuits[circuitcode].ToString() + ": client " + sendto.ToString());
|
//MainLog.Instance.Verbose("UDPSERVER", "SendPacketTo proxy " + proxyCircuits[circuitcode].ToString() + ": client " + sendto.ToString());
|
||||||
PacketPool.EncodeProxyMessage(buffer, ref size, sendto);
|
ProxyCodec.EncodeProxyMessage(buffer, ref size, sendto);
|
||||||
m_socket.SendTo(buffer, size, flags, proxyCircuits[circuitcode]);
|
m_socket.SendTo(buffer, size, flags, proxyCircuits[circuitcode]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -404,7 +404,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
client = PacketPool.DecodeProxyMessage(buffer, ref numBytes);
|
client = ProxyCodec.DecodeProxyMessage(buffer, ref numBytes);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// This message comes from a region object, forward it to the its client
|
// This message comes from a region object, forward it to the its client
|
||||||
|
@ -432,7 +432,7 @@ namespace OpenSim.ApplicationPlugins.RegionProxy
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// This message comes from a client object, forward it to the the region(s)
|
// This message comes from a client object, forward it to the the region(s)
|
||||||
PacketPool.EncodeProxyMessage(buffer, ref numBytes, senderEP);
|
ProxyCodec.EncodeProxyMessage(buffer, ref numBytes, senderEP);
|
||||||
ProxyMap.RegionData rd = proxy_map.GetRegionData(sd.clientEP);
|
ProxyMap.RegionData rd = proxy_map.GetRegionData(sd.clientEP);
|
||||||
foreach (EndPoint region in rd.regions)
|
foreach (EndPoint region in rd.regions)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue