outbound

package
v1.19.31-hako.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2026 License: GPL-3.0 Imports: 126 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultStreamReceiveWindow     = 15728640 // 15 MB/s
	DefaultConnectionReceiveWindow = 67108864 // 64 MB/s

	DefaultALPN        = "hysteria"
	DefaultProtocol    = "udp"
	DefaultHopInterval = 10
)

Variables

View Source
var ErrUDPRemoteAddrMismatch = errors.New("udp packet dropped due to mismatched remote address")

Functions

func NewConn

func NewConn(c net.Conn, a C.ProxyAdapter) C.Conn

func NewPacketConn

func NewPacketConn(pc net.PacketConn, a ProxyAdapter) C.PacketConn

Types

type AddRef

type AddRef interface {
	AddRef(ref any)
}

type AmneziaWGOption

type AmneziaWGOption struct {
	Version int `proxy:"version,omitempty"` // Only version 3 uses the v3 implementation; all other values use the legacy implementation.

	JC   int `proxy:"jc,omitempty"`
	JMin int `proxy:"jmin,omitempty"`
	JMax int `proxy:"jmax,omitempty"`
	S1   int `proxy:"s1,omitempty"`
	S2   int `proxy:"s2,omitempty"`
	S3   int `proxy:"s3,omitempty"` // AmneziaWG v1.5+
	S4   int `proxy:"s4,omitempty"` // AmneziaWG v1.5+

	// H1-H4 accept uint32 values in v1.x and uint32 values or ranges in v2+.
	// WeaklyTypedInput accepts both numeric and string representations.
	H1 string `proxy:"h1,omitempty"`
	H2 string `proxy:"h2,omitempty"`
	H3 string `proxy:"h3,omitempty"`
	H4 string `proxy:"h4,omitempty"`

	I1 string `proxy:"i1,omitempty"` // AmneziaWG v1.5+
	I2 string `proxy:"i2,omitempty"` // AmneziaWG v1.5+
	I3 string `proxy:"i3,omitempty"` // AmneziaWG v1.5+
	I4 string `proxy:"i4,omitempty"` // AmneziaWG v1.5+
	I5 string `proxy:"i5,omitempty"` // AmneziaWG v1.5+

	J1    string `proxy:"j1,omitempty"`    // AmneziaWG v1.5 only (removed in v2+)
	J2    string `proxy:"j2,omitempty"`    // AmneziaWG v1.5 only (removed in v2+)
	J3    string `proxy:"j3,omitempty"`    // AmneziaWG v1.5 only (removed in v2+)
	Itime int64  `proxy:"itime,omitempty"` // AmneziaWG v1.5 only (removed in v2+)

	// AmneziaWG v3+ only. Version must be 3, and these options cannot be combined with the v1.5-only options above.
	HeaderProtectionKey    string `proxy:"header-protection-key,omitempty"`
	ContentPaddingAddition string `proxy:"content-padding-addition,omitempty"`
	RekeyAfterTime         string `proxy:"rekey-after-time,omitempty"`
	RekeyTimeout           string `proxy:"rekey-timeout,omitempty"`
	RejectAfterTime        string `proxy:"reject-after-time,omitempty"`
	KeepaliveTimeout       string `proxy:"keepalive-timeout,omitempty"`
	MaxHandshakeAttempts   string `proxy:"max-handshake-attempts,omitempty"`
	RandomTrailers         bool   `proxy:"random-trailers,omitempty"` // AmneziaWG v3.1+
	DisableCookies         bool   `proxy:"disable-cookies,omitempty"` // AmneziaWG v3.1+
}

type AnyTLS

type AnyTLS struct {
	*Base
	// contains filtered or unexported fields
}

func NewAnyTLS

func NewAnyTLS(option AnyTLSOption) (*AnyTLS, error)

func (*AnyTLS) Close

func (t *AnyTLS) Close() error

Close implements C.ProxyAdapter

func (*AnyTLS) DialContext

func (t *AnyTLS) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*AnyTLS) ListenPacketContext

func (t *AnyTLS) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*AnyTLS) ProxyInfo

func (t *AnyTLS) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*AnyTLS) SupportUOT

func (t *AnyTLS) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type AnyTLSOption

