FreeSWITCH is the PBX engine. Its configuration is managed by ICTCore and stored in /etc/freeswitch. Every time you save in the portal, ICTCore writes the dialplan and directory as static XML and reloads FreeSWITCH. Don’t hand-edit those files, because ICTCore regenerates them.
Key Ports
| Port | Protocol | Purpose |
|---|---|---|
| 5080 | UDP/TCP | SIP signaling (a single webrtc profile) |
| 5066 / 5067 | WS / WSS | WebRTC, internal only. The browser softphone reaches it through Apache at https://<host>/ws/ |
| 8021 | TCP | ESL (Event Socket, localhost only) |
| 16384–32768 | UDP | RTP media streams |
There’s no SIP profile on 5060.
ESL (Event Socket Layer)
ICTCore connects to FreeSWITCH via ESL for real-time call control. The credentials are in the [freeswitch] section of /usr/ictcore/etc/ictcore.conf. The password is random and set at install, so there’s no default:
[freeswitch]
host = 127.0.0.1
port = 8021
password = <random value generated at install>
Test ESL access with that password:
fs_cli -H 127.0.0.1 -P 8021 -p "$ESL_PASS"
Useful fs_cli Commands
A bare fs_cli fails, because it needs the ESL password. Copy it from ictcore.conf into ESL_PASS first:
ESL_PASS='<password from ictcore.conf>'
fs_cli -p "$ESL_PASS" -x "sofia status profile webrtc reg" # Registered phones and softphones
fs_cli -p "$ESL_PASS" -x "sofia status gateway" # Trunk registration status
fs_cli -p "$ESL_PASS" -x "show calls" # Active calls
fs_cli -p "$ESL_PASS" -x "reloadxml" # Reload dialplan XML
fs_cli -p "$ESL_PASS" -x "sofia status" # SIP profile status
Avoid reload mod_sofia on a live system. It drops every active call.
Log Files
tail -f /var/log/freeswitch/freeswitch.log
Set log level in fs_cli:
/log 7 # debug
/log 4 # warning (production default)
Media Storage
| Path | Content |
|---|---|
/var/lib/freeswitch/recordings/ |
Call recordings |
/var/lib/freeswitch/storage/voicemail/ |
Voicemail messages |