From 5b86a7f3f2e1a563913dcb9fe4695d96c3c35f4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Papp?= Date: Tue, 18 Jun 2024 11:10:17 +0200 Subject: [PATCH] Fix relay mode evaulation --- client/internal/engine.go | 2 +- client/internal/peer/conn.go | 2 +- client/internal/peer/conn_ice.go | 20 ++++++++++---------- client/internal/peer/conn_relay.go | 6 ++++-- relay/client/manager.go | 2 +- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/client/internal/engine.go b/client/internal/engine.go index ee0974a45..c4adb4be4 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -212,7 +212,7 @@ func NewEngineWithProbes( clientCtx: clientCtx, clientCancel: clientCancel, signal: signalClient, - signaler: NewSignaler(signalClient, config.WgPrivateKey), + signaler: peer.NewSignaler(signalClient, config.WgPrivateKey), mgmClient: mgmClient, relayManager: relayManager, peerConns: make(map[string]*peer.Conn), diff --git a/client/internal/peer/conn.go b/client/internal/peer/conn.go index 609e4d739..64d06fe20 100644 --- a/client/internal/peer/conn.go +++ b/client/internal/peer/conn.go @@ -152,7 +152,7 @@ func (conn *Conn) Open() { log.Warnf("error while updating the state of peer %s,err: %v", conn.config.Key, err) } */ - relayIsSupportedLocally := conn.connectorRelay.RelayIsSupported() + relayIsSupportedLocally := conn.connectorRelay.RelayIsSupportedLocally() if relayIsSupportedLocally { go conn.connectorRelay.SetupRelayConnection() } diff --git a/client/internal/peer/conn_ice.go b/client/internal/peer/conn_ice.go index baf7be4f8..35b306068 100644 --- a/client/internal/peer/conn_ice.go +++ b/client/internal/peer/conn_ice.go @@ -97,16 +97,7 @@ func NewConnectorICE(ctx context.Context, log *log.Entry, config ConnConfig, con // If the relay mode is supported then try to connect in p2p way only. // It is trying to reconnection in a loop until the context is canceled. // In case of success connection it will call the onICEConnReady callback. -func (conn *ConnectorICE) SetupICEConnection(relayMode bool) { - var preferredCandidateTypes []ice.CandidateType - if relayMode { - conn.connPriority = connPriorityICEP2P - preferredCandidateTypes = candidateTypesP2P() - } else { - conn.connPriority = connPriorityICETurn - preferredCandidateTypes = candidateTypes() - } - +func (conn *ConnectorICE) SetupICEConnection(hasRelayOnLocally bool) { for { if !conn.waitForReconnectTry() { return @@ -120,6 +111,15 @@ func (conn *ConnectorICE) SetupICEConnection(relayMode bool) { continue } + var preferredCandidateTypes []ice.CandidateType + if hasRelayOnLocally && remoteOfferAnswer.RelaySrvAddress != "" { + conn.connPriority = connPriorityICEP2P + preferredCandidateTypes = candidateTypesP2P() + } else { + conn.connPriority = connPriorityICETurn + preferredCandidateTypes = candidateTypes() + } + ctx, ctxCancel := context.WithCancel(conn.ctx) agent, err := conn.reCreateAgent(ctxCancel, preferredCandidateTypes) if err != nil { diff --git a/client/internal/peer/conn_relay.go b/client/internal/peer/conn_relay.go index 23bc47263..bbd1af219 100644 --- a/client/internal/peer/conn_relay.go +++ b/client/internal/peer/conn_relay.go @@ -78,6 +78,8 @@ func (conn *ConnectorRelay) SetupRelayConnection() { rosenpassPubKey: remoteOfferAnswer.RosenpassPubKey, rosenpassAddr: remoteOfferAnswer.RosenpassAddr, }) + + // todo: waitForDisconnection() } } @@ -97,8 +99,8 @@ func (conn *ConnectorRelay) preferredRelayServer(myRelayAddress, remoteRelayAddr return remoteRelayAddress } -func (conn *ConnectorRelay) RelayIsSupported() bool { - return conn.relayManager.IsSupported() +func (conn *ConnectorRelay) RelayIsSupportedLocally() bool { + return conn.relayManager.HasRelayAddress() } // waitForReconnectTry waits for a random duration before trying to reconnect diff --git a/relay/client/manager.go b/relay/client/manager.go index 97a791936..a57e3ce55 100644 --- a/relay/client/manager.go +++ b/relay/client/manager.go @@ -108,7 +108,7 @@ func (m *Manager) RelayAddress() (net.Addr, error) { return m.relayClient.RelayRemoteAddress() } -func (m *Manager) IsSupported() bool { +func (m *Manager) HasRelayAddress() bool { return m.srvAddress != "" }