type AnyTLSOption struct {
	BasicOption
	Name                     string           `proxy:"name"`
	Server                   string           `proxy:"server"`
	Port                     int              `proxy:"port"`
	Password                 string           `proxy:"password"`
	ALPN                     []string         `proxy:"alpn,omitempty"`
	SNI                      string           `proxy:"sni,omitempty"`
	ECHOpts                  ECHOptions       `proxy:"ech-opts,omitempty"`
	ShadowTLSOpts            ShadowTLSOptions `proxy:"shadow-tls-opts,omitempty"`
	RestlsOpts               RestlsOptions    `proxy:"restls-opts,omitempty"`
	JLSOpts                  JLSOptions       `proxy:"jls-opts,omitempty"`
	ClientFingerprint        string           `proxy:"client-fingerprint,omitempty"`
	SkipCertVerify           bool             `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify           string           `proxy:"name-cert-verify,omitempty"`
	Fingerprint              string           `proxy:"fingerprint,omitempty"`
	Certificate              string           `proxy:"certificate,omitempty"`
	PrivateKey               string           `proxy:"private-key,omitempty"`
	UDP                      bool             `proxy:"udp,omitempty"`
	ClientMetadata           string           `proxy:"client-metadata,omitempty"`
	IdleSessionCheckInterval int              `proxy:"idle-session-check-interval,omitempty"`
	IdleSessionTimeout       int              `proxy:"idle-session-timeout,omitempty"`
	MinIdleSession           int              `proxy:"min-idle-session,omitempty"`
	DisableReuse             bool             `proxy:"disable-reuse,omitempty"`
}

type Base

type Base struct {
	// contains filtered or unexported fields
}

func NewBase

func NewBase(opt BaseOption) *Base

func (*Base) Addr

func (b *Base) Addr() string

Addr implements C.ProxyAdapter

func (*Base) Close

func (b *Base) Close() error

func (*Base) DialContext

func (b *Base) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

func (*Base) DialOptions

func (b *Base) DialOptions() (opts []dialer.Option)

DialOptions return []dialer.Option from struct

func (*Base) Id

func (b *Base) Id() string

Id implements C.ProxyAdapter

func (*Base) IsL3Protocol

func (b *Base) IsL3Protocol(metadata *C.Metadata) bool

IsL3Protocol implements C.ProxyAdapter

func (*Base) ListenPacketContext

func (b *Base) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

ListenPacketContext implements C.ProxyAdapter

func (*Base) MarshalJSON

func (b *Base) MarshalJSON() ([]byte, error)

MarshalJSON implements C.ProxyAdapter

func (*Base) Name

func (b *Base) Name() string

Name implements C.ProxyAdapter

func (*Base) ProxyInfo

func (b *Base) ProxyInfo() (info C.ProxyInfo)

ProxyInfo implements C.ProxyAdapter

func (*Base) ResolveUDP

func (b *Base) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

func (*Base) SupportUDP

func (b *Base) SupportUDP() bool

SupportUDP implements C.ProxyAdapter

func (*Base) SupportUOT

func (b *Base) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

func (*Base) Type

func (b *Base) Type() C.AdapterType

Type implements C.ProxyAdapter

func (*Base) Unwrap

func (b *Base) Unwrap(metadata *C.Metadata, touch bool) C.Proxy

Unwrap implements C.ProxyAdapter

type BaseOption

type BaseOption struct {
	Name         string
	Addr         string
	Type         C.AdapterType
	ProviderName string
	UDP          bool
	XUDP         bool
	TFO          bool
	MPTCP        bool
	Interface    string
	RoutingMark  int
	Prefer       C.DNSPrefer
}

type BasicOption

type BasicOption struct {
	TFO         bool        `proxy:"tfo,omitempty"`
	MPTCP       bool        `proxy:"mptcp,omitempty"`
	Interface   string      `proxy:"interface-name,omitempty"`
	RoutingMark int         `proxy:"routing-mark,omitempty"`
	IPVersion   C.DNSPrefer `proxy:"ip-version,omitempty"`
	DialerProxy string      `proxy:"dialer-proxy,omitempty"` // don't apply this option into groups, but can set a group name in a proxy

	//
	// The following parameters are used internally, assign value by the structure decoder are disallowed
	//
	DialerForAPI C.Dialer `proxy:"-"` // the dialer used for API usage has higher priority than all the above configurations.
	TunnelForAPI C.Tunnel `proxy:"-"`
	ProviderName string   `proxy:"-"`
}

func (*BasicOption) NewDialer

func (b *BasicOption) NewDialer(opts []dialer.Option) C.Dialer

func (*BasicOption) NewTunnel

func (b *BasicOption) NewTunnel() C.Tunnel

type BrutalOption

type BrutalOption struct {
	Enabled bool   `proxy:"enabled,omitempty"`
	Up      string `proxy:"up,omitempty"`
	Down    string `proxy:"down,omitempty"`
}

type Direct

type Direct struct {
	*Base
	// contains filtered or unexported fields
}

func NewCompatible

func NewCompatible() *Direct

func NewDirect

func NewDirect() *Direct

func NewDirectWithOption

func NewDirectWithOption(option DirectOption) *Direct

func (*Direct) DialContext

func (d *Direct) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

DialContext implements C.ProxyAdapter

func (*Direct) IsL3Protocol

func (d *Direct) IsL3Protocol(metadata *C.Metadata) bool

func (*Direct) ListenPacketContext

func (d *Direct) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

ListenPacketContext implements C.ProxyAdapter

func (*Direct) ResolveUDP

func (d *Direct) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type DirectOption

type DirectOption struct {
	BasicOption
	Name string `proxy:"name"`
}

type Dns

type Dns struct {
	*Base
}

func NewDnsWithOption

func NewDnsWithOption(option DnsOption) *Dns

func (*Dns) DialContext

func (d *Dns) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

DialContext implements C.ProxyAdapter

func (*Dns) ListenPacketContext

func (d *Dns) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

ListenPacketContext implements C.ProxyAdapter

func (*Dns) ResolveUDP

func (d *Dns) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type DnsOption

type DnsOption struct {
	BasicOption
	Name string `proxy:"name"`
}

type ECHOptions

type ECHOptions struct {
	Enable bool   `proxy:"enable,omitempty" obfs:"enable,omitempty"`
	Config string `proxy:"config,omitempty" obfs:"config,omitempty"`

	QueryServerName string `proxy:"query-server-name,omitempty" obfs:"query-server-name,omitempty"`
}

func (ECHOptions) Parse

func (o ECHOptions) Parse() (*ech.Config, error)

type EasyTier

type EasyTier struct {
	*Base
	// contains filtered or unexported fields
}

func NewEasyTier

func NewEasyTier(option EasyTierOption) (*EasyTier, error)

func (*EasyTier) Close

func (e *EasyTier) Close() error

func (*EasyTier) DialContext

func (e *EasyTier) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*EasyTier) IsL3Protocol

func (e *EasyTier) IsL3Protocol(*C.Metadata) bool

func (*EasyTier) ListenPacketContext

func (e *EasyTier) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*EasyTier) ProxyInfo

func (e *EasyTier) ProxyInfo() C.ProxyInfo

func (*EasyTier) ResolveUDP

func (e *EasyTier) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type EasyTierOption

type EasyTierOption struct {
	BasicOption
	Name                string   `proxy:"name"`
	NetworkName         string   `proxy:"network-name,omitempty"`
	NetworkSecret       string   `proxy:"network-secret,omitempty"`
	Hostname            string   `proxy:"hostname,omitempty"`
	IPv4                string   `proxy:"ipv4,omitempty"`
	DHCP                bool     `proxy:"dhcp,omitempty"`
	Peers               []string `proxy:"peers,omitempty"`
	Listeners           []string `proxy:"listeners,omitempty"`
	NoListener          *bool    `proxy:"no-listener,omitempty"`
	MappedListeners     []string `proxy:"mapped-listeners,omitempty"`
	ExitNodes           []string `proxy:"exit-nodes,omitempty"`
	ProxyNetworks       []string `proxy:"proxy-networks,omitempty"`
	InstanceName        string   `proxy:"instance-name,omitempty"`
	StateDir            string   `proxy:"state-dir,omitempty"`
	UDP                 bool     `proxy:"udp,omitempty"`
	AcceptDNS           *bool    `proxy:"accept-dns,omitempty"`
	EnableExitNode      *bool    `proxy:"enable-exit-node,omitempty"`
	EnableEncryption    *bool    `proxy:"enable-encryption,omitempty"`
	EncryptionAlgorithm string   `proxy:"encryption-algorithm,omitempty"`
	PrivateMode         *bool    `proxy:"private-mode,omitempty"`
	LatencyFirst        *bool    `proxy:"latency-first,omitempty"`
	DisableP2P          *bool    `proxy:"disable-p2p,omitempty"`
	EnableKCPProxy      *bool    `proxy:"enable-kcp-proxy,omitempty"`
	DisableKCPInput     *bool    `proxy:"disable-kcp-input,omitempty"`
	EnableQUICProxy     *bool    `proxy:"enable-quic-proxy,omitempty"`
	DisableQUICInput    *bool    `proxy:"disable-quic-input,omitempty"`
	MTU                 int      `proxy:"mtu,omitempty"`
	TLDDNSZone          string   `proxy:"tld-dns-zone,omitempty"`
	SecureMode          *bool    `proxy:"secure-mode,omitempty"`
	LocalPrivateKey     string   `proxy:"local-private-key,omitempty"`
	LocalPublicKey      string   `proxy:"local-public-key,omitempty"`
}

type GostRelay

type GostRelay struct {
	*Base
	// contains filtered or unexported fields
}

func NewGostRelay

func NewGostRelay(option GostRelayOption) (*GostRelay, error)

func (*GostRelay) DialContext

func (g *GostRelay) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*GostRelay) ListenPacketContext

func (g *GostRelay) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*GostRelay) ProxyInfo

func (g *GostRelay) ProxyInfo() C.ProxyInfo

type GostRelayOption

type GostRelayOption struct {
	BasicOption
	Name              string `proxy:"name"`
	Server            string `proxy:"server"`
	Port              int    `proxy:"port"`
	Forward           bool   `proxy:"forward,omitempty"`
	UDP               bool   `proxy:"udp,omitempty"`
	TLS               bool   `proxy:"tls,omitempty"`
	Mux               bool   `proxy:"mux,omitempty"`
	SNI               string `proxy:"sni,omitempty"`
	Username          string `proxy:"username,omitempty"`
	Password          string `proxy:"password,omitempty"`
	SkipCertVerify    bool   `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify    string `proxy:"name-cert-verify,omitempty"`
	Fingerprint       string `proxy:"fingerprint,omitempty"`
	Certificate       string `proxy:"certificate,omitempty"`
	PrivateKey        string `proxy:"private-key,omitempty"`
	ClientFingerprint string `proxy:"client-fingerprint,omitempty"`
}

type GrpcOptions

type GrpcOptions struct {
	GrpcServiceName string `proxy:"grpc-service-name,omitempty"`
	GrpcUserAgent   string `proxy:"grpc-user-agent,omitempty"`
	PingInterval    int    `proxy:"ping-interval,omitempty"`
	MaxConnections  int    `proxy:"max-connections,omitempty"`
	MinStreams      int    `proxy:"min-streams,omitempty"`
	MaxStreams      int    `proxy:"max-streams,omitempty"`
}

type HTTP2Options

type HTTP2Options struct {
	Host []string `proxy:"host,omitempty"`
	Path string   `proxy:"path,omitempty"`
}

type HTTPOptions

type HTTPOptions struct {
	Method  string              `proxy:"method,omitempty"`
	Path    []string            `proxy:"path,omitempty"`
	Headers map[string][]string `proxy:"headers,omitempty"`
}

type Http

type Http struct {
	*Base
	// contains filtered or unexported fields
}

func NewHttp

func NewHttp(option HttpOption) (*Http, error)

func (*Http) DialContext

func (h *Http) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Http) ProxyInfo

func (h *Http) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Http) StreamConnContext

func (h *Http) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (net.Conn, error)

StreamConnContext implements C.ProxyAdapter

type HttpOption

type HttpOption struct {
	BasicOption
	Name           string            `proxy:"name"`
	Server         string            `proxy:"server"`
	Port           int               `proxy:"port"`
	UserName       string            `proxy:"username,omitempty"`
	Password       string            `proxy:"password,omitempty"`
	TLS            bool              `proxy:"tls,omitempty"`
	SNI            string            `proxy:"sni,omitempty"`
	SkipCertVerify bool              `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify string            `proxy:"name-cert-verify,omitempty"`
	Fingerprint    string            `proxy:"fingerprint,omitempty"`
	Certificate    string            `proxy:"certificate,omitempty"`
	PrivateKey     string            `proxy:"private-key,omitempty"`
	Headers        map[string]string `proxy:"headers,omitempty"`
}

type Hysteria

type Hysteria struct {
	*Base
	// contains filtered or unexported fields
}

func NewHysteria

func NewHysteria(option HysteriaOption) (*Hysteria, error)

func (*Hysteria) Close

func (h *Hysteria) Close() error

Close implements C.ProxyAdapter

func (*Hysteria) DialContext

func (h *Hysteria) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

func (*Hysteria) ListenPacketContext

func (h *Hysteria) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

func (*Hysteria) ProxyInfo

func (h *Hysteria) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

type Hysteria2

type Hysteria2 struct {
	*Base
	// contains filtered or unexported fields
}

func NewHysteria2

func NewHysteria2(option Hysteria2Option) (*Hysteria2, error)

func (*Hysteria2) Close

func (h *Hysteria2) Close() error

Close implements C.ProxyAdapter

func (*Hysteria2) DialContext

func (h *Hysteria2) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*Hysteria2) ListenPacketContext

func (h *Hysteria2) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*Hysteria2) ProxyInfo

func (h *Hysteria2) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Hysteria2) ResetNetwork

func (h *Hysteria2) ResetNetwork()

type Hysteria2Option

type Hysteria2Option struct {
	BasicOption
	Name              string     `proxy:"name"`
	Server            string     `proxy:"server"`
	Port              int        `proxy:"port,omitempty"`
	Ports             string     `proxy:"ports,omitempty"`
	HopInterval       string     `proxy:"hop-interval,omitempty"`
	Up                string     `proxy:"up,omitempty"`
	Down              string     `proxy:"down,omitempty"`
	Password          string     `proxy:"password,omitempty"`
	Obfs              string     `proxy:"obfs,omitempty"`
	ObfsPassword      string     `proxy:"obfs-password,omitempty"`
	ObfsMinPacketSize int        `proxy:"obfs-min-packet-size,omitempty"`
	ObfsMaxPacketSize int        `proxy:"obfs-max-packet-size,omitempty"`
	SNI               string     `proxy:"sni,omitempty"`
	ECHOpts           ECHOptions `proxy:"ech-opts,omitempty"`
	SkipCertVerify    bool       `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify    string     `proxy:"name-cert-verify,omitempty"`
	Fingerprint       string     `proxy:"fingerprint,omitempty"`
	Certificate       string     `proxy:"certificate,omitempty"`
	PrivateKey        string     `proxy:"private-key,omitempty"`
	ALPN              []string   `proxy:"alpn,omitempty"`
	CWND              int        `proxy:"cwnd,omitempty"`
	BBRProfile        string     `proxy:"bbr-profile,omitempty"`
	UdpMTU            int        `proxy:"udp-mtu,omitempty"`
	HandshakeTimeout  int        `proxy:"handshake-timeout,omitempty"`

	RealmOpts Hysteria2RealmOption `proxy:"realm-opts,omitempty"`

	// quic-go special config
	InitialStreamReceiveWindow     uint64 `proxy:"initial-stream-receive-window,omitempty"`
	MaxStreamReceiveWindow         uint64 `proxy:"max-stream-receive-window,omitempty"`
	InitialConnectionReceiveWindow uint64 `proxy:"initial-connection-receive-window,omitempty"`
	MaxConnectionReceiveWindow     uint64 `proxy:"max-connection-receive-window,omitempty"`
}

