feat(data-plane): implement phase3c gateway
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
package gateway
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
protocol "git.sechmachine.io.vn/sechmachine/VerseVDI-Protocol/gen/go/protocol"
|
||||
)
|
||||
|
||||
var ErrNoCapabilityOverlap = errors.New("no capability overlap")
|
||||
|
||||
func DefaultCapabilities() protocol.CapabilityProfile {
|
||||
return protocol.CapabilityProfile{
|
||||
Transport: "quic-tls13",
|
||||
Framing: "datagram-v1",
|
||||
Media: "encoded",
|
||||
Audio: "encoded",
|
||||
SourceRateControl: "server",
|
||||
ClientDecode: "h264-opus",
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user