From 086024fde62bf380f5547d30bc507ff7db209d65 Mon Sep 17 00:00:00 2001 From: Sean DuBois Date: Sat, 22 Feb 2020 12:32:06 -0800 Subject: [PATCH] Remove addCandidate duplication Every caller to addCandidate does the same things. Move all this code into addCandidate. Relates to #118 --- agent.go | 35 +++++++++++++++++++++-------------- gather.go | 36 ++++-------------------------------- 2 files changed, 25 insertions(+), 46 deletions(-) diff --git a/agent.go b/agent.go index f163389..0edbe9d 100644 --- a/agent.go +++ b/agent.go @@ -885,25 +885,32 @@ func (a *Agent) addRemoteCandidate(c Candidate) { a.requestConnectivityCheck() } -// addCandidate assumes you are holding the lock (must be execute using a.run) -func (a *Agent) addCandidate(c Candidate) { - set := a.localCandidates[c.NetworkType()] - for _, candidate := range set { - if candidate.Equal(c) { - return +func (a *Agent) addCandidate(c Candidate, candidateConn net.PacketConn) error { + return a.run(func(agent *Agent) { + c.start(a, candidateConn) + + set := a.localCandidates[c.NetworkType()] + for _, candidate := range set { + if candidate.Equal(c) { + return + } } - } - set = append(set, c) - a.localCandidates[c.NetworkType()] = set + set = append(set, c) + a.localCandidates[c.NetworkType()] = set - if remoteCandidates, ok := a.remoteCandidates[c.NetworkType()]; ok { - for _, remoteCandidate := range remoteCandidates { - a.addPair(c, remoteCandidate) + if remoteCandidates, ok := a.remoteCandidates[c.NetworkType()]; ok { + for _, remoteCandidate := range remoteCandidates { + a.addPair(c, remoteCandidate) + } } - } - a.requestConnectivityCheck() + a.requestConnectivityCheck() + + if a.onCandidateHdlr != nil { + go a.onCandidateHdlr(c) + } + }) } // GetLocalCandidates returns the local candidates diff --git a/gather.go b/gather.go index 24723bf..fe4d243 100644 --- a/gather.go +++ b/gather.go @@ -134,14 +134,7 @@ func (a *Agent) gatherCandidatesLocal(networkTypes []NetworkType) { } } - if err := a.run(func(agent *Agent) { - c.start(a, conn) - a.addCandidate(c) - - if a.onCandidateHdlr != nil { - go a.onCandidateHdlr(c) - } - }); err != nil { + if err := a.addCandidate(c, conn); err != nil { a.log.Warnf("Failed to append to localCandidates and run onCandidateHdlr: %v\n", err) } }(network, ip, mappedIP) @@ -204,14 +197,7 @@ func (a *Agent) gatherCandidatesSrflx(urls []*URL, networkTypes []NetworkType) { continue } - if err := a.run(func(agent *Agent) { - c.start(a, conn) - a.addCandidate(c) - - if a.onCandidateHdlr != nil { - go a.onCandidateHdlr(c) - } - }); err != nil { + if err := a.addCandidate(c, conn); err != nil { a.log.Warnf("Failed to append to localCandidates and run onCandidateHdlr: %v\n", err) } } @@ -247,14 +233,7 @@ func (a *Agent) gatherCandidatesSrflx(urls []*URL, networkTypes []NetworkType) { continue } - if err := a.run(func(agent *Agent) { - c.start(a, conn) - a.addCandidate(c) - - if a.onCandidateHdlr != nil { - go a.onCandidateHdlr(c) - } - }); err != nil { + if err := a.addCandidate(c, conn); err != nil { a.log.Warnf("Failed to append to localCandidates and run onCandidateHdlr: %v\n", err) } } @@ -353,14 +332,7 @@ func (a *Agent) gatherCandidatesRelay(urls []*URL) error { continue } - if err := a.run(func(agent *Agent) { - candidate.start(a, relayConn) - a.addCandidate(candidate) - - if a.onCandidateHdlr != nil { - go a.onCandidateHdlr(candidate) - } - }); err != nil { + if err := a.addCandidate(candidate, relayConn); err != nil { a.log.Warnf("Failed to append to localCandidates and run onCandidateHdlr: %v\n", err) } }