- Implement remote addr for conn

- Eliminate cached offeranswer arguments
- Fix exponent reset in conn reconnect loop
- Fix on disconnected callback for permanent server
- Add peer relay status for status details command
This commit is contained in:
Zoltán Papp
2024-07-16 11:02:32 +02:00
parent add4e9f4e4
commit 4ea55bfe3c
16 changed files with 544 additions and 357 deletions

View File

@@ -108,13 +108,20 @@ func (m *Manager) OpenConn(serverAddress, peerKey string, onClosedListener func(
log.Debugf("open peer connection via foreign server: %s", serverAddress)
netConn, err = m.openConnVia(serverAddress, peerKey)
}
if err != nil {
return nil, err
}
if onClosedListener != nil {
m.addListener(serverAddress, onClosedListener)
var listenerAddr string
if foreign {
m.addListener(serverAddress, onClosedListener)
listenerAddr = serverAddress
} else {
listenerAddr = m.serverURL
}
m.addListener(listenerAddr, onClosedListener)
}
return netConn, err
@@ -196,7 +203,7 @@ func (m *Manager) openConnVia(serverAddress, peerKey string) (net.Conn, error) {
func (m *Manager) onServerDisconnected(serverAddress string) {
if serverAddress == m.serverURL {
m.reconnectGuard.OnDisconnected()
go m.reconnectGuard.OnDisconnected()
}
m.notifyOnDisconnectListeners(serverAddress)
@@ -251,17 +258,19 @@ func (m *Manager) cleanUpUnusedRelays() {
func (m *Manager) addListener(serverAddress string, onClosedListener func()) {
m.listenerLock.Lock()
defer m.listenerLock.Unlock()
l, ok := m.onDisconnectedListeners[serverAddress]
if !ok {
l = make(map[*func()]struct{})
}
l[&onClosedListener] = struct{}{}
m.onDisconnectedListeners[serverAddress] = l
m.listenerLock.Unlock()
}
func (m *Manager) notifyOnDisconnectListeners(serverAddress string) {
m.listenerLock.Lock()
defer m.listenerLock.Unlock()
l, ok := m.onDisconnectedListeners[serverAddress]
if !ok {
return
@@ -270,6 +279,4 @@ func (m *Manager) notifyOnDisconnectListeners(serverAddress string) {
go (*f)()
}
delete(m.onDisconnectedListeners, serverAddress)
m.listenerLock.Unlock()
}