mirror of
https://github.com/netbirdio/netbird.git
synced 2025-08-15 09:42:47 +02:00
[client, relay] The openConn function no longer blocks the relayAddress function call (#4180)
The openConn function no longer blocks the relayAddress function call in manager layer
This commit is contained in:
@ -65,7 +65,7 @@ type Manager struct {
|
|||||||
|
|
||||||
relayClient *Client
|
relayClient *Client
|
||||||
// the guard logic can overwrite the relayClient variable, this mutex protect the usage of the variable
|
// the guard logic can overwrite the relayClient variable, this mutex protect the usage of the variable
|
||||||
relayClientMu sync.Mutex
|
relayClientMu sync.RWMutex
|
||||||
reconnectGuard *Guard
|
reconnectGuard *Guard
|
||||||
|
|
||||||
relayClients map[string]*RelayTrack
|
relayClients map[string]*RelayTrack
|
||||||
@ -124,8 +124,8 @@ func (m *Manager) Serve() error {
|
|||||||
// established via the relay server. If the peer is on a different relay server, the manager will establish a new
|
// established via the relay server. If the peer is on a different relay server, the manager will establish a new
|
||||||
// connection to the relay server. It returns back with a net.Conn what represent the remote peer connection.
|
// connection to the relay server. It returns back with a net.Conn what represent the remote peer connection.
|
||||||
func (m *Manager) OpenConn(ctx context.Context, serverAddress, peerKey string) (net.Conn, error) {
|
func (m *Manager) OpenConn(ctx context.Context, serverAddress, peerKey string) (net.Conn, error) {
|
||||||
m.relayClientMu.Lock()
|
m.relayClientMu.RLock()
|
||||||
defer m.relayClientMu.Unlock()
|
defer m.relayClientMu.RUnlock()
|
||||||
|
|
||||||
if m.relayClient == nil {
|
if m.relayClient == nil {
|
||||||
return nil, ErrRelayClientNotConnected
|
return nil, ErrRelayClientNotConnected
|
||||||
@ -155,8 +155,8 @@ func (m *Manager) OpenConn(ctx context.Context, serverAddress, peerKey string) (
|
|||||||
|
|
||||||
// Ready returns true if the home Relay client is connected to the relay server.
|
// Ready returns true if the home Relay client is connected to the relay server.
|
||||||
func (m *Manager) Ready() bool {
|
func (m *Manager) Ready() bool {
|
||||||
m.relayClientMu.Lock()
|
m.relayClientMu.RLock()
|
||||||
defer m.relayClientMu.Unlock()
|
defer m.relayClientMu.RUnlock()
|
||||||
|
|
||||||
if m.relayClient == nil {
|
if m.relayClient == nil {
|
||||||
return false
|
return false
|
||||||
@ -174,8 +174,8 @@ func (m *Manager) SetOnReconnectedListener(f func()) {
|
|||||||
// AddCloseListener adds a listener to the given server instance address. The listener will be called if the connection
|
// AddCloseListener adds a listener to the given server instance address. The listener will be called if the connection
|
||||||
// closed.
|
// closed.
|
||||||
func (m *Manager) AddCloseListener(serverAddress string, onClosedListener OnServerCloseListener) error {
|
func (m *Manager) AddCloseListener(serverAddress string, onClosedListener OnServerCloseListener) error {
|
||||||
m.relayClientMu.Lock()
|
m.relayClientMu.RLock()
|
||||||
defer m.relayClientMu.Unlock()
|
defer m.relayClientMu.RUnlock()
|
||||||
|
|
||||||
if m.relayClient == nil {
|
if m.relayClient == nil {
|
||||||
return ErrRelayClientNotConnected
|
return ErrRelayClientNotConnected
|
||||||
@ -199,8 +199,8 @@ func (m *Manager) AddCloseListener(serverAddress string, onClosedListener OnServ
|
|||||||
// RelayInstanceAddress returns the address of the permanent relay server. It could change if the network connection is
|
// RelayInstanceAddress returns the address of the permanent relay server. It could change if the network connection is
|
||||||
// lost. This address will be sent to the target peer to choose the common relay server for the communication.
|
// lost. This address will be sent to the target peer to choose the common relay server for the communication.
|
||||||
func (m *Manager) RelayInstanceAddress() (string, error) {
|
func (m *Manager) RelayInstanceAddress() (string, error) {
|
||||||
m.relayClientMu.Lock()
|
m.relayClientMu.RLock()
|
||||||
defer m.relayClientMu.Unlock()
|
defer m.relayClientMu.RUnlock()
|
||||||
|
|
||||||
if m.relayClient == nil {
|
if m.relayClient == nil {
|
||||||
return "", ErrRelayClientNotConnected
|
return "", ErrRelayClientNotConnected
|
||||||
@ -300,7 +300,9 @@ func (m *Manager) onServerConnected() {
|
|||||||
func (m *Manager) onServerDisconnected(serverAddress string) {
|
func (m *Manager) onServerDisconnected(serverAddress string) {
|
||||||
m.relayClientMu.Lock()
|
m.relayClientMu.Lock()
|
||||||
if serverAddress == m.relayClient.connectionURL {
|
if serverAddress == m.relayClient.connectionURL {
|
||||||
go m.reconnectGuard.StartReconnectTrys(m.ctx, m.relayClient)
|
go func(client *Client) {
|
||||||
|
m.reconnectGuard.StartReconnectTrys(m.ctx, client)
|
||||||
|
}(m.relayClient)
|
||||||
}
|
}
|
||||||
m.relayClientMu.Unlock()
|
m.relayClientMu.Unlock()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user