Commit Graph
95 Commits
Author SHA1 Message Date
Outis 8342483f7e Merge pull request #27 from outis1one/claude/asterisk-vpn-mobile-issue-Nt958
Claude/asterisk vpn mobile issue nt958
2026-02-23 20:22:11 -05:00
Claude f71bec27e5 Fix coturn crash: image runs as nobody, can't create pidfile
The coturn/coturn:latest image sets USER nobody:nogroup. On startup,
turnserver tries to create /var/run/turnserver.pid which nobody can't
write to, causing an immediate crash (the 2.2s "Error" in compose).

Fix: add user: root to the coturn service. Since we already use
network_mode: host, the container has broad host access anyway.

Also adds DETECT_EXTERNAL_IP=yes which is the image's native way
to auto-detect and set --external-ip, replacing our shell script.

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-24 00:27:46 +00:00
Claude 8a14b3eded Remove shell entrypoint override from coturn - use native image entrypoint
The coturn/coturn image has its own docker-entrypoint.sh that handles
arg parsing. Overriding it with /bin/sh -c adds a failure point.
Now passing args as a clean list directly to the native entrypoint.

Also drops --external-ip for now (added back once coturn starts).

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-23 20:18:22 +00:00
Claude 37765f4569 Rewrite coturn service to fix startup crash
Three changes to fix coturn failing to start:

1. Use environment vars instead of mixing Compose interpolation
   (${VAR}) with shell escaping ($$ARGS) in the command - the
   old approach was fragile and could produce broken shell scripts

2. Remove --no-loopback-peers - since Asterisk runs on the same
   host (network_mode: host), coturn must allow relay to localhost
   otherwise it refuses to relay media to Asterisk

3. Health check: redirect output to /dev/null to avoid noise

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-23 20:09:02 +00:00
Claude a5e6e18015 Use turnutils_stunclient for coturn healthcheck
The coturn/coturn Alpine image doesn't include ss or netstat.
Use turnutils_stunclient (included in the coturn image) which
actually verifies the STUN server is responding, not just that
a port is open. Also add start_period to avoid false failures
during startup.

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-23 20:04:38 +00:00
Claude 854261bf98 Fix coturn healthcheck: use netstat instead of ss
The coturn/coturn Docker image is Alpine-based and doesn't include
iproute2 (which provides ss). This caused the healthcheck to fail
immediately, marking coturn as unhealthy and preventing the asterisk
container from starting due to its service_healthy dependency.

Alpine's busybox includes netstat, so use that instead.

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-23 18:42:30 +00:00
Outis 60544ecc3c Merge pull request #26 from outis1one/claude/asterisk-vpn-mobile-issue-Nt958
Claude/asterisk vpn mobile issue nt958
2026-02-23 12:31:51 -05:00
Claude 8934d71391 Add full TURN relay support for reliable calls from any network
Problem: Calls via FQDN work "sometimes" because STUN-only mode fails
behind strict NAT (cellular, Proton VPN, hotel WiFi, corporate firewalls).
STUN tells clients their public IP, but can't relay media when direct
UDP paths are blocked. TURN relays media as a fallback.

Changes:

coturn (docker-compose.yml):
- Upgraded from STUN-only to full STUN+TURN relay
- Uses long-term credential mechanism (--lt-cred-mech)
- Credentials shared between coturn and Asterisk automatically
- Relay port range 49152-49252 (configurable, ~50 concurrent relayed calls)
- Always-on (removed --profile stun gate)
- Conditional --external-ip (only set when PUBLIC_IP is provided)

Entrypoint (docker/entrypoint.sh):
- Auto-detects public IP (ifconfig.me → icanhazip.com → api.ipify.org)
- Auto-generates TURN password on first startup (saved to config)
- Configures rtp.conf with icesupport + stunaddr + turnaddr + credentials
- Updates pjsip.conf external_*_address if public IP changes
- Always enables ICE, STUN, and TURN for Docker deployments

Main script (easy-asterisk-v0.10.0.sh):
- Added TURN_ENABLED, TURN_SERVER, TURN_USERNAME, TURN_PASSWORD to
  load_config/save_config
- repair_core_configs: rtp.conf now includes turnaddr/turnusername/turnpassword
  when TURN is enabled
- Bash device creation: Docker mode defaults to FQDN (TLS) for all new devices
- Python device creation: reads TURN_ENABLED, auto-selects FQDN in Docker
- Main menu shows TURN status

