Skip to content

Commit 7dffaf5

Browse files
committed
improve ttl hack (fix #371). Also some code clean
1 parent 0f4114f commit 7dffaf5

File tree

6 files changed

+38
-24
lines changed

6 files changed

+38
-24
lines changed

LibSample/HolePunchServerTest.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,23 +121,32 @@ public void Run()
121121
Console.WriteLine("Success C2. Connecting to C1: {0}, connection created: {1}", point, peer != null);
122122
};
123123

124-
_c1 = new NetManager(netListener);
125-
_c1.NatPunchEnabled = true;
124+
_c1 = new NetManager(netListener)
125+
{
126+
IPv6Enabled = false,
127+
NatPunchEnabled = true
128+
};
126129
_c1.NatPunchModule.Init(natPunchListener1);
127130
_c1.Start();
128131

129-
_c2 = new NetManager(netListener);
130-
_c2.NatPunchEnabled = true;
132+
_c2 = new NetManager(netListener)
133+
{
134+
IPv6Enabled = false,
135+
NatPunchEnabled = true
136+
};
131137
_c2.NatPunchModule.Init(natPunchListener2);
132138
_c2.Start();
133139

134-
_puncher = new NetManager(netListener);
140+
_puncher = new NetManager(netListener)
141+
{
142+
IPv6Enabled = false,
143+
NatPunchEnabled = true
144+
};
135145
_puncher.Start(ServerPort);
136-
_puncher.NatPunchEnabled = true;
137146
_puncher.NatPunchModule.Init(this);
138147

139-
_c1.NatPunchModule.SendNatIntroduceRequest(NetUtils.MakeEndPoint("::1", ServerPort), "token1");
140-
_c2.NatPunchModule.SendNatIntroduceRequest(NetUtils.MakeEndPoint("::1", ServerPort), "token1");
148+
_c1.NatPunchModule.SendNatIntroduceRequest("localhost", ServerPort, "token1");
149+
_c2.NatPunchModule.SendNatIntroduceRequest("localhost", ServerPort, "token1");
141150

142151
// keep going until ESCAPE is pressed
143152
Console.WriteLine("Press ESC to quit");

LibSample/SpeedBench.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ void INetEventListener.OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnec
158158
}
159159
}
160160
private const string DATA = "The quick brown fox jumps over the lazy dog";
161-
private static int MAX_LOOP_COUNT = 750;
162-
private static int UNRELIABLE_MESSAGES_PER_LOOP = 1000;
163-
private static int RELIABLE_MESSAGES_PER_LOOP = 350;
161+
private const int MAX_LOOP_COUNT = 750;
162+
private const int UNRELIABLE_MESSAGES_PER_LOOP = 1000;
163+
private const int RELIABLE_MESSAGES_PER_LOOP = 350;
164164
private static bool CLIENT_RUNNING = true;
165165

166166
public void Run()

LiteNetLib.Tests/CommunicationTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public void ConnectionFailedTest()
157157
NetManager client = ManagerStack.Client(1);
158158

159159
var result = false;
160-
DisconnectInfo disconnectInfo = default(DisconnectInfo);
160+
DisconnectInfo disconnectInfo = default;
161161

162162
ManagerStack.ClientListener(1).PeerDisconnectedEvent += (peer, info) =>
163163
{

LiteNetLib/NatPunchModule.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,17 +192,15 @@ private void HandleNatIntroduction(NetDataReader dr)
192192
writer.Put((byte)PacketProperty.NatPunchMessage);
193193
writer.Put(hostByte);
194194
writer.Put(token);
195-
if (hostByte == HostByte)
196-
{
197-
_socket.Ttl = 2;
198-
_socket.SendTo(writer.Data, 0, writer.Length, remoteExternal, ref errorCode);
199-
_socket.Ttl = NetConstants.SocketTTL;
200-
}
201-
else
202-
{
203-
_socket.SendTo(writer.Data, 0, writer.Length, remoteExternal, ref errorCode);
204-
}
205-
195+
196+
// hack for some routers
197+
_socket.Ttl = 2;
198+
_socket.SendTo(new []{(byte)PacketProperty.Empty}, 0, 1, remoteExternal, ref errorCode);
199+
200+
// actual send
201+
_socket.Ttl = NetConstants.SocketTTL;
202+
_socket.SendTo(writer.Data, 0, writer.Length, remoteExternal, ref errorCode);
203+
206204
NetDebug.Write(NetLogLevel.Trace, "[NAT] external punch sent to " + remoteExternal);
207205
}
208206

LiteNetLib/NetManager.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,10 @@ private void DataReceived(byte[] reusableBuffer, int count, IPEndPoint remoteEnd
892892
return;
893893
}
894894

895+
//empty packet
896+
if (reusableBuffer[0] == (byte) PacketProperty.Empty)
897+
return;
898+
895899
//Try read packet
896900
NetPacket packet = NetPacketPool.GetPacket(count);
897901
if (!packet.FromBytes(reusableBuffer, 0, count))

LiteNetLib/NetPacket.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ internal enum PacketProperty : byte
2323
Merged,
2424
ShutdownOk,
2525
PeerNotFound,
26-
InvalidProtocol
26+
InvalidProtocol,
27+
Empty
2728
}
2829

2930
internal sealed class NetPacket
@@ -120,6 +121,8 @@ public static int GetHeaderSize(PacketProperty property)
120121
return NetConstants.HeaderSize + 8;
121122
case PacketProperty.Pong:
122123
return NetConstants.HeaderSize + 10;
124+
case PacketProperty.Empty:
125+
return 1;
123126
default:
124127
return NetConstants.HeaderSize;
125128
}

0 commit comments

Comments
 (0)