From 3a2ffb421f21a259d4bb9c604ce66b0bd5f7f4ba Mon Sep 17 00:00:00 2001 From: Jacob Gelman <3182119+ladvoc@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:10:36 -0700 Subject: [PATCH 1/2] Add data track signal requests --- engine.go | 12 ++++++++++++ signalling/interfaces.go | 3 +++ signalling/signallingbase.go | 24 ++++++++++++++++++++++++ signalling/signallingunimplemented.go | 12 ++++++++++++ 4 files changed, 51 insertions(+) diff --git a/engine.go b/engine.go index c013d411..27d80c18 100644 --- a/engine.go +++ b/engine.go @@ -1403,6 +1403,18 @@ func (e *RTCEngine) SendSyncState(syncState *livekit.SyncState) error { return e.signalTransport.SendMessage(e.signalling.SignalSyncState(syncState)) } +func (e *RTCEngine) SendPublishDataTrack(publishDataTrack *livekit.PublishDataTrackRequest) error { + return e.signalTransport.SendMessage(e.signalling.SignalPublishDataTrack(publishDataTrack)) +} + +func (e *RTCEngine) SendUnpublishDataTrack(unpublishDataTrack *livekit.UnpublishDataTrackRequest) error { + return e.signalTransport.SendMessage(e.signalling.SignalUnpublishDataTrack(unpublishDataTrack)) +} + +func (e *RTCEngine) SendUpdateDataSubscription(updateDataSubscription *livekit.UpdateDataSubscription) error { + return e.signalTransport.SendMessage(e.signalling.SignalUpdateDataSubscription(updateDataSubscription)) +} + func (e *RTCEngine) SendLeaveWithReason(reason livekit.DisconnectReason) error { return e.signalTransport.SendMessage( e.signalling.SignalLeaveRequest( diff --git a/signalling/interfaces.go b/signalling/interfaces.go index ec57eb95..617dee76 100644 --- a/signalling/interfaces.go +++ b/signalling/interfaces.go @@ -69,6 +69,9 @@ type Signalling interface { SignalSubscriptionPermission(subscriptionPermission *livekit.SubscriptionPermission) proto.Message SignalUpdateTrackSettings(settings *livekit.UpdateTrackSettings) proto.Message SignalUpdateParticipantMetadata(metadata *livekit.UpdateParticipantMetadata) proto.Message + SignalPublishDataTrack(publishDataTrack *livekit.PublishDataTrackRequest) proto.Message + SignalUnpublishDataTrack(unpublishDataTrack *livekit.UnpublishDataTrackRequest) proto.Message + SignalUpdateDataSubscription(updateDataSubscription *livekit.UpdateDataSubscription) proto.Message } type ConnectParams struct { diff --git a/signalling/signallingbase.go b/signalling/signallingbase.go index e6b4f994..3df61075 100644 --- a/signalling/signallingbase.go +++ b/signalling/signallingbase.go @@ -174,3 +174,27 @@ func (s *signallingBase) SignalUpdateParticipantMetadata(metadata *livekit.Updat }, } } + +func (s *signallingBase) SignalPublishDataTrack(publishDataTrack *livekit.PublishDataTrackRequest) proto.Message { + return &livekit.SignalRequest{ + Message: &livekit.SignalRequest_PublishDataTrackRequest{ + PublishDataTrackRequest: publishDataTrack, + }, + } +} + +func (s *signallingBase) SignalUnpublishDataTrack(unpublishDataTrack *livekit.UnpublishDataTrackRequest) proto.Message { + return &livekit.SignalRequest{ + Message: &livekit.SignalRequest_UnpublishDataTrackRequest{ + UnpublishDataTrackRequest: unpublishDataTrack, + }, + } +} + +func (s *signallingBase) SignalUpdateDataSubscription(updateDataSubscription *livekit.UpdateDataSubscription) proto.Message { + return &livekit.SignalRequest{ + Message: &livekit.SignalRequest_UpdateDataSubscription{ + UpdateDataSubscription: updateDataSubscription, + }, + } +} diff --git a/signalling/signallingunimplemented.go b/signalling/signallingunimplemented.go index 71000c12..015378d1 100644 --- a/signalling/signallingunimplemented.go +++ b/signalling/signallingunimplemented.go @@ -117,3 +117,15 @@ func (s *signallingUnimplemented) SignalUpdateTrackSettings(settings *livekit.Up func (s *signallingUnimplemented) SignalUpdateParticipantMetadata(metadata *livekit.UpdateParticipantMetadata) proto.Message { return nil } + +func (s *signallingUnimplemented) SignalPublishDataTrack(publishDataTrack *livekit.PublishDataTrackRequest) proto.Message { + return nil +} + +func (s *signallingUnimplemented) SignalUnpublishDataTrack(unpublishDataTrack *livekit.UnpublishDataTrackRequest) proto.Message { + return nil +} + +func (s *signallingUnimplemented) SignalUpdateDataSubscription(updateDataSubscription *livekit.UpdateDataSubscription) proto.Message { + return nil +} From 6a400eaf87e6a1ae352f63709d96a6dfe62741f1 Mon Sep 17 00:00:00 2001 From: Jacob Gelman <3182119+ladvoc@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:10:45 -0700 Subject: [PATCH 2/2] Handle data track signal responses --- engine.go | 15 +++++++++++++++ room.go | 9 +++++++++ signalling/interfaces.go | 3 +++ signalling/signalhandler.go | 9 +++++++++ 4 files changed, 36 insertions(+) diff --git a/engine.go b/engine.go index 27d80c18..1fcdb22b 100644 --- a/engine.go +++ b/engine.go @@ -78,6 +78,9 @@ type engineHandler interface { OnSubscribedAudioCodecUpdate(subscribedAudioCodecUpdate *livekit.SubscribedAudioCodecUpdate) OnMediaSectionsRequirement(mediaSectionsRequirement *livekit.MediaSectionsRequirement) OnRequestResponse(requestResponse *livekit.RequestResponse) + OnPublishDataTrackResponse(publishDataTrackResponse *livekit.PublishDataTrackResponse) + OnUnpublishDataTrackResponse(unpublishDataTrackResponse *livekit.UnpublishDataTrackResponse) + OnDataTrackSubscriberHandles(dataTrackSubscriberHandles *livekit.DataTrackSubscriberHandles) } // ------------------------------------------- @@ -1777,6 +1780,18 @@ func (e *RTCEngine) OnRequestResponse(res *livekit.RequestResponse) { e.engineHandler.OnRequestResponse(res) } +func (e *RTCEngine) OnPublishDataTrackResponse(publishDataTrackResponse *livekit.PublishDataTrackResponse) { + e.engineHandler.OnPublishDataTrackResponse(publishDataTrackResponse) +} + +func (e *RTCEngine) OnUnpublishDataTrackResponse(unpublishDataTrackResponse *livekit.UnpublishDataTrackResponse) { + e.engineHandler.OnUnpublishDataTrackResponse(unpublishDataTrackResponse) +} + +func (e *RTCEngine) OnDataTrackSubscriberHandles(dataTrackSubscriberHandles *livekit.DataTrackSubscriberHandles) { + e.engineHandler.OnDataTrackSubscriberHandles(dataTrackSubscriberHandles) +} + // ------------------------------------ func setConfiguration(pcTransport *PCTransport, configuration webrtc.Configuration) { diff --git a/room.go b/room.go index 075f17f0..c88714f4 100644 --- a/room.go +++ b/room.go @@ -1411,6 +1411,15 @@ func (r *Room) OnRequestResponse(res *livekit.RequestResponse) { } } +func (r *Room) OnPublishDataTrackResponse(publishDataTrackResponse *livekit.PublishDataTrackResponse) { +} + +func (r *Room) OnUnpublishDataTrackResponse(unpublishDataTrackResponse *livekit.UnpublishDataTrackResponse) { +} + +func (r *Room) OnDataTrackSubscriberHandles(dataTrackSubscriberHandles *livekit.DataTrackSubscriberHandles) { +} + func (r *Room) OnStreamHeader(streamHeader *livekit.DataStream_Header, participantIdentity string) { switch header := streamHeader.ContentHeader.(type) { case *livekit.DataStream_Header_TextHeader: diff --git a/signalling/interfaces.go b/signalling/interfaces.go index 617dee76..edae4e25 100644 --- a/signalling/interfaces.go +++ b/signalling/interfaces.go @@ -185,4 +185,7 @@ type SignalProcessor interface { OnSubscribedAudioCodecUpdate(subscribedAudioCodecUpdate *livekit.SubscribedAudioCodecUpdate) OnMediaSectionsRequirement(mediaSectionsRequirement *livekit.MediaSectionsRequirement) OnRequestResponse(requestResponse *livekit.RequestResponse) + OnPublishDataTrackResponse(publishDataTrackResponse *livekit.PublishDataTrackResponse) + OnUnpublishDataTrackResponse(unpublishDataTrackResponse *livekit.UnpublishDataTrackResponse) + OnDataTrackSubscriberHandles(dataTrackSubscriberHandles *livekit.DataTrackSubscriberHandles) } diff --git a/signalling/signalhandler.go b/signalling/signalhandler.go index 638b85a2..017e54a3 100644 --- a/signalling/signalhandler.go +++ b/signalling/signalhandler.go @@ -124,6 +124,15 @@ func (s *signalhandler) HandleMessage(msg proto.Message) error { case *livekit.SignalResponse_RequestResponse: s.params.Processor.OnRequestResponse(payload.RequestResponse) + + case *livekit.SignalResponse_PublishDataTrackResponse: + s.params.Processor.OnPublishDataTrackResponse(payload.PublishDataTrackResponse) + + case *livekit.SignalResponse_UnpublishDataTrackResponse: + s.params.Processor.OnUnpublishDataTrackResponse(payload.UnpublishDataTrackResponse) + + case *livekit.SignalResponse_DataTrackSubscriberHandles: + s.params.Processor.OnDataTrackSubscriberHandles(payload.DataTrackSubscriberHandles) } return nil