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
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
David Sugar 0f156e0461 Modernize changelog 3 months ago
.idea/inspectionProfiles Code cleanup 4 years ago
.vscode Version update, jemalloc change, and issue template updates 4 years ago
Common quick cleanup 3 years ago
Connect quick cleanup 3 years ago
Database more db refactoring 3 years ago
Desktop lambda cleanup 3 years ago
Dialogs lambda cleanup 3 years ago
Resources css fix 3 years ago
Server more systemd cleanup 3 years ago
Translations Build framework for language localization 4 years ago
docker Changed docker file 4 years ago
etc no systemd 3 years ago
testdata coverage and testing 3 years ago
utils fix auth 3 years ago
vendor Modern vendoring with tcp server support (!1) 3 months ago
xdg updated specs and ignore 4 years ago
.gitattributes added inspection profile for idea 4 years ago
.gitignore Use md license text 3 months ago
.rubocop.yml ruby improvements 3 years ago
CHANGELOG.md Modernize changelog 3 months ago
CMakeLists.txt Use md license text 3 months ago
CONTRIBUTING.md Modern vendoring with tcp server support (!1) 3 months ago
Doxyfile.in Misc things 4 years ago
LICENSE.md Use md license text 3 months ago
README.md Modern vendoring with tcp server support (!1) 3 months ago
TODO.md Initial session messaging support 4 years ago
callgraph.sh callgraph doxygen script 4 years ago
config.hpp.in General cleanup and some packaging related fixes 4 years ago
desktop.plist.in General cleanup and some packaging related fixes 4 years ago
desktop.rc.in General cleanup and some packaging related fixes 4 years ago
server.rc.in General cleanup and some packaging related fixes 4 years ago
setup.iss.in sysv ipc added 4 years ago

README.md

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: https://codeberg.org/gnutelephony/sipwitchqt/.

Dependencies

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.

Deploy

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.

Documentation

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 "CONFIG.md" and/or "SETUP.md" once development is further along. Design notes may be added as "DESIGN.md" or in CONTRIBUTING.md in the future.

Support

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 tychosoft@gmail.com. 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.

Testing

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 127.0.0.1:4060 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