fix: preserve pending registration chain

Backwards-compatible registrations do not receive a wg/connect response.
Do not let them replace the chain ID of a normal registration that may
already be in flight.
This commit is contained in:
Seraph91P
2026-07-21 16:43:45 +00:00
parent 6610655376
commit b5a7213cdb
2 changed files with 5 additions and 2 deletions

View File

@@ -1010,7 +1010,9 @@ func (n *Newt) registerHandlers(ctx context.Context) {
}
bcChainId := generateChainId()
n.pendingRegisterChainId = bcChainId
// Pangolin intentionally does not answer backwards-compatible
// registrations with newt/wg/connect. Do not replace the chain ID of
// the real registration while its response may already be in flight.
if err := n.client.SendMessage(topicWGRegister, map[string]interface{}{
"publicKey": n.publicKey.String(),
"newtVersion": n.config.Version,

View File

@@ -280,7 +280,8 @@ func (n *Newt) startPingCheck(fn pingFunc, serverIP, tunnelID string) chan struc
"chainId": pingChainId,
}, 3*time.Second)
bcChainId := generateChainId()
n.pendingRegisterChainId = bcChainId
// This compatibility message has no wg/connect response and must
// not supersede the pending real registration chain.
if err := n.client.SendMessage("newt/wg/register", map[string]interface{}{
"publicKey": n.publicKey.String(),
"backwardsCompatible": true,