Self-hosted softswitch / SIP media server.
Find a file
Andrey Volk c1bb5c6ab3
Some checks failed
Build and Distribute / Preconfig (push) Successful in 1s
CI / Unit-tests pre-config (push) Failing after 1s
Build and Distribute / Get Nonce for token (push) Has been cancelled
Windows / x64 (push) Has been cancelled
CI / Unit-tests D-in-D (push) Has been cancelled
CI / Scan Build (push) Has been cancelled
MacOS Build / Build MacOS (push) Has been cancelled
CI / Unit-tests (group ) (push) Has been cancelled
Build and Distribute / Issue temporary token (push) Has been cancelled
Build and Distribute / DEB-PUBLIC (push) Has been cancelled
Build and Distribute / Revoke temporary token (push) Has been cancelled
Build and Distribute / Publish build data to meta-repo (push) Has been cancelled
CI / Validate Unit-tests (push) Has been cancelled
[Core, mod_commands] Interface allowlist (#3086)
* [core] Add interface allowlist to gate module app/api registration

Adds an optional, presence-activated allowlist in switch.conf.xml that
controls which modules may register application / api / json_api /
chat-application interfaces. With no <interface-allowlist> configured
nothing is enforced; when at least one <allow> entry is present, only
listed interfaces register at load time and all others are refused (the
module still loads and switch_loadable_module_process still returns
SUCCESS -- the blocked interface is simply never exposed).

Entries match at three levels of precision:
  mod_commands            - whole module
  mod_commands.system     - any interface named "system"
  mod_commands.system.api - a specific type (app|api|json_api|chat_app)

Enforcement lives in switch_loadable_module_process() so every module, at
boot and at runtime `load`, is subject to the same policy. This gives
operators a way to disable the "system"/"spawn" shell-exec API commands
(and equivalents) system-wide.

Also adds the `interface_allowlist_dump [modules] [plain]` API, which
walks the loaded modules and prints their interfaces in the allowlist key
format so the current state can be captured and pruned offline into config.

* [mod_commands] Add tests for the interface allowlist

New test_interface_allowlist boots the core with an active
<interface-allowlist> (conf_interface_allowlist/) that permits only a
couple of mod_commands interfaces, then loads mod_commands and verifies:

- listed commands register and run (status, version) while unlisted and
  shell-exec commands are refused (system, spawn, uptime) -- refusal
  surfaces as switch_api_execute returning FALSE / command-not-found,
  with the command function never invoked;
- a "module.name.type" entry gates by type: the API "status" loads while
  the JSON API of the same name stays blocked;
- interface_allowlist_dump prints the config format in its xml, modules
  and plain variants, and reflects module capabilities (system appears in
  the dump even though it was blocked from registering).

* [config] Fix interior -- in interface-allowlist comment breaking XML parse

The explanatory comment used -- as em-dash pairs. The XML parser treats
-- inside a comment as the comment close, causing an "unclosed <!--"
error that prevents the whole freeswitch.xml from parsing (boot and
reloadxml both fail). Replace the -- pairs with ordinary punctuation.

* update .gitignore

* [core] Warn when interface-allowlist section is present but parses no entries

Co-authored-by: Chris Rienzo <chris@signalwire.com>
2026-08-05 18:44:33 +03:00
.github [libvpx] Windows: Use NASM instead of Yasm 2026-07-10 21:05:00 +03:00
build [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
clients/flex Fix some typos (most found by codespell) 2021-02-24 13:59:11 +01:00
cmake_modules [core] remove apr-util from tree 2022-08-29 20:17:02 +03:00
conf [Core, mod_commands] Interface allowlist (#3086) 2026-08-05 18:44:33 +03:00
debian Bump sofia-sip library requirement to version 1.13.18 (#3093) 2026-08-04 15:50:24 +03:00
docker [Core] Upgrade FreeSWITCH to use PCRE2 library. Be aware of breaking changes. 2025-07-15 18:26:17 +03:00
docs [mod_rayo, mod_ssml, iksemel] Remove from tree 2024-12-31 13:43:48 +03:00
dtd xmllint --dtdvalid freeswitch_dialplan.dtd /usr/local/freeswitch/conf/default_context.xml >>/dev/null 2007-11-01 14:59:32 +00:00
fonts FS-7506: Add default fonts to tree 2015-05-28 12:47:19 -05:00
fscomm Fix some typos (most found by codespell) 2021-02-24 13:59:11 +01:00
htdocs FS-8545 #resolve [Improve controls for screen share] 2015-11-16 15:54:43 -06:00
images [core] add stb_image to read more supported picture formats 2021-10-23 22:00:03 +03:00
libs [SpanDSP] Update to v3.1.1 and fix build on Windows. (#3090) 2026-08-02 20:33:59 +03:00
scripts [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
src [Core, mod_commands] Interface allowlist (#3086) 2026-08-05 18:44:33 +03:00
support-d [support-d] Add deadlock.py to tree. 2024-05-07 10:24:07 +03:00
tests/unit [Core] switch_sockaddr_info_get() will not resolve if the hostname is an IP address. Add new switch_is_ip_address() API. Add a unit-test. (#3055) 2026-06-12 16:13:47 +03:00
w32 [SpanDSP] Update to v3.1.1 and fix build on Windows. (#3090) 2026-08-02 20:33:59 +03:00
web add back empty dirs 2010-04-01 21:00:45 -04:00
yum FS-8648: incorrect url's in yum repos 2015-12-15 17:02:49 +00:00
.clang-format Add .clang-format rules 2014-12-26 17:22:20 +00:00
.gitattributes [Build-System] Remove Sofia-Sip library from the FreeSWITCH tree and use packages instead. 2020-08-03 23:46:45 +04:00
.gitconfig Add git configuration to ignore errors from git fsck 2020-05-01 20:42:38 +04:00
.gitignore [Core, mod_commands] Interface allowlist (#3086) 2026-08-05 18:44:33 +03:00
.mailmap map emails 2014-08-01 14:47:38 -05:00
acinclude.m4 [mod_rayo, mod_ssml, iksemel] Remove from tree 2024-12-31 13:43:48 +03:00
bootstrap.sh [mod_rayo, mod_ssml, iksemel] Remove from tree 2024-12-31 13:43:48 +03:00
cc.sh add smaller banner for teeny tiny terminals 2012-09-24 14:59:09 -05:00
ci.sh [mod_cdr_mongodb] Remove from tree (#2992) 2026-03-06 01:26:20 +03:00
cluecon.tmpl FI-393 [fs_cli banner] this commit changes the text on the fs_cli banner 2018-06-14 19:38:05 +00:00
cluecon2.tmpl FI-393 [fs_cli banner] this commit changes the text on the fs_cli banner 2018-06-14 19:38:05 +00:00
cluecon2_small.tmpl add smaller banner for teeny tiny terminals 2012-09-24 14:59:09 -05:00
cluecon_small.tmpl add smaller banner for teeny tiny terminals 2012-09-24 14:59:09 -05:00
configure.ac Bump sofia-sip library requirement to version 1.13.18 (#3093) 2026-08-04 15:50:24 +03:00
devel-bootstrap.sh Changed permissions for devel-bootstrap.sh 2010-10-13 14:18:38 -07:00
freeswitch-sounds-en-ca-june.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-en-us-allison.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-en-us-callie.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-fr-ca-june.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-music.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-pt-BR-karina.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-ru-RU-elena.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
freeswitch-sounds-sv-se-jakob.spec [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
Freeswitch.2017.sln [SpanDSP] Update to v3.1.1 and fix build on Windows. (#3090) 2026-08-02 20:33:59 +03:00
Freeswitch.2017.sln.bat [Build-System] Fix Visual Studio detection logic to use the latest installed when building FreeSWITCH or sound packages. 2020-05-25 16:41:16 +04:00
freeswitch.spec Bump sofia-sip library requirement to version 1.13.18 (#3093) 2026-08-04 15:50:24 +03:00
INSTALL test 2013-04-04 20:52:47 -05:00
LICENSE [mod_cdr_mongodb] Remove from tree (#2992) 2026-03-06 01:26:20 +03:00
Makefile.am [Core] Introduce switch_image.c 2026-07-10 19:38:46 +03:00
msbuild.cmd [Build-System] Fix Visual Studio detection logic to use the latest installed when building FreeSWITCH or sound packages. 2020-05-25 16:41:16 +04:00
README.md [Build-system] Migrate music/sounds from files.freeswitch.org to https://github.com/freeswitch/freeswitch-sounds/releases (#3062) 2026-06-30 23:33:14 +03:00
SECURITY.md Create SECURITY.md 2023-02-17 15:24:03 -05:00
swig_common.i FS-6061 --resolve 2013-12-23 22:43:06 +05:00

FreeSWITCH

FreeSWITCH is a Software Defined Telecom Stack enabling the digital transformation from proprietary telecom switches to a versatile software implementation that runs on any commodity hardware. From a Raspberry PI to a multi-core server, FreeSWITCH can unlock the telecommunications potential of any device. Combined with our hosted cloud platform, SignalWire, FreeSWITCH can interconnect with the outside world and scale to any size.

Visit https://signalwire.com or https://github.com/signalwire for more info.

Getting Started

FreeSWITCH is available on Github in source code format. You can checkout the development branch and build for many popular platforms including Linux, Windows, MacOSX and BSD. There is an issue tracker and pull request system available as part of the repo online.

See https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/ for more detailed instructions.

Additional Help

If you need assistance or have an interest in using a commercially supported build, you can contact coreteam@freeswitch.com to learn about professional services to support your project.

Voice-over-IP services - SIP / SMS - App Integrations

SignalWire is the primary sponsor of the FreeSWITCH project and was founded by the original developers of FreeSWITCH. SignalWire provides scalable services to enhance and scale your project such as SMS, SIP, Serverless Application hosting as well as programmable telecom. mod_signalwire which is distributed in this code base allows you to instantly pair with SignalWire and extend your FreeSWITCH.

Documentation

The main index for documentation is available at:

Release notes:

Install from packages

Step by step tutorials to install FreeSWITCH from packages:

Build from source

Example Dockerfiles to build FreeSWITCH and dependencies from source:

Step by step tutorials to build FreeSWITCH with provided dependency packages:

How to build Debian packages

Downloads

Contributions

GitHub pull requests are the recommended way to contribute to the FreeSWITCH source code:

Community

Slack is our chat system where the developers, the FreeSWITCH team, and the most active users are present. This is the place to get answers faster and chat with other users in real time. All you need to do is enter your email and verify it on the Slack signup page and you are ready to join in the discussion!

Slack Community:

Mailing list (ARCHIVED):

Thank you for using FreeSWITCH!