diff --git a/Cargo.lock b/Cargo.lock
index 0e4f668ba5..72f93222cf 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -276,6 +276,7 @@ dependencies = [
"anyhow",
"backtrace",
"glam",
+ "libc",
"log",
"parking_lot",
"pastey",
diff --git a/alvr/client_core/src/connection.rs b/alvr/client_core/src/connection.rs
index 2141a90d15..8e1d837c3c 100644
--- a/alvr/client_core/src/connection.rs
+++ b/alvr/client_core/src/connection.rs
@@ -9,14 +9,15 @@ use crate::{
};
use alvr_common::{
ALVR_VERSION, AnyhowToCon, ConResult, ConnectionError, ConnectionState, LifecycleState,
- dbg_connection, debug, error, info,
+ TimeSyncEstimator, dbg_connection, debug, error, info, monotonic_ns,
parking_lot::{Condvar, Mutex, RwLock},
wait_rwlock, warn,
};
use alvr_packets::{
AUDIO, ClientConnectionResult, ClientControlPacket, ClientStatistics, ConnectionAcceptedInfo,
- HAPTICS, Haptics, STATISTICS, ServerControlPacket, StreamConfigPacket, TRACKING, TrackingData,
- VIDEO, VideoPacketHeader, VideoStreamingCapabilities, VideoStreamingCapabilitiesExt,
+ HAPTICS, Haptics, STATISTICS, ServerControlPacket, StreamConfigPacket, TRACKING, TimeSyncPacket,
+ TrackingData, VIDEO, VideoPacketHeader, VideoStreamingCapabilities,
+ VideoStreamingCapabilitiesExt,
};
use alvr_session::{SocketProtocol, settings_schema::Switch};
use alvr_sockets::{
@@ -50,6 +51,7 @@ const SOCKET_INIT_RETRY_INTERVAL: Duration = Duration::from_millis(500);
const CONNECTION_RETRY_INTERVAL: Duration = Duration::from_secs(1);
const HANDSHAKE_ACTION_TIMEOUT: Duration = Duration::from_secs(2);
const STREAMING_RECV_TIMEOUT: Duration = Duration::from_millis(500);
+const TIME_SYNC_INTERVAL: Duration = Duration::from_secs(15);
const MAX_UNREAD_PACKETS: usize = 10; // Applies per stream
const VIDEO_FRAME_METADATA_HISTORY_SIZE: usize = 128;
@@ -64,6 +66,7 @@ pub struct ConnectionContext {
pub tracking_sender: Mutex