|
|
|
|
@ -13,7 +13,9 @@ Introduction:
|
|
|
|
|
in VoIP networks for all applications where server-
|
|
|
|
|
side processing of audio is required, for example away
|
|
|
|
|
or pre-call announcements, voicemail, or network side
|
|
|
|
|
conferencing.
|
|
|
|
|
conferencing. Another use case is for interconnecting
|
|
|
|
|
SIP networks, where a back-to-back user agent (B2BUA)
|
|
|
|
|
is required.
|
|
|
|
|
|
|
|
|
|
SEMS can be used to implement simple high performance
|
|
|
|
|
components like announcement servers as building
|
|
|
|
|
@ -22,27 +24,29 @@ Introduction:
|
|
|
|
|
user agent (B2BUA) and state machine scripting functionality,
|
|
|
|
|
complex VoIP services can be realized completely in SEMS.
|
|
|
|
|
|
|
|
|
|
SEMS only supports patent free codecs. That means that codecs
|
|
|
|
|
like g729 won't be supported. On the other hand, SEMS supports
|
|
|
|
|
all important patent free codecs out of the box (g711u, g711a,
|
|
|
|
|
GSM06.10, speex, G726, L16 and iLBC). Integrating other codecs
|
|
|
|
|
in SEMS is very simple (patented or not).
|
|
|
|
|
SEMS supports all important patent free codecs out of the
|
|
|
|
|
box (g711u, g711a, GSM06.10, speex, G.726, L16 and iLBC).
|
|
|
|
|
There is a wrapper for the IPP G.729 codec implementation
|
|
|
|
|
available. Integrating other codecs in SEMS is very simple
|
|
|
|
|
(patented or not).
|
|
|
|
|
|
|
|
|
|
SEMS shows very good performance on current standard
|
|
|
|
|
PC architecture based server systems. It has sucessfully
|
|
|
|
|
been run with 1200 G.711 conference channels on a quad-core
|
|
|
|
|
Intel(R) Xeon at 2GHz (700 GSM, 280 iLBC channels), and up to
|
|
|
|
|
5000 channels on a dual quad Xeon at 2.9GHz. On the
|
|
|
|
|
other hand it also runs on very small devices - for example
|
|
|
|
|
small embedded systems like routers running OpenWRT, for which
|
|
|
|
|
of course the achievable channel count is not that high.
|
|
|
|
|
5000 channels on a dual quad Xeon at 2.9GHz. Its back-to-back
|
|
|
|
|
user agent has been run with up to 19000 TPS on the latter
|
|
|
|
|
machine. On the other hand it also runs on very small devices -
|
|
|
|
|
for example small embedded systems like routers running OpenWRT,
|
|
|
|
|
for which of course the achievable channel count is not that
|
|
|
|
|
high.
|
|
|
|
|
|
|
|
|
|
License:
|
|
|
|
|
|
|
|
|
|
SEMS is free (speech+beer) software. It is licensed under dual
|
|
|
|
|
license terms, the GPL (v2+) and proprietary license. This program
|
|
|
|
|
is released under the GPL with the additional exemption that
|
|
|
|
|
compiling, linking, and/or using OpenSSL is allowed.
|
|
|
|
|
license terms, the GPL (v2+) and proprietary license. This
|
|
|
|
|
program is released under the GPL with the additional exemption
|
|
|
|
|
that compiling, linking, and/or using OpenSSL is allowed.
|
|
|
|
|
|
|
|
|
|
See doc/COPYING for details.
|
|
|
|
|
|
|
|
|
|
@ -50,21 +54,24 @@ Applications:
|
|
|
|
|
|
|
|
|
|
The following applications are shipped with SEMS :
|
|
|
|
|
|
|
|
|
|
Announcements (Prompts, Ringbacktones, Pre-call-prompts):
|
|
|
|
|
* announcement plays an announcement
|
|
|
|
|
|
|
|
|
|
* voicemail records voice messages and sends them
|
|
|
|
|
as email, saves them to a voicebox, or
|
|
|
|
|
both
|
|
|
|
|
|
|
|
|
|
* conference enables many people to talk together
|
|
|
|
|
at the same time
|
|
|
|
|
* ann_b2b pre-call-announcement, plays announcement
|
|
|
|
|
before connecting the callee in B2BUA mode
|
|
|
|
|
|
|
|
|
|
* announce_transfer pre-call-announcement, plays announcement
|
|
|
|
|
and then transfers the caller to the callee
|
|
|
|
|
using REFER
|
|
|
|
|
|
|
|
|
|
* webconference conference application that can be
|
|
|
|
|
controlled from an external program,
|
|
|
|
|
e.g. a website
|
|
|
|
|
* early_announce (pre-call) announcement using early media (183),
|
|
|
|
|
optionally continues the call in B2BUA mode
|
|
|
|
|
|
|
|
|
|
* echo test module to echo the caller's voice
|
|
|
|
|
|
|
|
|
|
* precoded_announce plays preencoded announcements
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Voicemail/Mailbox
|
|
|
|
|
* voicebox users can dial in to the voicebox to check
|
|
|
|
|
their messages
|
|
|
|
|
|
|
|
|
|
@ -75,18 +82,19 @@ Applications:
|
|
|
|
|
an IMAP server. Users can dial in to check
|
|
|
|
|
their messages (simpler version)
|
|
|
|
|
|
|
|
|
|
* ann_b2b pre-call-announcement, plays announcement
|
|
|
|
|
before connecting the callee in B2BUA mode
|
|
|
|
|
|
|
|
|
|
* announce_transfer pre-call-announcement, plays announcement
|
|
|
|
|
and then transfers the caller to the callee
|
|
|
|
|
using REFER
|
|
|
|
|
* voicemail records voice messages and sends them
|
|
|
|
|
as email, saves them to a voicebox, or
|
|
|
|
|
both
|
|
|
|
|
|
|
|
|
|
* early_announce (pre-call) announcement using early media (183),
|
|
|
|
|
optionally continues the call in B2BUA mode
|
|
|
|
|
|
|
|
|
|
* auth_b2b B2BUA app that changes identity and authenticates
|
|
|
|
|
second call leg
|
|
|
|
|
Conferencing
|
|
|
|
|
|
|
|
|
|
* conference enables many people to talk together
|
|
|
|
|
at the same time
|
|
|
|
|
|
|
|
|
|
* webconference conference application that can be
|
|
|
|
|
controlled from an external program,
|
|
|
|
|
e.g. a website
|
|
|
|
|
|
|
|
|
|
* conf_auth collect a PIN number, verify it against an
|
|
|
|
|
XMLRPC authentication server and connects in
|
|
|
|
|
@ -95,18 +103,33 @@ Applications:
|
|
|
|
|
* pin_collect collect a PIN, optionally verify it, and transfer
|
|
|
|
|
the call into a conference
|
|
|
|
|
|
|
|
|
|
Back-to-back User Agent
|
|
|
|
|
|
|
|
|
|
* sbc flexible SBC application, supports
|
|
|
|
|
- identity change
|
|
|
|
|
- header manipulation (filter etc)
|
|
|
|
|
- (multihomed) RTP relay
|
|
|
|
|
- SIP authentication
|
|
|
|
|
- Session timer, call timer, prepaid
|
|
|
|
|
etc
|
|
|
|
|
App development
|
|
|
|
|
|
|
|
|
|
* dsm DSM state machine scripting (use this)
|
|
|
|
|
|
|
|
|
|
* ivr embedded Python interpreter for simple apps
|
|
|
|
|
|
|
|
|
|
* py_sems another embedded Python interpreter
|
|
|
|
|
|
|
|
|
|
Misc
|
|
|
|
|
* echo test module to echo the caller's voice
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* callback reject the call, call back caller later and have
|
|
|
|
|
her enter a number to call in b2bua with media relay
|
|
|
|
|
mode
|
|
|
|
|
|
|
|
|
|
* reg_agent SIP REGISTER to register SEMS' contact to an aor
|
|
|
|
|
|
|
|
|
|
* sw_prepaid_sip prepaid application
|
|
|
|
|
|
|
|
|
|
* call_timer B2BUA, ends the call after a certain time
|
|
|
|
|
|
|
|
|
|
* precoded_announce plays preencoded announcements
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Developing and customizing Applications and services:
|
|
|
|
|
|
|
|
|
|
@ -141,22 +164,14 @@ Requirements:
|
|
|
|
|
|
|
|
|
|
All requirements are optional.
|
|
|
|
|
|
|
|
|
|
1. Python version >= 2.3 for the ivr (embedded python interpreter)
|
|
|
|
|
and py_sems, optional
|
|
|
|
|
|
|
|
|
|
2. flite speech synthesizer for TTS in the ivr, optional
|
|
|
|
|
|
|
|
|
|
3. lame >= 3.95 for mp3 file output, optional. mpg123 for mp3 playback,
|
|
|
|
|
optional
|
|
|
|
|
|
|
|
|
|
4. xmlrpcpp for XMLRPC control, optional
|
|
|
|
|
|
|
|
|
|
5. spandsp library for DTMF detection and PLC, optional
|
|
|
|
|
o Python version >= 2.3 for the ivr (embedded python interpreter)
|
|
|
|
|
and py_sems
|
|
|
|
|
o flite speech synthesizer for TTS in the ivr
|
|
|
|
|
o lame >= 3.95 for mp3 file output, mpg123 for mp3 playback
|
|
|
|
|
o spandsp library for DTMF detection and PLC
|
|
|
|
|
(SEMS has its own implementations for both)
|
|
|
|
|
|
|
|
|
|
6. libZRTP SDK (http://zfoneproject.com) for ZRTP, optional
|
|
|
|
|
|
|
|
|
|
7. libev for jsonrpc, optional
|
|
|
|
|
o libZRTP SDK (http://zfoneproject.com) for ZRTP
|
|
|
|
|
o libev for jsonrpc
|
|
|
|
|
|
|
|
|
|
How to get started with SEMS:
|
|
|
|
|
|
|
|
|
|
@ -164,85 +179,41 @@ How to get started with SEMS:
|
|
|
|
|
http://ftp.iptel.org/pub/sems/, unpack and install it
|
|
|
|
|
using the usual make && make install. After installation, the
|
|
|
|
|
configuration file /usr/local/etc/sems/sems.conf needs to be
|
|
|
|
|
adapted.
|
|
|
|
|
adapted, especially the parameters "sip_ip", "media_ip",
|
|
|
|
|
"load_plugins", "application".
|
|
|
|
|
|
|
|
|
|
On debian, you can add the iptel.org SEMS repository to
|
|
|
|
|
On Debian and Ubuntu, add the SEMS repository from OBS to
|
|
|
|
|
/etc/apt/sources.list:
|
|
|
|
|
deb http://ftp.iptel.org/pub/sems/debian lenny free
|
|
|
|
|
deb-src http://ftp.iptel.org/pub/sems/debian lenny free
|
|
|
|
|
and install SEMS from binary packages with:
|
|
|
|
|
$ apt-get install sems sems-python-modules
|
|
|
|
|
If you want to build SEMS from source on debian, see below.
|
|
|
|
|
|
|
|
|
|
On Fedora, simply do
|
|
|
|
|
deb http://download.opensuse.org/repositories/home:/team-sems/Debian_5.0 ./
|
|
|
|
|
and install SEMS packages with:
|
|
|
|
|
wget http://download.opensuse.org/repositories/home:/team-sems/Debian_5.0/Release.key \
|
|
|
|
|
-O - |apt-key add -
|
|
|
|
|
apt-get update && apt-get install sems
|
|
|
|
|
If you want to build SEMS from source on debian/derivatives, see below.
|
|
|
|
|
|
|
|
|
|
On Fedora/CentOS, simply do
|
|
|
|
|
$ sudo yum install sems
|
|
|
|
|
and sems package will be installed.
|
|
|
|
|
|
|
|
|
|
You can also follow one of the tutorials
|
|
|
|
|
linked from the SEMS homepage
|
|
|
|
|
(e.g. http://www.iptel.org/howto_sems_voicemail).The Application
|
|
|
|
|
Modules Documentation page then gives an overview of the application
|
|
|
|
|
modules that come with SEMS
|
|
|
|
|
You can also follow one of the tutorials linked from the SEMS homepage
|
|
|
|
|
(e.g. http://ftp.iptel.org/pub/sems/doc/current/howtostart_noproxy.html).
|
|
|
|
|
The Application Modules Documentation page then gives an
|
|
|
|
|
overview of the application modules that come with SEMS
|
|
|
|
|
(http://ftp.iptel.org/pub/sems/doc/current/AppDoc.html).
|
|
|
|
|
|
|
|
|
|
If you are interested in writing your own applications, the
|
|
|
|
|
application development tutorial is a good start
|
|
|
|
|
(http://www.iptel.org/sems/sems_application_development_tutorial),
|
|
|
|
|
together with the design overview
|
|
|
|
|
together with the design overview
|
|
|
|
|
(http://www.iptel.org/files/semsng-designoverview.pdf) and the example
|
|
|
|
|
applications (apps/examples/).
|
|
|
|
|
|
|
|
|
|
Installation:
|
|
|
|
|
|
|
|
|
|
1. Download SEMS
|
|
|
|
|
Download the source tarball from ftp://ftp.iptel.org/pub/sems/,
|
|
|
|
|
or get the newest version through svn:
|
|
|
|
|
$ svn checkout svn://svn.berlios.de/sems/trunk
|
|
|
|
|
-or-
|
|
|
|
|
$ svn checkout http://svn.berlios.de/svnroot/repos/sems/trunk
|
|
|
|
|
|
|
|
|
|
2. Compile SEMS
|
|
|
|
|
|
|
|
|
|
$ make all
|
|
|
|
|
$ make install
|
|
|
|
|
|
|
|
|
|
Notice: you don't need to execute 'make install' if you want to
|
|
|
|
|
run SEMS from the source tree, but in this case some paths
|
|
|
|
|
in the config files will need to be adapted.
|
|
|
|
|
If you want to install to a different prefix than /usr/local,
|
|
|
|
|
use PREFIX=/some/other/prefix
|
|
|
|
|
|
|
|
|
|
For detailed instructions for some modules, have a look at
|
|
|
|
|
doc/COMPILING as well.
|
|
|
|
|
|
|
|
|
|
3. Look at the default configuration file whether it fits your need:
|
|
|
|
|
|
|
|
|
|
If you installed SEMS with 'make install', the configuration
|
|
|
|
|
is at '/usr/local/etc/sems/sems.conf'.
|
|
|
|
|
Else make your own using sems.conf.sample.
|
|
|
|
|
|
|
|
|
|
4. Start SEMS:
|
|
|
|
|
|
|
|
|
|
If you installed SEMS with 'make install', sems can be
|
|
|
|
|
found at '/usr/local/sbin/sems'.
|
|
|
|
|
If you need help starting 'sems', try 'sems -h'.
|
|
|
|
|
|
|
|
|
|
5. Using SEMS
|
|
|
|
|
|
|
|
|
|
SEMS needs to be told from the many possible applications that are
|
|
|
|
|
loaded which one to run. You can simply set the application
|
|
|
|
|
in sems.conf, e.g. application=conference. You can also define an
|
|
|
|
|
application mapping, i.e. numbers (R-URIs) that will be mapped to
|
|
|
|
|
applications, see the explanation of 'application' parameter in
|
|
|
|
|
sems.conf.
|
|
|
|
|
|
|
|
|
|
Alternatively, the SIP-stack-SER can be configured in ser-sems.cfg
|
|
|
|
|
to send all calls directly to one application, in that case the line
|
|
|
|
|
if(!t_write_unix("/tmp/sems_sock","sems/app_headers"))
|
|
|
|
|
in ser-sems.cfg could be changed to e.g.
|
|
|
|
|
if(!t_write_unix("/tmp/sems_sock","conference"))
|
|
|
|
|
A sample ser.cfg file in this style can be found at
|
|
|
|
|
http://ftp.iptel.org/pub/sems/ser.cfg
|
|
|
|
|
SEMS needs to be told from the many possible applications that are
|
|
|
|
|
loaded which one to run. You can simply set the application
|
|
|
|
|
in sems.conf, e.g. application=conference. You can also define an
|
|
|
|
|
application mapping, i.e. numbers (R-URIs) that will be mapped to
|
|
|
|
|
applications, see the explanation of 'application' parameter in
|
|
|
|
|
sems.conf.
|
|
|
|
|
|
|
|
|
|
Creating packages on debian (ubuntu, ...):
|
|
|
|
|
|
|
|
|
|
@ -316,6 +287,7 @@ Authors:
|
|
|
|
|
Andreas Granig
|
|
|
|
|
Andrey Samusenko
|
|
|
|
|
Andriy I Pylypenko
|
|
|
|
|
Anton Zagorskiy
|
|
|
|
|
B. Oldenburg
|
|
|
|
|
Balint Kovacs
|
|
|
|
|
Bogdan Pintea
|
|
|
|
|
@ -325,6 +297,7 @@ Authors:
|
|
|
|
|
Jeremy A
|
|
|
|
|
Jiri Kuthan
|
|
|
|
|
Juha Heinanen
|
|
|
|
|
Matthew Williams
|
|
|
|
|
Ovidiu Sas
|
|
|
|
|
Peter Lemenkov
|
|
|
|
|
Peter Loeppky
|
|
|
|
|
@ -333,9 +306,10 @@ Authors:
|
|
|
|
|
Rui Jin Zheng
|
|
|
|
|
Tom van der Geer
|
|
|
|
|
Ulrich Abend
|
|
|
|
|
(if you want to be added or removed from this list, please mail to stefan.sayer@gmail.com)
|
|
|
|
|
(if you feel you should be on this list, please mail to stefan.sayer@gmail.com)
|
|
|
|
|
|
|
|
|
|
Special thanks to IPTEGO GmbH and iptelorg GmbH for sponsoring development of SEMS.
|
|
|
|
|
Special thanks to IPTEGO GmbH, iptelorg GmbH and TelTech Systems Inc. for
|
|
|
|
|
sponsoring development of SEMS.
|
|
|
|
|
|
|
|
|
|
Contributions:
|
|
|
|
|
|
|
|
|
|
|