summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/webrtc/v3/rtcpmuxpolicy.go
blob: f74e440b3b4ddb41836237268de676ffa8a20d3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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())
}