.env.example:
- Comprehensive documentation for every setting
- DOMAIN_NAME is the only required setting
- Port forwarding requirements clearly listed
- TURN credentials and relay port range documented

The result: `docker compose up -d` gives you a fully working PBX where
any SIP client on any network can connect reliably via FQDN:5061.

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-21 16:09:50 +00:00
Claude d05f1f9e3b Refactor entire project for Docker-native operation
Complete Docker-first refactor of the 6,800-line management script:

Core Architecture:
- Added is_docker() detection (/.dockerenv + /proc/1/cgroup check)
- Added asterisk_running() helper replacing all systemctl is-active calls
- Moved restart_asterisk_safe() to top-level with Docker/bare-metal branches
- Added webadmin_running(), start_webadmin(), stop_webadmin(), restart_webadmin()
  for process-based web admin management (replaces systemd service)

Functions Refactored (Docker-aware):
- fix_asterisk_systemd(): no-op in Docker (no systemd)
- install_asterisk_packages(): skips apt in Docker (pre-installed)
- install_baresip_packages(): skips in Docker (no local audio client)
- open_firewall_ports(): skips ufw in Docker (host responsibility)
- configure_asterisk(): skips systemctl enable in Docker
- enable_client_services(): skips entirely in Docker (no kiosk client)
- configure_baresip(): skips entirely in Docker
- configure_local_client(): shows error with guidance to use mobile clients
- run_client_diagnostics(): redirects to vpn-diagnostics
- fix_audio_manually(): not available in Docker (no audio hardware)
- uninstall_menu(): shows Docker-specific reset options
- manual_update_asterisk(): shows Docker rebuild instructions
- create_web_admin_service(): no-op in Docker (process-managed)
- web_admin_menu(): uses start/stop/restart_webadmin() instead of systemctl

Menu System:
- show_main_menu(): Docker-specific status display (Asterisk, Web Admin,
  VPN ICE status) with streamlined menu (no Client Settings option)
- submenu_install(): Docker shows Configure/Reset instead of Install/Uninstall
- submenu_tools(): Docker shows Room Directory, Update, VPN Diagnostics,
  DNS Whitelist (hides audio tools that need hardware)

Entrypoint:
- Proper signal trapping (SIGTERM/SIGINT) for clean shutdown
- Generates all Asterisk configs with STUN/ICE support from env vars
- Creates default device categories on first run
- Starts web admin as background process with env-based config

Dockerfile:
- Added lsof dependency (needed for port management)
- Added STUN port 3478 exposure
- Ensured /.dockerenv marker exists

Backward compatible: bare-metal installs work exactly as before.

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-21 14:39:38 +00:00
Claude 9caa795a78 Add Docker containerization, VPN STUN/ICE support, and DNS whitelist tools
- Dockerfile: Containerized Asterisk PBX with Ubuntu 24.04 base,
  all dependencies pre-installed, health checks, and volume persistence
- docker-compose.yml: Asterisk service with host networking (required for
  RTP port range) + optional self-hosted coturn STUN server via --profile stun
- docker/entrypoint.sh: Auto-generates configs, certs, and starts
  Asterisk in foreground with web admin in background
- scripts/vpn-diagnostics.sh: Detects VPN interfaces, checks PJSIP
  transport config, tests STUN reachability, analyzes NAT type, and
  provides STUN/TURN recommendations for third-party VPNs
- scripts/dns-whitelist.sh: Documents all domains needed per network mode
  (LAN/VPN vs FQDN), per component (server, Sipnetic, Linphone), with
  --check mode to test DNS resolution and reachability
- easy-asterisk script: Added VPN STUN/ICE menu (option 12 in Server
  Settings) with self-hosted coturn, Google STUN, or custom STUN server
  options. LAN/VPN devices now get ice_support=yes when VPN ICE is
  enabled. Web admin Python code also respects VPN_ICE_ENABLED config.

Self-hosted coturn in STUN-only mode eliminates all external DNS
dependencies - everything operates by IP address, ideal for
DNS-filtered environments.

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-21 13:08:34 +00:00
Claude cd5e989d2f Fix VPN mobile connectivity and WiFi-to-cellular audio handoff
- Add local_net entries to PJSIP transports in LAN/VPN mode when
  VLAN/VPN subnets are configured, so Asterisk recognizes VPN traffic
  as local and mobile devices no longer appear offline on VPN
