From 86d7fe82410fdd1e52a23da90d44b8a468ded053 Mon Sep 17 00:00:00 2001 From: David Colburn Date: Tue, 19 Oct 2021 17:56:34 -0700 Subject: [PATCH] take iceServers out of room (#151) --- .idea/watcherTasks.xml | 1 + pkg/rtc/room.go | 8 +++----- pkg/rtc/room_test.go | 23 +++++++++-------------- pkg/service/roommanager.go | 4 ++-- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml index cb1a78370..27aa2e82b 100644 --- a/.idea/watcherTasks.xml +++ b/.idea/watcherTasks.xml @@ -2,6 +2,7 @@ + diff --git a/pkg/rtc/room.go b/pkg/rtc/room.go index 4e5dc9cac..5f597fd00 100644 --- a/pkg/rtc/room.go +++ b/pkg/rtc/room.go @@ -28,7 +28,6 @@ const ( type Room struct { Room *livekit.Room config WebRTCConfig - iceServers []*livekit.ICEServer lock sync.RWMutex // map of identity -> Participant participants map[string]types.Participant @@ -55,11 +54,10 @@ type ParticipantOptions struct { AutoSubscribe bool } -func NewRoom(room *livekit.Room, config WebRTCConfig, iceServers []*livekit.ICEServer, audioConfig *config.AudioConfig) *Room { +func NewRoom(room *livekit.Room, config WebRTCConfig, audioConfig *config.AudioConfig) *Room { r := &Room{ Room: proto.Clone(room).(*livekit.Room), config: config, - iceServers: iceServers, audioConfig: audioConfig, statsReporter: stats.NewRoomStatsReporter(room.Name), participants: make(map[string]types.Participant), @@ -139,7 +137,7 @@ func (r *Room) LastLeftAt() int64 { return 0 } -func (r *Room) Join(participant types.Participant, opts *ParticipantOptions) error { +func (r *Room) Join(participant types.Participant, opts *ParticipantOptions, iceServers []*livekit.ICEServer) error { if r.isClosed.Get() { stats.PromServiceOperationCounter.WithLabelValues("participant_join", "error", "room_closed").Add(1) return ErrRoomClosed @@ -223,7 +221,7 @@ func (r *Room) Join(participant types.Participant, opts *ParticipantOptions) err } }) - if err := participant.SendJoinResponse(r.Room, otherParticipants, r.iceServers); err != nil { + if err := participant.SendJoinResponse(r.Room, otherParticipants, iceServers); err != nil { stats.PromServiceOperationCounter.WithLabelValues("participant_join", "error", "send_response").Add(1) return err } diff --git a/pkg/rtc/room_test.go b/pkg/rtc/room_test.go index ea581e54a..fda14f600 100644 --- a/pkg/rtc/room_test.go +++ b/pkg/rtc/room_test.go @@ -26,6 +26,8 @@ func init() { serverlogger.InitDevelopment("") } +var iceServersForRoom = []*livekit.ICEServer{{Urls: []string{"stun:stun.l.google.com:19302"}}} + func TestJoinedState(t *testing.T) { t.Run("new room should return joinedAt 0", func(t *testing.T) { rm := newRoomWithParticipants(t, testRoomOpts{num: 0}) @@ -61,7 +63,7 @@ func TestRoomJoin(t *testing.T) { rm := newRoomWithParticipants(t, testRoomOpts{num: numParticipants}) pNew := newMockParticipant("new", types.DefaultProtocol, false) - rm.Join(pNew, nil) + rm.Join(pNew, nil, iceServersForRoom) // expect new participant to get a JoinReply info, participants, iceServers := pNew.SendJoinResponseArgsForCall(0) @@ -76,7 +78,7 @@ func TestRoomJoin(t *testing.T) { rm := newRoomWithParticipants(t, testRoomOpts{num: numExisting}) p := newMockParticipant("new", types.DefaultProtocol, false) - err := rm.Join(p, &rtc.ParticipantOptions{AutoSubscribe: true}) + err := rm.Join(p, &rtc.ParticipantOptions{AutoSubscribe: true}, iceServersForRoom) require.NoError(t, err) stateChangeCB := p.OnStateChangeArgsForCall(0) @@ -130,7 +132,7 @@ func TestRoomJoin(t *testing.T) { rm.Room.MaxParticipants = 1 p := newMockParticipant("second", types.ProtocolVersion(0), false) - err := rm.Join(p, nil) + err := rm.Join(p, nil, iceServersForRoom) require.Equal(t, rtc.ErrMaxParticipantsExceeded, err) }) } @@ -211,7 +213,7 @@ func TestRoomClosure(t *testing.T) { require.Len(t, rm.GetParticipants(), 0) require.True(t, isClosed) - require.Equal(t, rtc.ErrRoomClosed, rm.Join(p, nil)) + require.Equal(t, rtc.ErrRoomClosed, rm.Join(p, nil, iceServersForRoom)) }) t.Run("room does not close before empty timeout", func(t *testing.T) { @@ -485,7 +487,7 @@ func TestHiddenParticipants(t *testing.T) { defer rm.Close() pNew := newMockParticipant("new", types.DefaultProtocol, false) - rm.Join(pNew, nil) + rm.Join(pNew, nil, iceServersForRoom) // expect new participant to get a JoinReply info, participants, iceServers := pNew.SendJoinResponseArgsForCall(0) @@ -499,7 +501,7 @@ func TestHiddenParticipants(t *testing.T) { rm := newRoomWithParticipants(t, testRoomOpts{num: 2, numHidden: 1}) p := newMockParticipant("new", types.DefaultProtocol, false) - err := rm.Join(p, &rtc.ParticipantOptions{AutoSubscribe: true}) + err := rm.Join(p, &rtc.ParticipantOptions{AutoSubscribe: true}, iceServersForRoom) require.NoError(t, err) stateChangeCB := p.OnStateChangeArgsForCall(0) @@ -545,13 +547,6 @@ func newRoomWithParticipants(t *testing.T, opts testRoomOpts) *rtc.Room { rm := rtc.NewRoom( &livekit.Room{Name: "room"}, rtc.WebRTCConfig{}, - []*livekit.ICEServer{ - { - Urls: []string{ - "stun:stun.l.google.com:19302", - }, - }, - }, &config.AudioConfig{ UpdateInterval: audioUpdateInterval, SmoothIntervals: opts.audioSmoothIntervals, @@ -560,7 +555,7 @@ func newRoomWithParticipants(t *testing.T, opts testRoomOpts) *rtc.Room { for i := 0; i < opts.num+opts.numHidden; i++ { identity := fmt.Sprintf("p%d", i) participant := newMockParticipant(identity, opts.protocol, i >= opts.num) - err := rm.Join(participant, &rtc.ParticipantOptions{AutoSubscribe: true}) + err := rm.Join(participant, &rtc.ParticipantOptions{AutoSubscribe: true}, iceServersForRoom) participant.StateReturns(livekit.ParticipantInfo_ACTIVE) participant.IsReadyReturns(true) require.NoError(t, err) diff --git a/pkg/service/roommanager.go b/pkg/service/roommanager.go index eb3dac2bc..e217b3404 100644 --- a/pkg/service/roommanager.go +++ b/pkg/service/roommanager.go @@ -261,7 +261,7 @@ func (r *LocalRoomManager) StartSession(ctx context.Context, roomName string, pi opts := rtc.ParticipantOptions{ AutoSubscribe: pi.AutoSubscribe, } - if err := room.Join(participant, &opts); err != nil { + if err := room.Join(participant, &opts, r.iceServersForRoom(room.Room)); err != nil { logger.Errorw("could not join room", err) return } @@ -286,7 +286,7 @@ func (r *LocalRoomManager) getOrCreateRoom(ctx context.Context, roomName string) } // construct ice servers - room = rtc.NewRoom(ri, *r.rtcConfig, r.iceServersForRoom(ri), &r.config.Audio) + room = rtc.NewRoom(ri, *r.rtcConfig, &r.config.Audio) room.OnClose(func() { if err := r.DeleteRoom(ctx, roomName); err != nil { logger.Errorw("could not delete room", err)