Skip to content

Commit 5de7013

Browse files
committed
feat: seeding WASM when enabled
1 parent 4d2ae7c commit 5de7013

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

protocol/water/outbound.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package water
22

33
import (
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+
125146
func (o *Outbound) newDialer(ctx context.Context, destination M.Socksaddr) (water.Dialer, error) {
126147
cfg := o.dialerConfig.Clone()
127148

0 commit comments

Comments
 (0)