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(),