66 lines
1.7 KiB
Go
66 lines
1.7 KiB
Go
package webrtc
|
|
|
|
import (
|
|
"encoding/json"
|
|
)
|
|
|
|
// ICETransportPolicy defines the ICE candidate policy surface the
|
|
// permitted candidates. Only these candidates are used for connectivity checks.
|
|
type ICETransportPolicy int
|
|
|
|
// ICEGatherPolicy is the ORTC equivalent of ICETransportPolicy
|
|
type ICEGatherPolicy = ICETransportPolicy
|
|
|
|
const (
|
|
// ICETransportPolicyAll indicates any type of candidate is used.
|
|
ICETransportPolicyAll ICETransportPolicy = iota
|
|
|
|
// ICETransportPolicyRelay indicates only media relay candidates such
|
|
// as candidates passing through a TURN server are used.
|
|
ICETransportPolicyRelay
|
|
)
|
|
|
|
// This is done this way because of a linter.
|
|
const (
|
|
iceTransportPolicyRelayStr = "relay"
|
|
iceTransportPolicyAllStr = "all"
|
|
)
|
|
|
|
// NewICETransportPolicy takes a string and converts it to ICETransportPolicy
|
|
func NewICETransportPolicy(raw string) ICETransportPolicy {
|
|
switch raw {
|
|
case iceTransportPolicyRelayStr:
|
|
return ICETransportPolicyRelay
|
|
case iceTransportPolicyAllStr:
|
|
return ICETransportPolicyAll
|
|
default:
|
|
return ICETransportPolicy(Unknown)
|
|
}
|
|
}
|
|
|
|
func (t ICETransportPolicy) String() string {
|
|
switch t {
|
|
case ICETransportPolicyRelay:
|
|
return iceTransportPolicyRelayStr
|
|
case ICETransportPolicyAll:
|
|
return iceTransportPolicyAllStr
|
|
default:
|
|
return ErrUnknownType.Error()
|
|
}
|
|
}
|
|
|
|
// UnmarshalJSON parses the JSON-encoded data and stores the result
|
|
func (t *ICETransportPolicy) UnmarshalJSON(b []byte) error {
|
|
var val string
|
|
if err := json.Unmarshal(b, &val); err != nil {
|
|
return err
|
|
}
|
|
*t = NewICETransportPolicy(val)
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON returns the JSON encoding
|
|
func (t ICETransportPolicy) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(t.String())
|
|
}
|