Merge pull request #312 from outis1one/claude/ionos-script-integration-x32ofw

Fix false TURN allocation failure, add attention recap, one-at-a-time…
This commit is contained in:
Outis
2026-08-11 18:10:27 -04:00
committed by GitHub
2 changed files with 71 additions and 20 deletions
+7 -1
View File
@@ -160,7 +160,13 @@ else
warn "$c: couldn't read cached credentials, skipping live test"
continue
fi
OUT="$(docker exec coturn timeout 10 turnutils_uclient -t -T -u "$_u" -w "$_p" "$TEST_HOST" -p "$COTURN_PORT" 2>&1)"
# Plain UDP only — no -t/-T (TCP/TLS) flags; coturn runs with
# --no-tls --no-dtls (services/coturn.sh), so requesting an
# encrypted/TCP transport here fails the allocation against a
# server that never offered one. See tools/pstn-test-check.sh's
# matching comment — confirmed live this was the actual cause of a
# "Cannot complete Allocation" failure, not a real coturn problem.
OUT="$(docker exec coturn timeout 10 turnutils_uclient -u "$_u" -w "$_p" "$TEST_HOST" -p "$COTURN_PORT" 2>&1)"
RC=$?
if [ "$RC" -eq 0 ]; then
ok "$c: TURN allocation succeeded (credentials + relay range + reachability all confirmed working)"
+64 -19
View File
@@ -20,12 +20,34 @@ set -uo pipefail
PASS=0
WARN=0
FAIL=0
WARN_MSGS=()
FAIL_MSGS=()
ok() { printf ' [OK] %s\n' "$1"; PASS=$((PASS + 1)); }
warn() { printf ' [WARN] %s\n' "$1"; WARN=$((WARN + 1)); }
fail() { printf ' [FAIL] %s\n' "$1"; FAIL=$((FAIL + 1)); }
warn() { printf ' [WARN] %s\n' "$1"; WARN=$((WARN + 1)); WARN_MSGS+=("$1"); }
fail() { printf ' [FAIL] %s\n' "$1"; FAIL=$((FAIL + 1)); FAIL_MSGS+=("$1"); }
section() { printf '\n== %s ==\n' "$1"; }
# One extension's softphone setup block — shared by the full run below and
# the "print again, one at a time" prompt at the end, so the two can't drift.
# Reads SIP_SERVER/TURN_SERVER/TURN_USERNAME/TURN_PASSWORD from the caller's
# scope (set once, further down, before either call site runs).
print_ext_info() {
local ext="$1" pass="$2" transport="$3" ice="$4" port proto
if [ "$transport" = "transport-tls" ]; then port=5061; proto="tls"; else port=5060; proto="udp"; fi
echo " Extension $ext:"
echo " SIP server: $SIP_SERVER"
echo " Username: $ext"
echo " Password: $pass"
echo " Port: $port"
echo " Transport: $proto"
if [ "$ice" = "yes" ] && [ -n "${TURN_SERVER:-}" ]; then
echo " TURN server: $TURN_SERVER"
echo " TURN user: $TURN_USERNAME"
echo " TURN pass: $TURN_PASSWORD"
fi
}
if [ "$(id -u)" -ne 0 ]; then
echo "Run with sudo — needs docker exec and (on some boxes) systemctl/journalctl." >&2
exec sudo bash "$0" "$@"
@@ -187,7 +209,14 @@ else
elif ! docker exec "$COTURN_CONTAINER" which turnutils_uclient &>/dev/null; then
warn "turnutils_uclient not found in $COTURN_CONTAINER — skipping live allocation test"
else
OUT="$(docker exec "$COTURN_CONTAINER" timeout 10 turnutils_uclient -t -T -u "$TURN_USERNAME" -w "$TURN_PASSWORD" 127.0.0.1 -p "${TURN_PORT:-3478}" 2>&1)"
# Plain UDP only — no -t/-T (TCP/TLS) flags. coturn is started with
# --no-tls --no-dtls (services/coturn.sh), so requesting an
# encrypted/TCP transport here just fails the allocation outright
# against a server that never offered one, misreporting a config
# problem that doesn't exist. Confirmed live: this was the actual
# cause of a "Cannot complete Allocation" failure against an
# otherwise fully working coturn instance.
OUT="$(docker exec "$COTURN_CONTAINER" timeout 10 turnutils_uclient -u "$TURN_USERNAME" -w "$TURN_PASSWORD" 127.0.0.1 -p "${TURN_PORT:-3478}" 2>&1)"
if [ $? -eq 0 ]; then
ok "Live TURN allocation succeeded with Asterisk's own configured credentials (user '$TURN_USERNAME')"
else
@@ -255,22 +284,7 @@ else
else
while IFS='|' read -r ext pass transport ice; do
[ -z "$ext" ] && continue
if [ "$transport" = "transport-tls" ]; then
port=5061; proto="tls"
else
port=5060; proto="udp"
fi
echo " Extension $ext:"
echo " SIP server: $SIP_SERVER"
echo " Username: $ext"
echo " Password: $pass"
echo " Port: $port"
echo " Transport: $proto"
if [ "$ice" = "yes" ] && [ -n "$TURN_SERVER" ]; then
echo " TURN server: $TURN_SERVER"
echo " TURN user: $TURN_USERNAME"
echo " TURN pass: $TURN_PASSWORD"
fi
print_ext_info "$ext" "$pass" "$transport" "$ice"
echo ""
done <<< "$DEVICE_INFO"
ok "Printed setup info for $(wc -l <<< "$DEVICE_INFO") extension(s) — same values Sipnetic's"
@@ -362,10 +376,41 @@ fi
# ── Summary ───────────────────────────────────────────────────────────────────
section "Summary"
echo " $PASS passed, $WARN warnings, $FAIL failed."
if [ "${#FAIL_MSGS[@]}" -gt 0 ] || [ "${#WARN_MSGS[@]}" -gt 0 ]; then
echo ""
echo " Needs attention:"
for m in "${FAIL_MSGS[@]:-}"; do
[ -z "$m" ] && continue
echo " [FAIL] $m"
done
for m in "${WARN_MSGS[@]:-}"; do
[ -z "$m" ] && continue
echo " [WARN] $m"
done
fi
echo ""
echo " This covers everything that can be checked without placing a real call"
echo " or sending a real text, plus the provider-side values above that only a"
echo " human can confirm inside the portal itself. For the call/SMS test steps"
echo " and what each result means, see docs/pstn-sms-test-checklist.md."
# ── Optional: reprint softphone setup one extension at a time ────────────────
# The full setup block scrolled past earlier in a long run — offer to show
# it again, one extension per screen, instead of scrolling back for it.
if [ -n "${DEVICE_INFO:-}" ] && [ -t 0 ]; then
echo ""
REPRINT=""
read -r -p " Show softphone setup again, one extension at a time? (y/n): " REPRINT
if [[ "$REPRINT" =~ ^[Yy]$ ]]; then
while IFS='|' read -r ext pass transport ice; do
[ -z "$ext" ] && continue
echo ""
print_ext_info "$ext" "$pass" "$transport" "$ice"
read -r -p " Press Enter for the next extension (Ctrl+C to stop)..." _ignored
done <<< "$DEVICE_INFO"
fi
fi
[ "$FAIL" -eq 0 ]