From f60b35680744cbedf96a3129fd5a5a3b4682f86a Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 6 May 2021 00:10:23 -0700 Subject: [PATCH] don't hide trickle decode errors --- cmd/cli/client/client.go | 5 ++++- pkg/rtc/utils.go | 9 ++++++--- pkg/service/roommanager.go | 6 +++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cmd/cli/client/client.go b/cmd/cli/client/client.go index 9c6608bcf..73ebe335f 100644 --- a/cmd/cli/client/client.go +++ b/cmd/cli/client/client.go @@ -241,7 +241,10 @@ func (c *RTCClient) Run() error { return err } case *livekit.SignalResponse_Trickle: - candidateInit := rtc.FromProtoTrickle(msg.Trickle) + candidateInit, err := rtc.FromProtoTrickle(msg.Trickle) + if err != nil { + return err + } if msg.Trickle.Target == livekit.SignalTarget_PUBLISHER { err = c.publisher.AddICECandidate(candidateInit) } else { diff --git a/pkg/rtc/utils.go b/pkg/rtc/utils.go index b5d195e2b..775436914 100644 --- a/pkg/rtc/utils.go +++ b/pkg/rtc/utils.go @@ -84,10 +84,13 @@ func ToProtoTrickle(candidateInit webrtc.ICECandidateInit) *livekit.TrickleReque } } -func FromProtoTrickle(trickle *livekit.TrickleRequest) webrtc.ICECandidateInit { +func FromProtoTrickle(trickle *livekit.TrickleRequest) (webrtc.ICECandidateInit, error) { ci := webrtc.ICECandidateInit{} - json.Unmarshal([]byte(trickle.CandidateInit), &ci) - return ci + err := json.Unmarshal([]byte(trickle.CandidateInit), &ci) + if err != nil { + return webrtc.ICECandidateInit{}, err + } + return ci, nil } func ToProtoTrack(t types.PublishedTrack) *livekit.TrackInfo { diff --git a/pkg/service/roommanager.go b/pkg/service/roommanager.go index 49a92d7ae..edfbc17f3 100644 --- a/pkg/service/roommanager.go +++ b/pkg/service/roommanager.go @@ -332,7 +332,11 @@ func (r *RoomManager) rtcSessionWorker(room *rtc.Room, participant types.Partici logger.Errorw("could not handle answer", "participant", participant.Identity(), "err", err) } case *livekit.SignalRequest_Trickle: - candidateInit := rtc.FromProtoTrickle(msg.Trickle) + candidateInit, err := rtc.FromProtoTrickle(msg.Trickle) + if err != nil { + logger.Errorw("could not decode trickle", "participant", participant.Identity(), "err", err) + break + } //logger.Debugw("adding peer candidate", "participant", participant.ID()) if err := participant.AddICECandidate(candidateInit, msg.Trickle.Target); err != nil { logger.Errorw("could not handle trickle", "participant", participant.Identity(), "err", err)