diff --git a/agent.go b/agent.go index d74cf68e..bd428b24 100644 --- a/agent.go +++ b/agent.go @@ -1574,15 +1574,20 @@ func (a *Agent) sendBindingSuccess(m *stun.Message, local, remote Candidate) { return } - if out, err := stun.Build(m, stun.BindingSuccess, + attributes := []stun.Setter{ + m, + stun.BindingSuccess, &stun.XORMappedAddress{ IP: ip.AsSlice(), Port: port, }, + } + attributes = append(attributes, stun.NewShortTermIntegrity(a.localPwd), - stun.Fingerprint, - ); err != nil { - a.log.Warnf("Failed to handle inbound ICE from: %s to: %s error: %s", local, remote, err) + stun.Fingerprint) + + if out, err := stun.Build(attributes...); err != nil { + a.log.Errorf("failed to build binding success: %w", err) } else { if pair := a.findPair(local, remote); pair != nil { pair.UpdateResponseSent() diff --git a/selection.go b/selection.go index aef6c846..0ebd8ced 100644 --- a/selection.go +++ b/selection.go @@ -84,16 +84,20 @@ func (s *controllingSelector) nominatePair(pair *CandidatePair) { // order to nominate a candidate pair (Section 8.1.1). The controlled // agent MUST NOT include the USE-CANDIDATE attribute in a Binding // request. - msg, err := stun.Build(stun.BindingRequest, stun.TransactionID, - stun.NewUsername(s.agent.remoteUfrag+":"+s.agent.localUfrag), + attributes := []stun.Setter{ + stun.BindingRequest, + stun.TransactionID, + stun.NewUsername(s.agent.remoteUfrag + ":" + s.agent.localUfrag), UseCandidate(), AttrControlling(s.agent.tieBreaker), PriorityAttr(pair.Local.Priority()), + } + attributes = append(attributes, stun.NewShortTermIntegrity(s.agent.remotePwd), - stun.Fingerprint, - ) + stun.Fingerprint) + msg, err := stun.Build(attributes...) if err != nil { - s.log.Error(err.Error()) + s.log.Errorf("failed to build binding request for nomination: %w", err) return } @@ -191,15 +195,20 @@ func (s *controllingSelector) HandleSuccessResponse(m *stun.Message, local, remo } func (s *controllingSelector) PingCandidate(local, remote Candidate) { - msg, err := stun.Build(stun.BindingRequest, stun.TransactionID, - stun.NewUsername(s.agent.remoteUfrag+":"+s.agent.localUfrag), + attributes := []stun.Setter{ + stun.BindingRequest, + stun.TransactionID, + stun.NewUsername(s.agent.remoteUfrag + ":" + s.agent.localUfrag), AttrControlling(s.agent.tieBreaker), PriorityAttr(local.Priority()), + } + attributes = append(attributes, stun.NewShortTermIntegrity(s.agent.remotePwd), - stun.Fingerprint, - ) + stun.Fingerprint) + + msg, err := stun.Build(attributes...) if err != nil { - s.log.Error(err.Error()) + s.log.Errorf("failed to build binding request for ping (controlling): %w", err) return } @@ -338,15 +347,20 @@ func (s *controlledSelector) ContactCandidates() { } func (s *controlledSelector) PingCandidate(local, remote Candidate) { - msg, err := stun.Build(stun.BindingRequest, stun.TransactionID, - stun.NewUsername(s.agent.remoteUfrag+":"+s.agent.localUfrag), + attributes := []stun.Setter{ + stun.BindingRequest, + stun.TransactionID, + stun.NewUsername(s.agent.remoteUfrag + ":" + s.agent.localUfrag), AttrControlled(s.agent.tieBreaker), PriorityAttr(local.Priority()), + } + attributes = append(attributes, stun.NewShortTermIntegrity(s.agent.remotePwd), - stun.Fingerprint, - ) + stun.Fingerprint) + + msg, err := stun.Build(attributes...) if err != nil { - s.log.Error(err.Error()) + s.log.Errorf("failed to build binding request for ping (controlled): %w", err) return }