package ice
import (
"encoding/binary"
"github.com/pion/stun/v3"
)
type tiebreaker uint64
const tiebreakerSize = 8
func (a tiebreaker ) AddToAs (m *stun .Message , t stun .AttrType ) error {
v := make ([]byte , tiebreakerSize )
binary .BigEndian .PutUint64 (v , uint64 (a ))
m .Add (t , v )
return nil
}
func (a *tiebreaker ) GetFromAs (m *stun .Message , t stun .AttrType ) error {
v , err := m .Get (t )
if err != nil {
return err
}
if err = stun .CheckSize (t , len (v ), tiebreakerSize ); err != nil {
return err
}
*a = tiebreaker (binary .BigEndian .Uint64 (v ))
return nil
}
type AttrControlled uint64
func (c AttrControlled ) AddTo (m *stun .Message ) error {
return tiebreaker (c ).AddToAs (m , stun .AttrICEControlled )
}
func (c *AttrControlled ) GetFrom (m *stun .Message ) error {
return (*tiebreaker )(c ).GetFromAs (m , stun .AttrICEControlled )
}
type AttrControlling uint64
func (c AttrControlling ) AddTo (m *stun .Message ) error {
return tiebreaker (c ).AddToAs (m , stun .AttrICEControlling )
}
func (c *AttrControlling ) GetFrom (m *stun .Message ) error {
return (*tiebreaker )(c ).GetFromAs (m , stun .AttrICEControlling )
}
type AttrControl struct {
Role Role
Tiebreaker uint64
}
func (c AttrControl ) AddTo (m *stun .Message ) error {
if c .Role == Controlling {
return tiebreaker (c .Tiebreaker ).AddToAs (m , stun .AttrICEControlling )
}
return tiebreaker (c .Tiebreaker ).AddToAs (m , stun .AttrICEControlled )
}
func (c *AttrControl ) GetFrom (m *stun .Message ) error {
if m .Contains (stun .AttrICEControlling ) {
c .Role = Controlling
return (*tiebreaker )(&c .Tiebreaker ).GetFromAs (m , stun .AttrICEControlling )
}
if m .Contains (stun .AttrICEControlled ) {
c .Role = Controlled
return (*tiebreaker )(&c .Tiebreaker ).GetFromAs (m , stun .AttrICEControlled )
}
return stun .ErrAttributeNotFound
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .