[client] Order the list of candidates for proper comparison (#4561)

Order the list of candidates for proper comparison
This commit is contained in:
Zoltan Papp
2025-09-30 23:40:46 +02:00
committed by GitHub
parent e8d301fdc9
commit 5e1a40c33f

View File

@@ -3,6 +3,8 @@ package guard
import ( import (
"context" "context"
"fmt" "fmt"
"slices"
"sort"
"sync" "sync"
"time" "time"
@@ -24,8 +26,8 @@ type ICEMonitor struct {
iFaceDiscover stdnet.ExternalIFaceDiscover iFaceDiscover stdnet.ExternalIFaceDiscover
iceConfig icemaker.Config iceConfig icemaker.Config
currentCandidates []ice.Candidate currentCandidatesAddress []string
candidatesMu sync.Mutex candidatesMu sync.Mutex
} }
func NewICEMonitor(iFaceDiscover stdnet.ExternalIFaceDiscover, config icemaker.Config) *ICEMonitor { func NewICEMonitor(iFaceDiscover stdnet.ExternalIFaceDiscover, config icemaker.Config) *ICEMonitor {
@@ -115,16 +117,21 @@ func (cm *ICEMonitor) updateCandidates(newCandidates []ice.Candidate) bool {
cm.candidatesMu.Lock() cm.candidatesMu.Lock()
defer cm.candidatesMu.Unlock() defer cm.candidatesMu.Unlock()
if len(cm.currentCandidates) != len(newCandidates) { newAddresses := make([]string, len(newCandidates))
cm.currentCandidates = newCandidates for i, c := range newCandidates {
newAddresses[i] = c.Address()
}
sort.Strings(newAddresses)
if len(cm.currentCandidatesAddress) != len(newAddresses) {
cm.currentCandidatesAddress = newAddresses
return true return true
} }
for i, candidate := range cm.currentCandidates { // Compare elements
if candidate.Address() != newCandidates[i].Address() { if !slices.Equal(cm.currentCandidatesAddress, newAddresses) {
cm.currentCandidates = newCandidates cm.currentCandidatesAddress = newAddresses
return true return true
}
} }
return false return false