AppKonference is a fork of AppConference. It comprises a set of enhancements
needed to migrate a MeetMe application to AppConference.  The goals of this
project are scalability and stability focused on voice.

Here's the url to the AppKonference sourceforge site:
	http://sourceforge.net/projects/appkonference/

You can check out the code for the AppKonference project using subversion:
	svn co https://appkonference.svn.sourceforge.net/svnroot/appkonference

Here is a brief summary of the changes to AppConference:

Added commands to mute/unmute a conference, increase/decrease conference
volume, increase/decrease member volume, and start/stop moh for a member.

Changed play sound command so that more than one sound can be entered on
the command line.

Added conference parameter, max_users, that limits conference members to a user
specified maximum.

Added channel variable, KONFERENCE, which is set to MAXUSERS or KICKED after
exiting the application so that the reason for leaving a conference can be
determined in the dial plan.

Added application, KonferenceCount, was so that the member count can be used in
the dial plan.

Added new AMI event messages for mute status: ConferenceMemberMute,
ConferenceMemberUnmute, ConferenceMute, and ConferenceUnmute.

Added conference flags to ConferenceDTMF, ConferenceJoin, ConferenceState, and
ConferenceLeave AMI event messages.

Added "x" option so that when a moderator leaves callers get kicked.

Added "a" option which sets vad and telephone flags on conference entry.

Changed formatting of conference list command to include new listening
state and did some rearrangement so that the channel name is displayed without
truncation.

Fixes for locking: First, fixed the conference thread so that the
conference list lock is only locked when it's required. Second, changed the
conference mutex to a rdlock for greater concurrency. Third, changed the way
sounds are handled so the member lock is not held over calls to asterisk
procedures.

Fixes for compiling with asterisk 1.6 and ifdef'ing out video and/or text
and/or dtmf. The default is voice only. To compile with video, text, and dtmf
change the defaults in the Makefile or specify them on the command line: make
VIDEO=1 TEXT=1 DTMF=1. 

Added an examples directory for a simple AMI based application and web site.

Changed find_member so that members are located via a hash table rather than a
sequential search through the conference and member lists.  The size of the
table is configurable via the Makefile and the default is 997 buckets.  To
change the default table size either edit the Makefile default or specify the
value on the command line: make CHANNEL_TABLE_SIZE=1009.  Table entries are
list heads and chaining is used to resolve collisions so that the number of
entries is not limited to the number of buckets in the table.  A bucket field
is added to the conference list command output so that a channel name can be
correlated with its hash table entry.

Changed add_member and remove_member for voice so that adding or removing a
member control block is O(1).  Specifically, the allocation of member id's is
changed to work like MeetMe, that is, the member id list is ordered, new
entries are placed at the end of the list, and the next member id  allocated is
the highest active id (the entry at the end of the list) plus one.  Further,
member control blocks are doubly linked so that removing a block doesn't
require running the list to find the back pointer required to update the member
list.

Changed conference_kickchannel, dropping the conference name argument, so that
its signature is consistent with the other commands which refer to a member by
channel name.

Added conference parameter, type, that can be used to partition users into
groups within a conference which can be managed differently via the AMI. The
ConferenceJoin, ConferenceLeave, and ConferenceDTMF events are updated to
include the new type field.

Added command to display the conference version number. The version number is
either the AppKonference release number or the subversion revision number if the
code was checked out from the AppKonference repository.

Fix to bump the conference thread's priority and change its scheduling
algorithm to fifo when asterisk is started realtime with the "-p" option.

Added conference parameter, spy, which specifies a conference member channel
name, the spyee. When a conference is entered in spy mode, the spyer receives
voice only from the spyee.  If unmuted, the spyer can whisper to the spyee,
that is, spyer voice is mixed with conference voice and sent to the spyee.
Note that this initial implementation limits one spyer per spyee and a spyer
can not be a spyee.

Added a new field, spy, to the conference list command output. The spy
field is the id of the spyee if the member is a spyer; otherwise, the asterisk
character is used to indicate the member is not a spyer.

Changed the application argument delimiter from the forward slash, "/", to the
comma character, ",", to simplify parsing of channel name parameters and to be
consistent with other asterisk applications.

Added "H" option which enables "music on hold" if there is only one member in
the conference.
