46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package gateway
|
|
|
|
import (
|
|
"errors"
|
|
|
|
protocol "git.sechmachine.io.vn/sechmachine/VerseVDI-Protocol/gen/go/protocol"
|
|
)
|
|
|
|
var ErrNoCapabilityOverlap = errors.New("no capability overlap")
|
|
|
|
const defaultClientDecode = "h264-hevc-opus"
|
|
|
|
func DefaultCapabilities() protocol.CapabilityProfile {
|
|
return protocol.CapabilityProfile{
|
|
Transport: "quic-tls13",
|
|
Framing: "datagram-v1",
|
|
Media: "encoded",
|
|
Audio: "encoded",
|
|
SourceRateControl: "server",
|
|
ClientDecode: defaultClientDecode,
|
|
}
|
|
}
|
|
|
|
func IntersectCapabilities(profiles ...protocol.CapabilityProfile) (protocol.CapabilityProfile, error) {
|
|
if len(profiles) == 0 {
|
|
return protocol.CapabilityProfile{}, ErrNoCapabilityOverlap
|
|
}
|
|
for _, profile := range profiles {
|
|
if err := profile.Validate(); err != nil {
|
|
return protocol.CapabilityProfile{}, ErrNoCapabilityOverlap
|
|
}
|
|
}
|
|
selected := profiles[0]
|
|
for _, profile := range profiles[1:] {
|
|
if selected.Transport != profile.Transport ||
|
|
selected.Framing != profile.Framing ||
|
|
selected.Media != profile.Media ||
|
|
selected.Audio != profile.Audio ||
|
|
selected.SourceRateControl != profile.SourceRateControl ||
|
|
selected.ClientDecode != profile.ClientDecode {
|
|
return protocol.CapabilityProfile{}, ErrNoCapabilityOverlap
|
|
}
|
|
}
|
|
return selected, nil
|
|
}
|