Skip to content

Commit ced78e1

Browse files
Adam Fiskclaude
authored andcommitted
Add peer-share toggle to lantern-core (Share My Connection PR 3/4)
PR 3 of 4 implementing the lantern-side wiring for "Share My Connection". Bumps radiance to fisk/peer-localbackend tip so we can reference the new PeerShareEnabledKey setting; that bump is provisional and should be re-pinned to a release tag once radiance #460 merges. * lantern-core/core.go: new PeerShare interface (mirrors Ads / SmartRouting), embedded in Core. SetPeerShareEnabled patches PeerShareEnabledKey via the radiance ipc client; IsPeerShareEnabled reads the snapshot. * lantern-core/ffi/ffi.go: new //export setPeerProxyEnabled and //export isPeerProxyEnabled, mirroring setBlockAdsEnabled exactly. The Dart FFI binding name uses "PeerProxy" to match the existing user-facing naming in the lantern repo (vpn_setting.dart toggle was drafted as "Peer Proxy"). * lantern-core/mobile/mobile.go: SetPeerShareEnabled / IsPeerShareEnabled for the gomobile-bind surface so Android can toggle once Dart wires it up in PR 4. The lifecycle path: Dart toggle → setPeerProxyEnabled(enabled) → LanternCore.SetPeerShareEnabled → ipc.Client.PatchSettings({PeerShareEnabledKey: ...}) → radiance LocalBackend.PatchSettings dispatch → peer.Client.Start / Stop ffigen regen for the Dart bindings happens in PR 4 alongside the Dart wire-through and rollback logic. go test ./lantern-core/... and golangci-lint --new-from-rev=origin/main both clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4ec7dfd commit ced78e1

5 files changed

Lines changed: 59 additions & 3 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ replace github.com/quic-go/qpack => github.com/quic-go/qpack v0.5.1
2525
require (
2626
github.com/alecthomas/assert/v2 v2.3.0
2727
github.com/getlantern/lantern-server-provisioner v0.0.0-20251031121934-8ea031fccfa9
28-
github.com/getlantern/radiance v0.0.0-20260529193818-b9df7d613b1a
28+
github.com/getlantern/radiance v0.0.0-20260529195140-5959bbef7f5a
2929
github.com/sagernet/sing-box v1.12.22
3030
golang.org/x/mobile v0.0.0-20250711185624-d5bb5ecc55c0
3131
golang.org/x/sys v0.41.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,8 @@ github.com/getlantern/pluriconfig v0.0.0-20251126214241-8cc8bc561535 h1:rtDmW8YL
261261
github.com/getlantern/pluriconfig v0.0.0-20251126214241-8cc8bc561535/go.mod h1:WKJEdjMOD4IuTRYwjQHjT4bmqDl5J82RShMLxPAvi0Q=
262262
github.com/getlantern/publicip v0.0.0-20260328175246-2c460fe80c6b h1:gMYJzEhLrmIqQ+JnjiYNm+UyUDalK3WUmVyecFwmV5g=
263263
github.com/getlantern/publicip v0.0.0-20260328175246-2c460fe80c6b/go.mod h1:NpfXdK4ldEKkjQ4P1R+DBF4ua5VFOlxmgHROTnYrApg=
264-
github.com/getlantern/radiance v0.0.0-20260529193818-b9df7d613b1a h1:BUnZxaaUJbDmILeIOj+/4qlUQrgD8hdV1+67fkLvdqY=
265-
github.com/getlantern/radiance v0.0.0-20260529193818-b9df7d613b1a/go.mod h1:SOXeNVsbdP1v9yYRbuJLB9tV9DpPI77HN+iSecuC9kM=
264+
github.com/getlantern/radiance v0.0.0-20260529195140-5959bbef7f5a h1:+KfogporLkmRnJv+PK/nlBZgs249Dk+kFteV0OeIeuY=
265+
github.com/getlantern/radiance v0.0.0-20260529195140-5959bbef7f5a/go.mod h1:XgUaooT08sJg1gINkX5/RhvkjBWwgO9KexMU8z0FVs8=
266266
github.com/getlantern/samizdat v0.0.3-0.20260529191731-5ea8ae61ddbf h1:KxiMF+oG0rTtuBi7GiIaHfccYOf69rLJ/VnO5myoYc4=
267267
github.com/getlantern/samizdat v0.0.3-0.20260529191731-5ea8ae61ddbf/go.mod h1:uEeykQSW2/6rTjfPlj3MTTo59poSHXfAHTGgzYDkbr0=
268268
github.com/getlantern/semconv v0.0.0-20260327040646-21845dda05cb h1:c5YM7b3a4r2J8Eh89KkI6M/iTFe6Bi+b8AJlfkKdFq4=

lantern-core/core.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ type SmartRouting interface {
153153
IsSmartRoutingEnabled() bool
154154
}
155155

156+
type PeerShare interface {
157+
SetPeerShareEnabled(bool) error
158+
IsPeerShareEnabled() bool
159+
}
160+
156161
type VPN interface {
157162
ConnectVPN(tag string) error
158163
SelectServer(tag string) error
@@ -169,6 +174,7 @@ type Core interface {
169174
SplitTunnel
170175
Ads
171176
SmartRouting
177+
PeerShare
172178
VPN
173179
Client() *ipc.Client
174180
}
@@ -454,6 +460,16 @@ func (lc *LanternCore) IsSmartRoutingEnabled() bool {
454460
return b
455461
}
456462

463+
func (lc *LanternCore) SetPeerShareEnabled(enabled bool) error {
464+
_, err := lc.client.PatchSettings(lc.ctx, settings.Settings{settings.PeerShareEnabledKey: enabled})
465+
return err
466+
}
467+
468+
func (lc *LanternCore) IsPeerShareEnabled() bool {
469+
b, _ := lc.settings()[settings.PeerShareEnabledKey].(bool)
470+
return b
471+
}
472+
457473
func (lc *LanternCore) IsTelemetryEnabled() bool {
458474
b, _ := lc.settings()[settings.TelemetryKey].(bool)
459475
return b

lantern-core/ffi/ffi.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,6 +1352,29 @@ func isSmartRoutingEnabled() C.int {
13521352
return 0
13531353
}
13541354

1355+
//export setPeerProxyEnabled
1356+
func setPeerProxyEnabled(enabled C.int) *C.char {
1357+
return runOnGoStack(func() *C.char {
1358+
c, errStr := requireCore()
1359+
if errStr != nil {
1360+
return errStr
1361+
}
1362+
if err := c.SetPeerShareEnabled(enabled != 0); err != nil {
1363+
return SendError(err)
1364+
}
1365+
return C.CString("ok")
1366+
})
1367+
}
1368+
1369+
//export isPeerProxyEnabled
1370+
func isPeerProxyEnabled() C.int {
1371+
c, _ := requireCore()
1372+
if c != nil && c.IsPeerShareEnabled() {
1373+
return 1
1374+
}
1375+
return 0
1376+
}
1377+
13551378
//export getSplitTunnelState
13561379
func getSplitTunnelState() *C.char {
13571380
return runOnGoStack(func() *C.char {

lantern-core/mobile/mobile.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,23 @@ func SetSmartRoutingEnabled(enabled bool) error {
203203
})
204204
}
205205

206+
func SetPeerShareEnabled(enabled bool) error {
207+
slog.Info("peer-share: SetPeerShareEnabled", "enabled", enabled)
208+
return withCore(func(c lanterncore.Core) error {
209+
return c.SetPeerShareEnabled(enabled)
210+
})
211+
}
212+
213+
func IsPeerShareEnabled() bool {
214+
ok, err := withCoreR(func(c lanterncore.Core) (bool, error) {
215+
return c.IsPeerShareEnabled(), nil
216+
})
217+
if err != nil {
218+
return false
219+
}
220+
return ok
221+
}
222+
206223
func IsSmartRoutingEnabled() bool {
207224
ok, err := withCoreR(func(c lanterncore.Core) (bool, error) {
208225
return c.IsSmartRoutingEnabled(), nil

0 commit comments

Comments
 (0)