+------------------------------------+
          | SIP express media server  - README |
          +------------------------------------+


Introduction:

 SEMS is a free, high performance, extensible media server 
 for SIP (RFC3261) based VoIP services. 

 It is intended to complement proxy/registrar servers
 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. 

 SEMS can be used to implement simple high performance 
 components like announcement servers as building 
 blocks of more complex applications, or, using its powerful 
 framework for application development including back-to-back 
 user agent (B2BUA) functionality, complex VoIP services
 can be realized completely in SEMS. 
 
 The following applications are shipped with SEMS :

  * announcement:  plays an announcement

  * voicemail:     records voice messages and sends them 
                   as email

  * 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 

  * echo:          test module to echo the caller's voice
 
  * mailbox:       auto-attendant that saves voicemails into
                   an IMAP server. Users can dial in to check
                   their messages

  * 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

  * early_announce: (pre-call) announcement using early media (183)

  * conf_auth:     collect a PIN number, verify it against an 
                   XMLRPC authentication server and connects in 
                   B2BUA mode

  * pin_collect:   collect a PIN, optionally verify it, and transfer
                   the call into a conference

 alongside a set of example applications intended to help 
 development of custom services, including a calling card 
 application, a traffic generator, a component to control the 
 media server via XMLRPC, and announcements played from DB. 

 SEMS' core implements basic call and audio processing, 
 and loads plug-ins which extend the system. Audio
 plug-ins enable new codecs and file formats, 
 application plug-ins implement the services' logic.
 Other modules called component modules provide 
 functionality for other modules to use.

 You can easily extend SEMS by creating your own plug-ins.
 Applications can be written using the SEMS framework API 
 in C++, or in Python using an embedded python interpreter 
 of the ivr or py_sems modules.

 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 and iLBC). Integrating other codecs in SEMS
 is very simple.

 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). 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.

Requirements:

 1. SER version 0.9.6-sems: SIP Epress Router (www.iptel.org/ser)

    SEMS uses SER as its SIP stack. SEMS & SER communicate 
    through unix socket, which means that a SER instance is
    mandatory on every host using SEMS.

 2. Python version >= 2.3 for the ivr (embedded python interpreter)
    and py_sems, optional

 3. flite speech synthesizer for TTS in the ivr, optional

 4. lame >= 3.95 for mp3 file output, optional

How to get started with SEMS:

  To try out SEMS, the easiest is to get the bundle and install it: 
    wget http://ftp.iptel.org/pub/sems/sems-0.10.0-bundle.tar.gz
    tar xzvf sems-0.10.0-bundle.tar.gz ; cd sems-0.10.0-bundle
    make install PREFIX=~/sems-0.10.0-install SERPREFIX=~/sems-0.10.0-install
  This gets you the default set of applications installed in that
  directory, and in the end prints the commands to start it. 

  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 
  (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 
  (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. Get and start SER as SIP stack for SEMS: 
    
    To install the ser-0.9.6-sems into the directory /some/dir the 
    following commands can used:

     $ wget http://ftp.iptel.org/pub/sems/ser-0.9.6-sems_src.tar.gz
     $ tar xzvf ser-0.9.6-sems_src.tar.gz
     $ cd ser-0.9.6-sems
     $ make install PREFIX=/some/dir

    With the install target install-ser-cfg, e.g. using 
     $ make install-ser-cfg SERPREFIX=/some/dir 
    you can install a general ser-sems.cfg which will work with 
    ser-0.9.6-sems and make SER to act only as SIP stack for SEMS, i.e. 
    direct every request to SEMS. Then 
     $ /some/dir/sbin/ser -f /some/dir/etc/ser/ser-sems.cfg
    runs SER on port 5070. This way, several versions of SER can be 
    used on the same server, e.g. a different version of SER as Registrar
    server.

 5. 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'.

 6. Using SEMS
    
    SEMS needs to be told from the many possible applications that are
    loaded which one to run. You can simply set default_application 
    in sems.conf.

    Another method is to append a header 
     P-App-Name: <app name>
    to the INVITE, for example 
     P-App-Name: conference
    or
     P-App-Name: echo
    In a typical SER-setup where an incoming INVITE should be 
    sent off to conference, the following lines can be executed in
    the proxy's (!) ser.cfg (assuming the media server runs on the
    same host with its SIP stack SER on port 5070):
      append_hf("P-App-Name: conference\r\n");
      t_relay_to_udp("127.0.0.1","5070");
      break;
    A sample ser.cfg with which many applications can be tried is available
    at http://ftp.iptel.org/pub/sems/ser_test_sems.cfg
   
    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

    For more information please refer to doc/Configure-SEMS-Ser-HOWTO and
    the SER User's guide. 

Installed files using 'make install':

    /usr/local/sbin/sems                 : SEMS executable
    /usr/local/lib/sems/plug-in/*        : plug-ins
    /usr/local/lib/sems/audio/*          : default path for audio files
    /usr/local/lib/sems/ivr/*            : precompiled IVR scripts
    /usr/local/etc/sems/sems.conf        : configuration file
    /usr/local/etc/sems/etc/*            : modules configuration files
    /usr/local/share/doc/sems/README     : this README.

    source_path/scripts/sems[.redhat]    : example start-up scripts.
    source_path/sems.conf.example        : example configuration file.

Documentation:

  In the doc/ directory there is a set of files describing the
  applications shipped with SEMS, alongside some more documentation.
  Generate the doxygen documentation with 'make doc' in doc/doxygen_doc,
  that contains all these files as well.

  All this and more documentation is available online linked from 
  the SEMS homepage: 
    http://www.iptel.org/sems.

Support, mailing lists, bugs and contact:

  Please have a look at the documentation and other information on 
  the SEMS homepage (www.iptel.org/sems). 

  Best-effort support is given through the mailing lists for SEMS,
  sems@iptel.org and semsdev@iptel.org, which are the first address 
  to ask for help, report bugs and improvements. You need to be 
  subscribed to be able to post to the lists: http://lists.iptel.org.
  The mailing list archives at   http://lists.iptel.org/pipermail/sems/ 
  and http://lists.iptel.org/pipermail/semsdev/ can be a great help as
  well (especially with google site search on lists.iptel.org, e.g.
  http://www.google.com/coop/cse?cx=006590474108803368786%3A158hxzctv4u ). 

  The bug tracker for SEMS is at http://tracker.iptel.org/browse/SEMS
  Please submit all bugs, crashes and feature requests you encounter.

Authors:

  Raphael Coeffic (rco@iptel.org), the father of SEMS, 
  Stefan Sayer (stefan.sayer@iptego.de), current lead developer,
  and all contributors.

Contributions:

  All kinds of contributions and bug fixes are very welcome, for 
  example new application or codec modules, documentation pages, howtos
  etc. Please email one of the lists or the authors.

Special thanks goes to:

  * Juha Heinanen 
     for numerous bug reports, improvements and contributions

  * Ulrich Abend (ullstar@iptel.org)
      for his great debuging work and ISDN gateway which 
      unfortunately did not make it into this version yet.

  * Jiri Kuthan (jiri@iptel.org)
      for the debuging work and help to implement
      the first communicating part between Ser & SEMS ('vm' module).

  * iptego GmbH and iptelorg for sponsoring development and improvement
    of SEMS.
 
  * All the others who helped during test session and reported bugs :-)

SEMS - the media-S in the SLAMP.