- Auto-detect VPN interfaces (Tailscale, WireGuard, OpenVPN) and
  suggest their subnets in the VLAN/VPN configuration menu
- Add rtp_keepalive=15, rtp_timeout=120, and rtp_timeout_hold=120
  to mobile device endpoints to maintain NAT mappings during
  WiFi-to-cellular transitions (fixes one-way audio)
- Reduce qualify_frequency from 60s to 30s for faster re-registration
  detection when mobile devices change networks
- Update README with VPN troubleshooting and one-way audio guidance
  including client-side fixes for Sipnetic and Linphone

https://claude.ai/code/session_01Vm6NLaQuzM4VosAotqS1q8
2026-02-21 12:31:49 +00:00
outis1one 18b38bff26 Merge pull request #25 from outis1one/claude/fix-extension-connectivity-QNhcq
Add rename for rooms/categories, fix stop command output
2025-12-23 16:51:16 -05:00
Claude 86c3049612 Add rename for rooms/categories, fix stop command output
Stop command improvements:
- Shows actual netstat and systemctl commands being run
- Displays output from each command
- Runs netstat checks between stop attempts
- More transparent debugging

UI improvements:
- Consistent 100px width for action selects and buttons
- Sort dropdown visible in devices header

New features:
- Rename button for rooms (uses prompt dialog)
- Rename button for categories (uses prompt dialog)
- PUT /api/rooms/{ext} endpoint for renaming
- PUT /api/categories/{id} endpoint for renaming
- Python functions: rename_room(), rename_category()
2025-12-23 21:00:53 +00:00
outis1one 674572ac6e Merge pull request #24 from outis1one/claude/fix-extension-connectivity-QNhcq
Add sort dropdown and consistent button widths to devices page
2025-12-23 12:35:38 -05:00
Claude 5eee217f50 Add sort dropdown and consistent button widths to devices page
- Add sort dropdown: Extension, Name, Category, Status (Online first), Transport
- Consistent width for action selects (95px) and buttons (65px)
- Extract renderDevices() function for re-sorting without API calls
- Store statusCache globally for sort comparisons
2025-12-23 17:34:32 +00:00
outis1one 66f25a3d6a Merge pull request #23 from outis1one/claude/fix-extension-connectivity-QNhcq
Major web admin enhancements for full client management
2025-12-23 09:24:00 -05:00
Claude 67e03beddb Major web admin enhancements for full client management
Stop command fix:
- Use double-stop pattern (stop, check port, stop again if needed)
- Print commands being run for debugging

Web Admin UI improvements:
- Sort devices by extension number
- Add Category dropdown to change device category from device list
- Rooms page: card layout with vertical member list, delete room button
- Categories page: card layout with vertical device list, move-to dropdown
- Add Room modal and functionality
- Add Category modal and functionality
- Consistent formatting across all pages (card layout, tables)
- Remove from room/category via buttons on those pages

New API endpoints:
- PUT /api/devices/{ext}/category - change device category
- POST /api/rooms - create new room
- DELETE /api/rooms/{ext} - delete room
- POST /api/categories - create new category
- DELETE /api/categories/{id} - delete category

Python functions added:
- change_device_category()
- create_room(), delete_room()
- create_category(), delete_category()

Goal: Web admin can now fully replace the script for client management
2025-12-23 14:22:19 +00:00
outis1one 8d523cc23c Merge pull request #22 from outis1one/claude/fix-extension-connectivity-QNhcq
Fix stop command and add Caddy reverse proxy support
2025-12-23 08:51:48 -05:00
Claude af4507e211 Fix stop command and add Caddy reverse proxy support
Stop command fixes:
- Change Restart=always to Restart=on-failure to prevent respawning
  when intentionally stopped (only restart on crashes)
- Simplify stop logic: stop -> wait -> kill remaining
- Add debug output when stop fails
- Start command now stops existing instance first

Caddy reverse proxy support:
- New menu option 7: "Reverse Proxy Setup (Caddy)"
- Can disable internal auth when using Caddy's basicauth + HTTPS
- Environment variable WEBADMIN_AUTH_DISABLED passed to Python
- Shows Caddyfile example with basicauth and reverse_proxy config
- Auth setting persisted in config file
2025-12-23 13:47:54 +00:00
outis1one 5ba490aea9 Merge pull request #21 from outis1one/claude/fix-extension-connectivity-QNhcq
Fix stop command and add room management to web admin
2025-12-23 08:30:12 -05:00
Claude 614c4fb93a Fix stop command and add room management to web admin
- Fix stop command: mask service before stopping to prevent
  Restart=always from respawning the process
