sing-box/experimental/libbox/platform.go

126 lines
3 KiB
Go
Raw Permalink Normal View History

2022-10-25 04:55:00 +00:00
package libbox
2023-04-18 06:04:09 +00:00
import (
2024-11-11 08:23:45 +00:00
C "github.com/sagernet/sing-box/constant"
2023-04-18 06:04:09 +00:00
"github.com/sagernet/sing-box/option"
)
2023-02-28 11:02:27 +00:00
2022-10-25 04:55:00 +00:00
type PlatformInterface interface {
UsePlatformAutoDetectInterfaceControl() bool
2022-10-25 04:55:00 +00:00
AutoDetectInterfaceControl(fd int32) error
2023-02-26 11:16:28 +00:00
OpenTun(options TunOptions) (int32, error)
2022-10-25 04:55:00 +00:00
WriteLog(message string)
UseProcFS() bool
FindConnectionOwner(ipProtocol int32, sourceAddress string, sourcePort int32, destinationAddress string, destinationPort int32) (int32, error)
PackageNameByUid(uid int32) (string, error)
UIDByPackageName(packageName string) (int32, error)
2023-04-18 06:04:09 +00:00
StartDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
CloseDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
GetInterfaces() (NetworkInterfaceIterator, error)
UnderNetworkExtension() bool
2024-05-07 12:34:24 +00:00
IncludeAllNetworks() bool
ReadWIFIState() *WIFIState
ClearDNSCache()
2024-11-06 04:51:53 +00:00
SendNotification(notification *Notification) error
2022-10-25 04:55:00 +00:00
}
type TunInterface interface {
FileDescriptor() int32
Close() error
}
2023-02-28 11:02:27 +00:00
2023-04-18 06:04:09 +00:00
type InterfaceUpdateListener interface {
2024-11-11 08:23:45 +00:00
UpdateDefaultInterface(interfaceName string, interfaceIndex int32, isExpensive bool, isConstrained bool)
2023-04-18 06:04:09 +00:00
}
2024-11-11 08:23:45 +00:00
const (
2024-11-13 11:05:28 +00:00
InterfaceTypeWIFI = int32(C.InterfaceTypeWIFI)
InterfaceTypeCellular = int32(C.InterfaceTypeCellular)
InterfaceTypeEthernet = int32(C.InterfaceTypeEthernet)
InterfaceTypeOther = int32(C.InterfaceTypeOther)
2024-11-11 08:23:45 +00:00
)
2023-04-18 06:04:09 +00:00
type NetworkInterface struct {
Index int32
MTU int32
Name string
Addresses StringIterator
2024-10-29 07:28:58 +00:00
Flags int32
2024-11-11 08:23:45 +00:00
2024-11-13 11:05:28 +00:00
Type int32
2024-11-11 08:23:45 +00:00
DNSServer StringIterator
Metered bool
2023-04-18 06:04:09 +00:00
}
type WIFIState struct {
SSID string
BSSID string
}
func NewWIFIState(wifiSSID string, wifiBSSID string) *WIFIState {
return &WIFIState{wifiSSID, wifiBSSID}
}
2023-04-18 06:04:09 +00:00
type NetworkInterfaceIterator interface {
Next() *NetworkInterface
2023-02-28 11:02:27 +00:00
HasNext() bool
}
2024-11-06 04:51:53 +00:00
type Notification struct {
Identifier string
TypeName string
TypeID int32
Title string
Subtitle string
Body string
OpenURL string
}
2023-02-28 11:02:27 +00:00
type OnDemandRule interface {
Target() int32
DNSSearchDomainMatch() StringIterator
DNSServerAddressMatch() StringIterator
InterfaceTypeMatch() int32
SSIDMatch() StringIterator
ProbeURL() string
}
2023-04-18 06:04:09 +00:00
type OnDemandRuleIterator interface {
Next() OnDemandRule
HasNext() bool
}
2023-02-28 11:02:27 +00:00
type onDemandRule struct {
option.OnDemandRule
}
func (r *onDemandRule) Target() int32 {
if r.OnDemandRule.Action == nil {
return -1
}
return int32(*r.OnDemandRule.Action)
}
func (r *onDemandRule) DNSSearchDomainMatch() StringIterator {
return newIterator(r.OnDemandRule.DNSSearchDomainMatch)
}
func (r *onDemandRule) DNSServerAddressMatch() StringIterator {
return newIterator(r.OnDemandRule.DNSServerAddressMatch)
}
func (r *onDemandRule) InterfaceTypeMatch() int32 {
if r.OnDemandRule.InterfaceTypeMatch == nil {
return -1
}
return int32(*r.OnDemandRule.InterfaceTypeMatch)
}
func (r *onDemandRule) SSIDMatch() StringIterator {
return newIterator(r.OnDemandRule.SSIDMatch)
}
func (r *onDemandRule) ProbeURL() string {
return r.OnDemandRule.ProbeURL
}