diff --git a/client/internal/connect.go b/client/internal/connect.go index c0b1a1082..6770a49a8 100644 --- a/client/internal/connect.go +++ b/client/internal/connect.go @@ -27,7 +27,6 @@ import ( "github.com/netbirdio/netbird/client/iface/device" "github.com/netbirdio/netbird/client/iface/netstack" "github.com/netbirdio/netbird/client/internal/dns" - "github.com/netbirdio/netbird/client/internal/filedrop" "github.com/netbirdio/netbird/client/internal/lazyconn" "github.com/netbirdio/netbird/client/internal/listener" "github.com/netbirdio/netbird/client/internal/metrics" @@ -70,7 +69,7 @@ type ConnectClient struct { engineMutex sync.Mutex clientMetrics *metrics.ClientMetrics updateManager *updater.Manager - fileDropManager *filedrop.Manager + fileDropManager fileDropManager persistSyncResponse bool @@ -117,7 +116,7 @@ func (c *ConnectClient) SetUpdateManager(um *updater.Manager) { // SetFileDropManager hands the engine the active profile's file drop manager, so // the transfer receiver starts and stops with the tunnel. Must be set before Run. -func (c *ConnectClient) SetFileDropManager(m *filedrop.Manager) { +func (c *ConnectClient) SetFileDropManager(m fileDropManager) { c.fileDropManager = m } diff --git a/client/internal/engine.go b/client/internal/engine.go index d9fe42059..a587b5f2d 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -40,7 +40,6 @@ import ( dnsconfig "github.com/netbirdio/netbird/client/internal/dns/config" "github.com/netbirdio/netbird/client/internal/dnsfwd" "github.com/netbirdio/netbird/client/internal/expose" - "github.com/netbirdio/netbird/client/internal/filedrop" "github.com/netbirdio/netbird/client/internal/ingressgw" "github.com/netbirdio/netbird/client/internal/lazyconn" "github.com/netbirdio/netbird/client/internal/metrics" @@ -191,7 +190,7 @@ type EngineServices struct { UpdateManager *updater.Manager ClientMetrics *metrics.ClientMetrics MetricsCtx context.Context - FileDrop *filedrop.Manager + FileDrop fileDropManager // NetMgr gates the reconnection loops on OS-reported network // availability; nil disables gating. NetMgr *netevents.Manager @@ -254,7 +253,7 @@ type Engine struct { sshServer sshServer - fileDrop *filedrop.Manager + fileDrop fileDropManager fileDropRunning bool fileDropPort uint16 overlayWait overlayWaiter //nolint:unused // only read by the iOS overlay wait diff --git a/client/internal/engine_filedrop.go b/client/internal/engine_filedrop.go index 229d86347..12bda3c78 100644 --- a/client/internal/engine_filedrop.go +++ b/client/internal/engine_filedrop.go @@ -1,3 +1,5 @@ +//go:build !js + package internal import ( diff --git a/client/internal/engine_filedrop_dial.go b/client/internal/engine_filedrop_dial.go index 175440b23..a798249f8 100644 --- a/client/internal/engine_filedrop_dial.go +++ b/client/internal/engine_filedrop_dial.go @@ -1,4 +1,4 @@ -//go:build !ios +//go:build !ios && !js package internal diff --git a/client/internal/engine_filedrop_js.go b/client/internal/engine_filedrop_js.go new file mode 100644 index 000000000..8049b8b28 --- /dev/null +++ b/client/internal/engine_filedrop_js.go @@ -0,0 +1,14 @@ +//go:build js + +package internal + +// File drop is not supported on wasm: there is no local filesystem to deliver +// into and no way to bind a receiver. The engine still calls these on the +// start, stop and overlay rebind paths, so they exist as no-ops and keep the +// filedrop package out of the wasm binary. + +func (e *Engine) startFileDrop() {} + +func (e *Engine) stopFileDrop() {} + +func (e *Engine) restartFileDrop() error { return nil } diff --git a/client/internal/engine_filedrop_type.go b/client/internal/engine_filedrop_type.go new file mode 100644 index 000000000..f5742a0e6 --- /dev/null +++ b/client/internal/engine_filedrop_type.go @@ -0,0 +1,7 @@ +//go:build !js + +package internal + +import "github.com/netbirdio/netbird/client/internal/filedrop" + +type fileDropManager = *filedrop.Manager diff --git a/client/internal/engine_filedrop_type_js.go b/client/internal/engine_filedrop_type_js.go new file mode 100644 index 000000000..a6208f862 --- /dev/null +++ b/client/internal/engine_filedrop_type_js.go @@ -0,0 +1,9 @@ +//go:build js + +package internal + +// fileDropManager keeps the engine and ConnectClient fields typed on wasm, +// where file drop is not supported and the manager is always nil. Aliasing a +// pointer keeps the nil guards and stays out of the filedrop package, so its +// HTTP server and client never reach the wasm binary. +type fileDropManager = *struct{}