aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GIDs2
-rw-r--r--UIDs2
-rw-r--r--net/Makefile1
-rw-r--r--net/sems/Makefile48
-rw-r--r--net/sems/distinfo3
-rw-r--r--net/sems/files/patch-core-CMakeLists.txt21
-rw-r--r--net/sems/files/patch-mwi-57265
-rw-r--r--net/sems/files/sems.in35
-rw-r--r--net/sems/pkg-descr5
-rw-r--r--net/sems/pkg-plist316
10 files changed, 696 insertions, 2 deletions
diff --git a/GIDs b/GIDs
index b52304836464..637028c15279 100644
--- a/GIDs
+++ b/GIDs
@@ -190,7 +190,7 @@ mastodon:*:244:
fcron:*:247:
# free: 248
# free: 249
-# free: 250
+sems:*:250:
# free: 251
# free: 252
_adsuck:*:253:
diff --git a/UIDs b/UIDs
index 6bda4028e787..98259e0f0f04 100644
--- a/UIDs
+++ b/UIDs
@@ -195,7 +195,7 @@ mastodon:*:244:244::0:0:Mastodon User:/usr/local/www/mastodon:/bin/sh
fcron:*:247:247::0:0:fcron pseudo-user:/nonexistent:/usr/sbin/nologin
# free: 248
# free: 249
-# free: 250
+sems:*:250:250::0:0:SIP Express Media Server:/nonexistent:/usr/sbin/nologin
# free: 251
# free: 252
_adsuck:*:253:253::0:0:Adsuck ad blocking user:/nonexistent:/usr/sbin/nologin
diff --git a/net/Makefile b/net/Makefile
index ad7f79c74379..94b4ee459d50 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -1358,6 +1358,7 @@
SUBDIR += sdl_net
SUBDIR += seda
SUBDIR += self-service-password
+ SUBDIR += sems
SUBDIR += sendemail
SUBDIR += sendsms
SUBDIR += sendsnpp
diff --git a/net/sems/Makefile b/net/sems/Makefile
new file mode 100644
index 000000000000..f352159b369e
--- /dev/null
+++ b/net/sems/Makefile
@@ -0,0 +1,48 @@
+# Created by: Nathan Whitehon <nwhitehorn@freebsd.org>
+# $FreeBSD$
+
+PORTNAME= sems
+DISTVERSION= ${SEMS_VERSION}.g20190822
+CATEGORIES= net
+
+MAINTAINER= nwhitehorn@FreeBSD.org
+COMMENT= SIP Express Media Server
+
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/doc/COPYING
+
+LIB_DEPENDS= libopus.so:audio/opus \
+ libcodec2.so:audio/codec2 \
+ libevent.so:devel/libevent \
+ librtmp.so:multimedia/librtmp \
+ libilbc.so:net/ilbc \
+ libgsm.so:audio/gsm \
+ libsamplerate.so:audio/libsamplerate \
+ libspeex.so:audio/speex \
+ libspandsp.so:comms/spandsp
+
+USES= cmake python:2.7,run shebangfix
+SHEBANG_GLOB= sems-*
+
+USE_GITHUB= yes
+GH_ACCOUNT= sems-server
+GH_TAGNAME= 7400051
+
+CFLAGS+= -Wno-reorder
+CMAKE_ARGS= -DSEMS_CFG_PREFIX=${PREFIX} -DSEMS_AUDIO_PREFIX=${PREFIX}/lib \
+ -DSEMS_EXEC_PREFIX=${PREFIX} -DSEMS_DOC_PREFIX=${PREFIX}/share/doc
+CMAKE_ON= SEMS_USE_SPANDSP SEMS_USE_LIBSAMPLERATE SEMS_USE_OPUS
+
+USE_RC_SUBR= sems
+
+USERS= sems
+GROUPS= sems
+
+SEMS_VERSION= 1.7.0
+PLIST_SUB= SEMS_VERSION=${SEMS_VERSION}
+
+post-install:
+ cd ${STAGEDIR}${ETCDIR} && ${FIND} . \
+ -type f -exec ${MV} {} {}.sample \;
+
+.include <bsd.port.mk>
diff --git a/net/sems/distinfo b/net/sems/distinfo
new file mode 100644
index 000000000000..30afc0293c89
--- /dev/null
+++ b/net/sems/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1566533104
+SHA256 (sems-server-sems-1.7.0.g20190822-7400051_GH0.tar.gz) = 0648e863c79363985e59174728f29a7b6c431fc76343fb004ed7c548aef7fcf0
+SIZE (sems-server-sems-1.7.0.g20190822-7400051_GH0.tar.gz) = 5200119
diff --git a/net/sems/files/patch-core-CMakeLists.txt b/net/sems/files/patch-core-CMakeLists.txt
new file mode 100644
index 000000000000..d7a9c5b91161
--- /dev/null
+++ b/net/sems/files/patch-core-CMakeLists.txt
@@ -0,0 +1,21 @@
+--- core/CMakeLists.txt.orig 2019-08-22 14:04:22.265669000 -0700
++++ core/CMakeLists.txt 2019-08-22 14:05:02.760870000 -0700
+@@ -12,15 +12,12 @@
+ INCLUDE_DIRECTORIES (ampi)
+ INCLUDE_DIRECTORIES (amci)
+
+-ADD_LIBRARY (sems_core STATIC ${sems_core_SRCS})
+-ADD_LIBRARY (sems_sip STATIC ${sems_sip_SRCS})
++ADD_EXECUTABLE (sems sems.cpp ${sems_core_SRCS} ${sems_sip_SRCS})
++ADD_EXECUTABLE(sems_tests ${sems_tests_SRCS} ${sems_core_SRCS} ${sems_sip_SRCS})
+
+-ADD_EXECUTABLE (sems sems.cpp)
+-ADD_EXECUTABLE(sems_tests ${sems_tests_SRCS})
+-
+ FOREACH (EXE_TARGET sems sems_tests)
+
+- TARGET_LINK_LIBRARIES(${EXE_TARGET} ${CMAKE_DL_LIBS} sems_core sems_sip event event_pthreads -rdynamic)
++ TARGET_LINK_LIBRARIES(${EXE_TARGET} ${CMAKE_DL_LIBS} event event_pthreads -rdynamic)
+
+ IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ TARGET_LINK_LIBRARIES(${EXE_TARGET} execinfo)
diff --git a/net/sems/files/patch-mwi-57 b/net/sems/files/patch-mwi-57
new file mode 100644
index 000000000000..56c9c958f7a6
--- /dev/null
+++ b/net/sems/files/patch-mwi-57
@@ -0,0 +1,265 @@
+diff --git a/apps/mwi/etc/mwi.conf b/apps/mwi/etc/mwi.conf
+index 13fcce62c..ef7e5182b 100644
+--- apps/mwi/etc/mwi.conf
++++ apps/mwi/etc/mwi.conf
+@@ -1,2 +1,13 @@
+-# Presence Server:
+-presence_server=127.0.0.1
+\ No newline at end of file
++# use domain instead of presence_server
++use_domain=yes
++
++# Presence Server, not used if use_domain is true
++#presence_server=127.0.0.1
++
++# the from user for publish requests, not used if empty
++from_user=mwi-publisher
++# the to user for publish requests, not used if empty
++#to_user=
++
++# give a preset route set, not used if empty
++#route_set="sip:127.0.0.1"
+diff --git a/apps/mwi/mwi.cpp b/apps/mwi/mwi.cpp
+index 4e7035011..47b808be0 100644
+--- apps/mwi/mwi.cpp
++++ apps/mwi/mwi.cpp
+@@ -1,12 +1,13 @@
+ /*
+ Copyright (C) Anton Zagorskiy amberovsky@gmail.com
+ Oyster-Telecom Laboratory
+-
++
+ Published under BSD License
+ */
+-
++
+ #include "AmPlugIn.h"
+ #include "AmSession.h"
++#include "AmConfig.h"
+ #include "AmConfigReader.h"
+ #include "AmUtils.h"
+ #include "log.h"
+@@ -18,9 +19,9 @@ AmDynInvoke* MWI::MessageStorage = 0;
+
+ EXPORT_PLUGIN_CLASS_FACTORY(MWI, MOD_NAME);
+
+-MWI::MWI(const string& name)
+- : AmDynInvokeFactory(name) {
+- _instance = this;
++MWI::MWI(const string& name) : AmDynInvokeFactory(name)
++{
++ _instance = this;
+ };
+
+ MWI::~MWI() { };
+@@ -28,10 +29,10 @@ MWI::~MWI() { };
+
+ int MWI::onLoad()
+ {
+- AmDynInvokeFactory* ms_fact =
++ AmDynInvokeFactory* ms_fact =
+ AmPlugIn::instance()->getFactory4Di("msg_storage");
+
+- if(!ms_fact || !(MessageStorage = ms_fact->getInstance())) {
++ if (!ms_fact || !(MessageStorage = ms_fact->getInstance())) {
+ ERROR("could not load msg_storage. Load a msg_storage implementation module.\n");
+ return -1;
+ };
+@@ -41,21 +42,38 @@ int MWI::onLoad()
+ es_args.push(this);
+ es_args.push("publish");
+ MessageStorage->invoke("events_subscribe",es_args,ret);
+-
++
+ AmConfigReader cfg;
+- if(cfg.loadFile(AmConfig::ModConfigPath + "mwi.conf")) {
+- ERROR("can not load configuration file\n");
+- return -1;
++
++ use_domain = true;
++ from_user = "mwi-publisher";
++ to_user = "";
++ route_set = "";
++ presence_server = "";
++
++ if(cfg.loadFile(AmConfig::ModConfigPath + string(MOD_NAME ".conf"))) {
++ INFO(MOD_NAME "configuration file (%s) not found, "
++ "assuming default configuration is fine\n",
++ (AmConfig::ModConfigPath + string(MOD_NAME ".conf")).c_str());
++
++ return 0;
+ };
+-
+- presence_server = cfg.getParameter("presence_server");
+- if (presence_server.length())
+- DBG("set presence server '%s'\n", presence_server.c_str());
+- else {
+- ERROR("parameter 'presence_server' did not found in the configuration file\n");
+- return -1;
+- }
+-
++
++ use_domain = cfg.getParameter("use_domain", "yes") == "yes";
++ from_user = cfg.getParameter("from_user", from_user);
++ to_user = cfg.getParameter("to_user", to_user);
++ route_set = cfg.getParameter("route_set", route_set);
++
++ if (!use_domain) {
++ presence_server = cfg.getParameter("presence_server", presence_server);
++ if (presence_server.length() == 0) {
++ ERROR("use domain set to false, but parameter 'presence_server' not found in the configuration file\n");
++ return -1;
++ }
++
++ DBG("set presence server '%s'\n", presence_server.c_str());
++ }
++
+ DBG("MWI module loaded.\n");
+ return 0;
+ };
+@@ -66,54 +84,80 @@ void MWI::publish(const string& user, const string& domain)
+ int new_msgs = 0;
+ int all_msgs = 0;
+ string headers, body;
+-
++
+ AmArg di_args, ret;
+ di_args.push(domain.c_str());
+ di_args.push(user.c_str());
+-
++
+ MessageStorage->invoke("userdir_open",di_args,ret);
+-
++
+ if (!ret.size() || !isArgInt(ret.get(0))) {
+ ERROR("userdir_open for user '%s' domain '%s' returned no (valid) result.\n", user.c_str(), domain.c_str());
+ return;
+ };
+-
++
+ all_msgs = ret.get(1).size();
+ for (size_t i = 0; i < ret.get(1).size(); i++) {
+ AmArg& elem = ret.get(1).get(i);
+-
+- if (elem.get(2).asInt()) // skip empty messages
++
++ if (elem.get(2).asInt()) { // skip empty messages
+ new_msgs += elem.get(1).asInt();
+- else
++ }
++ else {
+ all_msgs--;
++ }
+ };
+-
++
+ DBG("Found %d new and %d old messages\n", new_msgs, all_msgs - new_msgs);
+ string vm_buf = int2str(new_msgs) + "/" + int2str(all_msgs - new_msgs);
+
+ headers = "Event: message-summary\r\n";
+ headers += "Subscription-State: active\r\n";
+-
+- if (new_msgs > 0)
++
++ if (new_msgs > 0) {
+ body = "Messages-Waiting: yes\r\n";
+- else
++ }
++ else {
+ body = "Messages-Waiting: no\r\n";
++ }
+
+ body += "Message-Account: sip:" + user + "@" + domain + "\r\n";
+ body += "Voice-Message: " + vm_buf + " (" + vm_buf + ")\r\n";
+
+ AmMimeBody sms_body;
+ sms_body.addPart("application/simple-message-summary");
+- sms_body.setPayload((const unsigned char*)body.c_str(),body.length());
++ sms_body.setPayload((const unsigned char*) body.c_str(), body.length());
++
++ string from_uri = "sip:";
++ string to_uri = "sip:";
++
++ if (from_user.length() != 0) {
++ from_uri += from_user + "@";
++ }
++
++ if (to_user.length() != 0) {
++ to_uri += to_user + "@";
++ }
++
++ if (use_domain) {
++ from_uri += domain;
++ to_uri += domain;
++ }
++ else {
++ from_uri += presence_server;
++ to_uri += presence_server;
++ }
+
+ AmSipDialog tmp_d(NULL);
+- tmp_d.setLocalParty(string("<sip:mwi-publisher@") + presence_server + ">");
+- tmp_d.setRemoteParty(domain.c_str());
+- tmp_d.setRouteSet("sip:" + presence_server);
+ tmp_d.setRemoteUri("sip:" + user + "@" + domain);
+- tmp_d.setCallid(AmSession::getNewId() + "@" + presence_server);
++ tmp_d.setLocalParty("<" + from_uri + ">");
++ tmp_d.setRemoteParty("<" + to_uri + ">");
++ if (route_set.length() != 0) {
++ tmp_d.setRouteSet(route_set);
++ }
++ tmp_d.setCallid(AmSession::getNewId() + "@" + AmConfig::SIP_Ifs[tmp_d.getOutboundIf()].getIP());
+ tmp_d.setLocalTag(AmSession::getNewId());
+- tmp_d.sendRequest(SIP_METH_NOTIFY, &sms_body, headers);
++ tmp_d.sendRequest(SIP_METH_PUBLISH, &sms_body, headers);
+ };
+
+ void MWI::invoke(const string& method, const AmArg& args, AmArg& ret)
+@@ -125,6 +169,7 @@ void MWI::invoke(const string& method, const AmArg& args, AmArg& ret)
+ publish(user, domain);
+ ret.push(0);
+ }
+- else
+- throw AmDynInvoke::NotImplemented(method);
++ else {
++ throw AmDynInvoke::NotImplemented(method);
++ }
+ };
+diff --git a/apps/mwi/mwi.h b/apps/mwi/mwi.h
+index c1d7f1d65..0ec8ca46e 100644
+--- apps/mwi/mwi.h
++++ apps/mwi/mwi.h
+@@ -1,7 +1,7 @@
+ /*
+ Copyright (C) Anton Zagorskiy amberovsky@gmail.com
+ Oyster-Telecom Laboratory
+-
++
+ Published under BSD License
+ */
+
+@@ -16,15 +16,21 @@ class MWI : public AmDynInvokeFactory, public AmDynInvoke
+ private:
+ static MWI* _instance;
+ static AmDynInvoke* MessageStorage;
+-
++
++ bool use_domain;
++
++ string from_user;
++ string to_user;
++
++ string route_set;
+ string presence_server;
+-
++
+ typedef struct
+ {
+ unsigned int new_msgs;
+ unsigned int saved_msgs;
+ } msg_info_struct;
+-
++
+ void getMsgInfo (const string& name, const string& domain, msg_info_struct& msg_info);
+ void publish (const string& name, const string& domain);
+
diff --git a/net/sems/files/sems.in b/net/sems/files/sems.in
new file mode 100644
index 000000000000..cb9251dd2539
--- /dev/null
+++ b/net/sems/files/sems.in
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+# PROVIDE: sems
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+#
+# Add the following line to /etc/rc.conf to enable this service
+# at system startup:
+#
+# sems_enable (bool): Set to NO by default.
+# Set it to YES to enable sems.
+#
+
+. /etc/rc.subr
+
+name=sems
+rcvar=sems_enable
+
+load_rc_config ${name}
+
+: ${sems_enable:=NO}
+: ${sems_config:=%%PREFIX%%/etc/sems/sems.conf}
+
+command="%%PREFIX%%/sbin/sems"
+pidfile=/var/run/sems/sems.pid
+start_precmd="sems_precmd"
+sems_precmd()
+{
+ install -d -o sems /var/run/sems
+}
+command_args="-P $pidfile -f $sems_config -u sems -g sems"
+
+run_rc_command $1
diff --git a/net/sems/pkg-descr b/net/sems/pkg-descr
new file mode 100644
index 000000000000..967762d86651
--- /dev/null
+++ b/net/sems/pkg-descr
@@ -0,0 +1,5 @@
+SEMS is an open-source SIP media server, implementing a B2BUA,
+voicemail, IVRs, announcements, etc. It is designed to be
+complementary to SIP proxy-only tools like Kamailio, OpenSIPS, etc.
+
+WWW: https://github.com/sems-server
diff --git a/net/sems/pkg-plist b/net/sems/pkg-plist
new file mode 100644
index 000000000000..2c11d9d899f3
--- /dev/null
+++ b/net/sems/pkg-plist
@@ -0,0 +1,316 @@
+@sample %%ETCDIR%%/default.template.sample
+@sample %%ETCDIR%%/etc/ann_b2b.conf.sample
+@sample %%ETCDIR%%/etc/announce_transfer.conf.sample
+@sample %%ETCDIR%%/etc/announcement.conf.sample
+@sample %%ETCDIR%%/etc/annrecorder.conf.sample
+@sample %%ETCDIR%%/etc/app_mapping.conf.sample
+@sample %%ETCDIR%%/etc/auth_b2b.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/call_timer.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/callback.conf.sample
+@sample %%ETCDIR%%/etc/cc_call_timer.conf.sample
+@sample %%ETCDIR%%/etc/cc_pcalls.conf.sample
+@sample %%ETCDIR%%/etc/cc_syslog_cdr.conf.sample
+@sample %%ETCDIR%%/etc/click2dial.conf.sample
+@sample %%ETCDIR%%/etc/codecfilter.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/conference.conf.sample
+@sample %%ETCDIR%%/etc/dsm.conf.sample
+@sample %%ETCDIR%%/etc/dsm_in_prompts.conf.sample
+@sample %%ETCDIR%%/etc/dsm_out_prompts.conf.sample
+@sample %%ETCDIR%%/etc/early_announce.conf.sample
+@sample %%ETCDIR%%/etc/echo.conf.sample
+@sample %%ETCDIR%%/etc/mod_regex.conf.sample
+@sample %%ETCDIR%%/etc/monitoring.conf.sample
+@sample %%ETCDIR%%/etc/msg_storage.conf.sample
+@sample %%ETCDIR%%/etc/mwi.conf.sample
+@sample %%ETCDIR%%/etc/precoded_announce.conf.sample
+@sample %%ETCDIR%%/etc/prepaid.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/refuse.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/reg_agent.conf.sample
+@sample %%ETCDIR%%/etc/replytranslate.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/rtmp.conf.sample
+@sample %%ETCDIR%%/etc/sbc.conf.sample
+@sample %%ETCDIR%%/etc/src_ipmap.conf.sample
+@sample %%ETCDIR%%/etc/sst_b2b.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/stats.conf.sample
+@sample %%ETCDIR%%/etc/symmetricrtp.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/transparent.sbcprofile.conf.sample
+@sample %%ETCDIR%%/etc/voicebox.conf.sample
+@sample %%ETCDIR%%/etc/voicemail.conf.sample
+@sample %%ETCDIR%%/etc/webconference.conf.sample
+@sample %%ETCDIR%%/sems.conf.sample
+lib/sems/audio/annrecorder/beep.wav
+lib/sems/audio/annrecorder/bye.wav
+lib/sems/audio/annrecorder/confirm.wav
+lib/sems/audio/annrecorder/greeting_set.wav
+lib/sems/audio/annrecorder/to_record.wav
+lib/sems/audio/annrecorder/welcome.wav
+lib/sems/audio/annrecorder/your_prompt.wav
+lib/sems/audio/beep.wav
+lib/sems/audio/conference/beep.wav
+lib/sems/audio/conference/first_participant.wav
+lib/sems/audio/default_en.wav
+lib/sems/audio/precoded_announce/test.predef
+lib/sems/audio/voicebox/0.wav
+lib/sems/audio/voicebox/1.wav
+lib/sems/audio/voicebox/10.wav
+lib/sems/audio/voicebox/11.wav
+lib/sems/audio/voicebox/12.wav
+lib/sems/audio/voicebox/13.wav
+lib/sems/audio/voicebox/14.wav
+lib/sems/audio/voicebox/15.wav
+lib/sems/audio/voicebox/16.wav
+lib/sems/audio/voicebox/17.wav
+lib/sems/audio/voicebox/18.wav
+lib/sems/audio/voicebox/19.wav
+lib/sems/audio/voicebox/2.wav
+lib/sems/audio/voicebox/20.wav
+lib/sems/audio/voicebox/3.wav
+lib/sems/audio/voicebox/30.wav
+lib/sems/audio/voicebox/4.wav
+lib/sems/audio/voicebox/40.wav
+lib/sems/audio/voicebox/5.wav
+lib/sems/audio/voicebox/50.wav
+lib/sems/audio/voicebox/6.wav
+lib/sems/audio/voicebox/60.wav
+lib/sems/audio/voicebox/7.wav
+lib/sems/audio/voicebox/70.wav
+lib/sems/audio/voicebox/8.wav
+lib/sems/audio/voicebox/80.wav
+lib/sems/audio/voicebox/9.wav
+lib/sems/audio/voicebox/90.wav
+lib/sems/audio/voicebox/and.wav
+lib/sems/audio/voicebox/bye.wav
+lib/sems/audio/voicebox/first_new_msg.wav
+lib/sems/audio/voicebox/first_saved_msg.wav
+lib/sems/audio/voicebox/in_your_voicebox.wav
+lib/sems/audio/voicebox/msg_deleted.wav
+lib/sems/audio/voicebox/msg_end_menu.wav
+lib/sems/audio/voicebox/msg_menu.wav
+lib/sems/audio/voicebox/msg_saved.wav
+lib/sems/audio/voicebox/new_msg.wav
+lib/sems/audio/voicebox/new_msgs.wav
+lib/sems/audio/voicebox/next_new_msg.wav
+lib/sems/audio/voicebox/next_saved_msg.wav
+lib/sems/audio/voicebox/no_more_msg.wav
+lib/sems/audio/voicebox/no_msg.wav
+lib/sems/audio/voicebox/pin_prompt.wav
+lib/sems/audio/voicebox/saved_msg.wav
+lib/sems/audio/voicebox/saved_msgs.wav
+lib/sems/audio/voicebox/x1.wav
+lib/sems/audio/voicebox/x2.wav
+lib/sems/audio/voicebox/x3.wav
+lib/sems/audio/voicebox/x4.wav
+lib/sems/audio/voicebox/x5.wav
+lib/sems/audio/voicebox/x6.wav
+lib/sems/audio/voicebox/x7.wav
+lib/sems/audio/voicebox/x8.wav
+lib/sems/audio/voicebox/x9.wav
+lib/sems/audio/voicebox/you_have.wav
+lib/sems/audio/voicemail/beep.wav
+lib/sems/audio/voicemail/default_en.wav
+lib/sems/audio/webconference/0.wav
+lib/sems/audio/webconference/1.wav
+lib/sems/audio/webconference/2.wav
+lib/sems/audio/webconference/3.wav
+lib/sems/audio/webconference/4.wav
+lib/sems/audio/webconference/5.wav
+lib/sems/audio/webconference/6.wav
+lib/sems/audio/webconference/7.wav
+lib/sems/audio/webconference/8.wav
+lib/sems/audio/webconference/9.wav
+lib/sems/audio/webconference/beep.wav
+lib/sems/audio/webconference/entering_conference.wav
+lib/sems/audio/webconference/first_participant.wav
+lib/sems/audio/webconference/pin_prompt.wav
+lib/sems/audio/webconference/wrong_pin.wav
+lib/sems/dsm/early_dbprompt.dsm
+lib/sems/dsm/inbound_call.dsm
+lib/sems/dsm/mobile_push.dsm
+lib/sems/dsm/mod_conference.so
+lib/sems/dsm/mod_dlg.so
+lib/sems/dsm/mod_groups.so
+lib/sems/dsm/mod_regex.so
+lib/sems/dsm/mod_sbc.so
+lib/sems/dsm/mod_subscription.so
+lib/sems/dsm/mod_sys.so
+lib/sems/dsm/mod_uri.so
+lib/sems/dsm/mod_utils.so
+lib/sems/dsm/outbound_call.dsm
+lib/sems/plug-in/adpcm.so
+lib/sems/plug-in/ann_b2b.so
+lib/sems/plug-in/announce_transfer.so
+lib/sems/plug-in/announcement.so
+lib/sems/plug-in/annrecorder.so
+lib/sems/plug-in/callback.so
+lib/sems/plug-in/cc_call_timer.so
+lib/sems/plug-in/cc_ctl.so
+lib/sems/plug-in/cc_dsm.so
+lib/sems/plug-in/cc_pcalls.so
+lib/sems/plug-in/cc_prepaid.so
+lib/sems/plug-in/cc_registrar.so
+lib/sems/plug-in/cc_syslog_cdr.so
+lib/sems/plug-in/click2dial.so
+lib/sems/plug-in/codec2.so
+lib/sems/plug-in/conference.so
+lib/sems/plug-in/dsm.so
+lib/sems/plug-in/early_announce.so
+lib/sems/plug-in/echo.so
+lib/sems/plug-in/g722.so
+lib/sems/plug-in/gsm.so
+lib/sems/plug-in/ilbc.so
+lib/sems/plug-in/isac.so
+lib/sems/plug-in/l16.so
+lib/sems/plug-in/monitoring.so
+lib/sems/plug-in/msg_storage.so
+lib/sems/plug-in/mwi.so
+lib/sems/plug-in/opus.so
+lib/sems/plug-in/precoded_announce.so
+lib/sems/plug-in/reg_agent.so
+lib/sems/plug-in/registrar_client.so
+lib/sems/plug-in/rtmp.so
+lib/sems/plug-in/sbc.so
+lib/sems/plug-in/session_timer.so
+lib/sems/plug-in/speex.so
+lib/sems/plug-in/stats.so
+lib/sems/plug-in/uac_auth.so
+lib/sems/plug-in/voicebox.so
+lib/sems/plug-in/voicemail.so
+lib/sems/plug-in/wav.so
+lib/sems/plug-in/webconference.so
+sbin/sems
+sbin/sems-get-callproperties
+sbin/sems-list-active-calls
+sbin/sems-list-calls
+sbin/sems-list-finished-calls
+sbin/sems-logfile-callextract
+sbin/sems-sbc-get-activeprofile
+sbin/sems-sbc-get-regex-map-names
+sbin/sems-sbc-list-profiles
+sbin/sems-sbc-load-profile
+sbin/sems-sbc-reload-profile
+sbin/sems-sbc-reload-profiles
+sbin/sems-sbc-set-activeprofile
+sbin/sems-sbc-set-regex-map
+sbin/sems-rtp-mux-get-max-frame-age-ms
+sbin/sems-rtp-mux-get-mtu-threshold
+sbin/sems-rtp-mux-set-max-frame-age-ms
+sbin/sems-rtp-mux-set-mtu-threshold
+sbin/sems-sbc-load-callcontrol-modules
+sbin/sems-sbc-teardown-call
+sbin/sems-stats
+%%DOCSDIR%%-%%SEMS_VERSION%%/Applications.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/CHANGELOG
+%%DOCSDIR%%-%%SEMS_VERSION%%/COPYING
+%%DOCSDIR%%-%%SEMS_VERSION%%/Howtostart_noproxy.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Howtostart_simpleproxy.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Howtostart_voicemail.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.ann_b2b.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.announce_transfer.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.announcement.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.annrecorder.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.callback.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.click2dial.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.conference.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.early_announce.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.echo.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.monitoring.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.msg_storage.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.reg_agent.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.registrar_client.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.sbc.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.uac_auth.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.voicebox.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.voicemail.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Readme.webconference.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/Tuning.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/Readme.dsm.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/dsm_errorhandling.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/dsm_sbc_syntax.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/dsm_syntax.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/dsm_todo.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/183_early_establish.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_audio/aas_callee.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_audio/aas_caller.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_extension/connect_extension.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_extension/wav/Makefile
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_extension/wav/connecting.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_extension/wav/enter_extension.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_extension/wav/failed_enter_extension.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/b2b_connect_extension/wav/sorry_problems.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/call/callsub.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/call/calltest.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/dsm_di_monit/Readme_ddm.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/dsm_di_monit/dsm_di_monitoring.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/dsm_di_monit/wav/change.wav
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/dsm_di_monit/wav/taken.wav
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/dsm_di_monit/wav/welcome.wav
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/early_media.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/handle_cancel.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/late_reply.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/moddlg_late_early.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/pin/main.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/pin/ok_pin.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/play_file.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/sbc/sbc_test_app/howto.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/sbc/sbc_test_app/profile/sbc_test_app_profile.sbcprofile.conf
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/sbc/sbc_test_app/sbc_test_app.conf
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/sbc/sbc_test_app/test_sbc.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_b2b.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_byehdr.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_conference.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_conference_mute.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_dbfile.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_exception.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_popen.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_remoteunreachable.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_request_events.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_rtptimeout.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_system_dsm.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_systemevents.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/examples/test_teeconf.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_aws.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_conference.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_curl.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_dlg.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_groups.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_monitoring.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_mysql.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_py.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_redis
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_regex.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_subscription.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_sys.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_uri.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_utils.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_xml.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/mods/Readme.mod_zrtp.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/Readme.quizconnect_tutorial.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/Makefile
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/sorry_pin_wrong.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/sorry_pin_wrong.wav
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/welcome_callee.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/welcome_callee.wav
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/welcome_caller.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/prompts/welcome_caller.wav
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/quizconnect.conf
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/quizconnect_callee.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/quizconnect_caller.dsm
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/quizconnect_tutorial.pdf
+%%DOCSDIR%%-%%SEMS_VERSION%%/dsm/tutorials/quizconnect/quizconnect_tutorial.txt
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/conference.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/conference.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/service_invocation.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/singleinstance.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/two_instances_app_fixed.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/two_instances_app_param.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/voicemail.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/webconference.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/png/webconference_dialout.png
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/service_invocation.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/singleinstance.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/two_instances_app_fixed.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/two_instances_app_param.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/voicemail.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/webconference.dia
+%%DOCSDIR%%-%%SEMS_VERSION%%/figures/webconference_dialout.dia