From 882f3bdde535251bc512a5201efb2a999934a88d Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 10 Dec 2021 11:51:03 -0800 Subject: [PATCH] Allow subscription requests made from server APIs (#249) --- pkg/rtc/mediatrack.go | 4 ---- pkg/rtc/room.go | 6 +----- pkg/service/roommanager.go | 13 +++++++++++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/pkg/rtc/mediatrack.go b/pkg/rtc/mediatrack.go index 5efda814f..42d7d0f8c 100644 --- a/pkg/rtc/mediatrack.go +++ b/pkg/rtc/mediatrack.go @@ -160,10 +160,6 @@ func (t *MediaTrack) PublishLossPercentage() uint32 { // AddSubscriber subscribes sub to current mediaTrack func (t *MediaTrack) AddSubscriber(sub types.Participant) error { - if !sub.CanSubscribe() { - return ErrPermissionDenied - } - t.lock.Lock() defer t.lock.Unlock() diff --git a/pkg/rtc/room.go b/pkg/rtc/room.go index 688bae8d3..98e22813c 100644 --- a/pkg/rtc/room.go +++ b/pkg/rtc/room.go @@ -8,8 +8,8 @@ import ( "time" "github.com/go-logr/logr" + "github.com/livekit/protocol/livekit" "github.com/livekit/protocol/logger" - livekit "github.com/livekit/protocol/livekit" "google.golang.org/protobuf/proto" "github.com/livekit/livekit-server/pkg/config" @@ -316,10 +316,6 @@ func (r *Room) RemoveParticipant(identity string) { } func (r *Room) UpdateSubscriptions(participant types.Participant, trackIds []string, subscribe bool) error { - if !participant.CanSubscribe() { - return ErrCannotSubscribe - } - // find all matching tracks var tracks []types.PublishedTrack participants := r.GetParticipants() diff --git a/pkg/service/roommanager.go b/pkg/service/roommanager.go index f8876c394..f09312698 100644 --- a/pkg/service/roommanager.go +++ b/pkg/service/roommanager.go @@ -6,8 +6,8 @@ import ( "sync" "time" + "github.com/livekit/protocol/livekit" "github.com/livekit/protocol/logger" - livekit "github.com/livekit/protocol/livekit" "github.com/livekit/livekit-server/pkg/config" "github.com/livekit/livekit-server/pkg/routing" @@ -421,7 +421,16 @@ func (r *RoomManager) handleSignalRequest(room *rtc.Room, participant types.Part case *livekit.SignalRequest_Mute: participant.SetTrackMuted(msg.Mute.Sid, msg.Mute.Muted, false) case *livekit.SignalRequest_Subscription: - if err := room.UpdateSubscriptions(participant, msg.Subscription.TrackSids, msg.Subscription.Subscribe); err != nil { + var err error + if participant.CanSubscribe() { + updateErr := room.UpdateSubscriptions(participant, msg.Subscription.TrackSids, msg.Subscription.Subscribe) + if updateErr != nil { + err = updateErr + } + } else { + err = rtc.ErrCannotSubscribe + } + if err != nil { logger.Warnw("could not update subscription", err, "room", room.Room.Name, "participant", participant.Identity(),