pub const MANAGED_SETTLE_DEADLINE_MS: i64 = 10_000;
pub const SESSION_ADMISSION_TIMEOUT_MS: u64 = 45_000;
pub const WASM_ACCEPT_CLOSE_GRACE_MS: u64 = 4_000;
pub const WASM_CONNECT_REPLACEMENT_GRACE_MS: u64 = 8_000;
pub const WASM_REPLACEMENT_POLL_MAX_INTERVAL_MS: u64 = 500;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_ADMISSION_FAILURE_BACKOFF_MS: i64 = 5_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_CONNECT_TIMEOUT_BACKOFF_MS: i64 = 10_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_CONNECT_TIMEOUT_RETRY_DELAY_MS: u64 = 3_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_DIRECT_QUIC_SUPPRESSION_MS: i64 = 15_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_MAX_UPGRADE_ATTEMPTS: u32 = 8;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_SIGNAL_SEND_TIMEOUT_MS: u64 = 30_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_SIGNAL_SEND_RETRY_DELAY_MS: u64 = 100;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_CONNECT_TIMEOUT_MS: u64 = 45_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_NO_SIGNAL_ABORT_MS: u64 = 8_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_ATTEMPT_IN_FLIGHT_GRACE_MS: i64 = 5_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_SKIP_LOG_INTERVAL_MS: i64 = 10_000;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_HEARTBEAT_TICK_SECS: u64 = 10;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_HEARTBEAT_SUSPECT_AFTER_SECS: u64 = 20;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_HEARTBEAT_STALE_AFTER_SECS: u64 = 60;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub const NATIVE_WEBRTC_HEARTBEAT_SEND_TIMEOUT_SECS: u64 = 2;
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
fn read_e2e_u64_env(name: &str, fallback: u64) -> u64 {
if std::env::var("PLUTO_E2E_ACCELERATED_TIMERS")
.ok()
.as_deref()
!= Some("1")
{
return fallback;
}
std::env::var(name)
.ok()
.and_then(|value| value.trim().parse::<u64>().ok())
.filter(|value| *value > 0)
.unwrap_or(fallback)
}
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub fn native_webrtc_heartbeat_tick_secs() -> u64 {
read_e2e_u64_env(
"OPENRTC_E2E_NATIVE_WEBRTC_HEARTBEAT_TICK_SECS",
NATIVE_WEBRTC_HEARTBEAT_TICK_SECS,
)
}
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub fn native_webrtc_heartbeat_suspect_after_secs() -> u64 {
read_e2e_u64_env(
"OPENRTC_E2E_NATIVE_WEBRTC_HEARTBEAT_SUSPECT_AFTER_SECS",
NATIVE_WEBRTC_HEARTBEAT_SUSPECT_AFTER_SECS,
)
}
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub fn native_webrtc_heartbeat_stale_after_secs() -> u64 {
read_e2e_u64_env(
"OPENRTC_E2E_NATIVE_WEBRTC_HEARTBEAT_STALE_AFTER_SECS",
NATIVE_WEBRTC_HEARTBEAT_STALE_AFTER_SECS,
)
}
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub fn native_webrtc_heartbeat_send_timeout_secs() -> u64 {
read_e2e_u64_env(
"OPENRTC_E2E_NATIVE_WEBRTC_HEARTBEAT_SEND_TIMEOUT_SECS",
NATIVE_WEBRTC_HEARTBEAT_SEND_TIMEOUT_SECS,
)
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct RuntimePolicySnapshot {
pub managed_settle_deadline_ms: i64,
pub session_admission_timeout_ms: u64,
pub wasm: WasmRuntimePolicySnapshot,
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
pub native_webrtc: NativeWebRtcPolicySnapshot,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct WasmRuntimePolicySnapshot {
pub accept_close_grace_ms: u64,
pub connect_replacement_grace_ms: u64,
pub replacement_poll_max_interval_ms: u64,
}
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct NativeWebRtcPolicySnapshot {
pub admission_failure_backoff_ms: i64,
pub connect_timeout_backoff_ms: i64,
pub connect_timeout_retry_delay_ms: u64,
pub direct_quic_suppression_ms: i64,
pub max_upgrade_attempts: u32,
pub signal_send_timeout_ms: u64,
pub signal_send_retry_delay_ms: u64,
pub connect_timeout_ms: u64,
pub no_signal_abort_ms: u64,
pub attempt_in_flight_grace_ms: i64,
pub skip_log_interval_ms: i64,
pub heartbeat_tick_secs: u64,
pub heartbeat_suspect_after_secs: u64,
pub heartbeat_stale_after_secs: u64,
pub heartbeat_send_timeout_secs: u64,
}
pub fn runtime_policy_snapshot() -> RuntimePolicySnapshot {
RuntimePolicySnapshot {
managed_settle_deadline_ms: MANAGED_SETTLE_DEADLINE_MS,
session_admission_timeout_ms: SESSION_ADMISSION_TIMEOUT_MS,
wasm: WasmRuntimePolicySnapshot {
accept_close_grace_ms: WASM_ACCEPT_CLOSE_GRACE_MS,
connect_replacement_grace_ms: WASM_CONNECT_REPLACEMENT_GRACE_MS,
replacement_poll_max_interval_ms: WASM_REPLACEMENT_POLL_MAX_INTERVAL_MS,
},
#[cfg(all(not(target_arch = "wasm32"), feature = "transport-webrtc"))]
native_webrtc: NativeWebRtcPolicySnapshot {
admission_failure_backoff_ms: NATIVE_WEBRTC_ADMISSION_FAILURE_BACKOFF_MS,
connect_timeout_backoff_ms: NATIVE_WEBRTC_CONNECT_TIMEOUT_BACKOFF_MS,
connect_timeout_retry_delay_ms: NATIVE_WEBRTC_CONNECT_TIMEOUT_RETRY_DELAY_MS,
direct_quic_suppression_ms: NATIVE_WEBRTC_DIRECT_QUIC_SUPPRESSION_MS,
max_upgrade_attempts: NATIVE_WEBRTC_MAX_UPGRADE_ATTEMPTS,
signal_send_timeout_ms: NATIVE_WEBRTC_SIGNAL_SEND_TIMEOUT_MS,
signal_send_retry_delay_ms: NATIVE_WEBRTC_SIGNAL_SEND_RETRY_DELAY_MS,
connect_timeout_ms: NATIVE_WEBRTC_CONNECT_TIMEOUT_MS,
no_signal_abort_ms: NATIVE_WEBRTC_NO_SIGNAL_ABORT_MS,
attempt_in_flight_grace_ms: NATIVE_WEBRTC_ATTEMPT_IN_FLIGHT_GRACE_MS,
skip_log_interval_ms: NATIVE_WEBRTC_SKIP_LOG_INTERVAL_MS,
heartbeat_tick_secs: native_webrtc_heartbeat_tick_secs(),
heartbeat_suspect_after_secs: native_webrtc_heartbeat_suspect_after_secs(),
heartbeat_stale_after_secs: native_webrtc_heartbeat_stale_after_secs(),
heartbeat_send_timeout_secs: native_webrtc_heartbeat_send_timeout_secs(),
},
}
}