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"