Configurable relay address with env variable

This commit is contained in:
Zoltán Papp 2024-06-14 15:43:18 +02:00
parent 64f949abbb
commit a7760bf0a7
2 changed files with 23 additions and 6 deletions

View File

@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"net"
"os"
"runtime"
"runtime/debug"
"strings"
@ -245,11 +246,14 @@ func (c *ConnectClient) run(
c.statusRecorder.MarkSignalConnected()
relayManager := relayClient.NewManager(engineCtx, loginResp.GetWiretrusteeConfig().GetRelayAddress(), myPrivateKey.PublicKey().String())
relayAddress := relayAddress(loginResp)
relayManager := relayClient.NewManager(engineCtx, relayAddress, myPrivateKey.PublicKey().String())
if relayAddress != "" {
if err = relayManager.Serve(); err != nil {
log.Error(err)
return wrapErr(err)
}
}
peerConfig := loginResp.GetPeerConfig()
@ -304,6 +308,17 @@ func (c *ConnectClient) run(
return nil
}
func relayAddress(resp *mgmProto.LoginResponse) string {
if envRelay := os.Getenv("NB_RELAY_ADDRESS"); envRelay != "" {
return envRelay
}
if resp.GetWiretrusteeConfig().GetRelayAddress() != "" {
return resp.GetWiretrusteeConfig().GetRelayAddress()
}
return ""
}
func (c *ConnectClient) Engine() *Engine {
var e *Engine
c.engineMutex.Lock()

View File

@ -12,6 +12,8 @@ import (
var (
relayCleanupInterval = 60 * time.Second
errRelayClientNotConnected = fmt.Errorf("relay client not connected")
)
// RelayTrack hold the relay clients for the foregin relay servers.
@ -80,7 +82,7 @@ func (m *Manager) Serve() error {
// connection to the relay server.
func (m *Manager) OpenConn(serverAddress, peerKey string) (net.Conn, error) {
if m.relayClient == nil {
return nil, fmt.Errorf("relay client not connected")
return nil, errRelayClientNotConnected
}
foreign, err := m.isForeignServer(serverAddress)
@ -101,7 +103,7 @@ func (m *Manager) OpenConn(serverAddress, peerKey string) (net.Conn, error) {
// This address will be sent to the target peer to choose the common relay server for the communication.
func (m *Manager) RelayAddress() (net.Addr, error) {
if m.relayClient == nil {
return nil, fmt.Errorf("relay client not connected")
return nil, errRelayClientNotConnected
}
return m.relayClient.RelayRemoteAddress()
}