Skip to content

Commit 7688e49

Browse files
authored
Do not modify raw packets (#714)
1 parent a38271f commit 7688e49

4 files changed

Lines changed: 40 additions & 16 deletions

File tree

livekit/src/room/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1730,7 +1730,7 @@ async fn outgoing_data_stream_task(
17301730
loop {
17311731
tokio::select! {
17321732
Ok((packet, responder)) = packet_rx.recv() => {
1733-
let result = engine.publish_data(packet, DataPacketKind::Reliable).await;
1733+
let result = engine.publish_data(packet, DataPacketKind::Reliable, false).await;
17341734
let _ = responder.respond(result);
17351735
},
17361736
_ = close_rx.recv() => {

livekit/src/room/participant/local_participant.rs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ impl LocalParticipant {
407407
..Default::default()
408408
};
409409

410-
match self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await {
410+
match self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable, false).await {
411411
Ok(_) => Ok(ChatMessage::from(chat_message)),
412412
Err(e) => Err(Into::into(e)),
413413
}
@@ -433,7 +433,7 @@ impl LocalParticipant {
433433
..Default::default()
434434
};
435435

436-
match self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await {
436+
match self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable, false).await {
437437
Ok(_) => Ok(ChatMessage::from(proto_msg)),
438438
Err(e) => Err(Into::into(e)),
439439
}
@@ -477,7 +477,7 @@ impl LocalParticipant {
477477
true => DataPacketKind::Reliable,
478478
false => DataPacketKind::Lossy,
479479
};
480-
self.inner.rtc_engine.publish_data(packet, kind).await.map_err(Into::into)
480+
self.inner.rtc_engine.publish_data(packet, kind, true).await.map_err(Into::into)
481481
}
482482

483483
pub async fn publish_data(&self, packet: DataPacket) -> RoomResult<()> {
@@ -498,7 +498,7 @@ impl LocalParticipant {
498498
..Default::default()
499499
};
500500

501-
self.inner.rtc_engine.publish_data(data, kind).await.map_err(Into::into)
501+
self.inner.rtc_engine.publish_data(data, kind, false).await.map_err(Into::into)
502502
}
503503

504504
pub fn set_data_channel_buffered_amount_low_threshold(
@@ -553,7 +553,11 @@ impl LocalParticipant {
553553
value: Some(proto::data_packet::Value::Transcription(transcription_packet)),
554554
..Default::default()
555555
};
556-
self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await.map_err(Into::into)
556+
self.inner
557+
.rtc_engine
558+
.publish_data(data, DataPacketKind::Reliable, false)
559+
.await
560+
.map_err(Into::into)
557561
}
558562

559563
pub async fn publish_dtmf(&self, dtmf: SipDTMF) -> RoomResult<()> {
@@ -567,7 +571,11 @@ impl LocalParticipant {
567571
..Default::default()
568572
};
569573

570-
self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await.map_err(Into::into)
574+
self.inner
575+
.rtc_engine
576+
.publish_data(data, DataPacketKind::Reliable, false)
577+
.await
578+
.map_err(Into::into)
571579
}
572580

573581
async fn publish_rpc_request(&self, rpc_request: RpcRequest) -> RoomResult<()> {
@@ -587,7 +595,11 @@ impl LocalParticipant {
587595
..Default::default()
588596
};
589597

590-
self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await.map_err(Into::into)
598+
self.inner
599+
.rtc_engine
600+
.publish_data(data, DataPacketKind::Reliable, false)
601+
.await
602+
.map_err(Into::into)
591603
}
592604

593605
async fn publish_rpc_response(&self, rpc_response: RpcResponse) -> RoomResult<()> {
@@ -611,7 +623,11 @@ impl LocalParticipant {
611623
..Default::default()
612624
};
613625

614-
self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await.map_err(Into::into)
626+
self.inner
627+
.rtc_engine
628+
.publish_data(data, DataPacketKind::Reliable, false)
629+
.await
630+
.map_err(Into::into)
615631
}
616632

617633
async fn publish_rpc_ack(&self, rpc_ack: RpcAck) -> RoomResult<()> {
@@ -625,7 +641,11 @@ impl LocalParticipant {
625641
..Default::default()
626642
};
627643

628-
self.inner.rtc_engine.publish_data(data, DataPacketKind::Reliable).await.map_err(Into::into)
644+
self.inner
645+
.rtc_engine
646+
.publish_data(data, DataPacketKind::Reliable, false)
647+
.await
648+
.map_err(Into::into)
629649
}
630650

631651
pub(crate) async fn update_track_subscription_permissions(&self) {

livekit/src/rtc_engine/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,13 +246,13 @@ impl RtcEngine {
246246
&self,
247247
data: proto::DataPacket,
248248
kind: DataPacketKind,
249+
is_raw_packet: bool,
249250
) -> EngineResult<()> {
250251
let (session, _r_lock) = {
251252
let (handle, _r_lock) = self.inner.wait_reconnection().await?;
252253
(handle.session.clone(), _r_lock)
253254
};
254-
255-
session.publish_data(data, kind).await
255+
session.publish_data(data, kind, is_raw_packet).await
256256
}
257257

258258
pub async fn simulate_scenario(&self, scenario: SimulateScenario) -> EngineResult<()> {

livekit/src/rtc_engine/rtc_session.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ enum DataChannelEventDetail {
213213

214214
#[derive(Debug)]
215215
struct PublishPacketRequest {
216-
/// Unencoded data packewt.
216+
/// Unencoded data packet.
217217
packet: proto::DataPacket,
218218

219219
/// Notifies the caller once the request has been fulfilled.
@@ -488,8 +488,9 @@ impl RtcSession {
488488
&self,
489489
data: proto::DataPacket,
490490
kind: DataPacketKind,
491+
is_raw_packet: bool,
491492
) -> Result<(), EngineError> {
492-
self.inner.publish_data(data, kind).await
493+
self.inner.publish_data(data, kind, is_raw_packet).await
493494
}
494495

495496
pub async fn restart(&self) -> EngineResult<proto::ReconnectResponse> {
@@ -1339,12 +1340,15 @@ impl SessionInner {
13391340
self: &Arc<Self>,
13401341
mut packet: proto::DataPacket,
13411342
kind: DataPacketKind,
1343+
is_raw_packet: bool,
13421344
) -> Result<(), EngineError> {
13431345
self.ensure_publisher_connected(kind).await?;
13441346

13451347
// Populate local participant info fields
1346-
packet.participant_identity = self.participant_info.identity.to_string();
1347-
packet.participant_sid = self.participant_info.sid.to_string();
1348+
if !is_raw_packet {
1349+
packet.participant_identity = self.participant_info.identity.to_string();
1350+
packet.participant_sid = self.participant_info.sid.to_string();
1351+
}
13481352

13491353
let (completion_tx, completion_rx) = oneshot::channel();
13501354
let ev = DataChannelEvent {

0 commit comments

Comments
 (0)