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; }
}
}