summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/turn/v2/internal/proto/reqtrans.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pion/turn/v2/internal/proto/reqtrans.go')
-rw-r--r--vendor/github.com/pion/turn/v2/internal/proto/reqtrans.go65
1 files changed, 65 insertions, 0 deletions
diff --git a/vendor/github.com/pion/turn/v2/internal/proto/reqtrans.go b/vendor/github.com/pion/turn/v2/internal/proto/reqtrans.go
new file mode 100644
index 0000000..a4e4863
--- /dev/null
+++ b/vendor/github.com/pion/turn/v2/internal/proto/reqtrans.go
@@ -0,0 +1,65 @@
+package proto
+
+import (
+ "strconv"
+
+ "github.com/pion/stun"
+)
+
+// Protocol is IANA assigned protocol number.
+type Protocol byte
+
+const (
+ // ProtoUDP is IANA assigned protocol number for UDP.
+ ProtoUDP Protocol = 17
+)
+
+func (p Protocol) String() string {
+ switch p {
+ case ProtoUDP:
+ return "UDP"
+ default:
+ return strconv.Itoa(int(p))
+ }
+}
+
+// RequestedTransport represents REQUESTED-TRANSPORT attribute.
+//
+// This attribute is used by the client to request a specific transport
+// protocol for the allocated transport address. RFC 5766 only allows the use of
+// codepoint 17 (User Datagram Protocol).
+//
+// RFC 5766 Section 14.7
+type RequestedTransport struct {
+ Protocol Protocol
+}
+
+func (t RequestedTransport) String() string {
+ return "protocol: " + t.Protocol.String()
+}
+
+const requestedTransportSize = 4
+
+// AddTo adds REQUESTED-TRANSPORT to message.
+func (t RequestedTransport) AddTo(m *stun.Message) error {
+ v := make([]byte, requestedTransportSize)
+ v[0] = byte(t.Protocol)
+ // b[1:4] is RFFU = 0.
+ // The RFFU field MUST be set to zero on transmission and MUST be
+ // ignored on reception. It is reserved for future uses.
+ m.Add(stun.AttrRequestedTransport, v)
+ return nil
+}
+
+// GetFrom decodes REQUESTED-TRANSPORT from message.
+func (t *RequestedTransport) GetFrom(m *stun.Message) error {
+ v, err := m.Get(stun.AttrRequestedTransport)
+ if err != nil {
+ return err
+ }
+ if err = stun.CheckSize(stun.AttrRequestedTransport, len(v), requestedTransportSize); err != nil {
+ return err
+ }
+ t.Protocol = Protocol(v[0])
+ return nil
+}