diff --git a/api/api.go b/api/api.go index a7e2f24..91d9f37 100644 --- a/api/api.go +++ b/api/api.go @@ -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) diff --git a/olm/olm.go b/olm/olm.go index f84ee4f..9cc1f51 100644 --- a/olm/olm.go +++ b/olm/olm.go @@ -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)