Skip to content

Commit c3ec0ea

Browse files
authored
add disconnect reason to Room::close (#925)
1 parent 03875c8 commit c3ec0ea

18 files changed

Lines changed: 573 additions & 687 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
livekit: patch
3+
livekit-protocol: patch
4+
---
5+
6+
# Add disconnectReason to Room::close

livekit-api/src/services/connector.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ impl ConnectorClient {
136136
participant_metadata: options.participant_metadata.unwrap_or_default(),
137137
participant_attributes: options.participant_attributes.unwrap_or_default(),
138138
destination_country: options.destination_country.unwrap_or_default(),
139+
ringing_timeout: Default::default(),
139140
},
140141
self.base
141142
.auth_header(VideoGrants { room_create: true, ..Default::default() }, None)?,
@@ -242,6 +243,8 @@ impl ConnectorClient {
242243
participant_metadata: options.participant_metadata.unwrap_or_default(),
243244
participant_attributes: options.participant_attributes.unwrap_or_default(),
244245
destination_country: options.destination_country.unwrap_or_default(),
246+
ringing_timeout: Default::default(),
247+
wait_until_answered: Default::default(),
245248
},
246249
self.base
247250
.auth_header(VideoGrants { room_create: true, ..Default::default() }, None)?,

livekit-api/src/services/sip.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ impl SIPClient {
201201
// TODO: support these attributes
202202
include_headers: Default::default(),
203203
media_encryption: Default::default(),
204+
created_at: Default::default(),
205+
updated_at: Default::default(),
204206
}),
205207
},
206208
self.base.auth_header(
@@ -243,6 +245,9 @@ impl SIPClient {
243245
include_headers: Default::default(),
244246
media_encryption: Default::default(),
245247
destination_country: Default::default(),
248+
created_at: Default::default(),
249+
updated_at: Default::default(),
250+
from_host: Default::default(),
246251
}),
247252
},
248253
self.base.auth_header(

livekit-ffi/protocol/participant.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ enum DisconnectReason {
8585
SIP_TRUNK_FAILURE = 13;
8686
CONNECTION_TIMEOUT = 14;
8787
MEDIA_FAILURE = 15;
88+
AGENT_ERROR = 16;
8889
}
8990

9091
// copied from livekit-protocol/protocol/protobufs/livekit_models.proto and removed deprecated fields

livekit-ffi/protocol/room.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ message ConnectCallback {
6262
message DisconnectRequest {
6363
required uint64 room_handle = 1;
6464
optional uint64 request_async_id = 2;
65+
optional DisconnectReason reason = 3;
6566
}
6667
message DisconnectResponse { required uint64 async_id = 1; }
6768
message DisconnectCallback { required uint64 async_id = 1; }

livekit-ffi/src/conversion/participant.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ impl From<DisconnectReason> for proto::DisconnectReason {
9696
DisconnectReason::SipTrunkFailure => proto::DisconnectReason::SipTrunkFailure,
9797
DisconnectReason::ConnectionTimeout => proto::DisconnectReason::ConnectionTimeout,
9898
DisconnectReason::MediaFailure => proto::DisconnectReason::MediaFailure,
99+
DisconnectReason::AgentError => proto::DisconnectReason::AgentError,
99100
}
100101
}
101102
}

livekit-ffi/src/conversion/room.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,31 @@ impl From<DisconnectReason> for proto::DisconnectReason {
102102
DisconnectReason::SipTrunkFailure => Self::SipTrunkFailure,
103103
DisconnectReason::ConnectionTimeout => Self::ConnectionTimeout,
104104
DisconnectReason::MediaFailure => Self::MediaFailure,
105+
DisconnectReason::AgentError => Self::AgentError,
106+
}
107+
}
108+
}
109+
110+
impl From<proto::DisconnectReason> for DisconnectReason {
111+
fn from(value: proto::DisconnectReason) -> Self {
112+
match value {
113+
proto::DisconnectReason::UnknownReason => Self::UnknownReason,
114+
proto::DisconnectReason::ClientInitiated => Self::ClientInitiated,
115+
proto::DisconnectReason::DuplicateIdentity => Self::DuplicateIdentity,
116+
proto::DisconnectReason::ServerShutdown => Self::ServerShutdown,
117+
proto::DisconnectReason::ParticipantRemoved => Self::ParticipantRemoved,
118+
proto::DisconnectReason::RoomDeleted => Self::RoomDeleted,
119+
proto::DisconnectReason::StateMismatch => Self::StateMismatch,
120+
proto::DisconnectReason::JoinFailure => Self::JoinFailure,
121+
proto::DisconnectReason::Migration => Self::Migration,
122+
proto::DisconnectReason::SignalClose => Self::SignalClose,
123+
proto::DisconnectReason::RoomClosed => Self::RoomClosed,
124+
proto::DisconnectReason::UserUnavailable => Self::UserUnavailable,
125+
proto::DisconnectReason::UserRejected => Self::UserRejected,
126+
proto::DisconnectReason::SipTrunkFailure => Self::SipTrunkFailure,
127+
proto::DisconnectReason::ConnectionTimeout => Self::ConnectionTimeout,
128+
proto::DisconnectReason::MediaFailure => Self::MediaFailure,
129+
proto::DisconnectReason::AgentError => Self::AgentError,
105130
}
106131
}
107132
}

livekit-ffi/src/server/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use std::{
2424

2525
use dashmap::{mapref::one::MappedRef, DashMap};
2626
use downcast_rs::{impl_downcast, Downcast};
27+
use livekit::prelude::DisconnectReason;
2728
use livekit::webrtc::{
2829
native::apm::AudioProcessingModule, native::audio_resampler::AudioResampler, prelude::*,
2930
};
@@ -169,7 +170,7 @@ impl FfiServer {
169170
}
170171

171172
for room in rooms {
172-
room.close(self).await;
173+
room.close(self, DisconnectReason::ClientInitiated).await;
173174
}
174175

175176
// Drop all handles

livekit-ffi/src/server/requests.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,16 @@ fn on_disconnect(
6565
disconnect: proto::DisconnectRequest,
6666
) -> FfiResult<proto::DisconnectResponse> {
6767
let async_id = server.resolve_async_id(disconnect.request_async_id);
68+
let reason = disconnect
69+
.reason
70+
.and_then(|r| proto::DisconnectReason::try_from(r).ok())
71+
.map(DisconnectReason::from)
72+
.unwrap_or(DisconnectReason::ClientInitiated);
6873
let handle = server.async_runtime.spawn(async move {
6974
let ffi_room =
7075
server.retrieve_handle::<room::FfiRoom>(disconnect.room_handle).unwrap().clone();
7176

72-
ffi_room.close(server).await;
77+
ffi_room.close(server, reason).await;
7378

7479
let _ = server.send_event(proto::DisconnectCallback { async_id }.into());
7580
});

livekit-ffi/src/server/room.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ impl FfiRoom {
301301
}
302302

303303
/// Close the room and stop the tasks
304-
pub async fn close(&self, server: &'static FfiServer) {
304+
pub async fn close(&self, server: &'static FfiServer, reason: DisconnectReason) {
305305
// drop associated track handles
306306
for (_, &handle) in self.inner.track_handle_lookup.lock().iter() {
307307
if server.drop_handle(handle) {
@@ -310,7 +310,7 @@ impl FfiRoom {
310310
}
311311
}
312312

313-
let _ = self.inner.room.close().await;
313+
let _ = self.inner.room.close_with_reason(reason.into()).await;
314314

315315
let handle = self.handle.lock().await.take();
316316
if let Some(handle) = handle {

0 commit comments

Comments
 (0)