@@ -2,6 +2,7 @@ package water
22
33import (
44 "context"
5+ "fmt"
56 "io"
67 "log/slog"
78 "net"
@@ -13,6 +14,7 @@ import (
1314 "time"
1415
1516 waterDownloader "github.com/getlantern/lantern-water/downloader"
17+ "github.com/getlantern/lantern-water/seed"
1618 waterVC "github.com/getlantern/lantern-water/version_control"
1719 "github.com/refraction-networking/water"
1820 _ "github.com/refraction-networking/water/transport/v1"
@@ -47,6 +49,7 @@ type Outbound struct {
4749 dialerConfig * water.Config
4850 transportModuleConfig map [string ]any
4951 dialMutex sync.Mutex
52+ seeder * seed.Seeder
5053}
5154
5255// NewOutbound creates a new WATER outbound adapter.
@@ -118,10 +121,28 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
118121 dialMutex : sync.Mutex {},
119122 skipHandshake : options .SkipHandshake ,
120123 }
124+ if options .SeedEnabled {
125+ transportFilepath := filepath .Join (wasmDir , fmt .Sprintf ("%s.%s" , options .Transport , "wasm" ))
126+ seeder , err := seed .New (transportFilepath , options .AnnounceList )
127+ if err != nil {
128+ logger .WarnContext (ctx , "failed to seed WASM" , slog .Any ("error" , err ), slog .String ("transport" , transportFilepath ))
129+ }
130+ if seeder != nil {
131+ log .DebugContext (ctx , "seeding WASM file" , slog .String ("magnet_uri" , seeder .MagnetURI ()), slog .String ("transport" , transportFilepath ))
132+ }
133+ outbound .seeder = seeder
134+ }
121135
122136 return outbound , nil
123137}
124138
139+ func (o * Outbound ) Close () error {
140+ if o .seeder != nil {
141+ return o .seeder .Close ()
142+ }
143+ return nil
144+ }
145+
125146func (o * Outbound ) newDialer (ctx context.Context , destination M.Socksaddr ) (water.Dialer , error ) {
126147 cfg := o .dialerConfig .Clone ()
127148
0 commit comments