diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index bf6931806..a80d3bee6 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -1516,44 +1516,47 @@ func (p *ParticipantImpl) onDataMessage(kind livekit.DataPacket_Kind, data []byt dp.ParticipantIdentity = string(p.params.Identity) } + shouldForward := false // only forward on user payloads switch payload := dp.Value.(type) { case *livekit.DataPacket_User: + u := payload.User + if p.Hidden() { + u.ParticipantSid = "" + u.ParticipantIdentity = "" + } else { + u.ParticipantSid = string(p.params.SID) + u.ParticipantIdentity = string(p.params.Identity) + } + if dp.ParticipantIdentity != "" { + u.ParticipantIdentity = dp.ParticipantIdentity + } else { + dp.ParticipantIdentity = u.ParticipantIdentity + } + if len(dp.DestinationIdentities) != 0 { + u.DestinationIdentities = dp.DestinationIdentities + } else { + dp.DestinationIdentities = u.DestinationIdentities + } + shouldForward = true + case *livekit.DataPacket_SipDtmf: + if p.Kind() == livekit.ParticipantInfo_SIP { + shouldForward = true + } + case *livekit.DataPacket_Transcription: + if p.Kind() == livekit.ParticipantInfo_AGENT { + shouldForward = true + } + default: + p.pubLogger.Warnw("received unsupported data packet", nil, "payload", payload) + } + if shouldForward { p.lock.RLock() onDataPacket := p.onDataPacket p.lock.RUnlock() if onDataPacket != nil { - u := payload.User - if p.Hidden() { - u.ParticipantSid = "" - u.ParticipantIdentity = "" - } else { - u.ParticipantSid = string(p.params.SID) - u.ParticipantIdentity = string(p.params.Identity) - } - if dp.ParticipantIdentity != "" { - u.ParticipantIdentity = dp.ParticipantIdentity - } else { - dp.ParticipantIdentity = u.ParticipantIdentity - } - if len(dp.DestinationIdentities) != 0 { - u.DestinationIdentities = dp.DestinationIdentities - } else { - dp.DestinationIdentities = u.DestinationIdentities - } onDataPacket(p, kind, dp) } - case *livekit.DataPacket_SipDtmf: - if p.grants.GetParticipantKind() == livekit.ParticipantInfo_SIP { - p.lock.RLock() - onDataPacket := p.onDataPacket - p.lock.RUnlock() - if onDataPacket != nil { - onDataPacket(p, kind, dp) - } - } - default: - p.pubLogger.Warnw("received unsupported data packet", nil, "payload", payload) } p.setIsPublisher(true)