📄 publicnathandler.cs
字号:
namespace NCindy.Protocol.RUDP.NATTraversal
{
using System;
using System.Collections.Generic;
using System.Net;
public sealed class PublicNATHandler : NATHandler
{
public override bool CanHandleNAT(List<NATHistoryPoint> history)
{
int num = 0;
bool flag = false;
bool flag2 = true;
List<NATHistoryPoint>.Enumerator enumerator = history.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
NATHistoryPoint point = enumerator.get_Current();
int port = point.LocalEndPoint.Port;
if (!flag)
{
num = port;
flag = true;
}
else
{
flag2 = flag2 && (port == num);
}
IPEndPoint peerViewOfLocalEndPoint = point.PeerViewOfLocalEndPoint;
if (peerViewOfLocalEndPoint != null)
{
flag2 = flag2 && (peerViewOfLocalEndPoint.Port == num);
}
if (!flag2)
{
return flag2;
}
}
}
finally
{
enumerator.Dispose();
}
return flag2;
}
public override List<IPEndPoint> TargetEndPoints(List<NATHistoryPoint> history)
{
List<IPEndPoint> list = new List<IPEndPoint>();
IPEndPoint localEndPoint = null;
List<NATHistoryPoint>.Enumerator enumerator = history.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
NATHistoryPoint point2 = enumerator.get_Current();
if (localEndPoint == null)
{
localEndPoint = point2.LocalEndPoint;
}
IPEndPoint peerViewOfLocalEndPoint = point2.PeerViewOfLocalEndPoint;
if (peerViewOfLocalEndPoint != null)
{
list.Add(peerViewOfLocalEndPoint);
goto Label_0050;
}
}
}
finally
{
enumerator.Dispose();
}
Label_0050:
if ((list.get_Count() == 0) && (localEndPoint != null))
{
list.Add(localEndPoint);
}
return list;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -