A complete, modular and scalable SIP server, includes a push gateway, to deliver SIP incoming calls or text messages on mobile device platforms where push notifications are required to receive information when the app is not active in the foreground.
Deploy this app to Linode with a free $100 credit!
Flexisip is a complete, modular and scalable SIP server suite written in C++14, comprising proxy, presence and group chat functions. It also includes a push gateway, to deliver SIP incoming calls or text messages on mobile device platforms where push notifications are required to receive information when the app is not active in the foreground.
Flexisip instances can be deployed on server machines to run a SIP VoIP service. The free linphone.org SIP service has run on Flexisip since 2011, and enables Linphone users to create SIP addresses in order to connect with each other.
It can also be embedded and run perfectly on small hardware systems.
Copyright © Belledonne Communications
Flexisip is dual licensed, and can be licensed and distributed: - under a GNU Affero GPLv3 license for free (see COPYING file for details) - under a proprietary license, for closed source projects. Contact Belledonne Communications for any question about costs and services.
Dependency | Description | Mandatory | Enabled by default |
---|---|---|---|
OpenSSL | TLS stack. | X | |
LibNgHttp2 | HTTP2 stack. | X | |
libsrtp2 | Secure RTP (SRTP) and UST Reference Implementations | X | |
SQLite3 | Library for handling SQlite3 file | X | |
libmysql-client | Client library for MySQL database. | X | |
Hiredis | Redis DB client library, used for Registrar DB and communications between Flexisip instances of a same cluster. (-DENABLE_REDIS=YES) | X | |
Protobuf | Needed for migration from legacy registrar database format. (-DENABLE_PROTOBUF=YES) | X | |
NetSNMP | SNMP library, used for SNMP support. (-DENABME_SNMP=YES) | X | |
XercesC | XML parser. (-DENABLE_PRESENCE=YES) | X | |
jsoncpp | JSON parsing and writing (-DENABLE_B2BUA=YES) | X |
Create a build directory and configure the project:
mkdir ./build
cmake -S . -B ./build
make -C ./build -j<njobs>
Check CMakeLists.txt to know the list of the available options and their default value. To change an option, you just need to invoke CMake again by specifying the option you need to change only. For instance, to disable the presence server feature:
cmake ./build -DENABLE_PRESENCE=OFF
make -C ./build -j<njobs>
You may also use ccmake or cmake-gui utilities to configure the project interactively:
ccmake ./build
make -C ./build -j<njobs>
This procedure will make a unique RPM package containing Flexisip and all its dependencies and the according package for debug symbols.
The following options are relevant for packaging:
CMAKE_INSTALL_PREFIX |
The prefix where the package will installed the files. |
SYSCONF_INSTALL_DIR |
Where Flexisip expect to find its default configuration directory. |
CMAKE_BUILD_TYPE |
Set this to “RelWithDebInfo” to have debug symbols in the debuginfo package. |
CPACK_GENERATOR |
Select the kind of package. “RPM” or “DEB”. |
cmake ./build -DCMAKE_INSTALL_PREFIX=/opt/belledonne-communications -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSYSCONF_INSTALL_DIR=/etc -DCPACK_GENERATOR=RPM
make -C ./build -j<njobs> package
The packages are now available in ./build directory.
A docker image can be build from sources with command:
docker build -t flexisip --build-arg='njobs=<njobs>' -f docker/flex-from-src .
Flexisip can also be compiled with Nix. You can obtain a development shell with: (from the root of the repository)
nix-shell
Nix makes it easier to have a reproducible development environment on any Linux distribution, and doesn't interfere with other installed tooling. It is just an additional, optional way to build flexisip.
At the exception of shell.nix
, .nix
files should live inside the nix/
folder.
All .nix
files should be formatted with nixpkgs-fmt
.
Flexisip needs a configuration file to run correctly.
Use ./flexisip --dump-all-default > flexisip.conf
to make a documented
default configuration file.
With sofia-sip, you have the choice between msg_dup()
and msg_copy()
,
sip_from_dup()
and sip_from_copy()
, etc.
The difference isn't well documented in sofia-sip documentation but it is
important to understand that:
- *_dup()
makes a copy of the structure plus all included strings inside.
- *_copy()
just makes a copy of the structure, not the strings pointed by it. These functions are
dangerous; use *_dup()
versions in doubt.
Please login to review this project.
No reviews for this project yet.
Comments (0)
Please login to join the discussion on this project.