This is an experimental re-think of my original gnu sipwitch architecture. This package includes both a server and a desktop sip user/messaging agent based on work in GFC antisipate, and may eventually include a mobile client too
Go to file
David Sugar 0f156e0461 Modernize changelog 2022-02-25 02:36:29 -05:00
.idea/inspectionProfiles Code cleanup 2018-09-22 07:51:03 +00:00
.vscode Version update, jemalloc change, and issue template updates 2018-11-03 12:51:22 +00:00
Common quick cleanup 2019-06-07 09:14:48 -04:00
Connect quick cleanup 2019-06-07 09:14:48 -04:00
Database more db refactoring 2018-12-22 08:25:10 -05:00
Desktop lambda cleanup 2018-12-23 19:10:00 -05:00
Dialogs lambda cleanup 2018-12-23 19:10:00 -05:00
Resources css fix 2018-12-22 08:10:03 -05:00
Server more systemd cleanup 2019-05-03 09:42:49 -04:00
Translations Build framework for language localization 2018-03-18 22:31:24 +00:00
docker Changed docker file 2018-04-22 15:17:53 +02:00
etc no systemd 2019-05-03 09:40:55 -04:00
testdata coverage and testing 2018-12-23 17:26:39 -05:00
utils fix auth 2018-12-24 09:57:41 -05:00
vendor Modern vendoring with tcp server support (!1) 2022-02-25 07:12:40 +00:00
xdg updated specs and ignore 2018-07-08 12:59:58 -04:00
.gitattributes added inspection profile for idea 2018-09-16 12:44:37 -04:00
.gitignore Use md license text 2022-02-25 02:26:37 -05:00
.rubocop.yml ruby improvements 2018-12-22 13:50:18 -05:00 Modernize changelog 2022-02-25 02:36:29 -05:00
CMakeLists.txt Use md license text 2022-02-25 02:26:37 -05:00 Modern vendoring with tcp server support (!1) 2022-02-25 07:12:40 +00:00 Misc things 2018-03-26 22:43:43 +00:00 Use md license text 2022-02-25 02:26:37 -05:00 Modern vendoring with tcp server support (!1) 2022-02-25 07:12:40 +00:00 Initial session messaging support 2018-03-03 08:16:05 -05:00 callgraph doxygen script 2018-03-05 15:40:00 +01:00 General cleanup and some packaging related fixes 2018-06-02 19:54:31 +00:00 General cleanup and some packaging related fixes 2018-06-02 19:54:31 +00:00 General cleanup and some packaging related fixes 2018-06-02 19:54:31 +00:00 General cleanup and some packaging related fixes 2018-06-02 19:54:31 +00:00 sysv ipc added 2018-12-08 15:51:02 -05:00

What is SipWitchQt

This is a new enterprise sip server which extends sipwitch branding and re-thinks my original sipwitch architecture. This new server is written using Qt and C++11. This package also introduces a new general purpose daemon service architecture for Qt rather than using Qt Service, and this is embedded thru src/Common.pri. This package includes a desktop sip user/messaging agent based on work in GFC antisipate, and will include a mobile client as well.

One key difference between SipWitchQt and GNU SIPWitch is that all of the management to configure and control this new server is now contained in a simple Sql backend database. Qt's Sql plugin support is used for generic access to backend databases such as MySQL, SQLite, etc. Frictionless call support is to be achieved by isolating backend db queries to a separate thread and by smart caching of db records for active extensions. By using a generic Sql backend, it also becomes very easy to write web based administrative and control front ends for SipWitchQt.

Development of this project is managed from:


SipWitchQt should build with any Qt version later than 5.5. Official binary installers will be built from latest LTS (currently 5.9). SipWitchQt clients and servers also require libeXosip2 5.3 or later to build. Because we build libeXosip2 with tcp server support enabled, this is now automatically build for you from the vendoring directory.

The vendored eXosip2 requires both openssl development headers and libc-ares to be installed. For server zeroconfig support you should install libavahi-client-dev. For systems using systemd, you should install libsystemd-dev.

For building on MacOS you can use homebrew. The libraries are linked and used thru the /usr/local/opt/xxx paths to avoid conflicts when building with the Qt company online installer and provided libraries. This solves the problem where things like the brew version of libjpeg breaking linkage for the Qt distributed libs.

For building on Microsoft Windows, the repo contains a vendored and lightly modified eXosip2. To get openssl to build with exosip2 you must use VCPKG, set the CMAKE_TOOLCHAIN_FILE as directed, and install an appropriate triple for openssl, such as vcpkg install openssl:w64-windows. In the past we supplied a vendored openssl build kit, and we no longer are doing this. Release builds for windows also automatically create an installer for Microsoft Windows using inno setup.


This project is not yet far enough along for deployment or use, but I do have some specific plans for this. For GNU/Linux systems, I will support both init scripts and systemd units, which will be added to a new top level etc directory in the source tree, along with things like a logrotate.d file.

In addition to os distribution packages and port files, I am looking at providing docker instances. The idea is to be able to deploy and use SipWitchQt anywhere; on premise or in the cloud. To better support this, the SipWitchQt docker image should also be composable into a stack that includes a separated database server and web interface. The web interface will be worked on as a separate project to be called switchroom. The idea is a complete and easily managed deploy anywhere enterprise VoIP phone system. For windows users and possibly mobile, hockeyapp may be used to distribute testing builds.


Generation of source documentation can be done using doxygen with the provided Doxyfile using the docs build target. This is setup to generate pdf and latex documentation as well as html pages, an xcode docset, a qt assistant stream, and a windows help file. From qtcreator you can add a "docs" make target to your project (debug) build steps, and enable it to create or update documentation.

When enabling the docs make target from QtCreator itself you will be given warnings for undocumented classes as issues. This makes it easy to find and complete documentation for the header files. You can also use "make docs" from command line builds.

Source documentation is meant only to document the class and design architecture of the sipwitchqt code base. User and administration documentation will be written separately as something like "" and/or "" once development is further along. Design notes may be added as "" or in in the future.


At the moment I do not have infrastructure to offer support. I have published this, and perhaps as of this writing, other telephony packages, to develop best practices for producing a new generation of telephony services. I do maintain an email address for public contact for all similarly published Tycho Softworks projects as Merge requests may be accepted when I happen to have a chance and connectivity to do so. I also will be using the codeberg sipwitchqt issue tracker for bug reporting and project management.


The cmake debug config builds a test server that uses the source "testdata/" directory to store databases and running files. This is used to provide a stable and repeatable test environment. An alternate userdata/ directory can be created as private per-developer test environment. Currently the server binds for ipv4, so you have to use for localhost if localhost is set to ::1. I am also adding SIPp test cases for the sipwitch server in the testdata directory.

Release installation

To install the server properly in usual directories on Linux and use provided systemd sipwitchd.service fike need to run cmake -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var/lib -DCMAKE_INSTALL_PREFIX=/usr . Or if you change directories you will need to change the service file in /usr/lib/systemd/system/sipwitchd.service