mirror of
https://mau.dev/mautrix/go.git
synced 2026-03-14 22:35:52 +01:00
Add content structs for VoIP events
This commit is contained in:
parent
8e5668e126
commit
ba8ea0c90b
3 changed files with 152 additions and 0 deletions
|
|
@ -67,6 +67,14 @@ var TypeMap = map[Type]reflect.Type{
|
|||
ToDeviceVerificationRequest: reflect.TypeOf(VerificationRequestEventContent{}),
|
||||
|
||||
ToDeviceOrgMatrixRoomKeyWithheld: reflect.TypeOf(RoomKeyWithheldEventContent{}),
|
||||
|
||||
CallInvite: reflect.TypeOf(CallInviteEventContent{}),
|
||||
CallCandidates: reflect.TypeOf(CallCandidatesEventContent{}),
|
||||
CallAnswer: reflect.TypeOf(CallAnswerEventContent{}),
|
||||
CallReject: reflect.TypeOf(CallRejectEventContent{}),
|
||||
CallSelectAnswer: reflect.TypeOf(CallSelectAnswerEventContent{}),
|
||||
CallNegotiate: reflect.TypeOf(CallNegotiateEventContent{}),
|
||||
CallHangup: reflect.TypeOf(CallHangupEventContent{}),
|
||||
}
|
||||
|
||||
// Content stores the content of a Matrix event.
|
||||
|
|
@ -398,3 +406,52 @@ func (content *Content) AsRoomKeyWithheld() *RoomKeyWithheldEventContent {
|
|||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallInvite() *CallInviteEventContent {
|
||||
casted, ok := content.Parsed.(*CallInviteEventContent)
|
||||
if !ok {
|
||||
return &CallInviteEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallCandidates() *CallCandidatesEventContent {
|
||||
casted, ok := content.Parsed.(*CallCandidatesEventContent)
|
||||
if !ok {
|
||||
return &CallCandidatesEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallAnswer() *CallAnswerEventContent {
|
||||
casted, ok := content.Parsed.(*CallAnswerEventContent)
|
||||
if !ok {
|
||||
return &CallAnswerEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallReject() *CallRejectEventContent {
|
||||
casted, ok := content.Parsed.(*CallRejectEventContent)
|
||||
if !ok {
|
||||
return &CallRejectEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallSelectAnswer() *CallSelectAnswerEventContent {
|
||||
casted, ok := content.Parsed.(*CallSelectAnswerEventContent)
|
||||
if !ok {
|
||||
return &CallSelectAnswerEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallNegotiate() *CallNegotiateEventContent {
|
||||
casted, ok := content.Parsed.(*CallNegotiateEventContent)
|
||||
if !ok {
|
||||
return &CallNegotiateEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
func (content *Content) AsCallHangup() *CallHangupEventContent {
|
||||
casted, ok := content.Parsed.(*CallHangupEventContent)
|
||||
if !ok {
|
||||
return &CallHangupEventContent{}
|
||||
}
|
||||
return casted
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,6 +83,16 @@ func (et *Type) IsInRoomVerification() bool {
|
|||
}
|
||||
}
|
||||
|
||||
func (et *Type) IsCall() bool {
|
||||
switch et.Type {
|
||||
case CallInvite.Type, CallCandidates.Type, CallAnswer.Type, CallReject.Type, CallSelectAnswer.Type,
|
||||
CallNegotiate.Type, CallHangup.Type:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func (et *Type) IsCustom() bool {
|
||||
return !strings.HasPrefix(et.Type, "m.")
|
||||
}
|
||||
|
|
@ -173,6 +183,14 @@ var (
|
|||
InRoomVerificationKey = Type{"m.key.verification.key", MessageEventType}
|
||||
InRoomVerificationMAC = Type{"m.key.verification.mac", MessageEventType}
|
||||
InRoomVerificationCancel = Type{"m.key.verification.cancel", MessageEventType}
|
||||
|
||||
CallInvite = Type{"m.call.invite", MessageEventType}
|
||||
CallCandidates = Type{"m.call.candidates", MessageEventType}
|
||||
CallAnswer = Type{"m.call.answer", MessageEventType}
|
||||
CallReject = Type{"m.call.reject", MessageEventType}
|
||||
CallSelectAnswer = Type{"m.call.select_answer", MessageEventType}
|
||||
CallNegotiate = Type{"m.call.negotiate", MessageEventType}
|
||||
CallHangup = Type{"m.call.hangup", MessageEventType}
|
||||
)
|
||||
|
||||
// Ephemeral events
|
||||
|
|
|
|||
77
event/voip.go
Normal file
77
event/voip.go
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// Copyright (c) 2021 Tulir Asokan
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
package event
|
||||
|
||||
type CallHangupReason string
|
||||
|
||||
const (
|
||||
CallHangupICEFailed CallHangupReason = "ice_failed"
|
||||
CallHangupInviteTimeout CallHangupReason = "invite_timeout"
|
||||
CallHangupUserHangup CallHangupReason = "user_hangup"
|
||||
CallHangupUserMediaFailed CallHangupReason = "user_media_failed"
|
||||
CallHangupUnknownError CallHangupReason = "unknown_error"
|
||||
)
|
||||
|
||||
type CallDataType string
|
||||
|
||||
const (
|
||||
CallDataTypeOffer CallDataType = "offer"
|
||||
CallDataTypeAnswer CallDataType = "answer"
|
||||
)
|
||||
|
||||
type CallData struct {
|
||||
SDP string `json:"sdp"`
|
||||
Type CallDataType `json:"type"`
|
||||
}
|
||||
|
||||
type CallCandidate struct {
|
||||
Candidate string `json:"candidate"`
|
||||
SDPMLineIndex int `json:"sdpMLineIndex"`
|
||||
SDPMID string `json:"sdpMid"`
|
||||
}
|
||||
|
||||
type BaseCallEventContent struct {
|
||||
CallID string `json:"call_id"`
|
||||
PartyID string `json:"party_id"`
|
||||
Version int `json:"version"`
|
||||
}
|
||||
|
||||
type CallInviteEventContent struct {
|
||||
BaseCallEventContent
|
||||
Lifetime int `json:"lifetime"`
|
||||
Offer CallData `json:"offer"`
|
||||
}
|
||||
|
||||
type CallCandidatesEventContent struct {
|
||||
BaseCallEventContent
|
||||
Candidates []CallCandidate `json:"candidates"`
|
||||
}
|
||||
|
||||
type CallRejectEventContent struct {
|
||||
BaseCallEventContent
|
||||
}
|
||||
|
||||
type CallAnswerEventContent struct {
|
||||
BaseCallEventContent
|
||||
Answer CallData `json:"answer"`
|
||||
}
|
||||
|
||||
type CallSelectAnswerEventContent struct {
|
||||
BaseCallEventContent
|
||||
SelectedPartyID string `json:"selected_party_id"`
|
||||
}
|
||||
|
||||
type CallNegotiateEventContent struct {
|
||||
BaseCallEventContent
|
||||
Lifetime int `json:"lifetime"`
|
||||
Description CallData `json:"description"`
|
||||
}
|
||||
|
||||
type CallHangupEventContent struct {
|
||||
BaseCallEventContent
|
||||
Reason CallHangupReason `json:"reason"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue