From 0035804b38f1e903b764600c9830688d30c7d358 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 20 Jul 2026 16:16:34 +0000 Subject: [PATCH 1/2] Fix false "TLS: NOT LOADED" startup banner in Easy Asterisk entrypoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pjsip show transports was checked once, immediately after "core show version" first responded — but res_pjsip can take a moment longer to finish binding its transports, so the check would sometimes read an empty transport list and print "NOT LOADED" even though transport-tls came up correctly a second later (confirmed live: TLS SIP traffic on 5061 in the container logs right after the misleading banner). Poll for up to 10s instead of checking once, matching the existing core-show-version wait pattern further up the same script. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_015X1jRGHwrvovz2qkhKfDZi --- vendor/easy-asterisk/docker/entrypoint.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/vendor/easy-asterisk/docker/entrypoint.sh b/vendor/easy-asterisk/docker/entrypoint.sh index b62caa9..1181c3e 100755 --- a/vendor/easy-asterisk/docker/entrypoint.sh +++ b/vendor/easy-asterisk/docker/entrypoint.sh @@ -479,15 +479,19 @@ for i in $(seq 1 60); do sleep 1 done -# Verify PJSIP transports are listening +# Verify PJSIP transports are listening. res_pjsip finishes binding its +# transports a beat after "core show version" first responds, so a single +# immediate check can catch it mid-startup and misreport TLS as down even +# though it comes up a second later — poll for a few seconds before giving up. tls_ok=false udp_ok=false -if asterisk -rx "pjsip show transports" 2>/dev/null | grep -q "transport-tls"; then - tls_ok=true -fi -if asterisk -rx "pjsip show transports" 2>/dev/null | grep -q "transport-udp"; then - udp_ok=true -fi +for i in $(seq 1 10); do + transports_output=$(asterisk -rx "pjsip show transports" 2>/dev/null) + echo "$transports_output" | grep -q "transport-tls" && tls_ok=true + echo "$transports_output" | grep -q "transport-udp" && udp_ok=true + $tls_ok && $udp_ok && break + sleep 1 +done # Check if port 5061 is actually bound tls_listen="" From 834436d10127ff70da8635b168e5d534fe009030 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 20 Jul 2026 17:25:35 +0000 Subject: [PATCH 2/2] Fix dialplan never rebuilding after web admin device/room changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The web admin's device functions (add_device, delete_device, rename_device, change_device_category) only ever called "asterisk -rx pjsip reload" — they never regenerated extensions.conf's [intercom] context, so newly added SIP endpoints could register but could never call each other or dial into rooms ("extension not found in context 'intercom'"). The room functions (create_room, delete_room, rename_room, update_room_members) already tried to fix this correctly by shelling out to `easy-asterisk --rebuild-dialplan`, but that flag was never actually wired up — main() at the bottom of the script ignores all arguments and always launches the interactive menu, so every one of those calls was a silent no-op too. Fixed both: added real --rebuild-dialplan argument handling that calls the existing rebuild_dialplan() bash function non-interactively, and added the same subprocess call to the four device functions that were missing it entirely. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_015X1jRGHwrvovz2qkhKfDZi --- vendor/easy-asterisk/easy-asterisk-v0.10.0.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/vendor/easy-asterisk/easy-asterisk-v0.10.0.sh b/vendor/easy-asterisk/easy-asterisk-v0.10.0.sh index bc63904..958c8ce 100755 --- a/vendor/easy-asterisk/easy-asterisk-v0.10.0.sh +++ b/vendor/easy-asterisk/easy-asterisk-v0.10.0.sh @@ -4340,6 +4340,7 @@ def delete_device(extension): with open(PJSIP_CONF, 'w') as f: f.writelines(new_lines) subprocess.run(['asterisk', '-rx', 'pjsip reload'], capture_output=True) + subprocess.run(['/usr/local/bin/easy-asterisk', '--rebuild-dialplan'], capture_output=True) return True, "Device deleted" return False, "Device not found" @@ -4413,6 +4414,7 @@ def rename_device(extension, new_name): with open(PJSIP_CONF, 'w') as f: f.writelines(new_lines) subprocess.run(['asterisk', '-rx', 'pjsip reload'], capture_output=True) + subprocess.run(['/usr/local/bin/easy-asterisk', '--rebuild-dialplan'], capture_output=True) return True, "Device renamed" return False, "Device not found" @@ -4525,6 +4527,7 @@ def change_device_category(extension, new_category): with open(PJSIP_CONF, 'w') as f: f.writelines(new_lines) subprocess.run(['asterisk', '-rx', 'pjsip reload'], capture_output=True) + subprocess.run(['/usr/local/bin/easy-asterisk', '--rebuild-dialplan'], capture_output=True) return True, "Category changed" return False, "Device not found" @@ -4774,6 +4777,7 @@ qualify_frequency=30 subprocess.run(['asterisk', '-rx', 'pjsip reload'], capture_output=True) subprocess.run(['chown', 'asterisk:asterisk', PJSIP_CONF], capture_output=True) + subprocess.run(['/usr/local/bin/easy-asterisk', '--rebuild-dialplan'], capture_output=True) return True, {'extension': extension, 'password': password, 'name': name} @@ -6926,4 +6930,14 @@ main() { show_main_menu } +# Non-interactive entry point used by the web admin (Python) after any +# device/room change — regenerates extensions.conf's [intercom] context +# and reloads it. Without this, PJSIP endpoints register fine but calls +# between them fail with "extension not found" since nothing else ever +# rebuilds the dialplan after the initial container boot. +if [[ "${1:-}" == "--rebuild-dialplan" ]]; then + rebuild_dialplan quiet + exit 0 +fi + main "$@"