- remove direct field from status

- add randomisation factor for reconnection
- fix rosenpass status
This commit is contained in:
Zoltán Papp
2024-07-17 16:26:41 +02:00
parent 03e8acccde
commit 7162e0a2ac
8 changed files with 218 additions and 241 deletions

View File

@@ -327,7 +327,7 @@ func (conn *Conn) reconnectLoopWithRetry() {
for {
bo := backoff.WithContext(&backoff.ExponentialBackOff{
InitialInterval: 800 * time.Millisecond,
RandomizationFactor: 0, // todo: add randomisation factor
RandomizationFactor: 1,
Multiplier: 1.99,
MaxInterval: conn.config.Timeout * time.Second,
MaxElapsedTime: 0,
@@ -518,8 +518,7 @@ func (conn *Conn) onWorkerICEStateDisconnected(newState ConnStatus) {
peerState := State{
PubKey: conn.config.Key,
ConnStatus: conn.evalStatus(),
Direct: false, // todo fix it
Relayed: true, // todo fix it
Relayed: conn.isRelayed(),
ConnStatusUpdate: time.Now(),
}
@@ -609,8 +608,7 @@ func (conn *Conn) onWorkerRelayStateDisconnected() {
peerState := State{
PubKey: conn.config.Key,
ConnStatus: conn.evalStatus(),
Direct: false, // todo fix it
Relayed: true, // todo fix it
Relayed: conn.isRelayed(),
ConnStatusUpdate: time.Now(),
}
@@ -634,9 +632,8 @@ func (conn *Conn) updateRelayStatus(relayServerAddr string, rosenpassPubKey []by
peerState := State{
PubKey: conn.config.Key,
ConnStatusUpdate: time.Now(),
ConnStatus: conn.evalStatus(), // todo fix it
Direct: false, // todo fix it
Relayed: true, // todo fix it
ConnStatus: conn.evalStatus(),
Relayed: conn.isRelayed(),
RelayServerAddress: relayServerAddr,
RosenpassEnabled: isRosenpassEnabled(rosenpassPubKey),
}
@@ -652,8 +649,7 @@ func (conn *Conn) updateIceState(iceConnInfo ICEConnInfo) {
PubKey: conn.config.Key,
ConnStatusUpdate: time.Now(),
ConnStatus: conn.evalStatus(),
Direct: iceConnInfo.Direct, // todo fix it
Relayed: iceConnInfo.Relayed, // todo fix it
Relayed: iceConnInfo.Relayed,
LocalIceCandidateType: iceConnInfo.LocalIceCandidateType,
RemoteIceCandidateType: iceConnInfo.RemoteIceCandidateType,
LocalIceCandidateEndpoint: iceConnInfo.LocalIceCandidateEndpoint,
@@ -691,6 +687,18 @@ func (conn *Conn) waitInitialRandomSleepTime() {
}
}
func (conn *Conn) isRelayed() bool {
if conn.statusRelay == StatusDisconnected && (conn.statusICE == StatusDisconnected || conn.statusICE == StatusConnecting) {
return false
}
if conn.currentConnType == connPriorityICEP2P {
return false
}
return true
}
func (conn *Conn) evalStatus() ConnStatus {
if conn.statusRelay == StatusConnected || conn.statusICE == StatusConnected {
return StatusConnected

View File

@@ -27,7 +27,6 @@ type State struct {
connStatusICE ConnStatus
ConnStatusUpdate time.Time
Relayed bool
Direct bool
LocalIceCandidateType string
RemoteIceCandidateType string
LocalIceCandidateEndpoint string
@@ -248,7 +247,6 @@ func (d *Status) UpdatePeerState(receivedState State) error {
if receivedState.ConnStatus != peerState.ConnStatus {
peerState.ConnStatus = receivedState.ConnStatus
peerState.ConnStatusUpdate = receivedState.ConnStatusUpdate
peerState.Direct = receivedState.Direct
peerState.Relayed = receivedState.Relayed
peerState.LocalIceCandidateType = receivedState.LocalIceCandidateType
peerState.RemoteIceCandidateType = receivedState.RemoteIceCandidateType
@@ -291,7 +289,6 @@ func (d *Status) UpdatePeerICEState(receivedState State) error {
peerState.ConnStatus = receivedState.ConnStatus
peerState.ConnStatusUpdate = receivedState.ConnStatusUpdate
peerState.Direct = receivedState.Direct
peerState.Relayed = receivedState.Relayed
peerState.LocalIceCandidateType = receivedState.LocalIceCandidateType
peerState.RemoteIceCandidateType = receivedState.RemoteIceCandidateType
@@ -328,7 +325,6 @@ func (d *Status) UpdatePeerRelayedState(receivedState State) error {
peerState.ConnStatus = receivedState.ConnStatus
peerState.ConnStatusUpdate = receivedState.ConnStatusUpdate
peerState.Direct = receivedState.Direct
peerState.Relayed = receivedState.Relayed
peerState.RelayServerAddress = receivedState.RelayServerAddress
peerState.RosenpassEnabled = receivedState.RosenpassEnabled
@@ -361,11 +357,9 @@ func (d *Status) UpdatePeerRelayedStateToDisconnected(receivedState State) error
skipNotification := shouldSkipNotify(receivedState.ConnStatus, peerState)
peerState.ConnStatus = receivedState.ConnStatus
peerState.Direct = receivedState.Direct
peerState.Relayed = receivedState.Relayed
peerState.ConnStatusUpdate = receivedState.ConnStatusUpdate
peerState.RelayServerAddress = ""
//peerState.RosenpassEnabled = receivedState.RosenpassEnabled // todo: check this variable
d.peers[receivedState.PubKey] = peerState
@@ -395,14 +389,12 @@ func (d *Status) UpdatePeerICEStateToDisconnected(receivedState State) error {
skipNotification := shouldSkipNotify(receivedState.ConnStatus, peerState)
peerState.ConnStatus = receivedState.ConnStatus
peerState.Direct = receivedState.Direct
peerState.Relayed = receivedState.Relayed
peerState.ConnStatusUpdate = receivedState.ConnStatusUpdate
peerState.LocalIceCandidateType = receivedState.LocalIceCandidateType
peerState.RemoteIceCandidateType = receivedState.RemoteIceCandidateType
peerState.LocalIceCandidateEndpoint = receivedState.LocalIceCandidateEndpoint
peerState.RemoteIceCandidateEndpoint = receivedState.RemoteIceCandidateEndpoint
//peerState.RosenpassEnabled = receivedState.RosenpassEnabled // todo: check this variable
d.peers[receivedState.PubKey] = peerState

View File

@@ -59,7 +59,6 @@ type ICEConnInfo struct {
RemoteIceCandidateType string
RemoteIceCandidateEndpoint string
LocalIceCandidateEndpoint string
Direct bool
Relayed bool
RelayedOnLocal bool
}
@@ -187,7 +186,6 @@ func (w *WorkerICE) OnNewOffer(remoteOfferAnswer *OfferAnswer) {
RemoteIceCandidateType: pair.Remote.Type().String(),
LocalIceCandidateEndpoint: fmt.Sprintf("%s:%d", pair.Local.Address(), pair.Local.Port()),
RemoteIceCandidateEndpoint: fmt.Sprintf("%s:%d", pair.Remote.Address(), pair.Remote.Port()),
Direct: !isRelayCandidate(pair.Local),
Relayed: isRelayed(pair),
RelayedOnLocal: isRelayCandidate(pair.Local),
}