using linker.tunnel.wanport; using linker.tunnel.transport; using System.Net; using System.Security.Cryptography.X509Certificates; namespace linker.tunnel.adapter { public interface ITunnelAdapter { /// /// 本机局域网IP /// public IPAddress LocalIP { get; } public PortMapInfo PortMap { get; } /// /// ssl加密证书 /// public X509Certificate2 Certificate { get; } /// /// 获取外网端口协议列表 /// /// public List GetTunnelWanPortProtocols(); /// /// 保存外网端口协议列表 /// /// public void SetTunnelWanPortProtocols(List protocols, bool updateVersion); /// /// 获取打洞协议列表 /// /// public List GetTunnelTransports(); /// /// 保存打洞协议列表 /// /// public void SetTunnelTransports(List transports, bool updateVersion); /// /// 获取本地网络信息 /// /// public NetworkInfo GetLocalConfig(); /// /// 获取远端的外网信息,比如你是A,你要获取B的信息,可以在B调用 TunnelTransfer.GetWanPort() 发送回来 /// /// /// public Task GetRemoteWanPort(TunnelWanPortProtocolInfo info); /// /// 发送开始打洞 /// /// /// public Task SendConnectBegin(TunnelTransportInfo tunnelTransportInfo); /// /// 发送打洞失败 /// /// /// public Task SendConnectFail(TunnelTransportInfo tunnelTransportInfo); /// /// 发送打洞成功 /// /// /// public Task SendConnectSuccess(TunnelTransportInfo tunnelTransportInfo); } public sealed class NetworkInfo { /// /// 本机局域网IP列表 /// public IPAddress[] LocalIps { get; set; } /// /// 本机与外网的距离,通过多少网关 /// public int RouteLevel { get; set; } /// /// 本机名 /// public string MachineId { get; set; } } public sealed class PortMapInfo { public int WanPort { get; set; } public int LanPort { get; set; } } public sealed class TunnelWanPortProtocolInfo { /// /// 类别 /// public TunnelWanPortType Type { get; set; } /// /// 协议 /// public TunnelWanPortProtocolType ProtocolType { get; set; } = TunnelWanPortProtocolType.Udp; /// /// 本机名 /// public string MachineId { get; set; } } }