mirror of
https://github.com/livekit/livekit.git
synced 2026-03-30 19:55:41 +00:00
RoomService.updateParticipantMetadata, participant permissions
This commit is contained in:
2
go.mod
2
go.mod
@@ -11,7 +11,7 @@ require (
|
||||
github.com/google/wire v0.5.0
|
||||
github.com/gorilla/websocket v1.4.2
|
||||
github.com/jxskiss/base62 v0.0.0-20191017122030-4f11678b909b
|
||||
github.com/livekit/protocol v0.1.1
|
||||
github.com/livekit/protocol v0.2.2
|
||||
github.com/magefile/mage v1.11.0
|
||||
github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
|
||||
4
go.sum
4
go.sum
@@ -232,6 +232,10 @@ github.com/lithammer/shortuuid/v3 v3.0.6 h1:pr15YQyvhiSX/qPxncFtqk+v4xLEpOZObbsY
|
||||
github.com/lithammer/shortuuid/v3 v3.0.6/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts=
|
||||
github.com/livekit/protocol v0.1.1 h1:usRLnWYFsPK7GDii6bI7E/z510LMKAHkyaasOHKR/Z0=
|
||||
github.com/livekit/protocol v0.1.1/go.mod h1:CP+5gHoKelqXgYLSVUGB8QFYUKIqB26EXKbb/89Wofg=
|
||||
github.com/livekit/protocol v0.2.1 h1:kWZlkMxkuEfvrZa8NFqOCulybEL3eJr2lrq8OfrTLPg=
|
||||
github.com/livekit/protocol v0.2.1/go.mod h1:wo3CGfYB7XMF8GoVJAfTARrYSP/ombi+sbLl6AYdKP0=
|
||||
github.com/livekit/protocol v0.2.2 h1:XRcbreNYi8ReAICSsJ3QXzGKSNOz0LxnimAwz5hVSHQ=
|
||||
github.com/livekit/protocol v0.2.2/go.mod h1:wo3CGfYB7XMF8GoVJAfTARrYSP/ombi+sbLl6AYdKP0=
|
||||
github.com/lucsky/cuid v1.0.2 h1:z4XlExeoderxoPj2/dxKOyPxe9RCOu7yNq9/XWxIUMQ=
|
||||
github.com/lucsky/cuid v1.0.2/go.mod h1:QaaJqckboimOmhRSJXSx/+IT+VTfxfPGSo/6mfgUfmE=
|
||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
||||
|
||||
21
magefile.go
21
magefile.go
@@ -43,11 +43,12 @@ func Deps() error {
|
||||
|
||||
// regenerate protobuf
|
||||
func Proto() error {
|
||||
protoDir := "../protocol"
|
||||
updated, err := target.Path("proto/model.pb.go",
|
||||
"../protocol/model.proto",
|
||||
"../protocol/room.proto",
|
||||
"../protocol/rtc.proto",
|
||||
"../protocol/internal.proto",
|
||||
protoDir+"/model.proto",
|
||||
protoDir+"/room.proto",
|
||||
protoDir+"/rtc.proto",
|
||||
protoDir+"/internal.proto",
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -83,8 +84,8 @@ func Proto() error {
|
||||
"--twirp_opt=paths=source_relative",
|
||||
"--plugin=go="+protoc_go_path,
|
||||
"--plugin=twirp="+twirp_path,
|
||||
"-I=../protocol",
|
||||
"../protocol/room.proto",
|
||||
"-I="+protoDir,
|
||||
protoDir+"/room.proto",
|
||||
)
|
||||
connectStd(cmd)
|
||||
if err := cmd.Run(); err != nil {
|
||||
@@ -96,10 +97,10 @@ func Proto() error {
|
||||
"--go_out", target,
|
||||
"--go_opt=paths=source_relative",
|
||||
"--plugin=go="+protoc_go_path,
|
||||
"-I=../protocol",
|
||||
"../protocol/rtc.proto",
|
||||
"../protocol/internal.proto",
|
||||
"../protocol/model.proto",
|
||||
"-I="+protoDir,
|
||||
protoDir+"/rtc.proto",
|
||||
protoDir+"/internal.proto",
|
||||
protoDir+"/model.proto",
|
||||
)
|
||||
connectStd(cmd)
|
||||
if err := cmd.Run(); err != nil {
|
||||
|
||||
@@ -23,7 +23,14 @@ type MessageSource interface {
|
||||
ReadChan() <-chan proto.Message
|
||||
}
|
||||
|
||||
type NewParticipantCallback func(roomName, identity, metadata string, reconnect bool, requestSource MessageSource, responseSink MessageSink)
|
||||
type ParticipantInit struct {
|
||||
Identity string
|
||||
Metadata string
|
||||
Reconnect bool
|
||||
Permission *livekit.ParticipantPermission
|
||||
}
|
||||
|
||||
type NewParticipantCallback func(roomName string, pi ParticipantInit, requestSource MessageSource, responseSink MessageSink)
|
||||
type RTCMessageCallback func(roomName, identity string, msg *livekit.RTCNodeMessage)
|
||||
|
||||
// Router allows multiple nodes to coordinate the participant session
|
||||
@@ -39,7 +46,7 @@ type Router interface {
|
||||
ListNodes() ([]*livekit.Node, error)
|
||||
|
||||
// participant signal connection is ready to start
|
||||
StartParticipantSignal(roomName, identity, metadata string, reconnect bool) (connectionId string, reqSink MessageSink, resSource MessageSource, err error)
|
||||
StartParticipantSignal(roomName string, pi ParticipantInit) (connectionId string, reqSink MessageSink, resSource MessageSource, err error)
|
||||
|
||||
// sends a message to RTC node
|
||||
CreateRTCSink(roomName, identity string) (MessageSink, error)
|
||||
|
||||
@@ -71,7 +71,7 @@ func (r *LocalRouter) ListNodes() ([]*livekit.Node, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *LocalRouter) StartParticipantSignal(roomName, identity, metadata string, reconnect bool) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
|
||||
func (r *LocalRouter) StartParticipantSignal(roomName string, pi ParticipantInit) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
|
||||
// treat it as a new participant connecting
|
||||
if r.onNewParticipant == nil {
|
||||
err = ErrHandlerNotDefined
|
||||
@@ -79,21 +79,19 @@ func (r *LocalRouter) StartParticipantSignal(roomName, identity, metadata string
|
||||
}
|
||||
|
||||
// index channels by roomName | identity
|
||||
key := participantKey(roomName, identity)
|
||||
key := participantKey(roomName, pi.Identity)
|
||||
reqChan := r.getOrCreateMessageChannel(r.requestChannels, key)
|
||||
resChan := r.getOrCreateMessageChannel(r.responseChannels, key)
|
||||
|
||||
r.onNewParticipant(
|
||||
roomName,
|
||||
identity,
|
||||
metadata,
|
||||
reconnect,
|
||||
pi,
|
||||
// request source
|
||||
reqChan,
|
||||
// response sink
|
||||
resChan,
|
||||
)
|
||||
return identity, reqChan, resChan, nil
|
||||
return pi.Identity, reqChan, resChan, nil
|
||||
}
|
||||
|
||||
func (r *LocalRouter) CreateRTCSink(roomName, identity string) (MessageSink, error) {
|
||||
|
||||
@@ -129,7 +129,7 @@ func (r *RedisRouter) ListNodes() ([]*livekit.Node, error) {
|
||||
}
|
||||
|
||||
// signal connection sets up paths to the RTC node, and starts to route messages to that message queue
|
||||
func (r *RedisRouter) StartParticipantSignal(roomName, identity, metadata string, reconnect bool) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
|
||||
func (r *RedisRouter) StartParticipantSignal(roomName string, pi ParticipantInit) (connectionId string, reqSink MessageSink, resSource MessageSource, err error) {
|
||||
// find the node where the room is hosted at
|
||||
rtcNode, err := r.GetNodeForRoom(roomName)
|
||||
if err != nil {
|
||||
@@ -138,7 +138,7 @@ func (r *RedisRouter) StartParticipantSignal(roomName, identity, metadata string
|
||||
|
||||
// create a new connection id
|
||||
connectionId = utils.NewGuid("CO_")
|
||||
pKey := participantKey(roomName, identity)
|
||||
pKey := participantKey(roomName, pi.Identity)
|
||||
|
||||
// map signal & rtc nodes
|
||||
if err = r.setParticipantSignalNode(connectionId, r.currentNode.Id); err != nil {
|
||||
@@ -150,11 +150,12 @@ func (r *RedisRouter) StartParticipantSignal(roomName, identity, metadata string
|
||||
// sends a message to start session
|
||||
err = sink.WriteMessage(&livekit.StartSession{
|
||||
RoomName: roomName,
|
||||
Identity: identity,
|
||||
Metadata: metadata,
|
||||
Identity: pi.Identity,
|
||||
Metadata: pi.Metadata,
|
||||
// connection id is to allow the RTC node to identify where to route the message back to
|
||||
ConnectionId: connectionId,
|
||||
Reconnect: reconnect,
|
||||
Reconnect: pi.Reconnect,
|
||||
Permission: pi.Permission,
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
@@ -215,13 +216,18 @@ func (r *RedisRouter) startParticipantRTC(ss *livekit.StartSession, participantK
|
||||
}
|
||||
}
|
||||
|
||||
pi := ParticipantInit{
|
||||
Identity: ss.Identity,
|
||||
Metadata: ss.Metadata,
|
||||
Reconnect: ss.Reconnect,
|
||||
Permission: ss.Permission,
|
||||
}
|
||||
|
||||
reqChan := r.getOrCreateMessageChannel(r.requestChannels, participantKey)
|
||||
resSink := NewSignalNodeSink(r.rc, signalNode, ss.ConnectionId)
|
||||
r.onNewParticipant(
|
||||
ss.RoomName,
|
||||
ss.Identity,
|
||||
ss.Metadata,
|
||||
ss.Reconnect,
|
||||
pi,
|
||||
reqChan,
|
||||
resSink,
|
||||
)
|
||||
|
||||
@@ -124,13 +124,11 @@ type FakeRouter struct {
|
||||
startReturnsOnCall map[int]struct {
|
||||
result1 error
|
||||
}
|
||||
StartParticipantSignalStub func(string, string, string, bool) (string, routing.MessageSink, routing.MessageSource, error)
|
||||
StartParticipantSignalStub func(string, routing.ParticipantInit) (string, routing.MessageSink, routing.MessageSource, error)
|
||||
startParticipantSignalMutex sync.RWMutex
|
||||
startParticipantSignalArgsForCall []struct {
|
||||
arg1 string
|
||||
arg2 string
|
||||
arg3 string
|
||||
arg4 bool
|
||||
arg2 routing.ParticipantInit
|
||||
}
|
||||
startParticipantSignalReturns struct {
|
||||
result1 string
|
||||
@@ -757,21 +755,19 @@ func (fake *FakeRouter) StartReturnsOnCall(i int, result1 error) {
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeRouter) StartParticipantSignal(arg1 string, arg2 string, arg3 string, arg4 bool) (string, routing.MessageSink, routing.MessageSource, error) {
|
||||
func (fake *FakeRouter) StartParticipantSignal(arg1 string, arg2 routing.ParticipantInit) (string, routing.MessageSink, routing.MessageSource, error) {
|
||||
fake.startParticipantSignalMutex.Lock()
|
||||
ret, specificReturn := fake.startParticipantSignalReturnsOnCall[len(fake.startParticipantSignalArgsForCall)]
|
||||
fake.startParticipantSignalArgsForCall = append(fake.startParticipantSignalArgsForCall, struct {
|
||||
arg1 string
|
||||
arg2 string
|
||||
arg3 string
|
||||
arg4 bool
|
||||
}{arg1, arg2, arg3, arg4})
|
||||
arg2 routing.ParticipantInit
|
||||
}{arg1, arg2})
|
||||
stub := fake.StartParticipantSignalStub
|
||||
fakeReturns := fake.startParticipantSignalReturns
|
||||
fake.recordInvocation("StartParticipantSignal", []interface{}{arg1, arg2, arg3, arg4})
|
||||
fake.recordInvocation("StartParticipantSignal", []interface{}{arg1, arg2})
|
||||
fake.startParticipantSignalMutex.Unlock()
|
||||
if stub != nil {
|
||||
return stub(arg1, arg2, arg3, arg4)
|
||||
return stub(arg1, arg2)
|
||||
}
|
||||
if specificReturn {
|
||||
return ret.result1, ret.result2, ret.result3, ret.result4
|
||||
@@ -785,17 +781,17 @@ func (fake *FakeRouter) StartParticipantSignalCallCount() int {
|
||||
return len(fake.startParticipantSignalArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeRouter) StartParticipantSignalCalls(stub func(string, string, string, bool) (string, routing.MessageSink, routing.MessageSource, error)) {
|
||||
func (fake *FakeRouter) StartParticipantSignalCalls(stub func(string, routing.ParticipantInit) (string, routing.MessageSink, routing.MessageSource, error)) {
|
||||
fake.startParticipantSignalMutex.Lock()
|
||||
defer fake.startParticipantSignalMutex.Unlock()
|
||||
fake.StartParticipantSignalStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeRouter) StartParticipantSignalArgsForCall(i int) (string, string, string, bool) {
|
||||
func (fake *FakeRouter) StartParticipantSignalArgsForCall(i int) (string, routing.ParticipantInit) {
|
||||
fake.startParticipantSignalMutex.RLock()
|
||||
defer fake.startParticipantSignalMutex.RUnlock()
|
||||
argsForCall := fake.startParticipantSignalArgsForCall[i]
|
||||
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4
|
||||
return argsForCall.arg1, argsForCall.arg2
|
||||
}
|
||||
|
||||
func (fake *FakeRouter) StartParticipantSignalReturns(result1 string, result2 routing.MessageSink, result3 routing.MessageSource, result4 error) {
|
||||
|
||||
@@ -38,9 +38,10 @@ type ParticipantImpl struct {
|
||||
conf *WebRTCConfig
|
||||
identity string
|
||||
// JSON encoded metadata to pass to clients
|
||||
metadata string
|
||||
state atomic.Value // livekit.ParticipantInfo_State
|
||||
rtcpCh chan []rtcp.Packet
|
||||
metadata string
|
||||
permission *livekit.ParticipantPermission
|
||||
state atomic.Value // livekit.ParticipantInfo_State
|
||||
rtcpCh chan []rtcp.Packet
|
||||
|
||||
// hold reference for MediaTrack
|
||||
twcc *twcc.Responder
|
||||
@@ -59,6 +60,7 @@ type ParticipantImpl struct {
|
||||
onTrackPublished func(types.Participant, types.PublishedTrack)
|
||||
onTrackUpdated func(types.Participant, types.PublishedTrack)
|
||||
onStateChange func(p types.Participant, oldState livekit.ParticipantInfo_State)
|
||||
onMetadataUpdate func(types.Participant)
|
||||
onClose func(types.Participant)
|
||||
}
|
||||
|
||||
@@ -140,18 +142,24 @@ func (p *ParticipantImpl) IsReady() bool {
|
||||
func (p *ParticipantImpl) SetMetadata(metadata map[string]interface{}) error {
|
||||
if metadata == nil {
|
||||
p.metadata = ""
|
||||
return nil
|
||||
}
|
||||
|
||||
if data, err := json.Marshal(metadata); err != nil {
|
||||
return err
|
||||
} else {
|
||||
p.metadata = string(data)
|
||||
if data, err := json.Marshal(metadata); err != nil {
|
||||
return err
|
||||
} else {
|
||||
p.metadata = string(data)
|
||||
}
|
||||
}
|
||||
|
||||
if p.onMetadataUpdate != nil {
|
||||
p.onMetadataUpdate(p)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) SetPermission(permission *livekit.ParticipantPermission) {
|
||||
p.permission = permission
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) RTCPChan() chan []rtcp.Packet {
|
||||
return p.rtcpCh
|
||||
}
|
||||
@@ -197,6 +205,10 @@ func (p *ParticipantImpl) OnTrackUpdated(callback func(types.Participant, types.
|
||||
p.onTrackUpdated = callback
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) OnMetadataUpdate(callback func(types.Participant)) {
|
||||
p.onMetadataUpdate = callback
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) OnClose(callback func(types.Participant)) {
|
||||
p.onClose = callback
|
||||
}
|
||||
@@ -459,6 +471,14 @@ func (p *ParticipantImpl) GetAudioLevel() (level uint8, noisy bool) {
|
||||
return
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) CanPublish() bool {
|
||||
return p.permission == nil || p.permission.CanPublish
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) CanSubscribe() bool {
|
||||
return p.permission == nil || p.permission.CanSubscribe
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) SubscriberPC() *webrtc.PeerConnection {
|
||||
return p.subscriber.pc
|
||||
}
|
||||
@@ -580,6 +600,12 @@ func (p *ParticipantImpl) onMediaTrack(track *webrtc.TrackRemote, rtpReceiver *w
|
||||
"remoteTrack", track.ID(),
|
||||
"rid", track.RID())
|
||||
|
||||
if !p.CanPublish() {
|
||||
logger.Warnw("no permission to publish mediaTrack",
|
||||
"participant", p.Identity())
|
||||
return
|
||||
}
|
||||
|
||||
// delete pending track if it's not simulcasting
|
||||
ti := p.getPendingTrack(track.ID(), ToProtoTrackKind(track.Kind()), track.RID() == "")
|
||||
if ti == nil {
|
||||
@@ -620,6 +646,12 @@ func (p *ParticipantImpl) onDataChannel(dc *webrtc.DataChannel) {
|
||||
}
|
||||
logger.Debugw("dataChannel added", "participant", p.Identity(), "label", dc.Label())
|
||||
|
||||
if !p.CanPublish() {
|
||||
logger.Warnw("no permission to publish dataTrack",
|
||||
"participant", p.Identity())
|
||||
return
|
||||
}
|
||||
|
||||
// data channels have numeric ids, so we use its label to identify
|
||||
ti := p.getPendingTrack(dc.Label(), livekit.TrackType_DATA, true)
|
||||
if ti == nil {
|
||||
|
||||
@@ -137,7 +137,7 @@ func (r *Room) Join(participant types.Participant) error {
|
||||
if r.onParticipantChanged != nil {
|
||||
r.onParticipantChanged(participant)
|
||||
}
|
||||
r.broadcastParticipantState(p)
|
||||
r.broadcastParticipantState(p, true)
|
||||
|
||||
if p.State() == livekit.ParticipantInfo_ACTIVE {
|
||||
// subscribe participant to existing publishedTracks
|
||||
@@ -161,7 +161,7 @@ func (r *Room) Join(participant types.Participant) error {
|
||||
}
|
||||
})
|
||||
participant.OnTrackUpdated(r.onTrackUpdated)
|
||||
|
||||
participant.OnMetadataUpdate(r.onParticipantMetadataUpdate)
|
||||
logger.Infow("new participant joined",
|
||||
"id", participant.ID(),
|
||||
"identity", participant.Identity(),
|
||||
@@ -213,7 +213,7 @@ func (r *Room) RemoveParticipant(identity string) {
|
||||
if r.onParticipantChanged != nil {
|
||||
r.onParticipantChanged(p)
|
||||
}
|
||||
r.broadcastParticipantState(p)
|
||||
r.broadcastParticipantState(p, true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,7 +288,7 @@ func (r *Room) OnParticipantChanged(f func(participant types.Participant)) {
|
||||
// a ParticipantImpl in the room added a new remoteTrack, subscribe other participants to it
|
||||
func (r *Room) onTrackAdded(participant types.Participant, track types.PublishedTrack) {
|
||||
// publish participant update, since track state is changed
|
||||
r.broadcastParticipantState(participant)
|
||||
r.broadcastParticipantState(participant, true)
|
||||
|
||||
r.lock.RLock()
|
||||
defer r.lock.RUnlock()
|
||||
@@ -322,19 +322,27 @@ func (r *Room) onTrackAdded(participant types.Participant, track types.Published
|
||||
}
|
||||
|
||||
func (r *Room) onTrackUpdated(p types.Participant, track types.PublishedTrack) {
|
||||
r.broadcastParticipantState(p)
|
||||
// send track updates to everyone, especially if track was updated by admin
|
||||
r.broadcastParticipantState(p, false)
|
||||
if r.onParticipantChanged != nil {
|
||||
r.onParticipantChanged(p)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Room) onParticipantMetadataUpdate(p types.Participant) {
|
||||
r.broadcastParticipantState(p, false)
|
||||
if r.onParticipantChanged != nil {
|
||||
r.onParticipantChanged(p)
|
||||
}
|
||||
}
|
||||
|
||||
// broadcast an update about participant p
|
||||
func (r *Room) broadcastParticipantState(p types.Participant) {
|
||||
func (r *Room) broadcastParticipantState(p types.Participant, skipSource bool) {
|
||||
updates := ToProtoParticipants([]types.Participant{p})
|
||||
participants := r.GetParticipants()
|
||||
for _, op := range participants {
|
||||
// skip itself && closed participants
|
||||
if p.ID() == op.ID() || op.State() == livekit.ParticipantInfo_DISCONNECTED {
|
||||
if (skipSource && p.ID() == op.ID()) || op.State() == livekit.ParticipantInfo_DISCONNECTED {
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ type Participant interface {
|
||||
ToProto() *livekit.ParticipantInfo
|
||||
RTCPChan() chan []rtcp.Packet
|
||||
SetMetadata(metadata map[string]interface{}) error
|
||||
SetPermission(permission *livekit.ParticipantPermission)
|
||||
GetResponseSink() routing.MessageSink
|
||||
SetResponseSink(sink routing.MessageSink)
|
||||
SubscriberMediaEngine() *webrtc.MediaEngine
|
||||
@@ -47,6 +48,10 @@ type Participant interface {
|
||||
SetTrackMuted(trackId string, muted bool)
|
||||
GetAudioLevel() (level uint8, noisy bool)
|
||||
|
||||
// permissions
|
||||
CanPublish() bool
|
||||
CanSubscribe() bool
|
||||
|
||||
Start()
|
||||
Close() error
|
||||
|
||||
@@ -56,6 +61,7 @@ type Participant interface {
|
||||
OnTrackPublished(func(Participant, PublishedTrack))
|
||||
// OnTrackUpdated - one of its publishedTracks changed in status
|
||||
OnTrackUpdated(callback func(Participant, PublishedTrack))
|
||||
OnMetadataUpdate(callback func(Participant))
|
||||
OnClose(func(Participant))
|
||||
|
||||
// package methods
|
||||
|
||||
@@ -48,6 +48,26 @@ type FakeParticipant struct {
|
||||
arg2 string
|
||||
arg3 livekit.TrackType
|
||||
}
|
||||
CanPublishStub func() bool
|
||||
canPublishMutex sync.RWMutex
|
||||
canPublishArgsForCall []struct {
|
||||
}
|
||||
canPublishReturns struct {
|
||||
result1 bool
|
||||
}
|
||||
canPublishReturnsOnCall map[int]struct {
|
||||
result1 bool
|
||||
}
|
||||
CanSubscribeStub func() bool
|
||||
canSubscribeMutex sync.RWMutex
|
||||
canSubscribeArgsForCall []struct {
|
||||
}
|
||||
canSubscribeReturns struct {
|
||||
result1 bool
|
||||
}
|
||||
canSubscribeReturnsOnCall map[int]struct {
|
||||
result1 bool
|
||||
}
|
||||
CloseStub func() error
|
||||
closeMutex sync.RWMutex
|
||||
closeArgsForCall []struct {
|
||||
@@ -159,6 +179,11 @@ type FakeParticipant struct {
|
||||
onCloseArgsForCall []struct {
|
||||
arg1 func(types.Participant)
|
||||
}
|
||||
OnMetadataUpdateStub func(func(types.Participant))
|
||||
onMetadataUpdateMutex sync.RWMutex
|
||||
onMetadataUpdateArgsForCall []struct {
|
||||
arg1 func(types.Participant)
|
||||
}
|
||||
OnStateChangeStub func(func(p types.Participant, oldState livekit.ParticipantInfo_State))
|
||||
onStateChangeMutex sync.RWMutex
|
||||
onStateChangeArgsForCall []struct {
|
||||
@@ -241,6 +266,11 @@ type FakeParticipant struct {
|
||||
setMetadataReturnsOnCall map[int]struct {
|
||||
result1 error
|
||||
}
|
||||
SetPermissionStub func(*livekit.ParticipantPermission)
|
||||
setPermissionMutex sync.RWMutex
|
||||
setPermissionArgsForCall []struct {
|
||||
arg1 *livekit.ParticipantPermission
|
||||
}
|
||||
SetResponseSinkStub func(routing.MessageSink)
|
||||
setResponseSinkMutex sync.RWMutex
|
||||
setResponseSinkArgsForCall []struct {
|
||||
@@ -490,6 +520,112 @@ func (fake *FakeParticipant) AddTrackArgsForCall(i int) (string, string, livekit
|
||||
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanPublish() bool {
|
||||
fake.canPublishMutex.Lock()
|
||||
ret, specificReturn := fake.canPublishReturnsOnCall[len(fake.canPublishArgsForCall)]
|
||||
fake.canPublishArgsForCall = append(fake.canPublishArgsForCall, struct {
|
||||
}{})
|
||||
stub := fake.CanPublishStub
|
||||
fakeReturns := fake.canPublishReturns
|
||||
fake.recordInvocation("CanPublish", []interface{}{})
|
||||
fake.canPublishMutex.Unlock()
|
||||
if stub != nil {
|
||||
return stub()
|
||||
}
|
||||
if specificReturn {
|
||||
return ret.result1
|
||||
}
|
||||
return fakeReturns.result1
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanPublishCallCount() int {
|
||||
fake.canPublishMutex.RLock()
|
||||
defer fake.canPublishMutex.RUnlock()
|
||||
return len(fake.canPublishArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanPublishCalls(stub func() bool) {
|
||||
fake.canPublishMutex.Lock()
|
||||
defer fake.canPublishMutex.Unlock()
|
||||
fake.CanPublishStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanPublishReturns(result1 bool) {
|
||||
fake.canPublishMutex.Lock()
|
||||
defer fake.canPublishMutex.Unlock()
|
||||
fake.CanPublishStub = nil
|
||||
fake.canPublishReturns = struct {
|
||||
result1 bool
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanPublishReturnsOnCall(i int, result1 bool) {
|
||||
fake.canPublishMutex.Lock()
|
||||
defer fake.canPublishMutex.Unlock()
|
||||
fake.CanPublishStub = nil
|
||||
if fake.canPublishReturnsOnCall == nil {
|
||||
fake.canPublishReturnsOnCall = make(map[int]struct {
|
||||
result1 bool
|
||||
})
|
||||
}
|
||||
fake.canPublishReturnsOnCall[i] = struct {
|
||||
result1 bool
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanSubscribe() bool {
|
||||
fake.canSubscribeMutex.Lock()
|
||||
ret, specificReturn := fake.canSubscribeReturnsOnCall[len(fake.canSubscribeArgsForCall)]
|
||||
fake.canSubscribeArgsForCall = append(fake.canSubscribeArgsForCall, struct {
|
||||
}{})
|
||||
stub := fake.CanSubscribeStub
|
||||
fakeReturns := fake.canSubscribeReturns
|
||||
fake.recordInvocation("CanSubscribe", []interface{}{})
|
||||
fake.canSubscribeMutex.Unlock()
|
||||
if stub != nil {
|
||||
return stub()
|
||||
}
|
||||
if specificReturn {
|
||||
return ret.result1
|
||||
}
|
||||
return fakeReturns.result1
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanSubscribeCallCount() int {
|
||||
fake.canSubscribeMutex.RLock()
|
||||
defer fake.canSubscribeMutex.RUnlock()
|
||||
return len(fake.canSubscribeArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanSubscribeCalls(stub func() bool) {
|
||||
fake.canSubscribeMutex.Lock()
|
||||
defer fake.canSubscribeMutex.Unlock()
|
||||
fake.CanSubscribeStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanSubscribeReturns(result1 bool) {
|
||||
fake.canSubscribeMutex.Lock()
|
||||
defer fake.canSubscribeMutex.Unlock()
|
||||
fake.CanSubscribeStub = nil
|
||||
fake.canSubscribeReturns = struct {
|
||||
result1 bool
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) CanSubscribeReturnsOnCall(i int, result1 bool) {
|
||||
fake.canSubscribeMutex.Lock()
|
||||
defer fake.canSubscribeMutex.Unlock()
|
||||
fake.CanSubscribeStub = nil
|
||||
if fake.canSubscribeReturnsOnCall == nil {
|
||||
fake.canSubscribeReturnsOnCall = make(map[int]struct {
|
||||
result1 bool
|
||||
})
|
||||
}
|
||||
fake.canSubscribeReturnsOnCall[i] = struct {
|
||||
result1 bool
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) Close() error {
|
||||
fake.closeMutex.Lock()
|
||||
ret, specificReturn := fake.closeReturnsOnCall[len(fake.closeArgsForCall)]
|
||||
@@ -1074,6 +1210,38 @@ func (fake *FakeParticipant) OnCloseArgsForCall(i int) func(types.Participant) {
|
||||
return argsForCall.arg1
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) OnMetadataUpdate(arg1 func(types.Participant)) {
|
||||
fake.onMetadataUpdateMutex.Lock()
|
||||
fake.onMetadataUpdateArgsForCall = append(fake.onMetadataUpdateArgsForCall, struct {
|
||||
arg1 func(types.Participant)
|
||||
}{arg1})
|
||||
stub := fake.OnMetadataUpdateStub
|
||||
fake.recordInvocation("OnMetadataUpdate", []interface{}{arg1})
|
||||
fake.onMetadataUpdateMutex.Unlock()
|
||||
if stub != nil {
|
||||
fake.OnMetadataUpdateStub(arg1)
|
||||
}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) OnMetadataUpdateCallCount() int {
|
||||
fake.onMetadataUpdateMutex.RLock()
|
||||
defer fake.onMetadataUpdateMutex.RUnlock()
|
||||
return len(fake.onMetadataUpdateArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) OnMetadataUpdateCalls(stub func(func(types.Participant))) {
|
||||
fake.onMetadataUpdateMutex.Lock()
|
||||
defer fake.onMetadataUpdateMutex.Unlock()
|
||||
fake.OnMetadataUpdateStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) OnMetadataUpdateArgsForCall(i int) func(types.Participant) {
|
||||
fake.onMetadataUpdateMutex.RLock()
|
||||
defer fake.onMetadataUpdateMutex.RUnlock()
|
||||
argsForCall := fake.onMetadataUpdateArgsForCall[i]
|
||||
return argsForCall.arg1
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) OnStateChange(arg1 func(p types.Participant, oldState livekit.ParticipantInfo_State)) {
|
||||
fake.onStateChangeMutex.Lock()
|
||||
fake.onStateChangeArgsForCall = append(fake.onStateChangeArgsForCall, struct {
|
||||
@@ -1554,6 +1722,38 @@ func (fake *FakeParticipant) SetMetadataReturnsOnCall(i int, result1 error) {
|
||||
}{result1}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) SetPermission(arg1 *livekit.ParticipantPermission) {
|
||||
fake.setPermissionMutex.Lock()
|
||||
fake.setPermissionArgsForCall = append(fake.setPermissionArgsForCall, struct {
|
||||
arg1 *livekit.ParticipantPermission
|
||||
}{arg1})
|
||||
stub := fake.SetPermissionStub
|
||||
fake.recordInvocation("SetPermission", []interface{}{arg1})
|
||||
fake.setPermissionMutex.Unlock()
|
||||
if stub != nil {
|
||||
fake.SetPermissionStub(arg1)
|
||||
}
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) SetPermissionCallCount() int {
|
||||
fake.setPermissionMutex.RLock()
|
||||
defer fake.setPermissionMutex.RUnlock()
|
||||
return len(fake.setPermissionArgsForCall)
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) SetPermissionCalls(stub func(*livekit.ParticipantPermission)) {
|
||||
fake.setPermissionMutex.Lock()
|
||||
defer fake.setPermissionMutex.Unlock()
|
||||
fake.SetPermissionStub = stub
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) SetPermissionArgsForCall(i int) *livekit.ParticipantPermission {
|
||||
fake.setPermissionMutex.RLock()
|
||||
defer fake.setPermissionMutex.RUnlock()
|
||||
argsForCall := fake.setPermissionArgsForCall[i]
|
||||
return argsForCall.arg1
|
||||
}
|
||||
|
||||
func (fake *FakeParticipant) SetResponseSink(arg1 routing.MessageSink) {
|
||||
fake.setResponseSinkMutex.Lock()
|
||||
fake.setResponseSinkArgsForCall = append(fake.setResponseSinkArgsForCall, struct {
|
||||
@@ -1866,6 +2066,10 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
|
||||
defer fake.addSubscriberMutex.RUnlock()
|
||||
fake.addTrackMutex.RLock()
|
||||
defer fake.addTrackMutex.RUnlock()
|
||||
fake.canPublishMutex.RLock()
|
||||
defer fake.canPublishMutex.RUnlock()
|
||||
fake.canSubscribeMutex.RLock()
|
||||
defer fake.canSubscribeMutex.RUnlock()
|
||||
fake.closeMutex.RLock()
|
||||
defer fake.closeMutex.RUnlock()
|
||||
fake.getAudioLevelMutex.RLock()
|
||||
@@ -1888,6 +2092,8 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
|
||||
defer fake.isReadyMutex.RUnlock()
|
||||
fake.onCloseMutex.RLock()
|
||||
defer fake.onCloseMutex.RUnlock()
|
||||
fake.onMetadataUpdateMutex.RLock()
|
||||
defer fake.onMetadataUpdateMutex.RUnlock()
|
||||
fake.onStateChangeMutex.RLock()
|
||||
defer fake.onStateChangeMutex.RUnlock()
|
||||
fake.onTrackPublishedMutex.RLock()
|
||||
@@ -1908,6 +2114,8 @@ func (fake *FakeParticipant) Invocations() map[string][][]interface{} {
|
||||
defer fake.sendParticipantUpdateMutex.RUnlock()
|
||||
fake.setMetadataMutex.RLock()
|
||||
defer fake.setMetadataMutex.RUnlock()
|
||||
fake.setPermissionMutex.RLock()
|
||||
defer fake.setPermissionMutex.RUnlock()
|
||||
fake.setResponseSinkMutex.RLock()
|
||||
defer fake.setResponseSinkMutex.RUnlock()
|
||||
fake.setTrackMutedMutex.RLock()
|
||||
|
||||
@@ -172,22 +172,22 @@ func (r *RoomManager) CloseIdleRooms() {
|
||||
}
|
||||
|
||||
// starts WebRTC session when a new participant is connected, takes place on RTC node
|
||||
func (r *RoomManager) StartSession(roomName, identity, metadata string, reconnect bool, requestSource routing.MessageSource, responseSink routing.MessageSink) {
|
||||
func (r *RoomManager) StartSession(roomName string, pi routing.ParticipantInit, requestSource routing.MessageSource, responseSink routing.MessageSink) {
|
||||
room, err := r.getOrCreateRoom(roomName)
|
||||
if err != nil {
|
||||
logger.Errorw("could not create room", "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
participant := room.GetParticipant(identity)
|
||||
participant := room.GetParticipant(pi.Identity)
|
||||
if participant != nil {
|
||||
// When reconnecting, it means WS has interrupted by underlying peer connection is still ok
|
||||
// in this mode, we'll keep the participant SID, and just swap the sink for the underlying connection
|
||||
if reconnect {
|
||||
if pi.Reconnect {
|
||||
logger.Debugw("resuming RTC session",
|
||||
"room", roomName,
|
||||
"node", r.currentNode.Id,
|
||||
"participant", identity,
|
||||
"participant", pi.Identity,
|
||||
)
|
||||
// close previous sink, and link to new one
|
||||
prevSink := participant.GetResponseSink()
|
||||
@@ -206,22 +206,26 @@ func (r *RoomManager) StartSession(roomName, identity, metadata string, reconnec
|
||||
logger.Debugw("starting RTC session",
|
||||
"room", roomName,
|
||||
"node", r.currentNode.Id,
|
||||
"participant", identity,
|
||||
"participant", pi.Identity,
|
||||
"num_participants", len(room.GetParticipants()),
|
||||
)
|
||||
|
||||
participant, err = rtc.NewParticipant(identity, r.rtcConfig, responseSink, r.config.Audio)
|
||||
participant, err = rtc.NewParticipant(pi.Identity, r.rtcConfig, responseSink, r.config.Audio)
|
||||
if err != nil {
|
||||
logger.Errorw("could not create participant", "error", err)
|
||||
return
|
||||
}
|
||||
if metadata != "" {
|
||||
if pi.Metadata != "" {
|
||||
var md map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(metadata), &md); err == nil {
|
||||
if err := json.Unmarshal([]byte(pi.Metadata), &md); err == nil {
|
||||
participant.SetMetadata(md)
|
||||
}
|
||||
}
|
||||
|
||||
if pi.Permission != nil {
|
||||
participant.SetPermission(pi.Permission)
|
||||
}
|
||||
|
||||
// join room
|
||||
if err := room.Join(participant); err != nil {
|
||||
logger.Errorw("could not join room", "error", err)
|
||||
@@ -334,7 +338,13 @@ func (r *RoomManager) rtcSessionWorker(room *rtc.Room, participant types.Partici
|
||||
case *livekit.SignalRequest_Mute:
|
||||
participant.SetTrackMuted(msg.Mute.Sid, msg.Mute.Muted)
|
||||
case *livekit.SignalRequest_Subscription:
|
||||
room.UpdateSubscriptions(participant, msg.Subscription)
|
||||
if participant.CanSubscribe() {
|
||||
room.UpdateSubscriptions(participant, msg.Subscription)
|
||||
} else {
|
||||
logger.Warnw("rejected participant subscription",
|
||||
"participant", participant.Identity(),
|
||||
"tracks", msg.Subscription.TrackSids)
|
||||
}
|
||||
case *livekit.SignalRequest_TrackSetting:
|
||||
for _, subTrack := range participant.GetSubscribedTracks() {
|
||||
for _, sid := range msg.TrackSetting.TrackSids {
|
||||
@@ -373,6 +383,16 @@ func (r *RoomManager) handleRTCMessage(roomName, identity string, msg *livekit.R
|
||||
logger.Debugw("setting track muted", "room", roomName, "participant", identity,
|
||||
"track", rm.MuteTrack.TrackSid, "muted", rm.MuteTrack.Muted)
|
||||
participant.SetTrackMuted(rm.MuteTrack.TrackSid, rm.MuteTrack.Muted)
|
||||
case *livekit.RTCNodeMessage_UpdateMetadata:
|
||||
logger.Debugw("updating metadata", "room", roomName, "participant", identity)
|
||||
var md map[string]interface{}
|
||||
if rm.UpdateMetadata.Metadata != "" {
|
||||
if err := json.Unmarshal([]byte(rm.UpdateMetadata.Metadata), &md); err != nil {
|
||||
logger.Errorw("could not update metadata", "error", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
participant.SetMetadata(md)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/thoas/go-funk"
|
||||
"github.com/twitchtv/twirp"
|
||||
|
||||
"github.com/livekit/livekit-server/pkg/routing"
|
||||
livekit "github.com/livekit/livekit-server/proto"
|
||||
)
|
||||
|
||||
@@ -97,16 +98,8 @@ func (s *RoomService) GetParticipant(ctx context.Context, req *livekit.RoomParti
|
||||
}
|
||||
|
||||
func (s *RoomService) RemoveParticipant(ctx context.Context, req *livekit.RoomParticipantIdentity) (res *livekit.RemoveParticipantResponse, err error) {
|
||||
if err = EnsureAdminPermission(ctx, req.Room); err != nil {
|
||||
return nil, twirpAuthError(err)
|
||||
}
|
||||
rtcSink, err := s.createRTCSink(ctx, req.Room, req.Identity)
|
||||
|
||||
participant, err := s.roomManager.roomStore.GetParticipant(req.Room, req.Identity)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
rtcSink, err := s.roomManager.router.CreateRTCSink(req.Room, participant.Identity)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -122,30 +115,16 @@ func (s *RoomService) RemoveParticipant(ctx context.Context, req *livekit.RoomPa
|
||||
}
|
||||
|
||||
func (s *RoomService) MutePublishedTrack(ctx context.Context, req *livekit.MuteRoomTrackRequest) (res *livekit.MuteRoomTrackResponse, err error) {
|
||||
if err = EnsureAdminPermission(ctx, req.Room); err != nil {
|
||||
return nil, twirpAuthError(err)
|
||||
}
|
||||
|
||||
participant, err := s.roomManager.roomStore.GetParticipant(req.Room, req.Identity)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
rtcSink, err := s.roomManager.router.CreateRTCSink(req.Room, participant.Identity)
|
||||
rtcSink, err := s.createRTCSink(ctx, req.Room, req.Identity)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer rtcSink.Close()
|
||||
err = rtcSink.WriteMessage(&livekit.RTCNodeMessage{
|
||||
Message: &livekit.RTCNodeMessage_MuteTrack{
|
||||
MuteTrack: req,
|
||||
},
|
||||
})
|
||||
|
||||
participant, err := s.roomManager.roomStore.GetParticipant(req.Room, req.Identity)
|
||||
if err != nil {
|
||||
return
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// find the track
|
||||
track := funk.Find(participant.Tracks, func(t *livekit.TrackInfo) bool {
|
||||
return t.Sid == req.TrackSid
|
||||
@@ -153,8 +132,55 @@ func (s *RoomService) MutePublishedTrack(ctx context.Context, req *livekit.MuteR
|
||||
if track == nil {
|
||||
return nil, twirp.NotFoundError(ErrTrackNotFound.Error())
|
||||
}
|
||||
|
||||
err = rtcSink.WriteMessage(&livekit.RTCNodeMessage{
|
||||
Message: &livekit.RTCNodeMessage_MuteTrack{
|
||||
MuteTrack: req,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res = &livekit.MuteRoomTrackResponse{
|
||||
Track: track.(*livekit.TrackInfo),
|
||||
}
|
||||
// mute might not have happened, reflect desired state
|
||||
res.Track.Muted = req.Muted
|
||||
return
|
||||
}
|
||||
|
||||
func (s *RoomService) UpdateParticipantMetadata(ctx context.Context, req *livekit.UpdateParticipantMetadataRequest) (*livekit.ParticipantInfo, error) {
|
||||
rtcSink, err := s.createRTCSink(ctx, req.Target.Room, req.Target.Identity)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rtcSink.Close()
|
||||
|
||||
participant, err := s.roomManager.roomStore.GetParticipant(req.Target.Room, req.Target.Identity)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = rtcSink.WriteMessage(&livekit.RTCNodeMessage{
|
||||
Message: &livekit.RTCNodeMessage_UpdateMetadata{
|
||||
UpdateMetadata: req,
|
||||
},
|
||||
})
|
||||
|
||||
participant.Metadata = req.Metadata
|
||||
return participant, nil
|
||||
}
|
||||
|
||||
func (s *RoomService) createRTCSink(ctx context.Context, room, identity string) (routing.MessageSink, error) {
|
||||
if err := EnsureAdminPermission(ctx, room); err != nil {
|
||||
return nil, twirpAuthError(err)
|
||||
}
|
||||
|
||||
_, err := s.roomManager.roomStore.GetParticipant(room, identity)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return s.roomManager.router.CreateRTCSink(room, identity)
|
||||
}
|
||||
|
||||
@@ -56,14 +56,24 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
roomName := r.FormValue("room")
|
||||
reconnectParam := r.FormValue("reconnect")
|
||||
isReconnect := reconnectParam == "1" || reconnectParam == "true"
|
||||
|
||||
claims := GetGrants(r.Context())
|
||||
// require a claim
|
||||
if claims == nil || claims.Video == nil {
|
||||
handleError(w, http.StatusUnauthorized, rtc.ErrPermissionDenied.Error())
|
||||
return
|
||||
}
|
||||
identity := claims.Identity
|
||||
pi := routing.ParticipantInit{
|
||||
Reconnect: reconnectParam == "1" || reconnectParam == "true",
|
||||
Identity: claims.Identity,
|
||||
}
|
||||
// only use permissions if any of them are set, default permissive
|
||||
if claims.Video.CanPublish || claims.Video.CanSubscribe {
|
||||
pi.Permission = &livekit.ParticipantPermission{
|
||||
CanSubscribe: claims.Video.CanSubscribe,
|
||||
CanPublish: claims.Video.CanPublish,
|
||||
}
|
||||
}
|
||||
|
||||
onlyName, err := EnsureJoinPermission(r.Context())
|
||||
if err != nil {
|
||||
@@ -81,17 +91,16 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
var metadata string
|
||||
if claims.Metadata != nil {
|
||||
if data, err := json.Marshal(claims.Metadata); err != nil {
|
||||
logger.Warnw("unable to encode metadata", "error", err)
|
||||
} else {
|
||||
metadata = string(data)
|
||||
pi.Metadata = string(data)
|
||||
}
|
||||
}
|
||||
|
||||
// this needs to be started first *before* using router functions on this node
|
||||
connId, reqSink, resSource, err := s.router.StartParticipantSignal(roomName, identity, metadata, isReconnect)
|
||||
connId, reqSink, resSource, err := s.router.StartParticipantSignal(roomName, pi)
|
||||
if err != nil {
|
||||
handleError(w, http.StatusInternalServerError, "could not start session: "+err.Error())
|
||||
return
|
||||
@@ -100,7 +109,7 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
done := make(chan bool, 1)
|
||||
// function exits when websocket terminates, it'll close the event reading off of response sink as well
|
||||
defer func() {
|
||||
logger.Infow("WS connection closed", "participant", identity, "connectionId", connId)
|
||||
logger.Infow("WS connection closed", "participant", pi.Identity, "connectionId", connId)
|
||||
reqSink.Close()
|
||||
close(done)
|
||||
}()
|
||||
@@ -120,7 +129,7 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
"connectionId", connId,
|
||||
"room", rm.Sid,
|
||||
"roomName", rm.Name,
|
||||
"name", identity,
|
||||
"name", pi.Identity,
|
||||
)
|
||||
|
||||
// handle responses
|
||||
@@ -137,7 +146,8 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
case msg := <-resSource.ReadChan():
|
||||
if msg == nil {
|
||||
logger.Infow("source closed connection", "participant", identity,
|
||||
logger.Infow("source closed connection",
|
||||
"participant", pi.Identity,
|
||||
"connectionId", connId)
|
||||
return
|
||||
}
|
||||
@@ -145,7 +155,7 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
if !ok {
|
||||
logger.Errorw("unexpected message type",
|
||||
"type", fmt.Sprintf("%T", msg),
|
||||
"participant", identity,
|
||||
"participant", pi.Identity,
|
||||
"connectionId", connId)
|
||||
continue
|
||||
}
|
||||
@@ -172,8 +182,10 @@ func (s *RTCService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
if err := reqSink.WriteMessage(req); err != nil {
|
||||
logger.Warnw("error writing to request sink", "error", err,
|
||||
"participant", identity, "connectionId", connId)
|
||||
logger.Warnw("error writing to request sink",
|
||||
"error", err,
|
||||
"participant", pi.Identity,
|
||||
"connectionId", connId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.25.0
|
||||
// protoc v3.15.5
|
||||
// protoc v3.15.6
|
||||
// source: internal.proto
|
||||
|
||||
package livekit
|
||||
@@ -197,6 +197,7 @@ type RTCNodeMessage struct {
|
||||
// *RTCNodeMessage_Request
|
||||
// *RTCNodeMessage_RemoveParticipant
|
||||
// *RTCNodeMessage_MuteTrack
|
||||
// *RTCNodeMessage_UpdateMetadata
|
||||
Message isRTCNodeMessage_Message `protobuf_oneof:"message"`
|
||||
}
|
||||
|
||||
@@ -274,6 +275,13 @@ func (x *RTCNodeMessage) GetMuteTrack() *MuteRoomTrackRequest {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *RTCNodeMessage) GetUpdateMetadata() *UpdateParticipantMetadataRequest {
|
||||
if x, ok := x.GetMessage().(*RTCNodeMessage_UpdateMetadata); ok {
|
||||
return x.UpdateMetadata
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type isRTCNodeMessage_Message interface {
|
||||
isRTCNodeMessage_Message()
|
||||
}
|
||||
@@ -295,6 +303,10 @@ type RTCNodeMessage_MuteTrack struct {
|
||||
MuteTrack *MuteRoomTrackRequest `protobuf:"bytes,5,opt,name=mute_track,json=muteTrack,proto3,oneof"`
|
||||
}
|
||||
|
||||
type RTCNodeMessage_UpdateMetadata struct {
|
||||
UpdateMetadata *UpdateParticipantMetadataRequest `protobuf:"bytes,6,opt,name=update_metadata,json=updateMetadata,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*RTCNodeMessage_StartSession) isRTCNodeMessage_Message() {}
|
||||
|
||||
func (*RTCNodeMessage_Request) isRTCNodeMessage_Message() {}
|
||||
@@ -303,6 +315,8 @@ func (*RTCNodeMessage_RemoveParticipant) isRTCNodeMessage_Message() {}
|
||||
|
||||
func (*RTCNodeMessage_MuteTrack) isRTCNodeMessage_Message() {}
|
||||
|
||||
func (*RTCNodeMessage_UpdateMetadata) isRTCNodeMessage_Message() {}
|
||||
|
||||
// message to Signal nodes
|
||||
type SignalNodeMessage struct {
|
||||
state protoimpl.MessageState
|
||||
@@ -403,7 +417,8 @@ type StartSession struct {
|
||||
// if a client is reconnecting (i.e. resume instead of restart)
|
||||
Reconnect bool `protobuf:"varint,4,opt,name=reconnect,proto3" json:"reconnect,omitempty"`
|
||||
// metadata to pass to participant
|
||||
Metadata string `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
||||
Metadata string `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
||||
Permission *ParticipantPermission `protobuf:"bytes,6,opt,name=permission,proto3" json:"permission,omitempty"`
|
||||
}
|
||||
|
||||
func (x *StartSession) Reset() {
|
||||
@@ -473,6 +488,68 @@ func (x *StartSession) GetMetadata() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *StartSession) GetPermission() *ParticipantPermission {
|
||||
if x != nil {
|
||||
return x.Permission
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ParticipantPermission struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
CanSubscribe bool `protobuf:"varint,1,opt,name=can_subscribe,json=canSubscribe,proto3" json:"can_subscribe,omitempty"`
|
||||
CanPublish bool `protobuf:"varint,2,opt,name=can_publish,json=canPublish,proto3" json:"can_publish,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ParticipantPermission) Reset() {
|
||||
*x = ParticipantPermission{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_internal_proto_msgTypes[5]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ParticipantPermission) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ParticipantPermission) ProtoMessage() {}
|
||||
|
||||
func (x *ParticipantPermission) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_internal_proto_msgTypes[5]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ParticipantPermission.ProtoReflect.Descriptor instead.
|
||||
func (*ParticipantPermission) Descriptor() ([]byte, []int) {
|
||||
return file_internal_proto_rawDescGZIP(), []int{5}
|
||||
}
|
||||
|
||||
func (x *ParticipantPermission) GetCanSubscribe() bool {
|
||||
if x != nil {
|
||||
return x.CanSubscribe
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *ParticipantPermission) GetCanPublish() bool {
|
||||
if x != nil {
|
||||
return x.CanPublish
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type EndSession struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@@ -482,7 +559,7 @@ type EndSession struct {
|
||||
func (x *EndSession) Reset() {
|
||||
*x = EndSession{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_internal_proto_msgTypes[5]
|
||||
mi := &file_internal_proto_msgTypes[6]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -495,7 +572,7 @@ func (x *EndSession) String() string {
|
||||
func (*EndSession) ProtoMessage() {}
|
||||
|
||||
func (x *EndSession) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_internal_proto_msgTypes[5]
|
||||
mi := &file_internal_proto_msgTypes[6]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -508,7 +585,7 @@ func (x *EndSession) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use EndSession.ProtoReflect.Descriptor instead.
|
||||
func (*EndSession) Descriptor() ([]byte, []int) {
|
||||
return file_internal_proto_rawDescGZIP(), []int{5}
|
||||
return file_internal_proto_rawDescGZIP(), []int{6}
|
||||
}
|
||||
|
||||
type RemoveParticipant struct {
|
||||
@@ -522,7 +599,7 @@ type RemoveParticipant struct {
|
||||
func (x *RemoveParticipant) Reset() {
|
||||
*x = RemoveParticipant{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_internal_proto_msgTypes[6]
|
||||
mi := &file_internal_proto_msgTypes[7]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@@ -535,7 +612,7 @@ func (x *RemoveParticipant) String() string {
|
||||
func (*RemoveParticipant) ProtoMessage() {}
|
||||
|
||||
func (x *RemoveParticipant) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_internal_proto_msgTypes[6]
|
||||
mi := &file_internal_proto_msgTypes[7]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@@ -548,7 +625,7 @@ func (x *RemoveParticipant) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use RemoveParticipant.ProtoReflect.Descriptor instead.
|
||||
func (*RemoveParticipant) Descriptor() ([]byte, []int) {
|
||||
return file_internal_proto_rawDescGZIP(), []int{6}
|
||||
return file_internal_proto_rawDescGZIP(), []int{7}
|
||||
}
|
||||
|
||||
func (x *RemoveParticipant) GetParticipantId() string {
|
||||
@@ -584,7 +661,7 @@ var file_internal_proto_rawDesc = []byte{
|
||||
0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x49, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6e,
|
||||
0x75, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20,
|
||||
0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x4f, 0x75,
|
||||
0x74, 0x22, 0xc9, 0x02, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73,
|
||||
0x74, 0x22, 0x9f, 0x03, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73,
|
||||
0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
|
||||
0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70,
|
||||
0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x3c, 0x0a,
|
||||
@@ -604,37 +681,53 @@ var file_internal_proto_rawDesc = []byte{
|
||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
|
||||
0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x75, 0x74, 0x65, 0x54, 0x72, 0x61,
|
||||
0x63, 0x6b, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb2, 0x01,
|
||||
0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73, 0x73,
|
||||
0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e,
|
||||
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76,
|
||||
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||
0x36, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45,
|
||||
0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x6e, 0x64,
|
||||
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61,
|
||||
0x67, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x73, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65,
|
||||
0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d,
|
||||
0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
|
||||
0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x04,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12,
|
||||
0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x0c, 0x0a, 0x0a, 0x45,
|
||||
0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x11, 0x52, 0x65, 0x6d,
|
||||
0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x25,
|
||||
0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
|
||||
0x61, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65,
|
||||
0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x63, 0x6b, 0x12, 0x54, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74,
|
||||
0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x69,
|
||||
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74,
|
||||
0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73,
|
||||
0x61, 0x67, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e,
|
||||
0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x35,
|
||||
0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61,
|
||||
0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x73,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76,
|
||||
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48,
|
||||
0x00, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a,
|
||||
0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xe6, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x61,
|
||||
0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f,
|
||||
0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f,
|
||||
0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e,
|
||||
0x6e, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f,
|
||||
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
|
||||
0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
|
||||
0x61, 0x12, 0x3e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69,
|
||||
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x22, 0x5d, 0x0a, 0x15, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
|
||||
0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61,
|
||||
0x6e, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x08, 0x52, 0x0c, 0x63, 0x61, 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12,
|
||||
0x1f, 0x0a, 0x0b, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
|
||||
0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a,
|
||||
0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
|
||||
0x61, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
|
||||
0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72,
|
||||
0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69,
|
||||
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
|
||||
0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -649,33 +742,37 @@ func file_internal_proto_rawDescGZIP() []byte {
|
||||
return file_internal_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
|
||||
var file_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
|
||||
var file_internal_proto_goTypes = []interface{}{
|
||||
(*Node)(nil), // 0: livekit.Node
|
||||
(*NodeStats)(nil), // 1: livekit.NodeStats
|
||||
(*RTCNodeMessage)(nil), // 2: livekit.RTCNodeMessage
|
||||
(*SignalNodeMessage)(nil), // 3: livekit.SignalNodeMessage
|
||||
(*StartSession)(nil), // 4: livekit.StartSession
|
||||
(*EndSession)(nil), // 5: livekit.EndSession
|
||||
(*RemoveParticipant)(nil), // 6: livekit.RemoveParticipant
|
||||
(*SignalRequest)(nil), // 7: livekit.SignalRequest
|
||||
(*RoomParticipantIdentity)(nil), // 8: livekit.RoomParticipantIdentity
|
||||
(*MuteRoomTrackRequest)(nil), // 9: livekit.MuteRoomTrackRequest
|
||||
(*SignalResponse)(nil), // 10: livekit.SignalResponse
|
||||
(*Node)(nil), // 0: livekit.Node
|
||||
(*NodeStats)(nil), // 1: livekit.NodeStats
|
||||
(*RTCNodeMessage)(nil), // 2: livekit.RTCNodeMessage
|
||||
(*SignalNodeMessage)(nil), // 3: livekit.SignalNodeMessage
|
||||
(*StartSession)(nil), // 4: livekit.StartSession
|
||||
(*ParticipantPermission)(nil), // 5: livekit.ParticipantPermission
|
||||
(*EndSession)(nil), // 6: livekit.EndSession
|
||||
(*RemoveParticipant)(nil), // 7: livekit.RemoveParticipant
|
||||
(*SignalRequest)(nil), // 8: livekit.SignalRequest
|
||||
(*RoomParticipantIdentity)(nil), // 9: livekit.RoomParticipantIdentity
|
||||
(*MuteRoomTrackRequest)(nil), // 10: livekit.MuteRoomTrackRequest
|
||||
(*UpdateParticipantMetadataRequest)(nil), // 11: livekit.UpdateParticipantMetadataRequest
|
||||
(*SignalResponse)(nil), // 12: livekit.SignalResponse
|
||||
}
|
||||
var file_internal_proto_depIdxs = []int32{
|
||||
1, // 0: livekit.Node.stats:type_name -> livekit.NodeStats
|
||||
4, // 1: livekit.RTCNodeMessage.start_session:type_name -> livekit.StartSession
|
||||
7, // 2: livekit.RTCNodeMessage.request:type_name -> livekit.SignalRequest
|
||||
8, // 3: livekit.RTCNodeMessage.remove_participant:type_name -> livekit.RoomParticipantIdentity
|
||||
9, // 4: livekit.RTCNodeMessage.mute_track:type_name -> livekit.MuteRoomTrackRequest
|
||||
10, // 5: livekit.SignalNodeMessage.response:type_name -> livekit.SignalResponse
|
||||
5, // 6: livekit.SignalNodeMessage.end_session:type_name -> livekit.EndSession
|
||||
7, // [7:7] is the sub-list for method output_type
|
||||
7, // [7:7] is the sub-list for method input_type
|
||||
7, // [7:7] is the sub-list for extension type_name
|
||||
7, // [7:7] is the sub-list for extension extendee
|
||||
0, // [0:7] is the sub-list for field type_name
|
||||
8, // 2: livekit.RTCNodeMessage.request:type_name -> livekit.SignalRequest
|
||||
9, // 3: livekit.RTCNodeMessage.remove_participant:type_name -> livekit.RoomParticipantIdentity
|
||||
10, // 4: livekit.RTCNodeMessage.mute_track:type_name -> livekit.MuteRoomTrackRequest
|
||||
11, // 5: livekit.RTCNodeMessage.update_metadata:type_name -> livekit.UpdateParticipantMetadataRequest
|
||||
12, // 6: livekit.SignalNodeMessage.response:type_name -> livekit.SignalResponse
|
||||
6, // 7: livekit.SignalNodeMessage.end_session:type_name -> livekit.EndSession
|
||||
5, // 8: livekit.StartSession.permission:type_name -> livekit.ParticipantPermission
|
||||
9, // [9:9] is the sub-list for method output_type
|
||||
9, // [9:9] is the sub-list for method input_type
|
||||
9, // [9:9] is the sub-list for extension type_name
|
||||
9, // [9:9] is the sub-list for extension extendee
|
||||
0, // [0:9] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_internal_proto_init() }
|
||||
@@ -747,7 +844,7 @@ func file_internal_proto_init() {
|
||||
}
|
||||
}
|
||||
file_internal_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*EndSession); i {
|
||||
switch v := v.(*ParticipantPermission); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
@@ -759,6 +856,18 @@ func file_internal_proto_init() {
|
||||
}
|
||||
}
|
||||
file_internal_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*EndSession); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_internal_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RemoveParticipant); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
@@ -776,6 +885,7 @@ func file_internal_proto_init() {
|
||||
(*RTCNodeMessage_Request)(nil),
|
||||
(*RTCNodeMessage_RemoveParticipant)(nil),
|
||||
(*RTCNodeMessage_MuteTrack)(nil),
|
||||
(*RTCNodeMessage_UpdateMetadata)(nil),
|
||||
}
|
||||
file_internal_proto_msgTypes[3].OneofWrappers = []interface{}{
|
||||
(*SignalNodeMessage_Response)(nil),
|
||||
@@ -787,7 +897,7 @@ func file_internal_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_internal_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 7,
|
||||
NumMessages: 8,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.25.0
|
||||
// protoc v3.15.5
|
||||
// protoc v3.15.6
|
||||
// source: model.proto
|
||||
|
||||
package livekit
|
||||
|
||||
241
proto/room.pb.go
241
proto/room.pb.go
@@ -1,7 +1,7 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.25.0
|
||||
// protoc v3.15.5
|
||||
// protoc v3.15.6
|
||||
// source: room.proto
|
||||
|
||||
package livekit
|
||||
@@ -573,6 +573,61 @@ func (x *MuteRoomTrackResponse) GetTrack() *TrackInfo {
|
||||
return nil
|
||||
}
|
||||
|
||||
type UpdateParticipantMetadataRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Target *RoomParticipantIdentity `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"`
|
||||
Metadata string `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UpdateParticipantMetadataRequest) Reset() {
|
||||
*x = UpdateParticipantMetadataRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_room_proto_msgTypes[11]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UpdateParticipantMetadataRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UpdateParticipantMetadataRequest) ProtoMessage() {}
|
||||
|
||||
func (x *UpdateParticipantMetadataRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_room_proto_msgTypes[11]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use UpdateParticipantMetadataRequest.ProtoReflect.Descriptor instead.
|
||||
func (*UpdateParticipantMetadataRequest) Descriptor() ([]byte, []int) {
|
||||
return file_room_proto_rawDescGZIP(), []int{11}
|
||||
}
|
||||
|
||||
func (x *UpdateParticipantMetadataRequest) GetTarget() *RoomParticipantIdentity {
|
||||
if x != nil {
|
||||
return x.Target
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *UpdateParticipantMetadataRequest) GetMetadata() string {
|
||||
if x != nil {
|
||||
return x.Metadata
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_room_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_room_proto_rawDesc = []byte{
|
||||
@@ -623,45 +678,59 @@ var file_room_proto_rawDesc = []byte{
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
|
||||
0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63,
|
||||
0x6b, 0x32, 0xa8, 0x04, 0x0a, 0x0b, 0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x12, 0x37, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12,
|
||||
0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x6c, 0x69,
|
||||
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x09, 0x4c, 0x69,
|
||||
0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69,
|
||||
0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73,
|
||||
0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45,
|
||||
0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x2e, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f,
|
||||
0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b,
|
||||
0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65,
|
||||
0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70,
|
||||
0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x69,
|
||||
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
|
||||
0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c,
|
||||
0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74,
|
||||
0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, 0x0a, 0x11,
|
||||
0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e,
|
||||
0x74, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74,
|
||||
0x69, 0x74, 0x79, 0x1a, 0x22, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65,
|
||||
0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x12, 0x4d, 0x75, 0x74, 0x65, 0x50,
|
||||
0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x2e,
|
||||
0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d,
|
||||
0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54,
|
||||
0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x31, 0x5a, 0x2f,
|
||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b,
|
||||
0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65,
|
||||
0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x6b, 0x22, 0x78, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69,
|
||||
0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
|
||||
0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49,
|
||||
0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12,
|
||||
0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x32, 0x8a, 0x05, 0x0a, 0x0b,
|
||||
0x52, 0x6f, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65,
|
||||
0x6b, 0x69, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
|
||||
0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x42, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d,
|
||||
0x73, 0x12, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74,
|
||||
0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x6d, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65,
|
||||
0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
|
||||
0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c,
|
||||
0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||
0x57, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
|
||||
0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4c, 0x69,
|
||||
0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
|
||||
0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6c, 0x69, 0x76,
|
||||
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
|
||||
0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61,
|
||||
0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x59, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x2e, 0x6c, 0x69,
|
||||
0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63,
|
||||
0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x22, 0x2e,
|
||||
0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61,
|
||||
0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x12, 0x53, 0x0a, 0x12, 0x4d, 0x75, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68,
|
||||
0x65, 0x64, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69,
|
||||
0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74,
|
||||
0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64,
|
||||
0x61, 0x74, 0x61, 0x12, 0x29, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70,
|
||||
0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4d,
|
||||
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18,
|
||||
0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69,
|
||||
0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -676,46 +745,50 @@ func file_room_proto_rawDescGZIP() []byte {
|
||||
return file_room_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_room_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
|
||||
var file_room_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
|
||||
var file_room_proto_goTypes = []interface{}{
|
||||
(*CreateRoomRequest)(nil), // 0: livekit.CreateRoomRequest
|
||||
(*ListRoomsRequest)(nil), // 1: livekit.ListRoomsRequest
|
||||
(*ListRoomsResponse)(nil), // 2: livekit.ListRoomsResponse
|
||||
(*DeleteRoomRequest)(nil), // 3: livekit.DeleteRoomRequest
|
||||
(*DeleteRoomResponse)(nil), // 4: livekit.DeleteRoomResponse
|
||||
(*ListParticipantsRequest)(nil), // 5: livekit.ListParticipantsRequest
|
||||
(*ListParticipantsResponse)(nil), // 6: livekit.ListParticipantsResponse
|
||||
(*RoomParticipantIdentity)(nil), // 7: livekit.RoomParticipantIdentity
|
||||
(*RemoveParticipantResponse)(nil), // 8: livekit.RemoveParticipantResponse
|
||||
(*MuteRoomTrackRequest)(nil), // 9: livekit.MuteRoomTrackRequest
|
||||
(*MuteRoomTrackResponse)(nil), // 10: livekit.MuteRoomTrackResponse
|
||||
(*Room)(nil), // 11: livekit.Room
|
||||
(*ParticipantInfo)(nil), // 12: livekit.ParticipantInfo
|
||||
(*TrackInfo)(nil), // 13: livekit.TrackInfo
|
||||
(*CreateRoomRequest)(nil), // 0: livekit.CreateRoomRequest
|
||||
(*ListRoomsRequest)(nil), // 1: livekit.ListRoomsRequest
|
||||
(*ListRoomsResponse)(nil), // 2: livekit.ListRoomsResponse
|
||||
(*DeleteRoomRequest)(nil), // 3: livekit.DeleteRoomRequest
|
||||
(*DeleteRoomResponse)(nil), // 4: livekit.DeleteRoomResponse
|
||||
(*ListParticipantsRequest)(nil), // 5: livekit.ListParticipantsRequest
|
||||
(*ListParticipantsResponse)(nil), // 6: livekit.ListParticipantsResponse
|
||||
(*RoomParticipantIdentity)(nil), // 7: livekit.RoomParticipantIdentity
|
||||
(*RemoveParticipantResponse)(nil), // 8: livekit.RemoveParticipantResponse
|
||||
(*MuteRoomTrackRequest)(nil), // 9: livekit.MuteRoomTrackRequest
|
||||
(*MuteRoomTrackResponse)(nil), // 10: livekit.MuteRoomTrackResponse
|
||||
(*UpdateParticipantMetadataRequest)(nil), // 11: livekit.UpdateParticipantMetadataRequest
|
||||
(*Room)(nil), // 12: livekit.Room
|
||||
(*ParticipantInfo)(nil), // 13: livekit.ParticipantInfo
|
||||
(*TrackInfo)(nil), // 14: livekit.TrackInfo
|
||||
}
|
||||
var file_room_proto_depIdxs = []int32{
|
||||
11, // 0: livekit.ListRoomsResponse.rooms:type_name -> livekit.Room
|
||||
12, // 1: livekit.ListParticipantsResponse.participants:type_name -> livekit.ParticipantInfo
|
||||
13, // 2: livekit.MuteRoomTrackResponse.track:type_name -> livekit.TrackInfo
|
||||
0, // 3: livekit.RoomService.CreateRoom:input_type -> livekit.CreateRoomRequest
|
||||
1, // 4: livekit.RoomService.ListRooms:input_type -> livekit.ListRoomsRequest
|
||||
3, // 5: livekit.RoomService.DeleteRoom:input_type -> livekit.DeleteRoomRequest
|
||||
5, // 6: livekit.RoomService.ListParticipants:input_type -> livekit.ListParticipantsRequest
|
||||
7, // 7: livekit.RoomService.GetParticipant:input_type -> livekit.RoomParticipantIdentity
|
||||
7, // 8: livekit.RoomService.RemoveParticipant:input_type -> livekit.RoomParticipantIdentity
|
||||
9, // 9: livekit.RoomService.MutePublishedTrack:input_type -> livekit.MuteRoomTrackRequest
|
||||
11, // 10: livekit.RoomService.CreateRoom:output_type -> livekit.Room
|
||||
2, // 11: livekit.RoomService.ListRooms:output_type -> livekit.ListRoomsResponse
|
||||
4, // 12: livekit.RoomService.DeleteRoom:output_type -> livekit.DeleteRoomResponse
|
||||
6, // 13: livekit.RoomService.ListParticipants:output_type -> livekit.ListParticipantsResponse
|
||||
12, // 14: livekit.RoomService.GetParticipant:output_type -> livekit.ParticipantInfo
|
||||
8, // 15: livekit.RoomService.RemoveParticipant:output_type -> livekit.RemoveParticipantResponse
|
||||
10, // 16: livekit.RoomService.MutePublishedTrack:output_type -> livekit.MuteRoomTrackResponse
|
||||
10, // [10:17] is the sub-list for method output_type
|
||||
3, // [3:10] is the sub-list for method input_type
|
||||
3, // [3:3] is the sub-list for extension type_name
|
||||
3, // [3:3] is the sub-list for extension extendee
|
||||
0, // [0:3] is the sub-list for field type_name
|
||||
12, // 0: livekit.ListRoomsResponse.rooms:type_name -> livekit.Room
|
||||
13, // 1: livekit.ListParticipantsResponse.participants:type_name -> livekit.ParticipantInfo
|
||||
14, // 2: livekit.MuteRoomTrackResponse.track:type_name -> livekit.TrackInfo
|
||||
7, // 3: livekit.UpdateParticipantMetadataRequest.target:type_name -> livekit.RoomParticipantIdentity
|
||||
0, // 4: livekit.RoomService.CreateRoom:input_type -> livekit.CreateRoomRequest
|
||||
1, // 5: livekit.RoomService.ListRooms:input_type -> livekit.ListRoomsRequest
|
||||
3, // 6: livekit.RoomService.DeleteRoom:input_type -> livekit.DeleteRoomRequest
|
||||
5, // 7: livekit.RoomService.ListParticipants:input_type -> livekit.ListParticipantsRequest
|
||||
7, // 8: livekit.RoomService.GetParticipant:input_type -> livekit.RoomParticipantIdentity
|
||||
7, // 9: livekit.RoomService.RemoveParticipant:input_type -> livekit.RoomParticipantIdentity
|
||||
9, // 10: livekit.RoomService.MutePublishedTrack:input_type -> livekit.MuteRoomTrackRequest
|
||||
11, // 11: livekit.RoomService.UpdateParticipantMetadata:input_type -> livekit.UpdateParticipantMetadataRequest
|
||||
12, // 12: livekit.RoomService.CreateRoom:output_type -> livekit.Room
|
||||
2, // 13: livekit.RoomService.ListRooms:output_type -> livekit.ListRoomsResponse
|
||||
4, // 14: livekit.RoomService.DeleteRoom:output_type -> livekit.DeleteRoomResponse
|
||||
6, // 15: livekit.RoomService.ListParticipants:output_type -> livekit.ListParticipantsResponse
|
||||
13, // 16: livekit.RoomService.GetParticipant:output_type -> livekit.ParticipantInfo
|
||||
8, // 17: livekit.RoomService.RemoveParticipant:output_type -> livekit.RemoveParticipantResponse
|
||||
10, // 18: livekit.RoomService.MutePublishedTrack:output_type -> livekit.MuteRoomTrackResponse
|
||||
13, // 19: livekit.RoomService.UpdateParticipantMetadata:output_type -> livekit.ParticipantInfo
|
||||
12, // [12:20] is the sub-list for method output_type
|
||||
4, // [4:12] is the sub-list for method input_type
|
||||
4, // [4:4] is the sub-list for extension type_name
|
||||
4, // [4:4] is the sub-list for extension extendee
|
||||
0, // [0:4] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_room_proto_init() }
|
||||
@@ -857,6 +930,18 @@ func file_room_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_room_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*UpdateParticipantMetadataRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
@@ -864,7 +949,7 @@ func file_room_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_room_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 11,
|
||||
NumMessages: 12,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
|
||||
@@ -60,6 +60,9 @@ type RoomService interface {
|
||||
|
||||
// mute/unmute a participant, requires RoomAdmin
|
||||
MutePublishedTrack(context.Context, *MuteRoomTrackRequest) (*MuteRoomTrackResponse, error)
|
||||
|
||||
// update participant metadata
|
||||
UpdateParticipantMetadata(context.Context, *UpdateParticipantMetadataRequest) (*ParticipantInfo, error)
|
||||
}
|
||||
|
||||
// ===========================
|
||||
@@ -68,7 +71,7 @@ type RoomService interface {
|
||||
|
||||
type roomServiceProtobufClient struct {
|
||||
client HTTPClient
|
||||
urls [7]string
|
||||
urls [8]string
|
||||
interceptor twirp.Interceptor
|
||||
opts twirp.ClientOptions
|
||||
}
|
||||
@@ -88,7 +91,7 @@ func NewRoomServiceProtobufClient(baseURL string, client HTTPClient, opts ...twi
|
||||
// Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method>
|
||||
serviceURL := sanitizeBaseURL(baseURL)
|
||||
serviceURL += baseServicePath(clientOpts.PathPrefix(), "livekit", "RoomService")
|
||||
urls := [7]string{
|
||||
urls := [8]string{
|
||||
serviceURL + "CreateRoom",
|
||||
serviceURL + "ListRooms",
|
||||
serviceURL + "DeleteRoom",
|
||||
@@ -96,6 +99,7 @@ func NewRoomServiceProtobufClient(baseURL string, client HTTPClient, opts ...twi
|
||||
serviceURL + "GetParticipant",
|
||||
serviceURL + "RemoveParticipant",
|
||||
serviceURL + "MutePublishedTrack",
|
||||
serviceURL + "UpdateParticipantMetadata",
|
||||
}
|
||||
|
||||
return &roomServiceProtobufClient{
|
||||
@@ -428,13 +432,59 @@ func (c *roomServiceProtobufClient) callMutePublishedTrack(ctx context.Context,
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *roomServiceProtobufClient) UpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
ctx = ctxsetters.WithPackageName(ctx, "livekit")
|
||||
ctx = ctxsetters.WithServiceName(ctx, "RoomService")
|
||||
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
|
||||
caller := c.callUpdateParticipantMetadata
|
||||
if c.interceptor != nil {
|
||||
caller = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
resp, err := c.interceptor(
|
||||
func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
|
||||
}
|
||||
return c.callUpdateParticipantMetadata(ctx, typedReq)
|
||||
},
|
||||
)(ctx, req)
|
||||
if resp != nil {
|
||||
typedResp, ok := resp.(*ParticipantInfo)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
|
||||
}
|
||||
return typedResp, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return caller(ctx, in)
|
||||
}
|
||||
|
||||
func (c *roomServiceProtobufClient) callUpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
out := new(ParticipantInfo)
|
||||
ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out)
|
||||
if err != nil {
|
||||
twerr, ok := err.(twirp.Error)
|
||||
if !ok {
|
||||
twerr = twirp.InternalErrorWith(err)
|
||||
}
|
||||
callClientError(ctx, c.opts.Hooks, twerr)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
callClientResponseReceived(ctx, c.opts.Hooks)
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// =======================
|
||||
// RoomService JSON Client
|
||||
// =======================
|
||||
|
||||
type roomServiceJSONClient struct {
|
||||
client HTTPClient
|
||||
urls [7]string
|
||||
urls [8]string
|
||||
interceptor twirp.Interceptor
|
||||
opts twirp.ClientOptions
|
||||
}
|
||||
@@ -454,7 +504,7 @@ func NewRoomServiceJSONClient(baseURL string, client HTTPClient, opts ...twirp.C
|
||||
// Build method URLs: <baseURL>[<prefix>]/<package>.<Service>/<Method>
|
||||
serviceURL := sanitizeBaseURL(baseURL)
|
||||
serviceURL += baseServicePath(clientOpts.PathPrefix(), "livekit", "RoomService")
|
||||
urls := [7]string{
|
||||
urls := [8]string{
|
||||
serviceURL + "CreateRoom",
|
||||
serviceURL + "ListRooms",
|
||||
serviceURL + "DeleteRoom",
|
||||
@@ -462,6 +512,7 @@ func NewRoomServiceJSONClient(baseURL string, client HTTPClient, opts ...twirp.C
|
||||
serviceURL + "GetParticipant",
|
||||
serviceURL + "RemoveParticipant",
|
||||
serviceURL + "MutePublishedTrack",
|
||||
serviceURL + "UpdateParticipantMetadata",
|
||||
}
|
||||
|
||||
return &roomServiceJSONClient{
|
||||
@@ -794,6 +845,52 @@ func (c *roomServiceJSONClient) callMutePublishedTrack(ctx context.Context, in *
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *roomServiceJSONClient) UpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
ctx = ctxsetters.WithPackageName(ctx, "livekit")
|
||||
ctx = ctxsetters.WithServiceName(ctx, "RoomService")
|
||||
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
|
||||
caller := c.callUpdateParticipantMetadata
|
||||
if c.interceptor != nil {
|
||||
caller = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
resp, err := c.interceptor(
|
||||
func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
|
||||
}
|
||||
return c.callUpdateParticipantMetadata(ctx, typedReq)
|
||||
},
|
||||
)(ctx, req)
|
||||
if resp != nil {
|
||||
typedResp, ok := resp.(*ParticipantInfo)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
|
||||
}
|
||||
return typedResp, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return caller(ctx, in)
|
||||
}
|
||||
|
||||
func (c *roomServiceJSONClient) callUpdateParticipantMetadata(ctx context.Context, in *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
out := new(ParticipantInfo)
|
||||
ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[7], in, out)
|
||||
if err != nil {
|
||||
twerr, ok := err.(twirp.Error)
|
||||
if !ok {
|
||||
twerr = twirp.InternalErrorWith(err)
|
||||
}
|
||||
callClientError(ctx, c.opts.Hooks, twerr)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
callClientResponseReceived(ctx, c.opts.Hooks)
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// ==========================
|
||||
// RoomService Server Handler
|
||||
// ==========================
|
||||
@@ -899,6 +996,9 @@ func (s *roomServiceServer) ServeHTTP(resp http.ResponseWriter, req *http.Reques
|
||||
case "MutePublishedTrack":
|
||||
s.serveMutePublishedTrack(ctx, resp, req)
|
||||
return
|
||||
case "UpdateParticipantMetadata":
|
||||
s.serveUpdateParticipantMetadata(ctx, resp, req)
|
||||
return
|
||||
default:
|
||||
msg := fmt.Sprintf("no handler for path %q", req.URL.Path)
|
||||
s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path))
|
||||
@@ -2131,6 +2231,181 @@ func (s *roomServiceServer) serveMutePublishedTrackProtobuf(ctx context.Context,
|
||||
callResponseSent(ctx, s.hooks)
|
||||
}
|
||||
|
||||
func (s *roomServiceServer) serveUpdateParticipantMetadata(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
|
||||
header := req.Header.Get("Content-Type")
|
||||
i := strings.Index(header, ";")
|
||||
if i == -1 {
|
||||
i = len(header)
|
||||
}
|
||||
switch strings.TrimSpace(strings.ToLower(header[:i])) {
|
||||
case "application/json":
|
||||
s.serveUpdateParticipantMetadataJSON(ctx, resp, req)
|
||||
case "application/protobuf":
|
||||
s.serveUpdateParticipantMetadataProtobuf(ctx, resp, req)
|
||||
default:
|
||||
msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type"))
|
||||
twerr := badRouteError(msg, req.Method, req.URL.Path)
|
||||
s.writeError(ctx, resp, twerr)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *roomServiceServer) serveUpdateParticipantMetadataJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
|
||||
var err error
|
||||
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
|
||||
ctx, err = callRequestRouted(ctx, s.hooks)
|
||||
if err != nil {
|
||||
s.writeError(ctx, resp, err)
|
||||
return
|
||||
}
|
||||
|
||||
reqContent := new(UpdateParticipantMetadataRequest)
|
||||
unmarshaler := jsonpb.Unmarshaler{AllowUnknownFields: true}
|
||||
if err = unmarshaler.Unmarshal(req.Body, reqContent); err != nil {
|
||||
s.writeError(ctx, resp, malformedRequestError("the json request could not be decoded"))
|
||||
return
|
||||
}
|
||||
|
||||
handler := s.RoomService.UpdateParticipantMetadata
|
||||
if s.interceptor != nil {
|
||||
handler = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
resp, err := s.interceptor(
|
||||
func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
|
||||
}
|
||||
return s.RoomService.UpdateParticipantMetadata(ctx, typedReq)
|
||||
},
|
||||
)(ctx, req)
|
||||
if resp != nil {
|
||||
typedResp, ok := resp.(*ParticipantInfo)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
|
||||
}
|
||||
return typedResp, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// Call service method
|
||||
var respContent *ParticipantInfo
|
||||
func() {
|
||||
defer ensurePanicResponses(ctx, resp, s.hooks)
|
||||
respContent, err = handler(ctx, reqContent)
|
||||
}()
|
||||
|
||||
if err != nil {
|
||||
s.writeError(ctx, resp, err)
|
||||
return
|
||||
}
|
||||
if respContent == nil {
|
||||
s.writeError(ctx, resp, twirp.InternalError("received a nil *ParticipantInfo and nil error while calling UpdateParticipantMetadata. nil responses are not supported"))
|
||||
return
|
||||
}
|
||||
|
||||
ctx = callResponsePrepared(ctx, s.hooks)
|
||||
|
||||
var buf bytes.Buffer
|
||||
marshaler := &jsonpb.Marshaler{OrigName: true, EmitDefaults: !s.jsonSkipDefaults}
|
||||
if err = marshaler.Marshal(&buf, respContent); err != nil {
|
||||
s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response"))
|
||||
return
|
||||
}
|
||||
|
||||
ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK)
|
||||
respBytes := buf.Bytes()
|
||||
resp.Header().Set("Content-Type", "application/json")
|
||||
resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes)))
|
||||
resp.WriteHeader(http.StatusOK)
|
||||
|
||||
if n, err := resp.Write(respBytes); err != nil {
|
||||
msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error())
|
||||
twerr := twirp.NewError(twirp.Unknown, msg)
|
||||
ctx = callError(ctx, s.hooks, twerr)
|
||||
}
|
||||
callResponseSent(ctx, s.hooks)
|
||||
}
|
||||
|
||||
func (s *roomServiceServer) serveUpdateParticipantMetadataProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) {
|
||||
var err error
|
||||
ctx = ctxsetters.WithMethodName(ctx, "UpdateParticipantMetadata")
|
||||
ctx, err = callRequestRouted(ctx, s.hooks)
|
||||
if err != nil {
|
||||
s.writeError(ctx, resp, err)
|
||||
return
|
||||
}
|
||||
|
||||
buf, err := ioutil.ReadAll(req.Body)
|
||||
if err != nil {
|
||||
s.writeError(ctx, resp, wrapInternal(err, "failed to read request body"))
|
||||
return
|
||||
}
|
||||
reqContent := new(UpdateParticipantMetadataRequest)
|
||||
if err = proto.Unmarshal(buf, reqContent); err != nil {
|
||||
s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded"))
|
||||
return
|
||||
}
|
||||
|
||||
handler := s.RoomService.UpdateParticipantMetadata
|
||||
if s.interceptor != nil {
|
||||
handler = func(ctx context.Context, req *UpdateParticipantMetadataRequest) (*ParticipantInfo, error) {
|
||||
resp, err := s.interceptor(
|
||||
func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
typedReq, ok := req.(*UpdateParticipantMetadataRequest)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion req.(*UpdateParticipantMetadataRequest) when calling interceptor")
|
||||
}
|
||||
return s.RoomService.UpdateParticipantMetadata(ctx, typedReq)
|
||||
},
|
||||
)(ctx, req)
|
||||
if resp != nil {
|
||||
typedResp, ok := resp.(*ParticipantInfo)
|
||||
if !ok {
|
||||
return nil, twirp.InternalError("failed type assertion resp.(*ParticipantInfo) when calling interceptor")
|
||||
}
|
||||
return typedResp, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// Call service method
|
||||
var respContent *ParticipantInfo
|
||||
func() {
|
||||
defer ensurePanicResponses(ctx, resp, s.hooks)
|
||||
respContent, err = handler(ctx, reqContent)
|
||||
}()
|
||||
|
||||
if err != nil {
|
||||
s.writeError(ctx, resp, err)
|
||||
return
|
||||
}
|
||||
if respContent == nil {
|
||||
s.writeError(ctx, resp, twirp.InternalError("received a nil *ParticipantInfo and nil error while calling UpdateParticipantMetadata. nil responses are not supported"))
|
||||
return
|
||||
}
|
||||
|
||||
ctx = callResponsePrepared(ctx, s.hooks)
|
||||
|
||||
respBytes, err := proto.Marshal(respContent)
|
||||
if err != nil {
|
||||
s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response"))
|
||||
return
|
||||
}
|
||||
|
||||
ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK)
|
||||
resp.Header().Set("Content-Type", "application/protobuf")
|
||||
resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes)))
|
||||
resp.WriteHeader(http.StatusOK)
|
||||
if n, err := resp.Write(respBytes); err != nil {
|
||||
msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error())
|
||||
twerr := twirp.NewError(twirp.Unknown, msg)
|
||||
ctx = callError(ctx, s.hooks, twerr)
|
||||
}
|
||||
callResponseSent(ctx, s.hooks)
|
||||
}
|
||||
|
||||
func (s *roomServiceServer) ServiceDescriptor() ([]byte, int) {
|
||||
return twirpFileDescriptor0, 0
|
||||
}
|
||||
@@ -2693,40 +2968,43 @@ func callClientError(ctx context.Context, h *twirp.ClientHooks, err twirp.Error)
|
||||
}
|
||||
|
||||
var twirpFileDescriptor0 = []byte{
|
||||
// 549 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0xdf, 0x6f, 0x12, 0x41,
|
||||
0x10, 0x0e, 0xb6, 0xb4, 0x30, 0x14, 0x2d, 0x13, 0x0c, 0xd7, 0x23, 0x1a, 0x3c, 0x1f, 0xc4, 0x87,
|
||||
0x42, 0xc4, 0x07, 0x7d, 0xf0, 0xc5, 0xaa, 0x31, 0x24, 0x35, 0x69, 0x8e, 0x26, 0xfe, 0x78, 0x21,
|
||||
0x07, 0x37, 0xda, 0x4d, 0xd9, 0x5b, 0xbc, 0xdb, 0x23, 0xe5, 0xbf, 0xf0, 0xcf, 0xf0, 0xcf, 0x34,
|
||||
0xbb, 0x7b, 0x1c, 0x4b, 0x39, 0x88, 0x4f, 0xdc, 0xce, 0x7c, 0x33, 0xdf, 0x37, 0xb3, 0xdf, 0x02,
|
||||
0x10, 0x0b, 0xc1, 0x7b, 0xf3, 0x58, 0x48, 0x81, 0xc7, 0x33, 0xb6, 0xa0, 0x5b, 0x26, 0xdd, 0x1a,
|
||||
0x17, 0x21, 0xcd, 0x4c, 0xd4, 0xfb, 0x53, 0x82, 0xc6, 0x87, 0x98, 0x02, 0x49, 0xbe, 0x10, 0xdc,
|
||||
0xa7, 0xdf, 0x29, 0x25, 0x12, 0x11, 0x0e, 0xa3, 0x80, 0x93, 0x53, 0xea, 0x94, 0xba, 0x55, 0x5f,
|
||||
0x7f, 0xe3, 0x73, 0xa8, 0x13, 0x9f, 0xcb, 0xe5, 0x58, 0x32, 0x4e, 0x22, 0x95, 0xce, 0x83, 0x4e,
|
||||
0xa9, 0x5b, 0xf7, 0x4f, 0x74, 0xf0, 0xda, 0xc4, 0xf0, 0x25, 0x9c, 0xf2, 0xe0, 0x6e, 0x3c, 0x0f,
|
||||
0x62, 0xc9, 0xa6, 0x6c, 0x1e, 0x44, 0x32, 0x71, 0x0e, 0x34, 0xee, 0x11, 0x0f, 0xee, 0xae, 0xac,
|
||||
0x30, 0xb6, 0xe0, 0x38, 0x12, 0x21, 0x8d, 0x59, 0xe8, 0x1c, 0x6a, 0x9a, 0x23, 0x75, 0x1c, 0x86,
|
||||
0x1e, 0xc2, 0xe9, 0x25, 0x4b, 0xa4, 0xd2, 0x93, 0x64, 0x82, 0xbc, 0xb7, 0xd0, 0xb0, 0x62, 0xc9,
|
||||
0x5c, 0x44, 0x89, 0x52, 0x54, 0x56, 0xf3, 0x25, 0x4e, 0xa9, 0x73, 0xd0, 0xad, 0x0d, 0xea, 0xbd,
|
||||
0x6c, 0xc2, 0x9e, 0x1e, 0xc5, 0xe4, 0xbc, 0x17, 0xd0, 0xf8, 0x48, 0x33, 0xda, 0x9a, 0x4f, 0x65,
|
||||
0x57, 0xf3, 0xa9, 0x6f, 0xaf, 0x09, 0x68, 0x03, 0x0d, 0x87, 0x77, 0x0e, 0x2d, 0x45, 0x6c, 0x2b,
|
||||
0xdf, 0xd7, 0xe4, 0x1b, 0x38, 0xdb, 0xf0, 0x4c, 0xee, 0x3b, 0x38, 0xd9, 0xd8, 0x8b, 0x51, 0xed,
|
||||
0xe4, 0xaa, 0xad, 0xa2, 0x61, 0xf4, 0x53, 0xf8, 0x1b, 0x68, 0x6f, 0x08, 0x2d, 0x25, 0xcc, 0x06,
|
||||
0x85, 0x14, 0x49, 0x26, 0x97, 0x45, 0x42, 0xd0, 0x85, 0x0a, 0xcb, 0xf2, 0xfa, 0xa2, 0xaa, 0x7e,
|
||||
0x7e, 0xf6, 0xda, 0x70, 0xe6, 0x13, 0x17, 0x0b, 0xb2, 0x9a, 0xe5, 0x03, 0x2f, 0xa1, 0xf9, 0x25,
|
||||
0x35, 0x4b, 0xb8, 0x8e, 0x83, 0xe9, 0xed, 0x9e, 0x69, 0xf7, 0x91, 0x60, 0x1b, 0xaa, 0x52, 0xd5,
|
||||
0x8f, 0x13, 0x16, 0x6a, 0x0b, 0x54, 0xfd, 0x8a, 0x0e, 0x8c, 0x58, 0x88, 0x4d, 0x28, 0xf3, 0x54,
|
||||
0x92, 0xb9, 0xf9, 0x8a, 0x6f, 0x0e, 0xde, 0x7b, 0x78, 0x7c, 0x8f, 0x3a, 0xdb, 0x5c, 0x17, 0xca,
|
||||
0xba, 0x54, 0x93, 0xd7, 0x06, 0x98, 0xaf, 0x4c, 0xc3, 0xf4, 0xb2, 0x0c, 0x60, 0xf0, 0xf7, 0x10,
|
||||
0x6a, 0xaa, 0x7e, 0x44, 0xf1, 0x82, 0x4d, 0x09, 0xdf, 0x00, 0xac, 0xdd, 0x8d, 0x6e, 0x5e, 0xb8,
|
||||
0x65, 0x79, 0x77, 0xd3, 0x3d, 0x78, 0x01, 0xd5, 0xdc, 0x70, 0x78, 0x96, 0xe7, 0xee, 0x1b, 0xd3,
|
||||
0x75, 0x8b, 0x52, 0x99, 0xec, 0x4f, 0x00, 0x6b, 0x47, 0x59, 0xe4, 0x5b, 0x7e, 0x74, 0xdb, 0x85,
|
||||
0xb9, 0xac, 0xcd, 0x57, 0xf3, 0x1e, 0x36, 0x1e, 0x4f, 0x67, 0x83, 0xb6, 0xc0, 0x9d, 0xee, 0xb3,
|
||||
0x3d, 0x88, 0xac, 0xf1, 0x25, 0x3c, 0xfc, 0x4c, 0x76, 0xca, 0x6a, 0xbb, 0xc3, 0x6b, 0xee, 0x4e,
|
||||
0xbb, 0xe2, 0x77, 0x68, 0x6c, 0xb9, 0xea, 0x3f, 0x1a, 0x7a, 0x6b, 0xc4, 0x2e, 0x4f, 0xe2, 0x08,
|
||||
0x50, 0x19, 0xe3, 0x2a, 0x9d, 0xcc, 0x58, 0x72, 0x43, 0xa1, 0xbe, 0x76, 0x7c, 0x92, 0x57, 0x16,
|
||||
0x19, 0xd6, 0x7d, 0xba, 0x2b, 0x6d, 0x9a, 0x5e, 0xbc, 0xfa, 0xd1, 0xff, 0xc5, 0xe4, 0x4d, 0x3a,
|
||||
0xe9, 0x4d, 0x05, 0xef, 0x67, 0xd8, 0xd5, 0xef, 0x79, 0x42, 0xf1, 0x82, 0xe2, 0xbe, 0xfe, 0x93,
|
||||
0x5c, 0x05, 0x27, 0x47, 0xfa, 0xf8, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0x66, 0x2b,
|
||||
0xf4, 0x57, 0x05, 0x00, 0x00,
|
||||
// 604 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0x4d, 0x6f, 0xd3, 0x40,
|
||||
0x10, 0x55, 0x68, 0xd3, 0x36, 0x93, 0x16, 0x9a, 0x55, 0x51, 0x5d, 0x57, 0x20, 0x63, 0x0e, 0xa4,
|
||||
0x87, 0x26, 0x22, 0x1c, 0xe8, 0x81, 0x0b, 0x05, 0x84, 0x22, 0xb5, 0x52, 0xe5, 0x14, 0xf1, 0x71,
|
||||
0x09, 0x9b, 0x78, 0x68, 0x57, 0xcd, 0x7a, 0x8d, 0xbd, 0x8e, 0x92, 0xbf, 0xc0, 0x89, 0x9f, 0x8c,
|
||||
0x76, 0xbd, 0x76, 0xec, 0xc6, 0x49, 0x39, 0xc5, 0x33, 0xf3, 0xe6, 0xe3, 0xcd, 0xce, 0x53, 0x00,
|
||||
0x22, 0x21, 0x78, 0x27, 0x8c, 0x84, 0x14, 0x64, 0x7b, 0xc2, 0xa6, 0x78, 0xc7, 0xa4, 0xdd, 0xe4,
|
||||
0xc2, 0xc7, 0x49, 0xea, 0x75, 0xff, 0xd6, 0xa0, 0xf5, 0x21, 0x42, 0x2a, 0xd1, 0x13, 0x82, 0x7b,
|
||||
0xf8, 0x3b, 0xc1, 0x58, 0x12, 0x02, 0x9b, 0x01, 0xe5, 0x68, 0xd5, 0x9c, 0x5a, 0xbb, 0xe1, 0xe9,
|
||||
0x6f, 0xf2, 0x12, 0xf6, 0x90, 0x87, 0x72, 0x3e, 0x94, 0x8c, 0xa3, 0x48, 0xa4, 0xf5, 0xc8, 0xa9,
|
||||
0xb5, 0xf7, 0xbc, 0x5d, 0xed, 0xbc, 0x4e, 0x7d, 0xe4, 0x04, 0xf6, 0x39, 0x9d, 0x0d, 0x43, 0x1a,
|
||||
0x49, 0x36, 0x66, 0x21, 0x0d, 0x64, 0x6c, 0x6d, 0x68, 0xdc, 0x13, 0x4e, 0x67, 0x57, 0x05, 0x37,
|
||||
0x39, 0x84, 0xed, 0x40, 0xf8, 0x38, 0x64, 0xbe, 0xb5, 0xa9, 0xdb, 0x6c, 0x29, 0xb3, 0xef, 0xbb,
|
||||
0x04, 0xf6, 0x2f, 0x58, 0x2c, 0xd5, 0x3c, 0xb1, 0x19, 0xc8, 0x3d, 0x83, 0x56, 0xc1, 0x17, 0x87,
|
||||
0x22, 0x88, 0xd5, 0x44, 0x75, 0xc5, 0x2f, 0xb6, 0x6a, 0xce, 0x46, 0xbb, 0xd9, 0xdb, 0xeb, 0x18,
|
||||
0x86, 0x1d, 0x4d, 0x25, 0x8d, 0xb9, 0xaf, 0xa0, 0xf5, 0x11, 0x27, 0xb8, 0xc4, 0x4f, 0x45, 0x33,
|
||||
0x7e, 0xea, 0xdb, 0x3d, 0x00, 0x52, 0x04, 0xa6, 0x3d, 0xdc, 0x53, 0x38, 0x54, 0x8d, 0x8b, 0x93,
|
||||
0xaf, 0x2b, 0xf2, 0x0d, 0xac, 0x65, 0xb8, 0x19, 0xf7, 0x1d, 0xec, 0x96, 0xf6, 0x92, 0x4e, 0x6d,
|
||||
0xe5, 0x53, 0x17, 0x92, 0xfa, 0xc1, 0x2f, 0xe1, 0x95, 0xd0, 0x6e, 0x1f, 0x0e, 0xd5, 0x60, 0x45,
|
||||
0x90, 0x8f, 0x81, 0x64, 0x72, 0x5e, 0x35, 0x08, 0xb1, 0x61, 0x87, 0x99, 0xb8, 0x7e, 0xa8, 0x86,
|
||||
0x97, 0xdb, 0xee, 0x31, 0x1c, 0x79, 0xc8, 0xc5, 0x14, 0x0b, 0xc5, 0x72, 0xc2, 0x73, 0x38, 0xb8,
|
||||
0x4c, 0xd2, 0x25, 0x5c, 0x47, 0x74, 0x7c, 0xb7, 0x86, 0xed, 0xba, 0x26, 0xe4, 0x18, 0x1a, 0x52,
|
||||
0xe5, 0x0f, 0x63, 0xe6, 0xeb, 0x13, 0x68, 0x78, 0x3b, 0xda, 0x31, 0x60, 0x3e, 0x39, 0x80, 0x3a,
|
||||
0x4f, 0x24, 0xa6, 0x2f, 0xbf, 0xe3, 0xa5, 0x86, 0xfb, 0x1e, 0x9e, 0xde, 0x6b, 0x6d, 0x36, 0xd7,
|
||||
0x86, 0xba, 0x4e, 0xd5, 0xcd, 0x9b, 0x3d, 0x92, 0xaf, 0x4c, 0xc3, 0xf4, 0xb2, 0x52, 0x80, 0x3b,
|
||||
0x03, 0xe7, 0x4b, 0xe8, 0x53, 0x59, 0xa4, 0x76, 0x89, 0x92, 0xfa, 0x54, 0xd2, 0x8c, 0xc9, 0x19,
|
||||
0x6c, 0x49, 0x1a, 0xdd, 0xa0, 0x34, 0xe5, 0x9c, 0xd2, 0xdd, 0x54, 0x2c, 0xd8, 0x33, 0x78, 0xc5,
|
||||
0x97, 0x9b, 0x62, 0x19, 0xdf, 0xcc, 0xee, 0xfd, 0xa9, 0x43, 0x53, 0xe5, 0x0f, 0x30, 0x9a, 0xb2,
|
||||
0x31, 0x92, 0xb7, 0x00, 0x0b, 0x5d, 0x11, 0x3b, 0xef, 0xb1, 0x24, 0x36, 0xbb, 0x7c, 0xb7, 0xe4,
|
||||
0x1c, 0x1a, 0xf9, 0xa9, 0x93, 0xa3, 0x3c, 0x76, 0x5f, 0x12, 0xb6, 0x5d, 0x15, 0x32, 0x0b, 0xfb,
|
||||
0x04, 0xb0, 0xb8, 0xe5, 0x42, 0xf3, 0x25, 0x25, 0xd8, 0xc7, 0x95, 0x31, 0x53, 0xe6, 0x6b, 0xaa,
|
||||
0xc4, 0x92, 0x6c, 0x9d, 0x52, 0xdb, 0x0a, 0x5d, 0xd8, 0x2f, 0xd6, 0x20, 0x4c, 0xe1, 0x0b, 0x78,
|
||||
0xfc, 0x19, 0x8b, 0x21, 0xf2, 0xe0, 0x23, 0xd8, 0x2b, 0x85, 0x42, 0xbe, 0x43, 0x6b, 0xe9, 0x9e,
|
||||
0xff, 0xa3, 0xa0, 0xbb, 0x40, 0xac, 0x52, 0x03, 0x19, 0x00, 0x51, 0x27, 0x79, 0x95, 0x8c, 0x26,
|
||||
0x2c, 0xbe, 0x45, 0x5f, 0x1f, 0x1c, 0x79, 0x96, 0x67, 0x56, 0x49, 0xc5, 0x7e, 0xbe, 0x2a, 0x6c,
|
||||
0x8a, 0xfe, 0x84, 0xa3, 0x95, 0x47, 0x4a, 0x4e, 0xf2, 0xe4, 0x87, 0x0e, 0x79, 0xf5, 0x46, 0xce,
|
||||
0x5f, 0xff, 0xe8, 0xde, 0x30, 0x79, 0x9b, 0x8c, 0x3a, 0x63, 0xc1, 0xbb, 0x06, 0x95, 0xfd, 0x9e,
|
||||
0xc6, 0x18, 0x4d, 0x31, 0xea, 0xea, 0x3f, 0x80, 0xcc, 0x39, 0xda, 0xd2, 0xe6, 0x9b, 0x7f, 0x01,
|
||||
0x00, 0x00, 0xff, 0xff, 0xa1, 0x4e, 0xfb, 0xa7, 0x33, 0x06, 0x00, 0x00,
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.25.0
|
||||
// protoc v3.15.5
|
||||
// protoc v3.15.6
|
||||
// source: rtc.proto
|
||||
|
||||
package livekit
|
||||
@@ -247,7 +247,7 @@ type SignalRequest_AddTrack struct {
|
||||
}
|
||||
|
||||
type SignalRequest_Mute struct {
|
||||
// mute the participant's own tracks
|
||||
// mute the participant's published tracks
|
||||
Mute *MuteTrackRequest `protobuf:"bytes,5,opt,name=mute,proto3,oneof"`
|
||||
}
|
||||
|
||||
@@ -999,7 +999,6 @@ type UpdateSubscription struct {
|
||||
|
||||
TrackSids []string `protobuf:"bytes,1,rep,name=track_sids,json=trackSids,proto3" json:"track_sids,omitempty"`
|
||||
Subscribe bool `protobuf:"varint,2,opt,name=subscribe,proto3" json:"subscribe,omitempty"`
|
||||
Mute bool `protobuf:"varint,3,opt,name=mute,proto3" json:"mute,omitempty"`
|
||||
Quality VideoQuality `protobuf:"varint,4,opt,name=quality,proto3,enum=livekit.VideoQuality" json:"quality,omitempty"`
|
||||
}
|
||||
|
||||
@@ -1049,13 +1048,6 @@ func (x *UpdateSubscription) GetSubscribe() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *UpdateSubscription) GetMute() bool {
|
||||
if x != nil {
|
||||
return x.Mute
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *UpdateSubscription) GetQuality() VideoQuality {
|
||||
if x != nil {
|
||||
return x.Quality
|
||||
@@ -1306,39 +1298,38 @@ var file_rtc_proto_rawDesc = []byte{
|
||||
0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x16, 0x0a,
|
||||
0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61,
|
||||
0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a,
|
||||
0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
|
||||
0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73,
|
||||
0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09,
|
||||
0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x75, 0x74,
|
||||
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x0a,
|
||||
0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15,
|
||||
0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75,
|
||||
0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x79,
|
||||
0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73,
|
||||
0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b,
|
||||
0x53, 0x69, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
|
||||
0x28, 0x08, 0x52, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6c,
|
||||
0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65,
|
||||
0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79,
|
||||
0x52, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x5b, 0x0a, 0x09, 0x49, 0x43, 0x45,
|
||||
0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01,
|
||||
0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e,
|
||||
0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64,
|
||||
0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2a, 0x2d, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c,
|
||||
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53,
|
||||
0x48, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49,
|
||||
0x42, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x2d, 0x0a, 0x0c, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75,
|
||||
0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, 0x0a,
|
||||
0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49,
|
||||
0x47, 0x48, 0x10, 0x02, 0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b,
|
||||
0x69, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
|
||||
0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61,
|
||||
0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76,
|
||||
0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74,
|
||||
0x79, 0x52, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x79, 0x0a, 0x13, 0x55, 0x70,
|
||||
0x64, 0x61, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18,
|
||||
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x73,
|
||||
0x12, 0x12, 0x0a, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04,
|
||||
0x6d, 0x75, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18,
|
||||
0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e,
|
||||
0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x07, 0x71, 0x75,
|
||||
0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x5b, 0x0a, 0x09, 0x49, 0x43, 0x45, 0x53, 0x65, 0x72, 0x76,
|
||||
0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09,
|
||||
0x52, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69,
|
||||
0x61, 0x6c, 0x2a, 0x2d, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x54, 0x61, 0x72, 0x67,
|
||||
0x65, 0x74, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x52, 0x10,
|
||||
0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x52, 0x10,
|
||||
0x01, 0x2a, 0x2d, 0x0a, 0x0c, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74,
|
||||
0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45,
|
||||
0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x02,
|
||||
0x42, 0x31, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c,
|
||||
0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2d, 0x73,
|
||||
0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6c, 0x69, 0x76, 0x65,
|
||||
0x6b, 0x69, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
Reference in New Issue
Block a user