@@ -289,11 +289,7 @@ func (d *Status) UpdatePeerState(receivedState State) error {
289
289
return errors .New ("peer doesn't exist" )
290
290
}
291
291
292
- if receivedState .IP != "" {
293
- peerState .IP = receivedState .IP
294
- }
295
-
296
- skipNotification := shouldSkipNotify (receivedState .ConnStatus , peerState )
292
+ oldState := peerState .ConnStatus
297
293
298
294
if receivedState .ConnStatus != peerState .ConnStatus {
299
295
peerState .ConnStatus = receivedState .ConnStatus
@@ -309,11 +305,15 @@ func (d *Status) UpdatePeerState(receivedState State) error {
309
305
310
306
d .peers [receivedState .PubKey ] = peerState
311
307
312
- if skipNotification {
313
- return nil
308
+ if hasConnStatusChanged ( oldState , receivedState . ConnStatus ) {
309
+ d . notifyPeerListChanged ()
314
310
}
315
311
316
- d .notifyPeerListChanged ()
312
+ // when we close the connection we will not notify the router manager
313
+ if receivedState .ConnStatus == StatusIdle {
314
+ d .notifyPeerStateChangeListeners (receivedState .PubKey )
315
+
316
+ }
317
317
return nil
318
318
}
319
319
@@ -380,11 +380,8 @@ func (d *Status) UpdatePeerICEState(receivedState State) error {
380
380
return errors .New ("peer doesn't exist" )
381
381
}
382
382
383
- if receivedState .IP != "" {
384
- peerState .IP = receivedState .IP
385
- }
386
-
387
- skipNotification := shouldSkipNotify (receivedState .ConnStatus , peerState )
383
+ oldState := peerState .ConnStatus
384
+ oldIsRelayed := peerState .Relayed
388
385
389
386
peerState .ConnStatus = receivedState .ConnStatus
390
387
peerState .ConnStatusUpdate = receivedState .ConnStatusUpdate
@@ -397,12 +394,13 @@ func (d *Status) UpdatePeerICEState(receivedState State) error {
397
394
398
395
d .peers [receivedState .PubKey ] = peerState
399
396
400
- if skipNotification {
401
- return nil
397
+ if hasConnStatusChanged ( oldState , receivedState . ConnStatus ) {
398
+ d . notifyPeerListChanged ()
402
399
}
403
400
404
- d .notifyPeerStateChangeListeners (receivedState .PubKey )
405
- d .notifyPeerListChanged ()
401
+ if hasStatusOrRelayedChange (oldState , receivedState .ConnStatus , oldIsRelayed , receivedState .Relayed ) {
402
+ d .notifyPeerStateChangeListeners (receivedState .PubKey )
403
+ }
406
404
return nil
407
405
}
408
406
@@ -415,7 +413,8 @@ func (d *Status) UpdatePeerRelayedState(receivedState State) error {
415
413
return errors .New ("peer doesn't exist" )
416
414
}
417
415
418
- skipNotification := shouldSkipNotify (receivedState .ConnStatus , peerState )
416
+ oldState := peerState .ConnStatus
417
+ oldIsRelayed := peerState .Relayed
419
418
420
419
peerState .ConnStatus = receivedState .ConnStatus
421
420
peerState .ConnStatusUpdate = receivedState .ConnStatusUpdate
@@ -425,12 +424,13 @@ func (d *Status) UpdatePeerRelayedState(receivedState State) error {
425
424
426
425
d .peers [receivedState .PubKey ] = peerState
427
426
428
- if skipNotification {
429
- return nil
427
+ if hasConnStatusChanged ( oldState , receivedState . ConnStatus ) {
428
+ d . notifyPeerListChanged ()
430
429
}
431
430
432
- d .notifyPeerStateChangeListeners (receivedState .PubKey )
433
- d .notifyPeerListChanged ()
431
+ if hasStatusOrRelayedChange (oldState , receivedState .ConnStatus , oldIsRelayed , receivedState .Relayed ) {
432
+ d .notifyPeerStateChangeListeners (receivedState .PubKey )
433
+ }
434
434
return nil
435
435
}
436
436
@@ -443,7 +443,8 @@ func (d *Status) UpdatePeerRelayedStateToDisconnected(receivedState State) error
443
443
return errors .New ("peer doesn't exist" )
444
444
}
445
445
446
- skipNotification := shouldSkipNotify (receivedState .ConnStatus , peerState )
446
+ oldState := peerState .ConnStatus
447
+ oldIsRelayed := peerState .Relayed
447
448
448
449
peerState .ConnStatus = receivedState .ConnStatus
449
450
peerState .Relayed = receivedState .Relayed
@@ -452,12 +453,13 @@ func (d *Status) UpdatePeerRelayedStateToDisconnected(receivedState State) error
452
453
453
454
d .peers [receivedState .PubKey ] = peerState
454
455
455
- if skipNotification {
456
- return nil
456
+ if hasConnStatusChanged ( oldState , receivedState . ConnStatus ) {
457
+ d . notifyPeerListChanged ()
457
458
}
458
459
459
- d .notifyPeerStateChangeListeners (receivedState .PubKey )
460
- d .notifyPeerListChanged ()
460
+ if hasStatusOrRelayedChange (oldState , receivedState .ConnStatus , oldIsRelayed , receivedState .Relayed ) {
461
+ d .notifyPeerStateChangeListeners (receivedState .PubKey )
462
+ }
461
463
return nil
462
464
}
463
465
@@ -470,7 +472,8 @@ func (d *Status) UpdatePeerICEStateToDisconnected(receivedState State) error {
470
472
return errors .New ("peer doesn't exist" )
471
473
}
472
474
473
- skipNotification := shouldSkipNotify (receivedState .ConnStatus , peerState )
475
+ oldState := peerState .ConnStatus
476
+ oldIsRelayed := peerState .Relayed
474
477
475
478
peerState .ConnStatus = receivedState .ConnStatus
476
479
peerState .Relayed = receivedState .Relayed
@@ -482,12 +485,13 @@ func (d *Status) UpdatePeerICEStateToDisconnected(receivedState State) error {
482
485
483
486
d .peers [receivedState .PubKey ] = peerState
484
487
485
- if skipNotification {
486
- return nil
488
+ if hasConnStatusChanged ( oldState , receivedState . ConnStatus ) {
489
+ d . notifyPeerListChanged ()
487
490
}
488
491
489
- d .notifyPeerStateChangeListeners (receivedState .PubKey )
490
- d .notifyPeerListChanged ()
492
+ if hasStatusOrRelayedChange (oldState , receivedState .ConnStatus , oldIsRelayed , receivedState .Relayed ) {
493
+ d .notifyPeerStateChangeListeners (receivedState .PubKey )
494
+ }
491
495
return nil
492
496
}
493
497
@@ -510,17 +514,12 @@ func (d *Status) UpdateWireGuardPeerState(pubKey string, wgStats configurer.WGSt
510
514
return nil
511
515
}
512
516
513
- func shouldSkipNotify (receivedConnStatus ConnStatus , curr State ) bool {
514
- switch {
515
- case receivedConnStatus == StatusConnecting :
516
- return true
517
- case receivedConnStatus == StatusIdle && curr .ConnStatus == StatusConnecting :
518
- return true
519
- case receivedConnStatus == StatusIdle && curr .ConnStatus == StatusIdle :
520
- return curr .IP != ""
521
- default :
522
- return false
523
- }
517
+ func hasStatusOrRelayedChange (oldConnStatus , newConnStatus ConnStatus , oldRelayed , newRelayed bool ) bool {
518
+ return oldRelayed != newRelayed || hasConnStatusChanged (newConnStatus , oldConnStatus )
519
+ }
520
+
521
+ func hasConnStatusChanged (oldStatus , newStatus ConnStatus ) bool {
522
+ return newStatus != oldStatus
524
523
}
525
524
526
525
// UpdatePeerFQDN update peer's state fqdn only
0 commit comments