- Add "Add to Room" dropdown on device list to add clients to rooms
- Show clickable member badges in rooms (click to remove from room)
- Categories page now displays devices grouped under each category
- Add API endpoints for room membership management (POST/DELETE)
2025-12-23 12:57:21 +00:00
outis1one e14a6d282d Merge pull request #20 from outis1one/claude/fix-extension-connectivity-QNhcq
Enhance web admin with rename, better stop, status detection
2025-12-22 23:06:57 -05:00
Claude a4c9b2c770 Enhance web admin with rename, better stop, status detection
Stop command improvements:
- Added verbose progress output
- Uses pgrep to check if process is running
- Multiple kill attempts with escalating force
- Falls back to lsof if fuser unavailable
- Verifies process is stopped

Transport detection:
- If media_encryption=sdes/dtls found without explicit transport,
  assume TLS (for older device configs)

Rename functionality:
- Added rename_device() Python function
- Added do_PUT API handler
- Added rename modal in HTML
- Added showRenameModal/renameDevice JavaScript functions
- Rename button added next to Delete in device list

Status detection:
- Fixed parsing of 'pjsip show endpoints' output
- Looks for Endpoint: header then Contact: line with Avail/NonQual
- Matches bash script logic
2025-12-23 03:57:55 +00:00
outis1one a111dca2be Merge pull request #19 from outis1one/claude/fix-extension-connectivity-QNhcq
Fix web admin stop and device status detection
2025-12-22 22:14:47 -05:00
Claude 85fa7711c3 Fix web admin stop and device status detection
Stop command improvements:
- Kill remaining processes with pkill after systemctl stop
- Force kill (-9) if processes still running after 1 second
- Release port with fuser -k as final cleanup

Status detection fix:
- Parse 'pjsip show endpoints' output correctly
- Look for Endpoint: header to get extension number
- Check Contact: lines for 'Avail' or 'NonQual' status
- Matches the bash script's detection logic
2025-12-23 03:13:43 +00:00
outis1one 461bda9ff2 Merge pull request #18 from outis1one/claude/fix-extension-connectivity-QNhcq
Always regenerate web admin script on start
2025-12-22 22:09:07 -05:00
Claude 30018e3fa7 Always regenerate web admin script on start
Previously the script was only created if it didn't exist,
so updates to the parser weren't being applied. Now the
Python script is regenerated every time to ensure the
latest version is used.
2025-12-23 03:07:04 +00:00
outis1one a493561900 Merge pull request #17 from outis1one/claude/fix-extension-connectivity-QNhcq
Fix device listing parser to match bash script logic
2025-12-22 21:40:16 -05:00
Claude 9f6033fd03 Fix device listing parser to match bash script logic
The Python parser was waiting for password= which comes much later
in the auth section. Rewrote to match the simpler bash approach:
- Find device comment line, parse name/category/AA tag
- Find next [extension] line, add device to list
- Update transport/encryption if found in following lines

This matches how show_registered_devices() works in bash.
2025-12-23 02:28:45 +00:00
outis1one 868bea5835 Merge pull request #16 from outis1one/claude/fix-extension-connectivity-QNhcq
Fix web admin port persistence and device listing
2025-12-22 16:43:21 -05:00
Claude ccb5a5560f Fix web admin port persistence and device listing
Port persistence:
- Add WEB_ADMIN_PORT to save_config() and load_config()
- Save config when port is changed in web_admin_menu
- Remove hardcoded initialization that overrode saved config

Device listing fix:
- Rewrite get_devices() parser to properly track state across sections
- Fix regex to handle variable spacing in device comment lines
- Continue tracking device through auth section to capture password
- Devices now properly listed in web admin interface
2025-12-22 21:39:16 +00:00
outis1one e3cd06e042 Merge pull request #15 from outis1one/claude/fix-extension-connectivity-QNhcq
v0.10.0: Fix extension management bugs, add web admin interface
2025-12-22 16:09:46 -05:00
Claude bca50e2dde v0.10.0: Fix extension management bugs, add web admin interface
Fixes:
- Extension deletion now properly removes all sections (endpoint, auth, aor)
  using awk for reliable multi-section removal
