Browse Source

⚙ Add type definitions for ss-rust and v2ray-core configs

pull/3073/head
database64128 3 years ago
parent
commit
ddf412139f
No known key found for this signature in database GPG Key ID: 1CA27546BEDB8B01
57 changed files with 1586 additions and 13 deletions
  1. +4
    -0
      Shadowsocks.Interop/Shadowsocks.Interop.csproj
  2. +107
    -6
      Shadowsocks.Interop/SsRust/Config.cs
  3. +37
    -0
      Shadowsocks.Interop/V2Ray/ApiObject.cs
  4. +41
    -7
      Shadowsocks.Interop/V2Ray/Config.cs
  5. +39
    -0
      Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs
  6. +27
    -0
      Shadowsocks.Interop/V2Ray/DnsObject.cs
  7. +31
    -0
      Shadowsocks.Interop/V2Ray/Inbound/AllocateObject.cs
  8. +28
    -0
      Shadowsocks.Interop/V2Ray/Inbound/SniffingObject.cs
  9. +54
    -0
      Shadowsocks.Interop/V2Ray/InboundObject.cs
  10. +31
    -0
      Shadowsocks.Interop/V2Ray/LogObject.cs
  11. +25
    -0
      Shadowsocks.Interop/V2Ray/Outbound/MuxObject.cs
  12. +16
    -0
      Shadowsocks.Interop/V2Ray/Outbound/ProxySettingsObject.cs
  13. +86
    -0
      Shadowsocks.Interop/V2Ray/OutboundObject.cs
  14. +24
    -0
      Shadowsocks.Interop/V2Ray/Policy/LevelPolicyObject.cs
  15. +18
    -0
      Shadowsocks.Interop/V2Ray/Policy/SystemPolicyObject.cs
  16. +26
    -0
      Shadowsocks.Interop/V2Ray/PolicyObject.cs
  17. +14
    -0
      Shadowsocks.Interop/V2Ray/Protocols/AccountObject.cs
  18. +16
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Freedom/OutboundConfigurationObject.cs
  19. +30
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Shadowsocks/InboundConfigurationObject.cs
  20. +22
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Shadowsocks/OutboundConfigurationObject.cs
  21. +43
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Shadowsocks/ServerObject.cs
  22. +27
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Socks/InboundConfigurationObject.cs
  23. +23
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Socks/OutboundConfigurationObject.cs
  24. +33
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Socks/ServerObject.cs
  25. +16
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Trojan/ClientObject.cs
  26. +18
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Trojan/FallbackObject.cs
  27. +16
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Trojan/InboundConfigurationObject.cs
  28. +22
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Trojan/OutboundConfigurationObject.cs
  29. +29
    -0
      Shadowsocks.Interop/V2Ray/Protocols/Trojan/ServerObject.cs
  30. +7
    -0
      Shadowsocks.Interop/V2Ray/Protocols/UserObject.cs
  31. +12
    -0
      Shadowsocks.Interop/V2Ray/Protocols/VMess/DetourObject.cs
  32. +18
    -0
      Shadowsocks.Interop/V2Ray/Protocols/VMess/InboundConfigurationObject.cs
  33. +22
    -0
      Shadowsocks.Interop/V2Ray/Protocols/VMess/OutboundConfigurationObject.cs
  34. +28
    -0
      Shadowsocks.Interop/V2Ray/Protocols/VMess/ServerObject.cs
  35. +26
    -0
      Shadowsocks.Interop/V2Ray/Protocols/VMess/UserObject.cs
  36. +22
    -0
      Shadowsocks.Interop/V2Ray/Reverse/BridgeObject.cs
  37. +21
    -0
      Shadowsocks.Interop/V2Ray/Reverse/PortalObject.cs
  38. +17
    -0
      Shadowsocks.Interop/V2Ray/ReverseObject.cs
  39. +24
    -0
      Shadowsocks.Interop/V2Ray/Routing/BalancerObject.cs
  40. +40
    -0
      Shadowsocks.Interop/V2Ray/Routing/RuleObject.cs
  41. +32
    -0
      Shadowsocks.Interop/V2Ray/RoutingObject.cs
  42. +6
    -0
      Shadowsocks.Interop/V2Ray/StatsObject.cs
  43. +22
    -0
      Shadowsocks.Interop/V2Ray/Transport/CertificateObject.cs
  44. +29
    -0
      Shadowsocks.Interop/V2Ray/Transport/DomainSocketObject.cs
  45. +23
    -0
      Shadowsocks.Interop/V2Ray/Transport/Header/HeaderObject.cs
  46. +47
    -0
      Shadowsocks.Interop/V2Ray/Transport/Header/Http/HttpRequestObject.cs
  47. +44
    -0
      Shadowsocks.Interop/V2Ray/Transport/Header/Http/HttpResponseObject.cs
  48. +18
    -0
      Shadowsocks.Interop/V2Ray/Transport/Header/HttpHeaderObject.cs
  49. +16
    -0
      Shadowsocks.Interop/V2Ray/Transport/HttpObject.cs
  50. +30
    -0
      Shadowsocks.Interop/V2Ray/Transport/KcpObject.cs
  51. +31
    -0
      Shadowsocks.Interop/V2Ray/Transport/QuicObject.cs
  52. +16
    -0
      Shadowsocks.Interop/V2Ray/Transport/SockoptObject.cs
  53. +30
    -0
      Shadowsocks.Interop/V2Ray/Transport/StreamSettingsObject.cs
  54. +23
    -0
      Shadowsocks.Interop/V2Ray/Transport/TcpObject.cs
  55. +26
    -0
      Shadowsocks.Interop/V2Ray/Transport/TlsObject.cs
  56. +29
    -0
      Shadowsocks.Interop/V2Ray/Transport/WebSocketObject.cs
  57. +24
    -0
      Shadowsocks.Interop/V2Ray/TransportObject.cs

+ 4
- 0
Shadowsocks.Interop/Shadowsocks.Interop.csproj View File

@@ -5,4 +5,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Shadowsocks\Shadowsocks.csproj" />
</ItemGroup>

</Project>

+ 107
- 6
Shadowsocks.Interop/SsRust/Config.cs View File

@@ -1,16 +1,117 @@
using System;
using Shadowsocks.Models;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json.Serialization;

namespace Shadowsocks.Interop.SsRust
{
public class Config
public class Config : IGroup<Server>
{
/// <inheritdoc/>
public int Version { get; set; }

/// <inheritdoc/>
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public List<Server> Servers { get; set; }

/// <summary>
/// Gets or sets the listening address.
/// </summary>
public string LocalAddress { get; set; }

/// <summary>
/// Gets or sets the listening port.
/// </summary>
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public int LocalPort { get; set; }

/// <summary>
/// Gets or sets the timeout for UDP associations in seconds.
/// Defaults to 300 seconds (5 minutes).
/// </summary>
public int UdpTimeout { get; set; }

/// <summary>
/// Gets or sets the maximum number of UDP associations.
/// Defaults to 0 (unlimited).
/// </summary>
public int UdpMaxAssociations { get; set; }

/// <summary>
/// Gets or sets the server manager address.
/// </summary>
public string ManagerAddress { get; set; }

/// <summary>
/// Gets or sets the server manager port.
/// </summary>
public int ManagerPort { get; set; }

/// <summary>
/// Gets or sets the DNS server used to resolve hostnames.
/// </summary>
public string Dns { get; set; }

/// <summary>
/// Gets or sets the mode.
/// Defaults to tcp_only.
/// Can also be tcp_and_udp or udp_only.
/// </summary>
public string Mode { get; set; }

/// <summary>
/// Gets or sets TCP_NODELAY.
/// Defaults to false.
/// </summary>
public bool NoDelay { get; set; }

/// <summary>
/// Gets or sets the soft and hard limit of file descriptors.
/// </summary>
public int Nofile { get; set; }

/// <summary>
/// Gets or sets whether IPv6 addresses take precedence over IPv4 addresses for resolved hostnames.
/// Defaults to false.
/// </summary>
public bool Ipv6First { get; set; }
public Config()
{

Version = 1;
Servers = new();
LocalAddress = "";
LocalPort = 1080;
UdpTimeout = 300;
UdpMaxAssociations = 0;
ManagerAddress = "";
ManagerPort = 0;
Dns = "";
Mode = "tcp_only";
NoDelay = false;
Nofile = 0;
Ipv6First = false;
}

/// <summary>
/// Gets the default configuration for Linux.
/// </summary>
public static Config DefaultLinux => new()
{
LocalAddress = "::1",
Mode = "tcp_and_udp",
NoDelay = true,
Nofile = 32768,
Ipv6First = true,
};

/// <summary>
/// Gets the default configuration for Windows.
/// </summary>
public static Config DefaultWindows => new()
{
LocalAddress = "::1",
Mode = "tcp_and_udp",
Ipv6First = true,
};
}
}

+ 37
- 0
Shadowsocks.Interop/V2Ray/ApiObject.cs View File

@@ -0,0 +1,37 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray
{
public class ApiObject
{
/// <summary>
/// Gets or sets the outbound tag for the API.
/// </summary>
public string Tag { get; set; }

/// <summary>
/// Gets or sets the list of API services to enable.
/// </summary>
public List<string> Services { get; set; }

public ApiObject()
{
Tag = "";
Services = new();
}

/// <summary>
/// Gets the default API object.
/// </summary>
public static ApiObject Default => new()
{
Tag = "api",
Services = new()
{
"HandlerService",
"LoggerService",
"StatsService",
},
};
}
}

+ 41
- 7
Shadowsocks.Interop/V2Ray/Config.cs View File

@@ -1,16 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json.Serialization;

namespace Shadowsocks.Interop.V2Ray
{
public class Config
{
public Config()
public LogObject Log { get; set; }
public ApiObject Api { get; set; }
public DnsObject Dns { get; set; }
public RoutingObject Routing { get; set; }
public PolicyObject Policy { get; set; }
public InboundObject Inbounds { get; set; }
public OutboundObject Outbounds { get; set; }
public TransportObject Transport { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public StatsObject? Stats { get; set; }
public ReverseObject Reverse { get; set; }
public Config(bool stats = true)
{

Log = new();
Api = new();
Dns = new();
Routing = new();
Policy = new();
Inbounds = new();
Outbounds = new();
Transport = new();
Stats = stats ? new() : null;
Reverse = new();
}

/// <summary>
/// Gets the default configuration.
/// </summary>
public static Config Default => new()
{
Log = new(),
Api = ApiObject.Default,
Dns = new(),
Routing = new(),
Policy = PolicyObject.Default,
Inbounds = new(),
Outbounds = new(),
Transport = new(),
Stats = new(),
Reverse = new(),
};
}
}

+ 39
- 0
Shadowsocks.Interop/V2Ray/Dns/ServerObject.cs View File

@@ -0,0 +1,39 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Dns
{
public class ServerObject
{
/// <summary>
/// Gets or sets the DNS server address.
/// Supports UDP and DoH.
/// </summary>
public string Address { get; set; }

/// <summary>
/// Gets or sets the DNS server port.
/// Defaults to 53.
/// </summary>
public int Port { get; set; }

/// <summary>
/// Gets or sets the list of domains
/// that prefers this DNS server.
/// </summary>
public List<string> Domains { get; set; }

/// <summary>
/// Gets or sets the ranges of IP addresses
/// this DNS server is expected to return.
/// </summary>
public List<string> ExpectIPs { get; set; }

public ServerObject()
{
Address = "";
Port = 53;
Domains = new();
ExpectIPs = new();
}
}
}

+ 27
- 0
Shadowsocks.Interop/V2Ray/DnsObject.cs View File

@@ -0,0 +1,27 @@
using Shadowsocks.Interop.V2Ray.Dns;
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray
{
public class DnsObject
{
/// <summary>
/// Gets or sets the dictionary storing hosts.
/// The key is the hostname.
/// The value can either be a hostname or an IP address.
/// </summary>
public Dictionary<string, string> Hosts { get; set; }

/// <summary>
/// Gets or sets the list of DNS servers.
/// A DNS server can either be a <see cref="ServerObject"/> or a string.
/// </summary>
public List<object> Servers { get; set; }

public DnsObject()
{
Hosts = new();
Servers = new();
}
}
}

+ 31
- 0
Shadowsocks.Interop/V2Ray/Inbound/AllocateObject.cs View File

@@ -0,0 +1,31 @@
namespace Shadowsocks.Interop.V2Ray.Inbound
{
public class AllocateObject
{
/// <summary>
/// Gets or sets the port allocation strategy.
/// Defaults to "always".
/// Available values: "always" | "random"
/// </summary>
public string Strategy { get; set; }

/// <summary>
/// Gets or sets the random port refreshing interval in minutes.
/// Defaults to 5 minutes.
/// </summary>
public int Refresh { get; set; }

/// <summary>
/// Gets or sets the number of random ports.
/// Defaults to 3.
/// </summary>
public int Concurrency { get; set; }

public AllocateObject()
{
Strategy = "always";
Refresh = 5;
Concurrency = 3;
}
}
}

+ 28
- 0
Shadowsocks.Interop/V2Ray/Inbound/SniffingObject.cs View File

@@ -0,0 +1,28 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Inbound
{
public class SniffingObject
{
/// <summary>
/// Gets or sets whether to enable sniffing.
/// Defaults to true (enabled).
/// </summary>
public bool Enabled { get; set; }

/// <summary>
/// Gets or sets the list of protocols that destination override is enabled.
/// </summary>
public List<string> DestOverride { get; set; }

public SniffingObject()
{
Enabled = true;
DestOverride = new()
{
"http",
"tls",
};
}
}
}

+ 54
- 0
Shadowsocks.Interop/V2Ray/InboundObject.cs View File

@@ -0,0 +1,54 @@
using Shadowsocks.Interop.V2Ray.Inbound;
using Shadowsocks.Interop.V2Ray.Transport;

namespace Shadowsocks.Interop.V2Ray
{
public class InboundObject
{
public string Tag { get; set; }
public string Listen { get; set; }
public object Port { get; set; }
public string Protocol { get; set; }
public object? Settings { get; set; }
public StreamSettingsObject StreamSettings { get; set; }
public SniffingObject Sniffing { get; set; }
public AllocateObject Allocate { get; set; }

public InboundObject()
{
Tag = "";
Listen = "0.0.0.0";
Port = "";
Protocol = "";
Settings = null;
StreamSettings = new();
Sniffing = new();
Allocate = new();
}

public static InboundObject DefaultLocalSocks => new()
{
Tag = "socks-in",
Listen = "127.0.0.1",
Port = 1080,
Protocol = "socks",
Settings = Protocols.Socks.InboundConfigurationObject.Default,
Sniffing = new()
{
Enabled = false,
},
};

public static InboundObject DefaultLocalHttp => new()
{
Tag = "http-in",
Listen = "127.0.0.1",
Port = 8080,
Protocol = "http",
Sniffing = new()
{
Enabled = false,
},
};
}
}

+ 31
- 0
Shadowsocks.Interop/V2Ray/LogObject.cs View File

@@ -0,0 +1,31 @@
namespace Shadowsocks.Interop.V2Ray
{
public class LogObject
{
/// <summary>
/// Gets or sets the path to the access log file.
/// Defaults to empty, which prints to stdout.
/// </summary>
public string Access { get; set; }

/// <summary>
/// Gets or sets the path to the error log file.
/// Defaults to empty, which prints to stdout.
/// </summary>
public string Error { get; set; }

/// <summary>
/// Gets or sets the log level.
/// Defaults to warning.
/// Available values: "debug" | "info" | "warning" | "error" | "none"
/// </summary>
public string Loglevel { get; set; }

public LogObject()
{
Access = "";
Error = "";
Loglevel = "warning";
}
}
}

+ 25
- 0
Shadowsocks.Interop/V2Ray/Outbound/MuxObject.cs View File

@@ -0,0 +1,25 @@
namespace Shadowsocks.Interop.V2Ray.Outbound
{
public class MuxObject
{
/// <summary>
/// Gets or sets whether to enable mux.
/// Defaults to false (disabled).
/// </summary>
public bool Enabled { get; set; }

/// <summary>
/// Gets or sets the concurrency for a single TCP connection when using mux.
/// Defaults to 8.
/// Range: [1, 1024].
/// Set to -1 to disable the mux module.
/// </summary>
public int Concurrency { get; set; }

public MuxObject()
{
Enabled = false;
Concurrency = 8;
}
}
}

+ 16
- 0
Shadowsocks.Interop/V2Ray/Outbound/ProxySettingsObject.cs View File

@@ -0,0 +1,16 @@
namespace Shadowsocks.Interop.V2Ray.Outbound
{
public class ProxySettingsObject
{
/// <summary>
/// Gets or sets the tag of the outbound
/// used as the proxy.
/// </summary>
public string Tag { get; set; }

public ProxySettingsObject()
{
Tag = "";
}
}
}

+ 86
- 0
Shadowsocks.Interop/V2Ray/OutboundObject.cs View File

@@ -0,0 +1,86 @@
using Shadowsocks.Interop.V2Ray.Outbound;
using Shadowsocks.Interop.V2Ray.Transport;
using Shadowsocks.Models;
using System.Net;

namespace Shadowsocks.Interop.V2Ray
{
public class OutboundObject
{
public string Tag { get; set; }
public string SendThrough { get; set; }
public string Protocol { get; set; }
public object? Settings { get; set; }
public StreamSettingsObject StreamSettings { get; set; }
public ProxySettingsObject ProxySettings { get; set; }
public MuxObject Mux { get; set; }

public OutboundObject()
{
Tag = "";
SendThrough = "0.0.0.0";
Protocol = "";
Settings = null;
StreamSettings = new();
ProxySettings = new();
Mux = new();
}

/// <summary>
/// Gets the <see cref="OutboundObject"/> for the SOCKS server.
/// </summary>
/// <param name="name">SOCKS server name. Used as outbound tag.</param>
/// <param name="socksEndPoint">The SOCKS server.</param>
/// <param name="username"></param>
/// <param name="password"></param>
/// <returns></returns>
public static OutboundObject GetSocks(string name, DnsEndPoint socksEndPoint, string username = "", string password = "") => new()
{
Tag = name,
Protocol = "socks",
Settings = new Protocols.Socks.OutboundConfigurationObject(socksEndPoint, username, password),
};

/// <summary>
/// Gets the <see cref="OutboundObject"/> for the Shadowsocks server.
/// Plugins are not supported. Plugin information is silently discarded.
/// </summary>
/// <param name="server"></param>
/// <returns></returns>
public static OutboundObject GetShadowsocks(IServer server) => new()
{
Tag = server.Name,
Protocol = "shadowsocks",
Settings = new Protocols.Shadowsocks.OutboundConfigurationObject(),
};

/// <summary>
/// Gets the <see cref="OutboundObject"/> for the Trojan server.
/// </summary>
/// <param name="address"></param>
/// <param name="port"></param>
/// <param name="password"></param>
/// <returns></returns>
public static OutboundObject GetTrojan(string name, string address, int port, string password) => new()
{
Tag = name,
Protocol = "trojan",
Settings = new Protocols.Trojan.OutboundConfigurationObject(address, port, password),
};

/// <summary>
/// Gets the <see cref="OutboundObject"/> for the VMess server.
/// </summary>
/// <param name="name"></param>
/// <param name="address"></param>
/// <param name="port"></param>
/// <param name="id"></param>
/// <returns></returns>
public static OutboundObject GetVMess(string name, string address, int port, string id) => new()
{
Tag = name,
Protocol = "vmess",
Settings = new Protocols.VMess.OutboundConfigurationObject(address, port, id),
};
}
}

+ 24
- 0
Shadowsocks.Interop/V2Ray/Policy/LevelPolicyObject.cs View File

@@ -0,0 +1,24 @@
namespace Shadowsocks.Interop.V2Ray.Policy
{
public class LevelPolicyObject
{
public int Handshake { get; set; }
public int ConnIdle { get; set; }
public int UplinkOnly { get; set; }
public int DownlinkOnly { get; set; }
public bool StatsUserUplink { get; set; }
public bool StatsUserDownlink { get; set; }
public int BufferSize { get; set; }

public LevelPolicyObject()
{
Handshake = 4;
ConnIdle = 300;
UplinkOnly = 2;
DownlinkOnly = 5;
StatsUserUplink = false;
StatsUserDownlink = false;
BufferSize = 512;
}
}
}

+ 18
- 0
Shadowsocks.Interop/V2Ray/Policy/SystemPolicyObject.cs View File

@@ -0,0 +1,18 @@
namespace Shadowsocks.Interop.V2Ray.Policy
{
public class SystemPolicyObject
{
public bool StatsInboundUplink { get; set; }
public bool StatsInboundDownlink { get; set; }
public bool StatsOutboundUplink { get; set; }
public bool StatsOutboundDownlink { get; set; }

public static SystemPolicyObject Default => new()
{
StatsInboundUplink = true,
StatsInboundDownlink = true,
StatsOutboundUplink = true,
StatsOutboundDownlink = true,
};
}
}

+ 26
- 0
Shadowsocks.Interop/V2Ray/PolicyObject.cs View File

@@ -0,0 +1,26 @@
using Shadowsocks.Interop.V2Ray.Policy;
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray
{
public class PolicyObject
{
public Dictionary<string, LevelPolicyObject> Levels { get; set; }
public SystemPolicyObject System { get; set; }

public PolicyObject()
{
Levels = new();
System = new();
}

/// <summary>
/// Gets the default policy object.
/// </summary>
public static PolicyObject Default => new()
{
Levels = new(),
System = SystemPolicyObject.Default,
};
}
}

+ 14
- 0
Shadowsocks.Interop/V2Ray/Protocols/AccountObject.cs View File

@@ -0,0 +1,14 @@
namespace Shadowsocks.Interop.V2Ray.Protocols
{
public class AccountObject
{
public string User { get; set; }
public string Pass { get; set; }

public AccountObject()
{
User = "";
Pass = "";
}
}
}

+ 16
- 0
Shadowsocks.Interop/V2Ray/Protocols/Freedom/OutboundConfigurationObject.cs View File

@@ -0,0 +1,16 @@
namespace Shadowsocks.Interop.V2Ray.Protocols.Freedom
{
public class OutboundConfigurationObject
{
public string DomainStrategy { get; set; }
public string Redirect { get; set; }
public int UserLevel { get; set; }

public OutboundConfigurationObject()
{
DomainStrategy = "AsIs";
Redirect = "";
UserLevel = 0;
}
}
}

+ 30
- 0
Shadowsocks.Interop/V2Ray/Protocols/Shadowsocks/InboundConfigurationObject.cs View File

@@ -0,0 +1,30 @@
using System;
using System.Text.Json.Serialization;

namespace Shadowsocks.Interop.V2Ray.Protocols.Shadowsocks
{
public class InboundConfigurationObject
{
public string Email { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Method { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Password { get; set; }

public int Level { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Network { get; set; }

public InboundConfigurationObject()
{
Email = "";
Method = "chacha20-ietf-poly1305";
Password = new Guid().ToString();
Level = 0;
Network = "tcp,udp";
}
}
}

+ 22
- 0
Shadowsocks.Interop/V2Ray/Protocols/Shadowsocks/OutboundConfigurationObject.cs View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.Shadowsocks
{
public class OutboundConfigurationObject
{
public List<ServerObject> Servers { get; set; }

public OutboundConfigurationObject()
{
Servers = new();
}

public OutboundConfigurationObject(string address, int port, string method, string password)
{
Servers = new()
{
new(address, port, method, password),
};
}
}
}

+ 43
- 0
Shadowsocks.Interop/V2Ray/Protocols/Shadowsocks/ServerObject.cs View File

@@ -0,0 +1,43 @@
using System.Text.Json.Serialization;

namespace Shadowsocks.Interop.V2Ray.Protocols.Shadowsocks
{
public class ServerObject
{
public string Email { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Address { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public int Port { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Method { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Password { get; set; }

public int Level { get; set; }

public ServerObject()
{
Email = "";
Address = "";
Port = 8388;
Method = "chacha20-ietf-poly1305";
Password = "";
Level = 0;
}

public ServerObject(string address, int port, string method, string password)
{
Email = "";
Address = address;
Port = port;
Method = method;
Password = password;
Level = 0;
}
}
}

+ 27
- 0
Shadowsocks.Interop/V2Ray/Protocols/Socks/InboundConfigurationObject.cs View File

@@ -0,0 +1,27 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.Socks
{
public class InboundConfigurationObject
{
public string Auth { get; set; }
public List<AccountObject> Accounts { get; set; }
public bool Udp { get; set; }
public string Ip { get; set; }
public int UserLevel { get; set; }

public InboundConfigurationObject()
{
Auth = "noauth";
Accounts = new();
Udp = false;
Ip = "127.0.0.1";
UserLevel = 0;
}

public static InboundConfigurationObject Default => new()
{
Udp = true,
};
}
}

+ 23
- 0
Shadowsocks.Interop/V2Ray/Protocols/Socks/OutboundConfigurationObject.cs View File

@@ -0,0 +1,23 @@
using System.Collections.Generic;
using System.Net;

namespace Shadowsocks.Interop.V2Ray.Protocols.Socks
{
public class OutboundConfigurationObject
{
public List<ServerObject> Servers { get; set; }

public OutboundConfigurationObject()
{
Servers = new();
}

public OutboundConfigurationObject(DnsEndPoint socksEndPoint, string username = "", string password = "")
{
Servers = new()
{
new(socksEndPoint, username, password),
};
}
}
}

+ 33
- 0
Shadowsocks.Interop/V2Ray/Protocols/Socks/ServerObject.cs View File

@@ -0,0 +1,33 @@
using System.Collections.Generic;
using System.Net;

namespace Shadowsocks.Interop.V2Ray.Protocols.Socks
{
public class ServerObject
{
public string Address { get; set; }
public int Port { get; set; }
public List<UserObject> Users { get; set; }

public ServerObject()
{
Address = "";
Port = 0;
Users = new();
}

public ServerObject(DnsEndPoint socksEndPoint, string username = "", string password = "")
{
Address = socksEndPoint.Host;
Port = socksEndPoint.Port;
Users = new();
var hasCredential = !string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password);
if (hasCredential)
Users.Add(new()
{
User = username,
Pass = password,
});
}
}
}

+ 16
- 0
Shadowsocks.Interop/V2Ray/Protocols/Trojan/ClientObject.cs View File

@@ -0,0 +1,16 @@
namespace Shadowsocks.Interop.V2Ray.Protocols.Trojan
{
public class ClientObject
{
public string Password { get; set; }
public string Email { get; set; }
public int Level { get; set; }

public ClientObject()
{
Password = "";
Email = "";
Level = 0;
}
}
}

+ 18
- 0
Shadowsocks.Interop/V2Ray/Protocols/Trojan/FallbackObject.cs View File

@@ -0,0 +1,18 @@
namespace Shadowsocks.Interop.V2Ray.Protocols.Trojan
{
public class FallbackObject
{
public string Alpn { get; set; }
public string Path { get; set; }
public object Dest { get; set; }
public int Xver { get; set; }

public FallbackObject()
{
Alpn = "";
Path = "";
Dest = 0;
Xver = 0;
}
}
}

+ 16
- 0
Shadowsocks.Interop/V2Ray/Protocols/Trojan/InboundConfigurationObject.cs View File

@@ -0,0 +1,16 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.Trojan
{
public class InboundConfigurationObject
{
public List<ClientObject> Clients { get; set; }
public List<FallbackObject> Fallbacks { get; set; }

public InboundConfigurationObject()
{
Clients = new();
Fallbacks = new();
}
}
}

+ 22
- 0
Shadowsocks.Interop/V2Ray/Protocols/Trojan/OutboundConfigurationObject.cs View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.Trojan
{
public class OutboundConfigurationObject
{
public List<ServerObject> Servers { get; set; }

public OutboundConfigurationObject()
{
Servers = new();
}

public OutboundConfigurationObject(string address, int port, string password)
{
Servers = new()
{
new(address, port, password),
};
}
}
}

+ 29
- 0
Shadowsocks.Interop/V2Ray/Protocols/Trojan/ServerObject.cs View File

@@ -0,0 +1,29 @@
namespace Shadowsocks.Interop.V2Ray.Protocols.Trojan
{
public class ServerObject
{
public string Address { get; set; }
public int Port { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public int Level { get; set; }

public ServerObject()
{
Address = "";
Port = 0;
Password = "";
Email = "";
Level = 0;
}

public ServerObject(string address, int port, string password)
{
Address = address;
Port = port;
Password = password;
Email = "";
Level = 0;
}
}
}

+ 7
- 0
Shadowsocks.Interop/V2Ray/Protocols/UserObject.cs View File

@@ -0,0 +1,7 @@
namespace Shadowsocks.Interop.V2Ray.Protocols
{
public class UserObject : AccountObject
{
public int Level { get; set; }
}
}

+ 12
- 0
Shadowsocks.Interop/V2Ray/Protocols/VMess/DetourObject.cs View File

@@ -0,0 +1,12 @@
namespace Shadowsocks.Interop.V2Ray.Protocols.VMess
{
public class DetourObject
{
public string To { get; set; }

public DetourObject()
{
To = "";
}
}
}

+ 18
- 0
Shadowsocks.Interop/V2Ray/Protocols/VMess/InboundConfigurationObject.cs View File

@@ -0,0 +1,18 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.VMess
{
public class InboundConfigurationObject
{
public List<UserObject> Clients { get; set; }
public UserObject Default { get; set; }
public DetourObject Detour { get; set; }

public InboundConfigurationObject()
{
Clients = new();
Default = new();
Detour = new();
}
}
}

+ 22
- 0
Shadowsocks.Interop/V2Ray/Protocols/VMess/OutboundConfigurationObject.cs View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.VMess
{
public class OutboundConfigurationObject
{
public List<ServerObject> Vnext { get; set; }

public OutboundConfigurationObject()
{
Vnext = new();
}

public OutboundConfigurationObject(string address, int port, string id)
{
Vnext = new()
{
new(address, port, id),
};
}
}
}

+ 28
- 0
Shadowsocks.Interop/V2Ray/Protocols/VMess/ServerObject.cs View File

@@ -0,0 +1,28 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Protocols.VMess
{
public class ServerObject
{
public string Address { get; set; }
public int Port { get; set; }
public List<UserObject> Users { get; set; }

public ServerObject()
{
Address = "";
Port = 0;
Users = new();
}

public ServerObject(string address, int port, string id)
{
Address = address;
Port = port;
Users = new()
{
new(id),
};
}
}
}

+ 26
- 0
Shadowsocks.Interop/V2Ray/Protocols/VMess/UserObject.cs View File

@@ -0,0 +1,26 @@
using System;

namespace Shadowsocks.Interop.V2Ray.Protocols.VMess
{
/// <summary>
/// The user object for VMess AEAD.
/// </summary>
public class UserObject
{
public string Id { get; set; }
public string Email { get; set; }
public int Level { get; set; }

public UserObject(string id = "")
{
Id = id;
Email = "";
Level = 0;
}

public static UserObject Default => new()
{
Id = new Guid().ToString(),
};
}
}

+ 22
- 0
Shadowsocks.Interop/V2Ray/Reverse/BridgeObject.cs View File

@@ -0,0 +1,22 @@
namespace Shadowsocks.Interop.V2Ray.Reverse
{
public class BridgeObject
{
/// <summary>
/// Gets or sets the inbound tag for the bridge.
/// </summary>
public string Tag { get; set; }

/// <summary>
/// Gets or sets the domain name for the bridge.
/// Can be omitted.
/// </summary>
public string Domain { get; set; }

public BridgeObject()
{
Tag = "";
Domain = "";
}
}
}

+ 21
- 0
Shadowsocks.Interop/V2Ray/Reverse/PortalObject.cs View File

@@ -0,0 +1,21 @@
namespace Shadowsocks.Interop.V2Ray.Reverse
{
public class PortalObject
{
/// <summary>
/// Gets or sets the outbound tag for the portal.
/// </summary>
public string Tag { get; set; }

/// <summary>
/// Gets or sets the domain name for the portal.
/// </summary>
public string Domain { get; set; }

public PortalObject()
{
Tag = "";
Domain = "";
}
}
}

+ 17
- 0
Shadowsocks.Interop/V2Ray/ReverseObject.cs View File

@@ -0,0 +1,17 @@
using Shadowsocks.Interop.V2Ray.Reverse;
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray
{
public class ReverseObject
{
public List<BridgeObject> Bridges { get; set; }
public List<PortalObject> Portals { get; set; }

public ReverseObject()
{
Bridges = new();
Portals = new();
}
}
}

+ 24
- 0
Shadowsocks.Interop/V2Ray/Routing/BalancerObject.cs View File

@@ -0,0 +1,24 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Routing
{
public class BalancerObject
{
/// <summary>
/// Gets or sets the outbound tag for the load balancer.
/// </summary>
public string Tag { get; set; }

/// <summary>
/// Gets or sets a list of outbound tags
/// to include in the load balancer.
/// </summary>
public List<string> Selector { get; set; }

public BalancerObject()
{
Tag = "";
Selector = new();
}
}
}

+ 40
- 0
Shadowsocks.Interop/V2Ray/Routing/RuleObject.cs View File

@@ -0,0 +1,40 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;

namespace Shadowsocks.Interop.V2Ray.Routing
{
public class RuleObject
{
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public string Type { get; set; }
public List<string> Domain { get; set; }
public List<string> Ip { get; set; }
public object Port { get; set; }
public object SourcePort { get; set; }
public string Network { get; set; }
public List<string> Source { get; set; }
public List<string> User { get; set; }
public List<string> InboundTag { get; set; }
public List<string> Protocol { get; set; }
public string Attrs { get; set; }
public string OutboundTag { get; set; }
public string BalancerTag { get; set; }

public RuleObject()
{
Type = "field";
Domain = new();
Ip = new();
Port = "";
SourcePort = "";
Network = "";
Source = new();
User = new();
InboundTag = new();
Protocol = new();
Attrs = "";
OutboundTag = "";
BalancerTag = "";
}
}
}

+ 32
- 0
Shadowsocks.Interop/V2Ray/RoutingObject.cs View File

@@ -0,0 +1,32 @@
using Shadowsocks.Interop.V2Ray.Routing;
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray
{
public class RoutingObject
{
/// <summary>
/// Gets or sets the domain strategy used for routing.
/// Default value: AsIs.
/// Available values: "AsIs" | "IPIfNonMatch" | "IPOnDemand"
/// </summary>
public string DomainStrategy { get; set; }

/// <summary>
/// Gets or sets the list of routing rules.
/// </summary>
public List<RuleObject> Rules { get; set; }

/// <summary>
/// Gets or sets the list of load balancers.
/// </summary>
public List<BalancerObject> Balancers { get; set; }

public RoutingObject()
{
DomainStrategy = "AsIs";
Rules = new();
Balancers = new();
}
}
}

+ 6
- 0
Shadowsocks.Interop/V2Ray/StatsObject.cs View File

@@ -0,0 +1,6 @@
namespace Shadowsocks.Interop.V2Ray
{
public class StatsObject
{
}
}

+ 22
- 0
Shadowsocks.Interop/V2Ray/Transport/CertificateObject.cs View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class CertificateObject
{
public string Usage { get; set; }
public string CertificateFile { get; set; }
public string KeyFile { get; set; }
public List<string> Certificate { get; set; }
public List<string> Key { get; set; }

public CertificateObject()
{
Usage = "encipherment";
CertificateFile = "";
KeyFile = "";
Certificate = new();
Key = new();
}
}
}

+ 29
- 0
Shadowsocks.Interop/V2Ray/Transport/DomainSocketObject.cs View File

@@ -0,0 +1,29 @@
namespace Shadowsocks.Interop.V2Ray.Transport
{
public class DomainSocketObject
{
/// <summary>
/// Gets or sets the path to the unix domain socket file.
/// </summary>
public string Path { get; set; }

/// <summary>
/// Gets or sets whether the domain socket is abstract.
/// Defaults to false.
/// </summary>
public bool Abstract { get; set; }

/// <summary>
/// Gets or sets whether padding is used.
/// Defaults to false.
/// </summary>
public bool Padding { get; set; }

public DomainSocketObject()
{
Path = "";
Abstract = false;
Padding = false;
}
}
}

+ 23
- 0
Shadowsocks.Interop/V2Ray/Transport/Header/HeaderObject.cs View File

@@ -0,0 +1,23 @@
namespace Shadowsocks.Interop.V2Ray.Transport.Header
{
public class HeaderObject
{
/// <summary>
/// Gets or sets the header type.
/// Defaults to none.
/// Available values:
/// none
/// srtp
/// utp
/// wechat-video
/// dtls
/// wireguard
/// </summary>
public string Type { get; set; }

public HeaderObject()
{
Type = "none";
}
}
}

+ 47
- 0
Shadowsocks.Interop/V2Ray/Transport/Header/Http/HttpRequestObject.cs View File

@@ -0,0 +1,47 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Transport.Header.Http
{
public class HttpRequestObject
{
public string Version { get; set; }
public string Method { get; set; }
public List<string> Path { get; set; }
public Dictionary<string, List<string>> Headers { get; set; }

public HttpRequestObject()
{
Version = "1.1";
Method = "GET";
Path = new()
{
"/",
};
Headers = new()
{
["Host"] = new()
{
"www.baidu.com",
"www.bing.com",
},
["User-Agent"] = new()
{
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46",
},
["Accept-Encoding"] = new()
{
"gzip, deflate",
},
["Connection"] = new()
{
"keep-alive",
},
["Pragma"] = new()
{
"no-cache",
},
};
}
}
}

+ 44
- 0
Shadowsocks.Interop/V2Ray/Transport/Header/Http/HttpResponseObject.cs View File

@@ -0,0 +1,44 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Transport.Header.Http
{
public class HttpResponseObject
{
public string Version { get; set; }
public string Status { get; set; }
public string Reason { get; set; }
public Dictionary<string, List<string>> Headers { get; set; }

public HttpResponseObject()
{
Version = "1.1";
Status = "200";
Reason = "OK";
Headers = new()
{
["Content-Type"] = new()
{
"application/octet-stream",
"video/mpeg",
},
["Transfer-Encoding"] = new()
{
"chunked",
},
["Connection"] = new()
{
"keep-alive",
},
["Pragma"] = new()
{
"no-cache",
},
["Cache-Control"] = new()
{
"private",
"no-cache",
},
};
}
}
}

+ 18
- 0
Shadowsocks.Interop/V2Ray/Transport/Header/HttpHeaderObject.cs View File

@@ -0,0 +1,18 @@
using Shadowsocks.Interop.V2Ray.Transport.Header.Http;

namespace Shadowsocks.Interop.V2Ray.Transport.Header
{
public class HttpHeaderObject : HeaderObject
{
public HttpRequestObject request { get; set; }

public HttpResponseObject response { get; set; }

public HttpHeaderObject()
{
Type = "http";
request = new();
response = new();
}
}
}

+ 16
- 0
Shadowsocks.Interop/V2Ray/Transport/HttpObject.cs View File

@@ -0,0 +1,16 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class HttpObject
{
public List<string> Host { get; set; }
public string Path { get; set; }

public HttpObject()
{
Host = new();
Path = "/";
}
}
}

+ 30
- 0
Shadowsocks.Interop/V2Ray/Transport/KcpObject.cs View File

@@ -0,0 +1,30 @@
using Shadowsocks.Interop.V2Ray.Transport.Header;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class KcpObject
{
public int Mtu { get; set; }
public int Tti { get; set; }
public int UplinkCapacity { get; set; }
public int DownlinkCapacity { get; set; }
public bool Congestion { get; set; }
public int ReadBufferSize { get; set; }
public int WriteBufferSize { get; set; }
public HeaderObject Header { get; set; }
public string Seed { get; set; }

public KcpObject()
{
Mtu = 1350;
Tti = 50;
UplinkCapacity = 5;
DownlinkCapacity = 20;
Congestion = false;
ReadBufferSize = 2;
WriteBufferSize = 2;
Header = new();
Seed = "";
}
}
}

+ 31
- 0
Shadowsocks.Interop/V2Ray/Transport/QuicObject.cs View File

@@ -0,0 +1,31 @@
using Shadowsocks.Interop.V2Ray.Transport.Header;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class QuicObject
{
/// <summary>
/// Gets or sets the encryption method.
/// Defaults to "none" (no encryption).
/// Available values: "none" | "aes-128-gcm" | "chacha20-poly1305"
/// </summary>
public string Security { get; set; }

/// <summary>
/// Gets or sets the encryption key.
/// </summary>
public string Key { get; set; }

/// <summary>
/// Gets or sets the header options.
/// </summary>
public HeaderObject Header { get; set; }

public QuicObject()
{
Security = "none";
Key = "";
Header = new();
}
}
}

+ 16
- 0
Shadowsocks.Interop/V2Ray/Transport/SockoptObject.cs View File

@@ -0,0 +1,16 @@
namespace Shadowsocks.Interop.V2Ray.Transport
{
public class SockoptObject
{
public int Mark { get; set; }
public bool TcpFastOpen { get; set; }
public string Tproxy { get; set; }

public SockoptObject()
{
Mark = 0;
TcpFastOpen = false;
Tproxy = "off";
}
}
}

+ 30
- 0
Shadowsocks.Interop/V2Ray/Transport/StreamSettingsObject.cs View File

@@ -0,0 +1,30 @@
namespace Shadowsocks.Interop.V2Ray.Transport
{
public class StreamSettingsObject : TransportObject
{
/// <summary>
/// Gets or sets the transport protocol type.
/// Defaults to "tcp".
/// Available values: "tcp" | "kcp" | "ws" | "http" | "domainsocket" | "quic"
/// </summary>
public string Network { get; set; }

/// <summary>
/// Gets or sets the transport encryption type.
/// Defaults to "none" (no encryption).
/// Available values: "none" | "tls"
/// </summary>
public string Security { get; set; }

public TlsObject TlsSettings { get; set; }
public SockoptObject Sockopt { get; set; }

public StreamSettingsObject()
{
Network = "tcp";
Security = "none";
TlsSettings = new();
Sockopt = new();
}
}
}

+ 23
- 0
Shadowsocks.Interop/V2Ray/Transport/TcpObject.cs View File

@@ -0,0 +1,23 @@
using Shadowsocks.Interop.V2Ray.Transport.Header;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class TcpObject
{
/// <summary>
/// Gets or sets whether to use PROXY protocol.
/// </summary>
public bool AcceptProxyProtocol { get; set; }

/// <summary>
/// Gets or sets the header options.
/// </summary>
public object Header { get; set; }

public TcpObject()
{
AcceptProxyProtocol = false;
Header = new HeaderObject();
}
}
}

+ 26
- 0
Shadowsocks.Interop/V2Ray/Transport/TlsObject.cs View File

@@ -0,0 +1,26 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class TlsObject
{
public string ServerName { get; set; }
public bool AllowInsecure { get; set; }
public List<string> Alpn { get; set; }
public List<CertificateObject> Certificates { get; set; }
public bool DisableSystemRoot { get; set; }

public TlsObject()
{
ServerName = "";
AllowInsecure = false;
Alpn = new()
{
"h2",
"http/1.1",
};
Certificates = new();
DisableSystemRoot = false;
}
}
}

+ 29
- 0
Shadowsocks.Interop/V2Ray/Transport/WebSocketObject.cs View File

@@ -0,0 +1,29 @@
using System.Collections.Generic;

namespace Shadowsocks.Interop.V2Ray.Transport
{
public class WebSocketObject
{
/// <summary>
/// Gets or sets whether to use PROXY protocol.
/// </summary>
public bool AcceptProxyProtocol { get; set; }

/// <summary>
/// Gets or sets the HTTP query path.
/// </summary>
public string Path { get; set; }

/// <summary>
/// Gets or sets HTTP header key-value pairs.
/// </summary>
public Dictionary<string, string> Headers { get; set; }

public WebSocketObject()
{
AcceptProxyProtocol = false;
Path = "/";
Headers = new();
}
}
}

+ 24
- 0
Shadowsocks.Interop/V2Ray/TransportObject.cs View File

@@ -0,0 +1,24 @@
using Shadowsocks.Interop.V2Ray.Transport;

namespace Shadowsocks.Interop.V2Ray
{
public class TransportObject
{
public TcpObject TcpSettings { get; set; }
public KcpObject KcpSettings { get; set; }
public WebSocketObject WsSettings { get; set; }
public HttpObject HttpSettings { get; set; }
public QuicObject QuicSettings { get; set; }
public DomainSocketObject DsSettings { get; set; }

public TransportObject()
{
TcpSettings = new();
KcpSettings = new();
WsSettings = new();
HttpSettings = new();
QuicSettings = new();
DsSettings = new();
}
}
}

Loading…
Cancel
Save