The FreeSWITCH design – modular, scalable, and stable
The design goal of FreeSWITCH is to provide a modular, scalable system around a stable switching core, and to provide a robust interface for developers to add to and control the system. Various elements in FreeSWITCH are independent of each other and do not have much knowledge about how the other parts are working, other than what is provided in what are called exposed functions. The functionality of FreeSWITCH can also be extended with loadable modules, which tie a particular external technology into the core.
FreeSWITCH has many different module types that revolve around the central core, much like satellites orbiting a planet. The list includes:
Module type: |
Purpose: |
---|---|
Endpoint |
Telephone protocols like SIP/H.323 and POTS lines |
Application |
Performs a task such as playing audio or setting data |
Application Programming Interface (API) |
Exports a function that takes text input and returns text output, which could be used across modules or from an external connection |
Automated Speech Recognition (ASR) |
Interfaces with speech recognition systems |
Chat |
Bridges and exchanges various chat protocols |
Codec |
Translates between audio formats |
Dialplan |
Parses the call details and decides where to route the call |
Directory |
Connects directory information services, such as LDAP, to a common core lookup API |
Event handlers |
Allows external programs to control FreeSWITCH |
File |
Provides an interface to extract and play sound from various audio file formats |
Formats |
Plays audio files in various formats |
Languages |
Programming language interfaces used for call control |
Loggers |
Controls logging to the console, system log, or log files |
Say |
Strings together audio files in various languages to provide feedback to say things like phone numbers, time of day, spell words, and so on |
Text-To-Speech (TTS) |
Interfaces with text-to-speech engines |
Timers |
POSIX or Linux kernel timing in applications |
XML Interfaces |
Uses XML for Call Detail Records (CDRs), RADIUS, CURL, LDAP, RPC, and/or SCGI |
The following image shows what the FreeSWITCH architecture looks like and how the modules orbit the core of FreeSWITCH:
By combining the functionality of the various module interfaces, FreeSWITCH can be configured to connect IP phones, POTS lines, and IP-based telephone services. It can also translate audio formats and interfaces with a custom menu system, which you can create by yourself. You can even control a running FreeSWITCH server from another machine. Let's start by taking a closer look at a pair of important module types.