summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go')
-rw-r--r--vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go66
1 files changed, 66 insertions, 0 deletions
diff --git a/vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go b/vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go
new file mode 100644
index 0000000..f74e440
--- /dev/null
+++ b/vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go
@@ -0,0 +1,66 @@
+package webrtc
+
+import (
+ "encoding/json"
+)
+
+// RTCPMuxPolicy affects what ICE candidates are gathered to support
+// non-multiplexed RTCP.
+type RTCPMuxPolicy int
+
+const (
+ // RTCPMuxPolicyNegotiate indicates to gather ICE candidates for both
+ // RTP and RTCP candidates. If the remote-endpoint is capable of
+ // multiplexing RTCP, multiplex RTCP on the RTP candidates. If it is not,
+ // use both the RTP and RTCP candidates separately.
+ RTCPMuxPolicyNegotiate RTCPMuxPolicy = iota + 1
+
+ // RTCPMuxPolicyRequire indicates to gather ICE candidates only for
+ // RTP and multiplex RTCP on the RTP candidates. If the remote endpoint is
+ // not capable of rtcp-mux, session negotiation will fail.
+ RTCPMuxPolicyRequire
+)
+
+// This is done this way because of a linter.
+const (
+ rtcpMuxPolicyNegotiateStr = "negotiate"
+ rtcpMuxPolicyRequireStr = "require"
+)
+
+func newRTCPMuxPolicy(raw string) RTCPMuxPolicy {
+ switch raw {
+ case rtcpMuxPolicyNegotiateStr:
+ return RTCPMuxPolicyNegotiate
+ case rtcpMuxPolicyRequireStr:
+ return RTCPMuxPolicyRequire
+ default:
+ return RTCPMuxPolicy(Unknown)
+ }
+}
+
+func (t RTCPMuxPolicy) String() string {
+ switch t {
+ case RTCPMuxPolicyNegotiate:
+ return rtcpMuxPolicyNegotiateStr
+ case RTCPMuxPolicyRequire:
+ return rtcpMuxPolicyRequireStr
+ default:
+ return ErrUnknownType.Error()
+ }
+}
+
+// UnmarshalJSON parses the JSON-encoded data and stores the result
+func (t *RTCPMuxPolicy) UnmarshalJSON(b []byte) error {
+ var val string
+ if err := json.Unmarshal(b, &val); err != nil {
+ return err
+ }
+
+ *t = newRTCPMuxPolicy(val)
+ return nil
+}
+
+// MarshalJSON returns the JSON encoding
+func (t RTCPMuxPolicy) MarshalJSON() ([]byte, error) {
+ return json.Marshal(t.String())
+}