Remove addCandidate duplication

Every caller to addCandidate does the same things. Move all this code
into addCandidate.

Relates to #118
This commit is contained in:
Sean DuBois
2020-02-23 22:05:13 -08:00
parent 9ca33c2380
commit 086024fde6
2 changed files with 25 additions and 46 deletions
+21 -14
View File
@@ -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
+4 -32
View File
@@ -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)
}
}