type Hysteria2RealmOption

type Hysteria2RealmOption struct {
	Enable      bool     `proxy:"enable,omitempty"`
	ServerURL   string   `proxy:"server-url,omitempty"`
	Token       string   `proxy:"token,omitempty"`
	RealmID     string   `proxy:"realm-id,omitempty"`
	STUNServers []string `proxy:"stun-servers,omitempty"`

	// for ServerURL
	SNI            string   `proxy:"sni,omitempty"`
	SkipCertVerify bool     `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify string   `proxy:"name-cert-verify,omitempty"`
	Fingerprint    string   `proxy:"fingerprint,omitempty"`
	Certificate    string   `proxy:"certificate,omitempty"`
	PrivateKey     string   `proxy:"private-key,omitempty"`
	ALPN           []string `proxy:"alpn,omitempty"`
}

type HysteriaOption

type HysteriaOption struct {
	BasicOption
	Name                string     `proxy:"name"`
	Server              string     `proxy:"server"`
	Port                int        `proxy:"port,omitempty"`
	Ports               string     `proxy:"ports,omitempty"`
	Protocol            string     `proxy:"protocol,omitempty"`
	ObfsProtocol        string     `proxy:"obfs-protocol,omitempty"` // compatible with Stash
	Up                  string     `proxy:"up"`
	UpSpeed             int        `proxy:"up-speed,omitempty"` // compatible with Stash
	Down                string     `proxy:"down"`
	DownSpeed           int        `proxy:"down-speed,omitempty"` // compatible with Stash
	Auth                string     `proxy:"auth,omitempty"`
	AuthString          string     `proxy:"auth-str,omitempty"`
	Obfs                string     `proxy:"obfs,omitempty"`
	SNI                 string     `proxy:"sni,omitempty"`
	ECHOpts             ECHOptions `proxy:"ech-opts,omitempty"`
	SkipCertVerify      bool       `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify      string     `proxy:"name-cert-verify,omitempty"`
	Fingerprint         string     `proxy:"fingerprint,omitempty"`
	Certificate         string     `proxy:"certificate,omitempty"`
	PrivateKey          string     `proxy:"private-key,omitempty"`
	ALPN                []string   `proxy:"alpn,omitempty"`
	ReceiveWindowConn   int        `proxy:"recv-window-conn,omitempty"`
	ReceiveWindow       int        `proxy:"recv-window,omitempty"`
	DisableMTUDiscovery bool       `proxy:"disable-mtu-discovery,omitempty"`
	FastOpen            bool       `proxy:"fast-open,omitempty"`
	HopInterval         int        `proxy:"hop-interval,omitempty"`
}

func (*HysteriaOption) Speed

func (c *HysteriaOption) Speed() (uint64, uint64, error)

type IPStackOption

type IPStackOption struct {
	Mode                 string `proxy:"mode,omitempty"`
	CongestionController string `proxy:"congestion-controller,omitempty"`
}

type JLSOptions

type JLSOptions struct {
	Username string `proxy:"username"`
	Password string `proxy:"password"`
}

func (JLSOptions) Parse

func (o JLSOptions) Parse() (*jls.Config, error)

type MKCPOptions

type MKCPOptions struct {
	MTU              uint32 `proxy:"mtu,omitempty"`
	TTI              uint32 `proxy:"tti,omitempty"`
	UplinkCapacity   uint32 `proxy:"uplink-capacity,omitempty"`
	DownlinkCapacity uint32 `proxy:"downlink-capacity,omitempty"`
	Congestion       bool   `proxy:"congestion,omitempty"`
	WriteBuffer      uint32 `proxy:"write-buffer,omitempty"`
	ReadBuffer       uint32 `proxy:"read-buffer,omitempty"`
	Seed             string `proxy:"seed,omitempty"`
	Header           string `proxy:"header,omitempty"`
}

func (MKCPOptions) Build

func (o MKCPOptions) Build() mkcp.Config

type Masque

type Masque struct {
	*Base
	// contains filtered or unexported fields
}

func NewMasque

func NewMasque(option MasqueOption) (*Masque, error)

func (*Masque) Close

func (w *Masque) Close() error

Close implements C.ProxyAdapter

func (*Masque) DialContext

func (w *Masque) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*Masque) IsL3Protocol

func (w *Masque) IsL3Protocol(metadata *C.Metadata) bool

IsL3Protocol implements C.ProxyAdapter

func (*Masque) ListenPacketContext

func (w *Masque) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*Masque) ProxyInfo

func (w *Masque) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Masque) ResolveUDP

func (w *Masque) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type MasqueOption

