Use a different method on android

This commit is contained in:
Owen
2025-12-30 16:59:36 -05:00
parent ece4239aaa
commit adf4c21f7b
2 changed files with 22 additions and 2 deletions

View File

@@ -102,6 +102,14 @@ func NewAPISocket(socketPath string) *API {
return s
}
func NewAPIStub() *API {
s := &API{
peerStatuses: make(map[int]*PeerStatus),
}
return s
}
// SetHandlers sets the callback functions for handling API requests
func (s *API) SetHandlers(
onConnect func(ConnectionRequest) error,
@@ -117,6 +125,10 @@ func (s *API) SetHandlers(
// Start starts the HTTP server
func (s *API) Start() error {
if s.socketPath == "" && s.addr == "" {
return fmt.Errorf("either socketPath or addr must be provided to start the API server")
}
mux := http.NewServeMux()
mux.HandleFunc("/connect", s.handleConnect)
mux.HandleFunc("/status", s.handleStatus)

View File

@@ -111,6 +111,9 @@ func Init(ctx context.Context, config GlobalConfig) {
apiServer = api.NewAPI(config.HTTPAddr)
} else if config.SocketPath != "" {
apiServer = api.NewAPISocket(config.SocketPath)
} else {
// this is so is not null but it cant be started without either the socket path or http addr
apiServer = api.NewAPIStub()
}
apiServer.SetVersion(config.Version)
@@ -304,7 +307,12 @@ func StartTunnel(config TunnelConfig) {
tdev, err = func() (tun.Device, error) {
if config.FileDescriptorTun != 0 {
return olmDevice.CreateTUNFromFD(config.FileDescriptorTun, config.MTU)
if runtime.GOOS == "android" { // otherwise we get a permission denied
theTun, _, err := tun.CreateUnmonitoredTUNFromFD(int(config.FileDescriptorTun))
return theTun, err
} else {
return olmDevice.CreateTUNFromFD(config.FileDescriptorTun, config.MTU)
}
}
var ifName = interfaceName
if runtime.GOOS == "darwin" { // this is if we dont pass a fd
@@ -811,7 +819,7 @@ func StartTunnel(config TunnelConfig) {
Endpoint: handshakeData.ExitNode.Endpoint,
RelayPort: relayPort,
PublicKey: handshakeData.ExitNode.PublicKey,
SiteIds: []int{siteId},
SiteIds: []int{siteId},
}
added := holePunchManager.AddExitNode(exitNode)