
*******************************
* Conferencing plug-in README *
*******************************


Description:
------------

The 'conference' plug-in works very easy: 
every call having the same request URI will 
be in the same conference room.

Dialout feature:
----------------

Dialout is supported through AVT tones. Somebody
who has been 'dialed out' cannot use this functionnality
due to billing issues. If you still want that, you can 
turn it out in the code (search for 'if(dialedout)').

keys:
 - '#*' to trigger dialout. Then type in the number and finish with '*'.
 - you be first connected to the callee only
 - press '*' to connect the callee to the conference.
 - press '#' to drop the call.

Dialout is only enabled if dialout_suffix is defined (see below).

Configuration:
--------------

These are needed if you store audio files in file system:

audio_path: directory where conference audio files are kept (optional,
	    defaults to /usr/local/lib/sems/audio)

default_announce: Announcement to be played to the first participant as
		  he enters the conference room.  If default_announce
		  does not start with '/' char, default_announce is
		  appended to audio_path. (optional, defaults to
		  audio_path/default.wav)  If P-Language header or
		  Language P-App-Param header parameter exists,
		  announcement file
		  audio_path/lonely_user_msg/r-uri-host/default_<language>.wav, 
		  or audio_path/lonely_user_msg/default_<language>.wav
		  (if exists) is used instead of default_announce file.

join_sound: sound to be played to all the participants
            when a new one joins the conference. If join_sound does not
            start with '/', join_sound is appended to audio_path.
	    (optional)

drop_sound: sound to be played to all the participants
            when a participant leaves the conference.
	    If drop_sound does not start with '/', drop_sound is
            appended to audio_path. (optional)

These are needed if you store audio files in MySQL database:

mysql_host:	 host where MySQL server is running (optional, defaults
		 to 'localhost')

mysql_user:	 MySQL username (mandatory, no default)

mysql_passwd:	 MySQL password (mandatory, no default)

mysql_db:	 database where audio is stored

mysql_db must contain two tables as follows:

CREATE TABLE default_audio (
  id int(10) unsigned NOT NULL auto_increment,
  application varchar(32) NOT NULL,
  message varchar(32) NOT NULL,
  `language` char(2) NOT NULL default '',
  audio mediumblob NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY application (application,message,`language`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

CREATE TABLE domain_audio (
  id int(10) unsigned NOT NULL auto_increment,
  application varchar(32) NOT NULL,
  message varchar(32) NOT NULL,
  domain varchar(128) NOT NULL,
  `language` char(2) NOT NULL default '',
  audio mediumblob NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY application (application,message,domain,`language`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

The first one stores default audio files and the latter domain specific
audio files.  Application value must be 'conference' and message values
are 'first_participant_msg', 'join_snd', and 'drop_snd'.  Language value
is a two letter code of a language or '' if language is unknown.

When an audio file is fetched from database, it is stored in /tmp
directory.

These are independent of audio storage:

dialout_suffix: suffix to be append to the numbered entered by
                the user. Example: @iptel.org

playout_type:  adaptive_playout, adaptive_jb, or simple:
   		select playout mechanism. 
                adaptive_playout : Adaptive Playout buffer 
                  (default, recommended)
                adaptive_jb      : Adaptive Jitter buffer
                simple           : simple (fifo) playout buffer
	      See sems core documentation for an explanation of the 
              methods.

max_participants: Maximum number of participants in a conference.
		  Default = 0 (unlimited)

Adding participants with "Transfer" REFER:
------------------------------------------
 The "Transfer REFER" is a proprietary REFER call flow which transfers a 
 SIP dialog and session to another user agent ('taker'). If the transfer 
 REFER is  accepted, the one transfering the call just "forgets" the dialog 
 and associated session, while the taker can send a re-Invite, thus overtaking
 the dialog and session. For this to work, both transferer and taker must
 be behind the same record routing proxy, and the callers user agent must 
 properly support re-Invite (updating of contact, and session, as specified 
 in RFC3261).

 The transfer request sent out has two headers, which are needed by the 
 entity taking the call: 
  P-Transfer-RR  : route set of the call
  P-Transfer-NH  : next hop 

 Note that while this request has the method 'REFER', it does not follow rfc3515,
 for example the Refer-To header is not used. Also, the behavior implemented by SEMS
 here is in no way standard conform and should only be used between two SEMS instances
 placed behind the same last record-routing proxy.

"Listen only" participant:
--------------------------
If INVITE request to conference has P-App-Param header parameter
Listen-Only with any value, audio from this participant is not mixed into
the conference.