type MasqueOption struct {
	BasicOption
	Name             string `proxy:"name"`
	Server           string `proxy:"server"`
	Port             int    `proxy:"port"`
	PrivateKey       string `proxy:"private-key"`
	PublicKey        string `proxy:"public-key"`
	Ip               string `proxy:"ip,omitempty"`
	Ipv6             string `proxy:"ipv6,omitempty"`
	URI              string `proxy:"uri,omitempty"`
	SNI              string `proxy:"sni,omitempty"`
	MTU              int    `proxy:"mtu,omitempty"`
	UDP              bool   `proxy:"udp,omitempty"`
	HandshakeTimeout int    `proxy:"handshake-timeout,omitempty"`
	SkipCertVerify   bool   `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify   string `proxy:"name-cert-verify,omitempty"` // placeholder; MASQUE does not verify certificate names
	Network          string `proxy:"network,omitempty"`

	CongestionController string `proxy:"congestion-controller,omitempty"`
	CWND                 int    `proxy:"cwnd,omitempty"`
	BBRProfile           string `proxy:"bbr-profile,omitempty"`

	IPStack IPStackOption `proxy:"ip-stack,omitempty"`

	RemoteDnsResolve bool     `proxy:"remote-dns-resolve,omitempty"`
	Dns              []string `proxy:"dns,omitempty"`
}

func (MasqueOption) Prefixes

func (option MasqueOption) Prefixes() ([]netip.Prefix, error)

type MekyaOptions

type MekyaOptions struct {
	URL                            string      `proxy:"url,omitempty"`
	H2PoolSize                     int         `proxy:"h2-pool-size,omitempty"`
	MaxWriteDelay                  int         `proxy:"max-write-delay,omitempty"`
	MaxRequestSize                 int         `proxy:"max-request-size,omitempty"`
	PollingIntervalInitial         int         `proxy:"polling-interval-initial,omitempty"`
	MaxWriteSize                   int         `proxy:"max-write-size,omitempty"`
	MaxWriteDurationMs             int         `proxy:"max-write-duration-ms,omitempty"`
	MaxSimultaneousWriteConnection int         `proxy:"max-simultaneous-write-connection,omitempty"`
	PacketWritingBuffer            int         `proxy:"packet-writing-buffer,omitempty"`
	KCP                            MKCPOptions `proxy:"kcp,omitempty"`
}

func (MekyaOptions) Build

func (o MekyaOptions) Build() mekya.Config

type Mieru

type Mieru struct {
	*Base
	// contains filtered or unexported fields
}

func NewMieru

func NewMieru(option MieruOption) (*Mieru, error)

func (*Mieru) Close

func (m *Mieru) Close() error

Close implements C.ProxyAdapter

func (*Mieru) DialContext

func (m *Mieru) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

DialContext implements C.ProxyAdapter

func (*Mieru) ListenPacketContext

func (m *Mieru) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Mieru) ProxyInfo

func (m *Mieru) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Mieru) SupportUOT

func (m *Mieru) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type MieruOption

type MieruOption struct {
	BasicOption
	Name           string `proxy:"name"`
	Server         string `proxy:"server"`
	Port           int    `proxy:"port,omitempty"`
	PortRange      string `proxy:"port-range,omitempty"`
	Transport      string `proxy:"transport"`
	UDP            bool   `proxy:"udp,omitempty"`
	UserName       string `proxy:"username"`
	Password       string `proxy:"password"`
	Multiplexing   string `proxy:"multiplexing,omitempty"`
	HandshakeMode  string `proxy:"handshake-mode,omitempty"`
	TrafficPattern string `proxy:"traffic-pattern,omitempty"`
}

type NetworkResetter

type NetworkResetter interface {
	ResetNetwork()
}

type OpenVPN

type OpenVPN struct {
	*Base
	// contains filtered or unexported fields
}

func NewOpenVPN

func NewOpenVPN(option OpenVPNOption) (*OpenVPN, error)

func (*OpenVPN) Close

func (o *OpenVPN) Close() error

func (*OpenVPN) DialContext

func (o *OpenVPN) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*OpenVPN) IsL3Protocol

func (o *OpenVPN) IsL3Protocol(metadata *C.Metadata) bool

func (*OpenVPN) ListenPacketContext

func (o *OpenVPN) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*OpenVPN) ProxyInfo

func (o *OpenVPN) ProxyInfo() C.ProxyInfo

func (*OpenVPN) ResolveUDP

func (o *OpenVPN) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type OpenVPNOption

type OpenVPNOption struct {
	BasicOption
	Name               string            `proxy:"name"`
	Server             string            `proxy:"server"`
	Port               int               `proxy:"port"`
	Proto              string            `proxy:"proto,omitempty"`
	Dev                string            `proxy:"dev,omitempty"`
	Cipher             string            `proxy:"cipher,omitempty"`
	DataCiphers        []string          `proxy:"data-ciphers,omitempty"`
	DataCipherFallback string            `proxy:"data-ciphers-fallback,omitempty"`
	Auth               string            `proxy:"auth,omitempty"`
	CompLZO            string            `proxy:"comp-lzo,omitempty"`
	CA                 string            `proxy:"ca"`
	Cert               string            `proxy:"cert,omitempty"`
	Key                string            `proxy:"key,omitempty"`
	TLSAuth            string            `proxy:"tls-auth,omitempty"`
	KeyDirection       string            `proxy:"key-direction,omitempty"`
	TLSCrypt           string            `proxy:"tls-crypt,omitempty"`
	TLSCryptV2         string            `proxy:"tls-crypt-v2,omitempty"`
	Username           string            `proxy:"username,omitempty"`
	Password           string            `proxy:"password,omitempty"`
	PeerInfo           map[string]string `proxy:"peer-info,omitempty"`
	Ping               int               `proxy:"ping,omitempty"`
	PingRestart        int               `proxy:"ping-restart,omitempty"`
	TranWindow         *int              `proxy:"tran-window,omitempty"`
	HandshakeTimeout   int               `proxy:"handshake-timeout,omitempty"`
	MTU                int               `proxy:"mtu,omitempty"`
	UDP                bool              `proxy:"udp,omitempty"`

	IPStack IPStackOption `proxy:"ip-stack,omitempty"`

	RemoteDnsResolve bool     `proxy:"remote-dns-resolve,omitempty"`
	Dns              []string `proxy:"dns,omitempty"`
}

type ProxyAdapter

type ProxyAdapter interface {
	C.ProxyAdapter
	DialOptions() []dialer.Option
	ResolveUDP(ctx context.Context, metadata *C.Metadata) error
}

func NewAutoCloseProxyAdapter

func NewAutoCloseProxyAdapter(adapter ProxyAdapter) ProxyAdapter

func NewSingMux

func NewSingMux(option SingMuxOption, proxy ProxyAdapter) (ProxyAdapter, error)

type RealityOptions

type RealityOptions struct {
	PublicKey string `proxy:"public-key"`
	ShortID   string `proxy:"short-id,omitempty"`

	SupportX25519MLKEM768 bool `proxy:"support-x25519mlkem768,omitempty"`
}

func (RealityOptions) Parse

func (o RealityOptions) Parse() (*tlsC.RealityConfig, error)

type Reject

type Reject struct {
	*Base
	// contains filtered or unexported fields
}

func NewPass

func NewPass() *Reject

func NewPassRule

func NewPassRule() *Reject

func NewReject

func NewReject() *Reject

func NewRejectDrop

func NewRejectDrop() *Reject

func NewRejectWithOption

func NewRejectWithOption(option RejectOption) *Reject

func (*Reject) DialContext

func (r *Reject) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

DialContext implements C.ProxyAdapter

func (*Reject) ListenPacketContext

func (r *Reject) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

ListenPacketContext implements C.ProxyAdapter

func (*Reject) ResolveUDP

func (r *Reject) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type RejectOption

type RejectOption struct {
	BasicOption
	Name string `proxy:"name"`
}

type Rematch

type Rematch struct {
	*Base
	// contains filtered or unexported fields
}

func NewRematch

func NewRematch(option RematchOption) (*Rematch, error)

func (*Rematch) DialContext

func (l *Rematch) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

func (*Rematch) ListenPacketContext

func (l *Rematch) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

type RematchOption

type RematchOption struct {
	BasicOption
	Name              string  `proxy:"name"`
	TargetRematchName *string `proxy:"target-rematch-name,omitempty"`
	TargetSubRule     *string `proxy:"target-sub-rule,omitempty"`
}

type RestlsOptions

type RestlsOptions struct {
	Password     string `proxy:"password,omitempty"`
	VersionHint  string `proxy:"version-hint,omitempty"`
	RestlsScript string `proxy:"restls-script,omitempty"`
}

func (RestlsOptions) Parse

func (o RestlsOptions) Parse(serverName, clientFingerprint string) (*restls.Config, error)

type ShadowQuic

type ShadowQuic struct {
	*Base
	// contains filtered or unexported fields
}

func NewShadowQuic

func NewShadowQuic(option ShadowQuicOption) (*ShadowQuic, error)

func (*ShadowQuic) Close

func (s *ShadowQuic) Close() error

func (*ShadowQuic) DialContext

func (s *ShadowQuic) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

func (*ShadowQuic) ListenPacketContext

func (s *ShadowQuic) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

func (*ShadowQuic) ProxyInfo

func (s *ShadowQuic) ProxyInfo() C.ProxyInfo

type ShadowQuicOption

type ShadowQuicOption struct {
	BasicOption
	Name                 string   `proxy:"name"`
	Server               string   `proxy:"server"`
	Port                 int      `proxy:"port"`
	Username             string   `proxy:"username,omitempty"`
	Password             string   `proxy:"password,omitempty"`
	SNI                  string   `proxy:"sni,omitempty"`
	ALPN                 []string `proxy:"alpn,omitempty"`
	QUICVersions         []string `proxy:"quic-versions,omitempty"`
	UDPOverStream        bool     `proxy:"udp-over-stream,omitempty"`
	ZeroRTT              bool     `proxy:"zero-rtt,omitempty"`
	KeepAliveInterval    int      `proxy:"keep-alive-interval,omitempty"`
	CongestionController string   `proxy:"congestion-controller,omitempty"`
	Up                   string   `proxy:"up,omitempty"`
	Down                 string   `proxy:"down,omitempty"`
	CWND                 int      `proxy:"cwnd,omitempty"`
	BBRProfile           string   `proxy:"bbr-profile,omitempty"`
	ReceiveWindowConn    int      `proxy:"recv-window-conn,omitempty"`
	ReceiveWindow        int      `proxy:"recv-window,omitempty"`
	DisableMTUDiscovery  bool     `proxy:"disable-mtu-discovery,omitempty"`
	MaxDatagramFrameSize int      `proxy:"max-datagram-frame-size,omitempty"`
	MaxOpenStreams       int      `proxy:"max-open-streams,omitempty"`
}

type ShadowSocks

type ShadowSocks struct {
	*Base
	// contains filtered or unexported fields
}

func NewShadowSocks

func NewShadowSocks(option ShadowSocksOption) (*ShadowSocks, error)

func (*ShadowSocks) Close

func (ss *ShadowSocks) Close() error

func (*ShadowSocks) DialContext

func (ss *ShadowSocks) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*ShadowSocks) ListenPacketContext

func (ss *ShadowSocks) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*ShadowSocks) ProxyInfo

func (ss *ShadowSocks) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*ShadowSocks) StreamConnContext

func (ss *ShadowSocks) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ net.Conn, err error)

StreamConnContext implements C.ProxyAdapter

func (*ShadowSocks) SupportUOT

func (ss *ShadowSocks) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type ShadowSocksOption

type ShadowSocksOption struct {
	BasicOption
	Name              string         `proxy:"name"`
	Server            string         `proxy:"server"`
	Port              int            `proxy:"port"`
	Password          string         `proxy:"password"`
	Cipher            string         `proxy:"cipher"`
	UDP               bool           `proxy:"udp,omitempty"`
	Plugin            string         `proxy:"plugin,omitempty"`
	PluginOpts        map[string]any `proxy:"plugin-opts,omitempty"`
	UDPOverTCP        bool           `proxy:"udp-over-tcp,omitempty"`
	UDPOverTCPVersion int            `proxy:"udp-over-tcp-version,omitempty"`
	ClientFingerprint string         `proxy:"client-fingerprint,omitempty"`
}

type ShadowSocksR

type ShadowSocksR struct {
	*Base
	// contains filtered or unexported fields
}

func NewShadowSocksR

func NewShadowSocksR(option ShadowSocksROption) (*ShadowSocksR, error)

func (*ShadowSocksR) DialContext

func (ssr *ShadowSocksR) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*ShadowSocksR) ListenPacketContext

func (ssr *ShadowSocksR) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

ListenPacketContext implements C.ProxyAdapter

func (*ShadowSocksR) ProxyInfo

func (ssr *ShadowSocksR) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*ShadowSocksR) StreamConnContext

func (ssr *ShadowSocksR) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ net.Conn, err error)

StreamConnContext implements C.ProxyAdapter

type ShadowSocksROption

type ShadowSocksROption struct {
	BasicOption
	Name          string `proxy:"name"`
	Server        string `proxy:"server"`
	Port          int    `proxy:"port"`
	Password      string `proxy:"password"`
	Cipher        string `proxy:"cipher"`
	Obfs          string `proxy:"obfs"`
	ObfsParam     string `proxy:"obfs-param,omitempty"`
	Protocol      string `proxy:"protocol"`
	ProtocolParam string `proxy:"protocol-param,omitempty"`
	UDP           bool   `proxy:"udp,omitempty"`
}

type ShadowTLSOptions

type ShadowTLSOptions struct {
	Password string `proxy:"password,omitempty"`
	Version  int    `proxy:"version,omitempty"`
}

func (ShadowTLSOptions) Parse

func (o ShadowTLSOptions) Parse() (*shadowtls.Config, error)

type SingMux

type SingMux struct {
	ProxyAdapter
	// contains filtered or unexported fields
}

func (*SingMux) Close

func (s *SingMux) Close() error

Close implements C.ProxyAdapter

func (*SingMux) DialContext

func (s *SingMux) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*SingMux) ListenPacketContext

func (s *SingMux) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*SingMux) ProxyInfo

func (s *SingMux) ProxyInfo() C.ProxyInfo

func (*SingMux) ResetNetwork

func (s *SingMux) ResetNetwork()

func (*SingMux) SupportUDP

func (s *SingMux) SupportUDP() bool

func (*SingMux) SupportUOT

func (s *SingMux) SupportUOT() bool

type SingMuxOption

type SingMuxOption struct {
	Enabled        bool         `proxy:"enabled,omitempty"`
	Protocol       string       `proxy:"protocol,omitempty"`
	MaxConnections int          `proxy:"max-connections,omitempty"`
	MinStreams     int          `proxy:"min-streams,omitempty"`
	MaxStreams     int          `proxy:"max-streams,omitempty"`
	Padding        bool         `proxy:"padding,omitempty"`
	Statistic      bool         `proxy:"statistic,omitempty"`
	OnlyTcp        bool         `proxy:"only-tcp,omitempty"`
	BrutalOpts     BrutalOption `proxy:"brutal-opts,omitempty"`
}

type Snell

type Snell struct {
	*Base
	// contains filtered or unexported fields
}

func NewSnell

func NewSnell(option SnellOption) (*Snell, error)

func (*Snell) DialContext

func (s *Snell) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Snell) ListenPacketContext

func (s *Snell) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Snell) ProxyInfo

func (s *Snell) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Snell) StreamConnContext

func (s *Snell) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (net.Conn, error)

StreamConnContext implements C.ProxyAdapter

func (*Snell) SupportUOT

func (s *Snell) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type SnellOption

type SnellOption struct {
	BasicOption
	Name              string         `proxy:"name"`
	Server            string         `proxy:"server"`
	Port              int            `proxy:"port"`
	Psk               string         `proxy:"psk"`
	UDP               bool           `proxy:"udp,omitempty"`
	Version           int            `proxy:"version,omitempty"`
	Reuse             bool           `proxy:"reuse,omitempty"`
	ObfsOpts          map[string]any `proxy:"obfs-opts,omitempty"`
	ClientFingerprint string         `proxy:"client-fingerprint,omitempty"`
}

type Socks5

type Socks5 struct {
	*Base
	// contains filtered or unexported fields
}

func NewSocks5

func NewSocks5(option Socks5Option) (*Socks5, error)

func (*Socks5) DialContext

func (ss *Socks5) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Socks5) ListenPacketContext

func (ss *Socks5) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Socks5) ProxyInfo

func (ss *Socks5) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Socks5) StreamConnContext

func (ss *Socks5) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (net.Conn, error)

StreamConnContext implements C.ProxyAdapter

type Socks5Option

type Socks5Option struct {
	BasicOption
	Name           string `proxy:"name"`
	Server         string `proxy:"server"`
	Port           int    `proxy:"port"`
	UserName       string `proxy:"username,omitempty"`
	Password       string `proxy:"password,omitempty"`
	TLS            bool   `proxy:"tls,omitempty"`
	UDP            bool   `proxy:"udp,omitempty"`
	SkipCertVerify bool   `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify string `proxy:"name-cert-verify,omitempty"`
	Fingerprint    string `proxy:"fingerprint,omitempty"`
	Certificate    string `proxy:"certificate,omitempty"`
	PrivateKey     string `proxy:"private-key,omitempty"`
}

type Ssh

type Ssh struct {
	*Base
	// contains filtered or unexported fields
}

func NewSsh

func NewSsh(option SshOption) (*Ssh, error)

func (*Ssh) Close

func (s *Ssh) Close() error

Close implements C.ProxyAdapter

func (*Ssh) DialContext

func (s *Ssh) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*Ssh) ProxyInfo

func (s *Ssh) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

type SshOption

type SshOption struct {
	BasicOption
	Name                 string   `proxy:"name"`
	Server               string   `proxy:"server"`
	Port                 int      `proxy:"port"`
	UserName             string   `proxy:"username"`
	Password             string   `proxy:"password,omitempty"`
	PrivateKey           string   `proxy:"private-key,omitempty"`
	PrivateKeyPassphrase string   `proxy:"private-key-passphrase,omitempty"`
	HostKey              []string `proxy:"host-key,omitempty"`
	HostKeyAlgorithms    []string `proxy:"host-key-algorithms,omitempty"`
}

type Sudoku

type Sudoku struct {
	*Base
	// contains filtered or unexported fields
}

func NewSudoku

func NewSudoku(option SudokuOption) (*Sudoku, error)

func (*Sudoku) Close

func (s *Sudoku) Close() error

func (*Sudoku) DialContext

func (s *Sudoku) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Sudoku) ListenPacketContext

func (s *Sudoku) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (C.PacketConn, error)

ListenPacketContext implements C.ProxyAdapter

func (*Sudoku) ProxyInfo

func (s *Sudoku) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Sudoku) SupportUOT

func (s *Sudoku) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type SudokuHTTPMaskOptions

type SudokuHTTPMaskOptions struct {
	Disable   bool   `proxy:"disable,omitempty"`
	Mode      string `proxy:"mode,omitempty"`
	TLS       bool   `proxy:"tls,omitempty"`
	Host      string `proxy:"host,omitempty"`
	PathRoot  string `proxy:"path-root,omitempty"`
	Multiplex string `proxy:"multiplex,omitempty"`
}

type SudokuOption

type SudokuOption struct {
	BasicOption
	Name               string                 `proxy:"name"`
	Server             string                 `proxy:"server"`
	Port               int                    `proxy:"port"`
	Key                string                 `proxy:"key"`
	AEADMethod         string                 `proxy:"aead-method,omitempty"`
	PaddingMin         *int                   `proxy:"padding-min,omitempty"`
	PaddingMax         *int                   `proxy:"padding-max,omitempty"`
	TableType          string                 `proxy:"table-type,omitempty"` // "prefer_ascii", "prefer_entropy", or directional "up_ascii_down_entropy"/"up_entropy_down_ascii"
	EnablePureDownlink *bool                  `proxy:"enable-pure-downlink,omitempty"`
	HTTPMask           *bool                  `proxy:"http-mask,omitempty"`
	HTTPMaskMode       string                 `proxy:"http-mask-mode,omitempty"`      // "legacy" (default), "stream", "poll", "auto", "ws"
	HTTPMaskTLS        bool                   `proxy:"http-mask-tls,omitempty"`       // only for http-mask-mode stream/poll/auto
	HTTPMaskHost       string                 `proxy:"http-mask-host,omitempty"`      // optional Host/SNI override (domain or domain:port)
	PathRoot           string                 `proxy:"path-root,omitempty"`           // optional first-level path prefix for HTTP tunnel endpoints
	Multiplex          string                 `proxy:"multiplex,omitempty"`           // "off" (default), "auto" (HTTP reuse), "on" (session mux over raw TCP or HTTPMask)
	HTTPMaskMultiplex  string                 `proxy:"http-mask-multiplex,omitempty"` // legacy flat alias for multiplex
	HTTPMaskOptions    *SudokuHTTPMaskOptions `proxy:"httpmask,omitempty"`
	CustomTable        string                 `proxy:"custom-table,omitempty"`  // optional custom byte layout, e.g. xpxvvpvv
	CustomTables       []string               `proxy:"custom-tables,omitempty"` // optional table rotation patterns, overrides custom-table when non-empty
}

type TLSMirrorConnectionEnrolment

type TLSMirrorConnectionEnrolment struct {
	PrimaryIngressOutbound string `proxy:"primary-ingress-outbound,omitempty"`
	PrimaryEgressOutbound  string `proxy:"primary-egress-outbound,omitempty"`
}

func (*TLSMirrorConnectionEnrolment) Build

type TLSMirrorOptions

