⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linuxnathandler.cs

📁 破解的飞信源代码
💻 CS
字号:
namespace NCindy.Protocol.RUDP.NATTraversal
{
    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Runtime.InteropServices;

    public sealed class LinuxNATHandler : SymmetricNATHandler
    {
        public override bool CanHandleNAT(List<NATHistoryPoint> history)
        {
            bool success = false;
            this.MakeTargets(history, out success);
            return success;
        }

        private List<IPEndPoint> MakeTargets(List<NATHistoryPoint> h, out bool success)
        {
            bool flag = false;
            int port = 0;
            IPEndPoint point = null;
            List<NATHistoryPoint>.Enumerator enumerator = h.GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    NATHistoryPoint point2 = enumerator.get_Current();
                    IPEndPoint localEndPoint = point2.LocalEndPoint;
                    IPEndPoint peerViewOfLocalEndPoint = point2.PeerViewOfLocalEndPoint;
                    if ((localEndPoint != null) && (peerViewOfLocalEndPoint != null))
                    {
                        flag = localEndPoint.Port == peerViewOfLocalEndPoint.Port;
                        if (flag)
                        {
                            port = localEndPoint.Port;
                            point = peerViewOfLocalEndPoint;
                            goto Label_006A;
                        }
                    }
                }
            }
            finally
            {
                enumerator.Dispose();
            }
        Label_006A:
            if (flag)
            {
                List<NATHistoryPoint> ndps = new List<NATHistoryPoint>();
                List<NATHistoryPoint>.Enumerator enumerator2 = h.GetEnumerator();
                try
                {
                    while (enumerator2.MoveNext())
                    {
                        NATHistoryPoint point5 = enumerator2.get_Current();
                        if ((point5.PeerViewOfLocalEndPoint != null) && (point5.PeerViewOfLocalEndPoint.Port != port))
                        {
                            ndps.Add(point5);
                        }
                    }
                }
                finally
                {
                    enumerator2.Dispose();
                }
                List<IPEndPoint> list2 = base.PredictPorts(ndps);
                list2.Insert(0, point);
                success = true;
                return list2;
            }
            success = false;
            return null;
        }

        public override List<IPEndPoint> TargetEndPoints(List<NATHistoryPoint> h)
        {
            bool success = false;
            List<IPEndPoint> list = this.MakeTargets(h, out success);
            if (success)
            {
                return list;
            }
            return new List<IPEndPoint>();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -