From da599f54ff3a142256bc855eba51ef77b3fd1742 Mon Sep 17 00:00:00 2001 From: Hugo Arregui Date: Thu, 20 Jun 2019 09:49:18 -0300 Subject: [PATCH] CandidatePairState is public now Use more appropiate naming --- agent.go | 11 +++++++---- candidatepair.go | 24 ++---------------------- candidatepair_state.go | 37 +++++++++++++++++++++++++++++++++++++ selection.go | 8 ++++---- 4 files changed, 50 insertions(+), 30 deletions(-) create mode 100644 candidatepair_state.go diff --git a/agent.go b/agent.go index a434e3c..4d1327d 100644 --- a/agent.go +++ b/agent.go @@ -469,13 +469,16 @@ func (a *Agent) setSelectedPair(p *candidatePair) { func (a *Agent) pingAllCandidates() { for _, p := range a.checklist { - if p.state != candidatePairStateChecking { + + if p.state == CandidatePairStateWaiting { + p.state = CandidatePairStateInProgress + } else if p.state != CandidatePairStateInProgress { continue } if p.bindingRequestCount > a.maxBindingRequests { a.log.Tracef("max requests reached for pair %s, marking it as failed\n", p) - p.state = candidatePairStateFailed + p.state = CandidatePairStateFailed } else { a.selector.PingCandidate(p.local, p.remote) p.bindingRequestCount++ @@ -486,7 +489,7 @@ func (a *Agent) pingAllCandidates() { func (a *Agent) getBestAvailableCandidatePair() *candidatePair { var best *candidatePair for _, p := range a.checklist { - if p.state == candidatePairStateFailed { + if p.state == CandidatePairStateFailed { continue } @@ -502,7 +505,7 @@ func (a *Agent) getBestAvailableCandidatePair() *candidatePair { func (a *Agent) getBestValidCandidatePair() *candidatePair { var best *candidatePair for _, p := range a.checklist { - if p.state != candidatePairStateValid { + if p.state != CandidatePairStateSucceeded { continue } diff --git a/candidatepair.go b/candidatepair.go index 6907285..c95b8d4 100644 --- a/candidatepair.go +++ b/candidatepair.go @@ -6,32 +6,12 @@ import ( "github.com/pion/stun" ) -type candidatePairState int - -const ( - candidatePairStateChecking candidatePairState = iota + 1 - candidatePairStateFailed - candidatePairStateValid -) - -func (c candidatePairState) String() string { - switch c { - case candidatePairStateChecking: - return "checking" - case candidatePairStateFailed: - return "failed" - case candidatePairStateValid: - return "valid" - } - return "Unknown candidate pair state" -} - func newCandidatePair(local, remote Candidate, controlling bool) *candidatePair { return &candidatePair{ iceRoleControlling: controlling, remote: remote, local: local, - state: candidatePairStateChecking, + state: CandidatePairStateWaiting, } } @@ -41,7 +21,7 @@ type candidatePair struct { remote Candidate local Candidate bindingRequestCount uint16 - state candidatePairState + state CandidatePairState } func (p *candidatePair) String() string { diff --git a/candidatepair_state.go b/candidatepair_state.go new file mode 100644 index 0000000..f76396c --- /dev/null +++ b/candidatepair_state.go @@ -0,0 +1,37 @@ +package ice + +// CandidatePairState represent the ICE candidate pair state +type CandidatePairState int + +const ( + // CandidatePairStateWaiting means a check has not been performed for + // this pair + CandidatePairStateWaiting = iota + 1 + + // CandidatePairStateInProgress means a check has been sent for this pair, + // but the transaction is in progress. + CandidatePairStateInProgress + + // CandidatePairStateFailed means a check for this pair was already done + // and failed, either never producing any response or producing an unrecoverable + // failure response. + CandidatePairStateFailed + + // CandidatePairStateSucceeded means a check for this pair was already + // done and produced a successful result. + CandidatePairStateSucceeded +) + +func (c CandidatePairState) String() string { + switch c { + case CandidatePairStateWaiting: + return "waiting" + case CandidatePairStateInProgress: + return "in-progress" + case CandidatePairStateFailed: + return "failed" + case CandidatePairStateSucceeded: + return "succeded" + } + return "Unknown candidate pair state" +} diff --git a/selection.go b/selection.go index c20c57c..71277e9 100644 --- a/selection.go +++ b/selection.go @@ -126,7 +126,7 @@ func (s *controllingSelector) HandleBindingRequest(m *stun.Message, local, remot return } - if p.state == candidatePairStateValid && s.nominatedPair == nil && s.agent.selectedPair == nil { + if p.state == CandidatePairStateSucceeded && s.nominatedPair == nil && s.agent.selectedPair == nil { bestPair := s.agent.getBestAvailableCandidatePair() if bestPair == nil { s.log.Tracef("No best pair available\n") @@ -164,7 +164,7 @@ func (s *controllingSelector) HandleSucessResponse(m *stun.Message, local, remot return } - p.state = candidatePairStateValid + p.state = CandidatePairStateSucceeded s.log.Tracef("Found valid candidate pair: %s", p) if pendingRequest.isUseCandidate && s.agent.selectedPair == nil { s.agent.setSelectedPair(p) @@ -256,7 +256,7 @@ func (s *controlledSelector) HandleSucessResponse(m *stun.Message, local, remote return } - p.state = candidatePairStateValid + p.state = CandidatePairStateSucceeded s.log.Tracef("Found valid candidate pair: %s", p) } @@ -272,7 +272,7 @@ func (s *controlledSelector) HandleBindingRequest(m *stun.Message, local, remote if useCandidate { // https://tools.ietf.org/html/rfc8445#section-7.3.1.5 - if p.state == candidatePairStateValid { + if p.state == CandidatePairStateSucceeded { // If the state of this pair is Succeeded, it means that the check // previously sent by this pair produced a successful response and // generated a valid pair (Section 7.2.5.3.2). The agent sets the