type TLSMirrorOptions struct {
	PrimaryKey                    string                         `proxy:"primary-key,omitempty"`
	ExplicitNonceCipherSuites     []uint16                       `proxy:"explicit-nonce-ciphersuites,omitempty"`
	DeferInstanceDerivedWriteTime TLSMirrorTimeSpec              `proxy:"defer-instance-derived-write-time,omitempty"`
	TransportLayerPadding         TLSMirrorTransportLayerPadding `proxy:"transport-layer-padding,omitempty"`
	ConnectionEnrolment           *TLSMirrorConnectionEnrolment  `proxy:"connection-enrolment,omitempty"`
	EmbeddedTrafficGenerator      TLSMirrorTrafficGenerator      `proxy:"embedded-traffic-generator,omitempty"`
	SequenceWatermarkingEnabled   bool                           `proxy:"sequence-watermarking-enabled,omitempty"`
}

func (TLSMirrorOptions) Build

func (o TLSMirrorOptions) Build() *tlsmirror.Config

type TLSMirrorTimeSpec

type TLSMirrorTimeSpec struct {
	BaseNanoseconds                    uint64 `proxy:"base-nanoseconds,omitempty"`
	UniformRandomMultiplierNanoseconds uint64 `proxy:"uniform-random-multiplier-nanoseconds,omitempty"`
}

func (TLSMirrorTimeSpec) Build

type TLSMirrorTrafficGenerator

type TLSMirrorTrafficGenerator struct {
	Steps []TLSMirrorTrafficStep `proxy:"steps,omitempty"`
}

func (TLSMirrorTrafficGenerator) Build

type TLSMirrorTrafficHeader

type TLSMirrorTrafficHeader struct {
	Name   string   `proxy:"name,omitempty"`
	Value  string   `proxy:"value,omitempty"`
	Values []string `proxy:"values,omitempty"`
}

func (TLSMirrorTrafficHeader) Build

type TLSMirrorTrafficStep

type TLSMirrorTrafficStep struct {
	Name                         string                              `proxy:"name,omitempty"`
	Host                         string                              `proxy:"host,omitempty"`
	Path                         string                              `proxy:"path,omitempty"`
	Method                       string                              `proxy:"method,omitempty"`
	Headers                      []TLSMirrorTrafficHeader            `proxy:"headers,omitempty"`
	NextStep                     []TLSMirrorTrafficTransferCandidate `proxy:"next-step,omitempty"`
	ConnectionReady              bool                                `proxy:"connection-ready,omitempty"`
	ConnectionRecallExit         bool                                `proxy:"connection-recall-exit,omitempty"`
	WaitTime                     TLSMirrorTimeSpec                   `proxy:"wait-time,omitempty"`
	H2DoNotWaitForDownloadFinish bool                                `proxy:"h2-do-not-wait-for-download-finish,omitempty"`
}

func (TLSMirrorTrafficStep) Build

type TLSMirrorTrafficTransferCandidate

type TLSMirrorTrafficTransferCandidate struct {
	Weight       int32 `proxy:"weight,omitempty"`
	GotoLocation int   `proxy:"goto-location,omitempty"`
}

func (TLSMirrorTrafficTransferCandidate) Build

type TLSMirrorTransportLayerPadding

type TLSMirrorTransportLayerPadding struct {
	Enabled bool `proxy:"enabled,omitempty"`
}

func (TLSMirrorTransportLayerPadding) Build

type Tailscale

type Tailscale struct {
	*Base
}

func NewTailscale

func NewTailscale(option TailscaleOption) (*Tailscale, error)

type TailscaleOption

type TailscaleOption struct {
	BasicOption
	Name       string `proxy:"name"`
	Hostname   string `proxy:"hostname,omitempty"`
	AuthKey    string `proxy:"auth-key,omitempty"`
	ControlURL string `proxy:"control-url,omitempty"`
	StateDir   string `proxy:"state-dir,omitempty"`
	Ephemeral  bool   `proxy:"ephemeral,omitempty"`
	UDP        bool   `proxy:"udp,omitempty"`

	AcceptRoutes           *bool  `proxy:"accept-routes,omitempty"`
	ExitNode               string `proxy:"exit-node,omitempty"`
	ExitNodeAllowLANAccess *bool  `proxy:"exit-node-allow-lan-access,omitempty"`
}

type Trojan

type Trojan struct {
	*Base
	// contains filtered or unexported fields
}

func NewTrojan

func NewTrojan(option TrojanOption) (*Trojan, error)

func (*Trojan) Close

func (t *Trojan) Close() error

Close implements C.ProxyAdapter

func (*Trojan) DialContext

func (t *Trojan) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Trojan) ListenPacketContext

func (t *Trojan) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Trojan) ProxyInfo

func (t *Trojan) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Trojan) StreamConnContext

func (t *Trojan) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ net.Conn, err error)

func (*Trojan) SupportUOT

func (t *Trojan) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type TrojanOption

type TrojanOption struct {
	BasicOption
	Name              string           `proxy:"name"`
	Server            string           `proxy:"server"`
	Port              int              `proxy:"port"`
	Password          string           `proxy:"password"`
	ALPN              []string         `proxy:"alpn,omitempty"`
	SNI               string           `proxy:"sni,omitempty"`
	SkipCertVerify    bool             `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify    string           `proxy:"name-cert-verify,omitempty"`
	Fingerprint       string           `proxy:"fingerprint,omitempty"`
	Certificate       string           `proxy:"certificate,omitempty"`
	PrivateKey        string           `proxy:"private-key,omitempty"`
	UDP               bool             `proxy:"udp,omitempty"`
	Network           string           `proxy:"network,omitempty"`
	ECHOpts           ECHOptions       `proxy:"ech-opts,omitempty"`
	ShadowTLSOpts     ShadowTLSOptions `proxy:"shadow-tls-opts,omitempty"`
	RestlsOpts        RestlsOptions    `proxy:"restls-opts,omitempty"`
	JLSOpts           JLSOptions       `proxy:"jls-opts,omitempty"`
	RealityOpts       RealityOptions   `proxy:"reality-opts,omitempty"`
	GrpcOpts          GrpcOptions      `proxy:"grpc-opts,omitempty"`
	WSOpts            WSOptions        `proxy:"ws-opts,omitempty"`
	SSOpts            TrojanSSOption   `proxy:"ss-opts,omitempty"`
	ClientFingerprint string           `proxy:"client-fingerprint,omitempty"`
}

type TrojanSSOption

type TrojanSSOption struct {
	Enabled  bool   `proxy:"enabled,omitempty"`
	Method   string `proxy:"method,omitempty"`
	Password string `proxy:"password,omitempty"`
}

TrojanSSOption from https://github.com/p4gefau1t/trojan-go/blob/v0.10.6/tunnel/shadowsocks/config.go#L5

type TrustTunnel

type TrustTunnel struct {
	*Base
	// contains filtered or unexported fields
}

func NewTrustTunnel

func NewTrustTunnel(option TrustTunnelOption) (*TrustTunnel, error)

func (*TrustTunnel) Close

func (t *TrustTunnel) Close() error

Close implements C.ProxyAdapter

func (*TrustTunnel) DialContext

func (t *TrustTunnel) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*TrustTunnel) ListenPacketContext

func (t *TrustTunnel) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*TrustTunnel) ProxyInfo

func (t *TrustTunnel) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*TrustTunnel) SupportUOT

func (t *TrustTunnel) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type TrustTunnelOption

type TrustTunnelOption struct {
	BasicOption
	Name              string     `proxy:"name"`
	Server            string     `proxy:"server"`
	Port              int        `proxy:"port"`
	UserName          string     `proxy:"username,omitempty"`
	Password          string     `proxy:"password,omitempty"`
	ALPN              []string   `proxy:"alpn,omitempty"`
	SNI               string     `proxy:"sni,omitempty"`
	ECHOpts           ECHOptions `proxy:"ech-opts,omitempty"`
	ClientFingerprint string     `proxy:"client-fingerprint,omitempty"`
	SkipCertVerify    bool       `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify    string     `proxy:"name-cert-verify,omitempty"`
	Fingerprint       string     `proxy:"fingerprint,omitempty"`
	Certificate       string     `proxy:"certificate,omitempty"`
	PrivateKey        string     `proxy:"private-key,omitempty"`
	UDP               bool       `proxy:"udp,omitempty"`
	HealthCheck       bool       `proxy:"health-check,omitempty"`
	// quic options
	Quic                 bool   `proxy:"quic,omitempty"`
	CongestionController string `proxy:"congestion-controller,omitempty"`
	CWND                 int    `proxy:"cwnd,omitempty"`
	BBRProfile           string `proxy:"bbr-profile,omitempty"`
	// reuse options
	MaxConnections int `proxy:"max-connections,omitempty"`
	MinStreams     int `proxy:"min-streams,omitempty"`
	MaxStreams     int `proxy:"max-streams,omitempty"`
}

type Tuic

type Tuic struct {
	*Base
	// contains filtered or unexported fields
}

func NewTuic

func NewTuic(option TuicOption) (*Tuic, error)

func (*Tuic) DialContext

func (t *Tuic) DialContext(ctx context.Context, metadata *C.Metadata) (C.Conn, error)

DialContext implements C.ProxyAdapter

func (*Tuic) ListenPacketContext

func (t *Tuic) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Tuic) ProxyInfo

