rsrvtoken.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package proto
  2. import "github.com/pion/stun"
  3. // ReservationToken represents RESERVATION-TOKEN attribute.
  4. //
  5. // The RESERVATION-TOKEN attribute contains a token that uniquely
  6. // identifies a relayed transport address being held in reserve by the
  7. // server. The server includes this attribute in a success response to
  8. // tell the client about the token, and the client includes this
  9. // attribute in a subsequent Allocate request to request the server use
  10. // that relayed transport address for the allocation.
  11. //
  12. // RFC 5766 Section 14.9
  13. type ReservationToken []byte
  14. const reservationTokenSize = 8 // 8 bytes
  15. // AddTo adds RESERVATION-TOKEN to message.
  16. func (t ReservationToken) AddTo(m *stun.Message) error {
  17. if err := stun.CheckSize(stun.AttrReservationToken, len(t), reservationTokenSize); err != nil {
  18. return err
  19. }
  20. m.Add(stun.AttrReservationToken, t)
  21. return nil
  22. }
  23. // GetFrom decodes RESERVATION-TOKEN from message.
  24. func (t *ReservationToken) GetFrom(m *stun.Message) error {
  25. v, err := m.Get(stun.AttrReservationToken)
  26. if err != nil {
  27. return err
  28. }
  29. if err = stun.CheckSize(stun.AttrReservationToken, len(v), reservationTokenSize); err != nil {
  30. return err
  31. }
  32. *t = v
  33. return nil
  34. }