123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package option
- import (
- "net/netip"
- "net/url"
- "reflect"
- "github.com/sagernet/sing/common/json"
- "github.com/sagernet/sing/common/json/badoption"
- M "github.com/sagernet/sing/common/metadata"
- )
- type TailscaleEndpointOptions struct {
- DialerOptions
- StateDirectory string `json:"state_directory,omitempty"`
- AuthKey string `json:"auth_key,omitempty"`
- ControlURL string `json:"control_url,omitempty"`
- Ephemeral bool `json:"ephemeral,omitempty"`
- Hostname string `json:"hostname,omitempty"`
- AcceptRoutes bool `json:"accept_routes,omitempty"`
- ExitNode string `json:"exit_node,omitempty"`
- ExitNodeAllowLANAccess bool `json:"exit_node_allow_lan_access,omitempty"`
- AdvertiseRoutes []netip.Prefix `json:"advertise_routes,omitempty"`
- AdvertiseExitNode bool `json:"advertise_exit_node,omitempty"`
- UDPTimeout UDPTimeoutCompat `json:"udp_timeout,omitempty"`
- }
- type TailscaleDNSServerOptions struct {
- Endpoint string `json:"endpoint,omitempty"`
- AcceptDefaultResolvers bool `json:"accept_default_resolvers,omitempty"`
- }
- type DERPServiceOptions struct {
- ListenOptions
- InboundTLSOptionsContainer
- ConfigPath string `json:"config_path,omitempty"`
- VerifyClientEndpoint badoption.Listable[string] `json:"verify_client_endpoint,omitempty"`
- VerifyClientURL badoption.Listable[*DERPVerifyClientURLOptions] `json:"verify_client_url,omitempty"`
- Home string `json:"home,omitempty"`
- MeshWith badoption.Listable[*DERPMeshOptions] `json:"mesh_with,omitempty"`
- MeshPSK string `json:"mesh_psk,omitempty"`
- MeshPSKFile string `json:"mesh_psk_file,omitempty"`
- STUN *DERPSTUNListenOptions `json:"stun,omitempty"`
- }
- type _DERPVerifyClientURLOptions struct {
- URL string `json:"url,omitempty"`
- DialerOptions
- }
- type DERPVerifyClientURLOptions _DERPVerifyClientURLOptions
- func (d DERPVerifyClientURLOptions) ServerIsDomain() bool {
- verifyURL, err := url.Parse(d.URL)
- if err != nil {
- return false
- }
- return M.IsDomainName(verifyURL.Host)
- }
- func (d DERPVerifyClientURLOptions) MarshalJSON() ([]byte, error) {
- if reflect.DeepEqual(d, _DERPVerifyClientURLOptions{}) {
- return json.Marshal(d.URL)
- } else {
- return json.Marshal(_DERPVerifyClientURLOptions(d))
- }
- }
- func (d *DERPVerifyClientURLOptions) UnmarshalJSON(bytes []byte) error {
- var stringValue string
- err := json.Unmarshal(bytes, &stringValue)
- if err == nil {
- d.URL = stringValue
- return nil
- }
- return json.Unmarshal(bytes, (*_DERPVerifyClientURLOptions)(d))
- }
- type DERPMeshOptions struct {
- ServerOptions
- Host string `json:"host,omitempty"`
- OutboundTLSOptionsContainer
- DialerOptions
- }
- type _DERPSTUNListenOptions struct {
- Enabled bool
- ListenOptions
- }
- type DERPSTUNListenOptions _DERPSTUNListenOptions
- func (d DERPSTUNListenOptions) MarshalJSON() ([]byte, error) {
- portOptions := _DERPSTUNListenOptions{
- Enabled: d.Enabled,
- ListenOptions: ListenOptions{
- ListenPort: d.ListenPort,
- },
- }
- if _DERPSTUNListenOptions(d) == portOptions {
- return json.Marshal(d.Enabled)
- } else {
- return json.Marshal(_DERPSTUNListenOptions(d))
- }
- }
- func (d *DERPSTUNListenOptions) UnmarshalJSON(bytes []byte) error {
- var portValue uint16
- err := json.Unmarshal(bytes, &portValue)
- if err == nil {
- d.Enabled = true
- d.ListenPort = portValue
- return nil
- }
- return json.Unmarshal(bytes, (*_DERPSTUNListenOptions)(d))
- }
|