func (t *Tuic) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Tuic) ResetNetwork

func (t *Tuic) ResetNetwork()

type TuicOption

type TuicOption struct {
	BasicOption
	Name                  string   `proxy:"name"`
	Server                string   `proxy:"server"`
	Port                  int      `proxy:"port"`
	Token                 string   `proxy:"token,omitempty"`
	UUID                  string   `proxy:"uuid,omitempty"`
	Password              string   `proxy:"password,omitempty"`
	Ip                    string   `proxy:"ip,omitempty"`
	HeartbeatInterval     int      `proxy:"heartbeat-interval,omitempty"`
	ALPN                  []string `proxy:"alpn,omitempty"`
	ReduceRtt             bool     `proxy:"reduce-rtt,omitempty"`
	RequestTimeout        int      `proxy:"request-timeout,omitempty"`
	UdpRelayMode          string   `proxy:"udp-relay-mode,omitempty"`
	CongestionController  string   `proxy:"congestion-controller,omitempty"`
	DisableSni            bool     `proxy:"disable-sni,omitempty"`
	MaxUdpRelayPacketSize int      `proxy:"max-udp-relay-packet-size,omitempty"`

	FastOpen             bool       `proxy:"fast-open,omitempty"`
	MaxOpenStreams       int        `proxy:"max-open-streams,omitempty"`
	CWND                 int        `proxy:"cwnd,omitempty"`
	BBRProfile           string     `proxy:"bbr-profile,omitempty"`
	SkipCertVerify       bool       `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify       string     `proxy:"name-cert-verify,omitempty"`
	Fingerprint          string     `proxy:"fingerprint,omitempty"`
	Certificate          string     `proxy:"certificate,omitempty"`
	PrivateKey           string     `proxy:"private-key,omitempty"`
	ReceiveWindowConn    int        `proxy:"recv-window-conn,omitempty"`
	ReceiveWindow        int        `proxy:"recv-window,omitempty"`
	DisableMTUDiscovery  bool       `proxy:"disable-mtu-discovery,omitempty"`
	MaxDatagramFrameSize int        `proxy:"max-datagram-frame-size,omitempty"`
	SNI                  string     `proxy:"sni,omitempty"`
	ECHOpts              ECHOptions `proxy:"ech-opts,omitempty"`

	UDPOverStream        bool `proxy:"udp-over-stream,omitempty"`
	UDPOverStreamVersion int  `proxy:"udp-over-stream-version,omitempty"`
}

type Vless

type Vless struct {
	*Base
	// contains filtered or unexported fields
}

func NewVless

func NewVless(option VlessOption) (*Vless, error)

func (*Vless) Close

func (v *Vless) Close() error

Close implements C.ProxyAdapter

func (*Vless) DialContext

func (v *Vless) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Vless) ListenPacketContext

func (v *Vless) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Vless) ProxyInfo

func (v *Vless) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Vless) StreamConnContext

func (v *Vless) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ net.Conn, err error)

func (*Vless) SupportUOT

func (v *Vless) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type VlessOption

type VlessOption struct {
	BasicOption
	Name              string            `proxy:"name"`
	Server            string            `proxy:"server"`
	Port              int               `proxy:"port"`
	UUID              string            `proxy:"uuid"`
	Flow              string            `proxy:"flow,omitempty"`
	TLS               bool              `proxy:"tls,omitempty"`
	ALPN              []string          `proxy:"alpn,omitempty"`
	UDP               bool              `proxy:"udp,omitempty"`
	PacketAddr        bool              `proxy:"packet-addr,omitempty"`
	XUDP              bool              `proxy:"xudp,omitempty"`
	PacketEncoding    string            `proxy:"packet-encoding,omitempty"`
	Encryption        string            `proxy:"encryption,omitempty"`
	Network           string            `proxy:"network,omitempty"`
	ECHOpts           ECHOptions        `proxy:"ech-opts,omitempty"`
	ShadowTLSOpts     ShadowTLSOptions  `proxy:"shadow-tls-opts,omitempty"`
	RestlsOpts        RestlsOptions     `proxy:"restls-opts,omitempty"`
	JLSOpts           JLSOptions        `proxy:"jls-opts,omitempty"`
	RealityOpts       RealityOptions    `proxy:"reality-opts,omitempty"`
	HTTPOpts          HTTPOptions       `proxy:"http-opts,omitempty"`
	HTTP2Opts         HTTP2Options      `proxy:"h2-opts,omitempty"`
	GrpcOpts          GrpcOptions       `proxy:"grpc-opts,omitempty"`
	WSOpts            WSOptions         `proxy:"ws-opts,omitempty"`
	XHTTPOpts         XHTTPOptions      `proxy:"xhttp-opts,omitempty"`
	WSHeaders         map[string]string `proxy:"ws-headers,omitempty"`
	SkipCertVerify    bool              `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify    string            `proxy:"name-cert-verify,omitempty"`
	Fingerprint       string            `proxy:"fingerprint,omitempty"`
	Certificate       string            `proxy:"certificate,omitempty"`
	PrivateKey        string            `proxy:"private-key,omitempty"`
	ServerName        string            `proxy:"servername,omitempty"`
	ClientFingerprint string            `proxy:"client-fingerprint,omitempty"`
}

type Vmess

type Vmess struct {
	*Base
	// contains filtered or unexported fields
}

func NewVmess

func NewVmess(option VmessOption) (*Vmess, error)

func (*Vmess) Close

func (v *Vmess) Close() error

Close implements C.ProxyAdapter

func (*Vmess) DialContext

func (v *Vmess) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

DialContext implements C.ProxyAdapter

func (*Vmess) ListenPacketContext

func (v *Vmess) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

ListenPacketContext implements C.ProxyAdapter

func (*Vmess) ProxyInfo

func (v *Vmess) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*Vmess) StreamConnContext

func (v *Vmess) StreamConnContext(ctx context.Context, c net.Conn, metadata *C.Metadata) (_ net.Conn, err error)

func (*Vmess) SupportUOT

func (v *Vmess) SupportUOT() bool

SupportUOT implements C.ProxyAdapter

type VmessOption

