sing-box/experimental/libbox/platform.go

116 lines
2.7 KiB
Go
Raw Normal View History

2022-10-25 12:55:00 +08:00
package libbox
2023-04-18 14:04:09 +08:00
import (
"github.com/sagernet/sing-box/option"
)
2023-02-28 19:02:27 +08:00
2022-10-25 12:55:00 +08:00
type PlatformInterface interface {
UsePlatformAutoDetectInterfaceControl() bool
2022-10-25 12:55:00 +08:00
AutoDetectInterfaceControl(fd int32) error
2023-02-26 19:16:28 +08:00
OpenTun(options TunOptions) (int32, error)
2022-10-25 12:55:00 +08: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 14:04:09 +08:00
UsePlatformDefaultInterfaceMonitor() bool
StartDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
CloseDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
UsePlatformInterfaceGetter() bool
GetInterfaces() (NetworkInterfaceIterator, error)
UnderNetworkExtension() bool
2024-05-07 20:34:24 +08:00
IncludeAllNetworks() bool
ReadWIFIState() *WIFIState
ClearDNSCache()
2024-11-06 12:51:53 +08:00
SendNotification(notification *Notification) error
2022-10-25 12:55:00 +08:00
}
type TunInterface interface {
FileDescriptor() int32
Close() error
}
2023-02-28 19:02:27 +08:00
2023-04-18 14:04:09 +08:00
type InterfaceUpdateListener interface {
UpdateDefaultInterface(interfaceName string, interfaceIndex int32)
}
type NetworkInterface struct {
Index int32
MTU int32
Name string
Addresses StringIterator
2024-10-29 15:28:58 +08:00
Flags int32
2023-04-18 14:04:09 +08:00
}
type WIFIState struct {
SSID string
BSSID string
}
func NewWIFIState(wifiSSID string, wifiBSSID string) *WIFIState {
return &WIFIState{wifiSSID, wifiBSSID}
}
2023-04-18 14:04:09 +08:00
type NetworkInterfaceIterator interface {
Next() *NetworkInterface
2023-02-28 19:02:27 +08:00
HasNext() bool
}
2024-11-06 12:51:53 +08:00
type Notification struct {
Identifier string
TypeName string
TypeID int32
Title string
Subtitle string
Body string
OpenURL string
}
2023-02-28 19:02:27 +08:00
type OnDemandRule interface {
Target() int32
DNSSearchDomainMatch() StringIterator
DNSServerAddressMatch() StringIterator
InterfaceTypeMatch() int32
SSIDMatch() StringIterator
ProbeURL() string
}
2023-04-18 14:04:09 +08:00
type OnDemandRuleIterator interface {
Next() OnDemandRule
HasNext() bool
}
2023-02-28 19:02:27 +08: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
}