- Extension renaming now preserves AA tags correctly
- LAN/VPN devices now explicitly use transport=transport-udp to prevent
  TLS fallback issues that caused clients to go offline immediately
- LAN devices now have media_encryption=no to prevent SRTP negotiation issues

New Features:
- Web Admin interface for browser-based client management
  - View device status (online/offline) in real-time
  - Add/delete devices via web interface
  - View rooms and categories
  - HTTP Basic authentication with SHA256 password hashing
  - Access at http://server:8080/clients
  - Accessible via Server Settings > Web Admin menu

Verified:
- PTT is correctly disabled by default (only enabled when user configures it)
2025-12-22 21:04:02 +00:00
outis1one d7fbac2cf7 Merge pull request #14 from outis1one/claude/add-vlan-menu-01CdWLAFQQEnuGYYN7WLgFN5
Claude/add vlan menu 01 cd wlafqq enu gyyn7 w lg fn5
2025-12-10 21:23:09 -05:00
Claude f8e800c869 Use SCRIPT_VERSION variable instead of hardcoded version numbers
Changes:
- Update main menu header to use ${SCRIPT_VERSION} variable
- Update pjsip.conf header comment to use ${SCRIPT_VERSION}
- Update Baresip instructions header to use ${SCRIPT_VERSION}
- Changed Baresip heredoc from single-quoted to allow variable expansion

This ensures version display always matches the SCRIPT_VERSION variable
at line 44, eliminating hardcoded version mismatches.
2025-12-11 02:20:27 +00:00
outis1one 5ce63c58fa Create README.md 2025-12-10 19:43:08 -05:00
outis1one df4a699f18 Create LICENSE 2025-12-09 11:30:32 -05:00
outis1one 6db8c4fd87 Delete LICENSE.md 2025-12-09 11:30:09 -05:00
outis1one 4f3c81051c Create LICENSE.md 2025-12-09 11:29:49 -05:00
outis1one f75ab28876 Delete LICENSE 2025-12-09 11:29:33 -05:00
Claude 1b44b5b2ad Combine Linphone and Baresip setup instructions in device output
Changes:
- Show both Linphone and Baresip setup in add_device_menu() output
- Remove separate menu requirement - both apps shown together
- Change language from "/e/OS-specific" to generic "if Linphone has audio issues"
- Update domain examples from sip.mydomain.com to asterisk.mydomain.com
- Add note that credentials work for other SIP apps (Zoiper, sipnetic)
- Verify no user FQDN hardcoded in script

This provides immediate access to both SIP app configurations when adding
a device, with clear headers distinguishing between the two approaches.
2025-12-09 14:15:06 +00:00
Claude 2a999981b3 Update Baresip instructions with accurate manual setup process
Based on actual user experience configuring Baresip Android app.
Previous instructions were incorrect/incomplete.

KEY CHANGES:

1. Removed /e/OS-specific language:
   - Now generic: "Use if Linphone has audio issues"
   - Applicable to all privacy ROMs, not just /e/OS

2. Accurate two-step setup process:
   - Step 1: Add account with just SIP URI (ext@domain)
   - Step 2: Edit account to add auth username, password, proxy
   - This matches actual app behavior

3. Critical field corrections:
   - Auth Username: JUST extension number (not ext@domain)
   - Outbound Proxy: JUST domain (not sip:server:port format)
   - Media Encryption: srtp (select from dropdown)

4. No provisioning URL:
   - Clarified Baresip doesn't support remote provisioning
   - Must configure manually (unlike Linphone)

5. Added top bar icon reference:
   - ☰ = Menu, ✓ = Save, ⋮ = Options
   - 📞 = Call, 🔊 = Speaker, 🔇 = Mute, ✕ = Hangup

6. Default action clarification:
   - May not exist in all Baresip versions
   - Provided alternatives: long-press or phone icon

7. Comprehensive troubleshooting:
   - Registration failure solutions
   - Dialing issues
   - Audio problems
   - Screen-off audio (rare with Baresip)

8. Extension dialing guidance:
   - Method 1: Just the number (101, 202)
   - Method 2: Full format (ext@domain) if needed

9. File renamed:
   - .conf → .txt for better readability on phones

Output format:
- Detailed step-by-step instructions
- Quick reference summary at end
- Troubleshooting section
- Icon reference guide