type VmessOption struct {
	BasicOption
	Name                string           `proxy:"name"`
	Server              string           `proxy:"server"`
	Port                int              `proxy:"port"`
	UUID                string           `proxy:"uuid"`
	AlterID             int              `proxy:"alterId"`
	Cipher              string           `proxy:"cipher"`
	UDP                 bool             `proxy:"udp,omitempty"`
	Network             string           `proxy:"network,omitempty"`
	TLS                 bool             `proxy:"tls,omitempty"`
	ALPN                []string         `proxy:"alpn,omitempty"`
	SkipCertVerify      bool             `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify      string           `proxy:"name-cert-verify,omitempty"`
	Fingerprint         string           `proxy:"fingerprint,omitempty"`
	Certificate         string           `proxy:"certificate,omitempty"`
	PrivateKey          string           `proxy:"private-key,omitempty"`
	ServerName          string           `proxy:"servername,omitempty"`
	ECHOpts             ECHOptions       `proxy:"ech-opts,omitempty"`
	ShadowTLSOpts       ShadowTLSOptions `proxy:"shadow-tls-opts,omitempty"`
	RestlsOpts          RestlsOptions    `proxy:"restls-opts,omitempty"`
	JLSOpts             JLSOptions       `proxy:"jls-opts,omitempty"`
	RealityOpts         RealityOptions   `proxy:"reality-opts,omitempty"`
	TLSMirrorOpts       TLSMirrorOptions `proxy:"tlsmirror-opts,omitempty"`
	MekyaOpts           MekyaOptions     `proxy:"mekya-opts,omitempty"`
	MKCPOpts            MKCPOptions      `proxy:"mkcp-opts,omitempty"`
	HTTPOpts            HTTPOptions      `proxy:"http-opts,omitempty"`
	HTTP2Opts           HTTP2Options     `proxy:"h2-opts,omitempty"`
	GrpcOpts            GrpcOptions      `proxy:"grpc-opts,omitempty"`
	WSOpts              WSOptions        `proxy:"ws-opts,omitempty"`
	PacketAddr          bool             `proxy:"packet-addr,omitempty"`
	XUDP                bool             `proxy:"xudp,omitempty"`
	PacketEncoding      string           `proxy:"packet-encoding,omitempty"`
	GlobalPadding       bool             `proxy:"global-padding,omitempty"`
	AuthenticatedLength bool             `proxy:"authenticated-length,omitempty"`
	ClientFingerprint   string           `proxy:"client-fingerprint,omitempty"`
}

type WSOptions

type WSOptions struct {
	Path                     string            `proxy:"path,omitempty"`
	Headers                  map[string]string `proxy:"headers,omitempty"`
	MaxEarlyData             int               `proxy:"max-early-data,omitempty"`
	EarlyDataHeaderName      string            `proxy:"early-data-header-name,omitempty"`
	V2rayHttpUpgrade         bool              `proxy:"v2ray-http-upgrade,omitempty"`
	V2rayHttpUpgradeFastOpen bool              `proxy:"v2ray-http-upgrade-fast-open,omitempty"`
}

type WireGuard

type WireGuard struct {
	*Base
	// contains filtered or unexported fields
}

func NewWireGuard

func NewWireGuard(option WireGuardOption) (*WireGuard, error)

func (*WireGuard) Close

func (w *WireGuard) Close() error

Close implements C.ProxyAdapter

func (*WireGuard) DialContext

func (w *WireGuard) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*WireGuard) IsL3Protocol

func (w *WireGuard) IsL3Protocol(metadata *C.Metadata) bool

IsL3Protocol implements C.ProxyAdapter

func (*WireGuard) ListenPacketContext

func (w *WireGuard) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*WireGuard) ProxyInfo

func (w *WireGuard) ProxyInfo() C.ProxyInfo

ProxyInfo implements C.ProxyAdapter

func (*WireGuard) ResolveUDP

func (w *WireGuard) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type WireGuardOption

type WireGuardOption struct {
	BasicOption
	WireGuardPeerOption
	Name                string `proxy:"name"`
	Ip                  string `proxy:"ip,omitempty"`
	Ipv6                string `proxy:"ipv6,omitempty"`
	PrivateKey          string `proxy:"private-key"`
	Workers             int    `proxy:"workers,omitempty"`
	MTU                 int    `proxy:"mtu,omitempty"`
	UDP                 bool   `proxy:"udp,omitempty"`
	PersistentKeepalive int    `proxy:"persistent-keepalive,omitempty"`

	IPStack IPStackOption `proxy:"ip-stack,omitempty"`

	AmneziaWGOption *AmneziaWGOption `proxy:"amnezia-wg-option,omitempty"`

	Peers []WireGuardPeerOption `proxy:"peers,omitempty"`

	RemoteDnsResolve bool     `proxy:"remote-dns-resolve,omitempty"`
	Dns              []string `proxy:"dns,omitempty"`

	RefreshServerIPInterval int `proxy:"refresh-server-ip-interval,omitempty"`
}

func (WireGuardOption) Prefixes

func (option WireGuardOption) Prefixes() ([]netip.Prefix, error)

type WireGuardPeerOption

type WireGuardPeerOption struct {
	Server       string   `proxy:"server,omitempty"`
	Port         int      `proxy:"port,omitempty"`
	PublicKey    string   `proxy:"public-key,omitempty"`
	PreSharedKey string   `proxy:"pre-shared-key,omitempty"`
	Reserved     []uint8  `proxy:"reserved,omitempty"`
	AllowedIPs   []string `proxy:"allowed-ips,omitempty"`
}

func (WireGuardPeerOption) Addr

func (option WireGuardPeerOption) Addr() M.Socksaddr

type XHTTPDownloadSettings

type XHTTPDownloadSettings struct {
	// xhttp part
	Path          *string             `proxy:"path,omitempty"`
	Host          *string             `proxy:"host,omitempty"`
	Headers       *map[string]string  `proxy:"headers,omitempty"`
	ReuseSettings *XHTTPReuseSettings `proxy:"reuse-settings,omitempty"` // aka XMUX
	// proxy part
	Server            *string           `proxy:"server,omitempty"`
	Port              *int              `proxy:"port,omitempty"`
	TLS               *bool             `proxy:"tls,omitempty"`
	ALPN              *[]string         `proxy:"alpn,omitempty"`
	ECHOpts           *ECHOptions       `proxy:"ech-opts,omitempty"`
	ShadowTLSOpts     *ShadowTLSOptions `proxy:"shadow-tls-opts,omitempty"`
	RestlsOpts        *RestlsOptions    `proxy:"restls-opts,omitempty"`
	JLSOpts           *JLSOptions       `proxy:"jls-opts,omitempty"`
	RealityOpts       *RealityOptions   `proxy:"reality-opts,omitempty"`
	SkipCertVerify    *bool             `proxy:"skip-cert-verify,omitempty"`
	NameCertVerify    *string           `proxy:"name-cert-verify,omitempty"`
	Fingerprint       *string           `proxy:"fingerprint,omitempty"`
	Certificate       *string           `proxy:"certificate,omitempty"`
	PrivateKey        *string           `proxy:"private-key,omitempty"`
	ServerName        *string           `proxy:"servername,omitempty"`
	ClientFingerprint *string           `proxy:"client-fingerprint,omitempty"`
}

type XHTTPOptions

type XHTTPOptions struct {
	Path                 string                 `proxy:"path,omitempty"`
	Host                 string                 `proxy:"host,omitempty"`
	Mode                 string                 `proxy:"mode,omitempty"`
	Headers              map[string]string      `proxy:"headers,omitempty"`
	NoGRPCHeader         bool                   `proxy:"no-grpc-header,omitempty"`
	XPaddingBytes        string                 `proxy:"x-padding-bytes,omitempty"`
	XPaddingObfsMode     bool                   `proxy:"x-padding-obfs-mode,omitempty"`
	XPaddingKey          string                 `proxy:"x-padding-key,omitempty"`
	XPaddingHeader       string                 `proxy:"x-padding-header,omitempty"`
	XPaddingPlacement    string                 `proxy:"x-padding-placement,omitempty"`
	XPaddingMethod       string                 `proxy:"x-padding-method,omitempty"`
	UplinkHTTPMethod     string                 `proxy:"uplink-http-method,omitempty"`
	SessionPlacement     string                 `proxy:"session-placement,omitempty"`
	SessionKey           string                 `proxy:"session-key,omitempty"`
	SessionTable         string                 `proxy:"session-table,omitempty"`
	SessionLength        string                 `proxy:"session-length,omitempty"`
	SeqPlacement         string                 `proxy:"seq-placement,omitempty"`
	SeqKey               string                 `proxy:"seq-key,omitempty"`
	UplinkDataPlacement  string                 `proxy:"uplink-data-placement,omitempty"`
	UplinkDataKey        string                 `proxy:"uplink-data-key,omitempty"`
	UplinkChunkSize      string                 `proxy:"uplink-chunk-size,omitempty"`
	ScMaxEachPostBytes   string                 `proxy:"sc-max-each-post-bytes,omitempty"`
	ScMinPostsIntervalMs string                 `proxy:"sc-min-posts-interval-ms,omitempty"`
	ReuseSettings        *XHTTPReuseSettings    `proxy:"reuse-settings,omitempty"` // aka XMUX
	DownloadSettings     *XHTTPDownloadSettings `proxy:"download-settings,omitempty"`
}

type XHTTPReuseSettings

type XHTTPReuseSettings struct {
	MaxConcurrency   string `proxy:"max-concurrency,omitempty"`
	MaxConnections   string `proxy:"max-connections,omitempty"`
	CMaxReuseTimes   string `proxy:"c-max-reuse-times,omitempty"`
	HMaxRequestTimes string `proxy:"h-max-request-times,omitempty"`
	HMaxReusableSecs string `proxy:"h-max-reusable-secs,omitempty"`
	HKeepAlivePeriod int    `proxy:"h-keep-alive-period,omitempty"`
}

type ZeroTier

type ZeroTier struct {
	*Base
	// contains filtered or unexported fields
}

func NewZeroTier

func NewZeroTier(option ZeroTierOption) (*ZeroTier, error)

func (*ZeroTier) Close

func (z *ZeroTier) Close() error

func (*ZeroTier) DialContext

func (z *ZeroTier) DialContext(ctx context.Context, metadata *C.Metadata) (_ C.Conn, err error)

func (*ZeroTier) IsL3Protocol

func (z *ZeroTier) IsL3Protocol(*C.Metadata) bool

func (*ZeroTier) ListenPacketContext

func (z *ZeroTier) ListenPacketContext(ctx context.Context, metadata *C.Metadata) (_ C.PacketConn, err error)

func (*ZeroTier) ProxyInfo

func (z *ZeroTier) ProxyInfo() C.ProxyInfo

func (*ZeroTier) ResolveUDP

func (z *ZeroTier) ResolveUDP(ctx context.Context, metadata *C.Metadata) error

type ZeroTierOption

type ZeroTierOption struct {
	BasicOption
	Name              string                `proxy:"name"`
	Network           string                `proxy:"network"`
	StateDir          string                `proxy:"state-dir,omitempty"`
	IdentitySecret    string                `proxy:"identity-secret,omitempty"`
	Planet            string                `proxy:"planet,omitempty"`
	MTU               int                   `proxy:"mtu,omitempty"`
	IPStack           IPStackOption         `proxy:"ip-stack,omitempty"`
	PhysicalMTU       int                   `proxy:"physical-mtu,omitempty"`
	UDP               bool                  `proxy:"udp,omitempty"`
	RemoteDnsResolve  bool                  `proxy:"remote-dns-resolve,omitempty"`
	Dns               []string              `proxy:"dns,omitempty"`
	LowBandwidth      bool                  `proxy:"low-bandwidth,omitempty"`
	EncryptedHello    bool                  `proxy:"encrypted-hello,omitempty"`
	PrimaryPort       int                   `proxy:"primary-port,omitempty"`
	SecondaryPort     int                   `proxy:"secondary-port,omitempty"`
	TCPFallbackMode   string                `proxy:"tcp-fallback-mode,omitempty"`
	TCPFallbackRelay  string                `proxy:"tcp-fallback-relay,omitempty"`
	Orbit             []ZeroTierOrbitOption `proxy:"orbit,omitempty"`
	RemoteTraceTarget string                `proxy:"remote-trace-target,omitempty"`
	RemoteTraceLevel  uint64                `proxy:"remote-trace-level,omitempty"`
}

type ZeroTierOrbitOption

type ZeroTierOrbitOption struct {
	World string `proxy:"world"`
	Seed  string `proxy:"seed"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL