diff --git a/public/api.php b/public/api.php index b8a4a5b..f0a04e1 100644 --- a/public/api.php +++ b/public/api.php @@ -1717,6 +1717,8 @@ try { $local_net = trim((string)($payload['local_net'] ?? '192.168.1.0/24')); $udp_port = max(1024, min(65535, (int)($payload['udp_port'] ?? 5060))); $tls_port = max(1024, min(65535, (int)($payload['tls_port'] ?? 5061))); + $rtpTimeout = max(5, (int)($payload['rtp_timeout'] ?? 30)); + $rtpHoldTimeout = max(0, (int)($payload['rtp_timeout_hold'] ?? 0)); $letsencrypt_domain = trim((string)($payload['letsencrypt_domain'] ?? '')); $ami_host = trim((string)($payload['ami_host'] ?? '127.0.0.1')); $ami_port = max(1, min(65535, (int)($payload['ami_port'] ?? 5038))); @@ -1738,6 +1740,8 @@ try { local_net = :local_net, udp_port = :udp_port, tls_port = :tls_port, + rtp_timeout = :rtp_timeout, + rtp_timeout_hold = :rtp_timeout_hold, letsencrypt_domain = :le_domain, ami_host = :ami_host, ami_port = :ami_port, @@ -1756,6 +1760,8 @@ try { ':local_net' => $local_net, ':udp_port' => $udp_port, ':tls_port' => $tls_port, + ':rtp_timeout' => $rtpTimeout, + ':rtp_timeout_hold' => $rtpHoldTimeout, ':le_domain' => $letsencrypt_domain, ':ami_host' => $ami_host, ':ami_port' => $ami_port, @@ -1767,6 +1773,14 @@ try { ]); SystemChecker::ensureAsteriskIncludes(); + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadModule('res_pjsip.so'); + $ami->reloadModule('res_rtp_asterisk.so'); + } catch (\Throwable $e) { + // Ignore reload error if Asterisk is not running + } if (!empty($payload['new_admin_password'])) { $newPass = (string)$payload['new_admin_password']; diff --git a/public/assets/app.js b/public/assets/app.js index 47e64fc..e0f644d 100644 --- a/public/assets/app.js +++ b/public/assets/app.js @@ -3477,6 +3477,12 @@ function renderSettingsAndDiagnostics() { form.elements['external_ip'].value = s.external_ip || ''; form.elements['udp_port'].value = s.udp_port || 5060; form.elements['tls_port'].value = s.tls_port || 5061; + if (form.elements['rtp_timeout']) { + form.elements['rtp_timeout'].value = (s.rtp_timeout !== undefined && s.rtp_timeout !== null) ? s.rtp_timeout : 30; + } + if (form.elements['rtp_timeout_hold']) { + form.elements['rtp_timeout_hold'].value = (s.rtp_timeout_hold !== undefined && s.rtp_timeout_hold !== null) ? s.rtp_timeout_hold : 0; + } form.elements['ami_host'].value = s.ami_host || '127.0.0.1'; form.elements['ami_port'].value = s.ami_port || 5038; form.elements['ami_user'].value = s.ami_user || 'pbxgui'; diff --git a/public/index.php b/public/index.php index 2f22ce4..b56d198 100644 --- a/public/index.php +++ b/public/index.php @@ -1702,6 +1702,18 @@ $isDevEnv = file_exists(__DIR__ . '/../.dev') +
+ + +

Coupure si aucun flux voix n'est reçu (défaut : 30s).

+
+
+ + +

Délai max d'un appel en attente sans RTP (0 = illimité / désactivé).

+