This addresses all user-reported configuration issues and provides
accurate, tested setup instructions based on real app usage.
2025-12-09 13:53:29 +00:00
Claude 5f46fe188b Add Baresip configuration generator for /e/OS compatibility
Baresip works significantly better than Linphone on /e/OS for background
audio operation. Adding dedicated provisioning support.

NEW FEATURE: Baresip Config Generator
- Added create_baresip_config() function in Provisioning Manager
- Generates account configuration with full setup instructions
- Provides both config file and manual entry instructions
- Includes /e/OS-specific permission guidance

Key Benefits of Baresip on /e/OS:
- Better background audio handling than Linphone
- Works with screen off without special hacks
- Lightweight and efficient
- Handles /e/OS microphone permissions more reliably

Configuration Generator Creates:
- Account line in baresip format with all parameters
- Manual entry instructions for Baresip app
- Audio settings recommendations (OpenSL ES)
- Default action setup (Call, not Message)
- Extension dialing guidance
- /e/OS permission instructions

Usage:
- Server Settings → Provisioning Manager → Create Baresip Config
- Enter extension, password, display name
- Get config file with complete setup instructions
- Download via HTTP provisioning or copy to phone

Menu Updates:
- Provisioning Manager option 4: Create Baresip Config
- Option numbers renumbered (Status=5, Directory=6, Troubleshoot=7)

This addresses the persistent /e/OS audio issues by providing a better
SIP client alternative that actually works with /e/OS's privacy model.
2025-12-09 13:19:18 +00:00
Claude 663314a801 Fix version display and remove remaining COTURN status line
- Updated header from 'Easy Asterisk v1.23' to 'v0.9.9'
- Updated pjsip.conf comment from v1.23 to v0.9.9
- Removed 'COTURN: Not installed' status line from main menu
- All COTURN references now completely removed from UI

User-visible changes:
- Main menu now correctly shows 'Easy Asterisk v0.9.9'
- Status section only shows Server and Client (no COTURN line)
- pjsip.conf generated with correct version comment
2025-12-08 20:55:50 +00:00
Claude 541d2ab22d Add /e/OS audio troubleshooting and enhanced linphone.xml for privacy ROMs
PROBLEM ADDRESSED:
Users with /e/OS (eFoundation OS) experience no audio transmission unless
Linphone app has focus. This is due to /e/OS's strict privacy controls
preventing background microphone access.

CHANGES:

1. Enhanced linphone.xml template:
   - Added keep_service_alive=1 for service persistence
   - Added start_at_boot=1 for automatic startup
   - Added audio section with speaker routing
   - Force audio_route_speaker=1 for background operation
   - Updated instructions to reference /e/OS troubleshooting

2. New troubleshoot_eos_audio() function:
   - Comprehensive 9-step troubleshooting guide
   - Linphone app audio settings configuration
   - /e/OS privacy settings walkthrough
   - Advanced Privacy feature management
   - Network permission configuration
   - Autostart and battery optimization settings
   - XML provisioning verification
   - Speaker mode workaround
   - Nuclear option: disable privacy features temporarily
   - Alternative SIP app suggestions (Zoiper, CSipSimple, Wave)
   - Testing methodology
   - Technical explanation of the issue
   - Community resources and forum links

3. Added menu item in Provisioning Manager:
   - Option 6: "Troubleshoot /e/OS Audio Issues"
   - Easily accessible from provisioning workflow

TECHNICAL DETAILS:
The issue occurs because /e/OS restricts background microphone access
even with permissions granted. The OS suspends audio capture when apps
lose focus. Workarounds include forcing speaker mode, disabling specific
privacy features, or using alternative SIP clients with better /e/OS
compatibility.

TESTING STEPS:
1. Make call with Linphone in foreground (audio works)
2. Press Home button
3. If audio stops, issue is confirmed
4. Follow troubleshooting guide in order

This addresses privacy-focused Android ROM compatibility issues and
provides users with clear, actionable solutions.
2025-12-08 20:40:31 +00:00
Claude 9d57c32901 Major upgrade to v0.9.9 with VLAN, Provisioning, and UI improvements
This is a comprehensive update that removes COTURN and adds several
major features focused on direct LAN/VPN/port-forwarding connections.

VERSION & LICENSE:
- Updated version from v0.9.8.7 to v0.9.9
- Changed license to GNU General Public License v3.0
- Updated copyright header and license information

REMOVED FEATURES:
- Removed all COTURN/TURN relay server code and dependencies
- Removed TURN configuration variables from config system
- Removed TURN firewall rules from UFW configuration
- Removed IP update timer for COTURN
- Focus shifted to direct connections via LAN/VPN/Port-Forwarding

NEW FEATURE: VLAN Configuration
- Added "Configure VLAN Subnets" menu item in Server Settings
- Created configure_vlan_subnets() function with interactive prompts
- Support for multiple VLAN subnets to prevent 30-second call drops
- Updated pjsip.conf generation with multiple local_net entries
- Server IP address now documented in transport configurations
- Added comprehensive split-horizon DNS setup guide
- Includes ctrld.toml examples, dnsmasq configuration, UFW rules
- Provides OPNSense firewall rules and DHCP configuration guidance

NEW FEATURE: Provisioning Manager
- Added provisioning_manager_menu() with full HTTP server management
- Setup HTTP/HTTPS provisioning on ports 8088/8089
- Automatic http.conf configuration with TLS support
- Created symlink management (/usr/share/asterisk <-> /var/lib/asterisk)
- Fixes 404 errors on Ubuntu/Debian systems
- Interactive linphone.xml creator with server-specific settings
- Built-in nano editor for linphone.xml modifications
- Includes Android audio focus fix (prevents pause on screen off)
- Battery optimization instructions for Android devices
- Provisioning status display with file listings

NEW FEATURE: Manual Update System
- Added manual_update_asterisk() function with automatic backups
- Creates timestamped backups before updates
- Automatic rollback on update failure
- Provides rollback instructions for manual recovery
- Update safety with configuration preservation

NEW FEATURE: Room Directory
- Added show_room_directory() visual display
- Distinguishes Ring Groups (📞) from Page Groups (📢)
- Shows extension, members, timeout, and type for each room
- Educational descriptions of group types

INFRASTRUCTURE CHANGES:
- Added provisioning firewall ports (8088/8089) to UFW
- Reorganized code structure with clear section headers
- Added PROVISIONING_DIR constant for /var/lib/asterisk/static-http
- Cleaned up configuration variable management
- Improved menu organization and numbering

MENU UPDATES:
- Server Settings: Added Provisioning Manager (#10)
- Tools Menu: Added Room Directory (#4) and Manual Update (#5)
- Removed COTURN menu item from Server Settings
- Renumbered VLAN Subnets to option #9

DOCUMENTATION:
- Split-horizon DNS guide with ctrld configuration
- dnsmasq setup instructions for local DNS responses
- UFW firewall rules for DNS security
- OPNSense VLAN firewall configuration examples
- Complete DHCP setup guidance for multi-VLAN environments

This update represents a major shift toward direct networking
approaches while providing better VLAN support and client provisioning
capabilities for production deployments.
2025-12-08 20:31:37 +00:00
outis1one abe71111d2 Merge pull request #13 from outis1one/claude/add-vlan-menu-01CdWLAFQQEnuGYYN7WLgFN5
Add VLAN configuration support to prevent call drops
2025-12-08 15:20:23 -05:00
Claude 26cec84c56 Add VLAN configuration support to prevent call drops
This update adds comprehensive VLAN support to prevent the common
issue of calls dropping after 30 seconds in multi-VLAN environments.

Changes:
- Added new menu item "Configure VLAN Subnets" in Server Settings
- Created configure_vlan_subnets() function to manage VLAN configuration
- Updated pjsip.conf generation to include multiple local_net entries
- Added server IP address as comment in transport sections for reference
- Persist VLAN settings (HAS_VLANS, VLAN_SUBNETS) in config file
- Updated script version to v0.9.8.8

Technical details:
- The generate_pjsip_conf() function now builds multiple local_net
  entries when VLANs are configured
- Each VLAN subnet is added as a separate local_net line in the
  transport configuration
- Server IP is detected and documented in transport sections
- Transports continue to bind to 0.0.0.0 for all-interface listening

This fixes the issue where Asterisk would treat devices on different
VLANs as external connections, causing NAT issues and call drops.
2025-12-08 20:17:48 +00:00
outis1one ad1b50b579 Add files via upload 2025-12-06 18:37:57 -05:00
outis1one d9fb51161a Update easy-asterisk-v0.9.8.7.sh 2025-12-06 18:37:31 -05:00