chore: remove unnecessary struct, update version
Kim committed
Apr 17, 2026 at 13:12 UTC
2253cf3ac7b9eeafe8e83fea75df41a7a9c6932e
3 files changed
+37
-59
portal/overlay/overlay.go
+6
-29
@@ -16,12 +16,6 @@ import (
16
"github.com/gosuda/portal-tunnel/v2/utils"
17
)
18
19
-type desiredPeer struct {
20
- wireGuardPublicKey string
21
- wireGuardEndpoint string
22
- allowedIPs []string
23
-}
24
-
19
type Config struct {
20
PrivateKey string
21
PublicKey string
@@ -196,37 +190,20 @@ func (o *Overlay) Sync(relays []discovery.RelayState) error {
190
if o == nil || o.stack == nil {
191
return nil
192
}
199
- return o.stack.ApplyPeers(peersForRelays(o.cfg.PublicKey, relays))
200
-}
193
202
-func peersForRelays(publicKey string, relays []discovery.RelayState) []desiredPeer {
203
- peers := make([]desiredPeer, 0, len(relays))
194
+ peers := make([]types.RelayDescriptor, 0, len(relays))
195
for _, relay := range relays {
205
- if !relay.Descriptor.HasOverlayPeer() {
206
- continue
207
- }
208
-
196
desc := relay.Descriptor
210
- if desc.WireGuardPublicKey == publicKey {
211
- continue
212
- }
213
-
214
- overlayIPv4, err := utils.DeriveWireGuardOverlayIPv4(desc.WireGuardPublicKey)
215
- if err != nil {
197
+ if !desc.HasOverlayPeer() {
198
continue
199
}
218
- wireGuardEndpoint, err := utils.RelayWireGuardEndpoint(desc)
219
- if err != nil {
200
+ if desc.WireGuardPublicKey == o.cfg.PublicKey {
201
continue
202
}
222
- peers = append(peers, desiredPeer{
223
- wireGuardPublicKey: desc.WireGuardPublicKey,
224
- wireGuardEndpoint: wireGuardEndpoint,
225
- allowedIPs: []string{overlayIPv4 + "/32"},
226
- })
203
+ peers = append(peers, desc)
204
}
205
sort.Slice(peers, func(i, j int) bool {
229
- return peers[i].wireGuardPublicKey < peers[j].wireGuardPublicKey
206
+ return peers[i].WireGuardPublicKey < peers[j].WireGuardPublicKey
207
})
231
- return peers
208
+ return o.stack.ApplyPeers(peers)
209
}
portal/overlay/stack.go
+30
-29
@@ -15,6 +15,7 @@ import (
15
"golang.zx2c4.com/wireguard/device"
16
"golang.zx2c4.com/wireguard/tun/netstack"
17
18
+ "github.com/gosuda/portal-tunnel/v2/types"
19
"github.com/gosuda/portal-tunnel/v2/utils"
20
)
21
@@ -127,7 +128,7 @@ func (s *stack) DialContext(ctx context.Context, network, address string) (net.C
128
return s.net.DialContextTCPAddrPort(ctx, netip.AddrPortFrom(ip, uint16(port)))
129
}
130
130
-func (s *stack) ApplyPeers(peers []desiredPeer) error {
131
+func (s *stack) ApplyPeers(peers []types.RelayDescriptor) error {
132
if s == nil || s.device == nil {
133
return errors.New("wireguard is not initialized")
134
}
@@ -146,45 +147,45 @@ func (s *stack) ApplyPeers(peers []desiredPeer) error {
147
nextPeerEndpoints := map[string]string{}
148
149
for _, peer := range peers {
149
- peerKey := strings.TrimSpace(peer.wireGuardPublicKey)
150
- publicKeyHex, err := utils.WireGuardKeyHex(peer.wireGuardPublicKey)
150
+ peerKey := strings.TrimSpace(peer.WireGuardPublicKey)
151
+ overlayIPv4, err := utils.DeriveWireGuardOverlayIPv4(peer.WireGuardPublicKey)
152
+ if err != nil {
153
+ continue
154
+ }
155
+ wireGuardEndpoint, err := utils.RelayWireGuardEndpoint(peer)
156
+ if err != nil {
157
+ continue
158
+ }
159
+ publicKeyHex, err := utils.WireGuardKeyHex(peer.WireGuardPublicKey)
160
if err != nil {
161
return fmt.Errorf("normalize peer %q public key: %w", peerKey, err)
162
}
163
164
resolvedEndpoint := ""
156
- if endpoint := peer.wireGuardEndpoint; endpoint != "" {
157
- resolvedEndpoint, err = resolvePeerEndpoint(endpoint)
158
- if err != nil {
159
- s.mu.Lock()
160
- currentEndpoint := s.peerEndpoints[publicKeyHex]
161
- s.mu.Unlock()
162
- if currentEndpoint != "" {
163
- warnErr = errors.Join(warnErr, fmt.Errorf("resolve peer %q endpoint: %w; using current endpoint %q", peerKey, err, currentEndpoint))
164
- resolvedEndpoint = currentEndpoint
165
- } else {
166
- warnErr = errors.Join(warnErr, fmt.Errorf("resolve peer %q endpoint: %w", peerKey, err))
167
- continue
168
- }
165
+ resolvedEndpoint, err = resolvePeerEndpoint(wireGuardEndpoint)
166
+ if err != nil {
167
+ s.mu.Lock()
168
+ currentEndpoint := s.peerEndpoints[publicKeyHex]
169
+ s.mu.Unlock()
170
+ if currentEndpoint != "" {
171
+ warnErr = errors.Join(warnErr, fmt.Errorf("resolve peer %q endpoint: %w; using current endpoint %q", peerKey, err, currentEndpoint))
172
+ resolvedEndpoint = currentEndpoint
173
+ } else {
174
+ warnErr = errors.Join(warnErr, fmt.Errorf("resolve peer %q endpoint: %w", peerKey, err))
175
+ continue
176
}
177
}
178
179
builder.WriteString("public_key=")
180
builder.WriteString(publicKeyHex)
181
builder.WriteByte('\n')
175
- if resolvedEndpoint != "" {
176
- builder.WriteString("endpoint=")
177
- builder.WriteString(resolvedEndpoint)
178
- builder.WriteByte('\n')
179
- nextPeerEndpoints[publicKeyHex] = resolvedEndpoint
180
- }
181
-
182
- allowedIPs := utils.NormalizeIPPrefixes(peer.allowedIPs)
183
- for _, allowedIP := range allowedIPs {
184
- builder.WriteString("allowed_ip=")
185
- builder.WriteString(allowedIP)
186
- builder.WriteByte('\n')
187
- }
182
+ builder.WriteString("endpoint=")
183
+ builder.WriteString(resolvedEndpoint)
184
+ builder.WriteByte('\n')
185
+ nextPeerEndpoints[publicKeyHex] = resolvedEndpoint
186
+ builder.WriteString("allowed_ip=")
187
+ builder.WriteString(overlayIPv4)
188
+ builder.WriteString("/32\n")
189
if DefaultPersistentKeepalive > 0 {
190
builder.WriteString("persistent_keepalive_interval=")
191
builder.WriteString(strconv.Itoa(DefaultPersistentKeepalive))
types/types.go
+1
-1
@@ -1,7 +1,7 @@
1
package types
2
3
const (
4
- ReleaseVersion = "v2.1.5"
4
+ ReleaseVersion = "v2.1.6"
5
SDKVersion = "6"
6
DiscoveryVersion = "7"
7
PortalRelayRegistryURL = "https://raw.githubusercontent.com/gosuda/portal-tunnel/main/registry.json"