From owner-svn-ports-head@freebsd.org Tue Aug 27 03:15:37 2019 Return-Path: Delivered-To: svn-ports-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 77362C6CCB; Tue, 27 Aug 2019 03:15:37 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 46HYsj2v4gz4GRm; Tue, 27 Aug 2019 03:15:37 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 43ECA186C3; Tue, 27 Aug 2019 03:15:37 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x7R3FbOY070527; Tue, 27 Aug 2019 03:15:37 GMT (envelope-from nwhitehorn@FreeBSD.org) Received: (from nwhitehorn@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x7R3FZYC070517; Tue, 27 Aug 2019 03:15:35 GMT (envelope-from nwhitehorn@FreeBSD.org) Message-Id: <201908270315.x7R3FZYC070517@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: nwhitehorn set sender to nwhitehorn@FreeBSD.org using -f From: Nathan Whitehorn Date: Tue, 27 Aug 2019 03:15:35 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r509981 - in head: . net net/sems net/sems/files X-SVN-Group: ports-head X-SVN-Commit-Author: nwhitehorn X-SVN-Commit-Paths: in head: . net net/sems net/sems/files X-SVN-Commit-Revision: 509981 X-SVN-Commit-Repository: ports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Aug 2019 03:15:37 -0000 Author: nwhitehorn (src committer) Date: Tue Aug 27 03:15:35 2019 New Revision: 509981 URL: https://svnweb.freebsd.org/changeset/ports/509981 Log: net/sems: SIP Express Media Server (new port) 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. This adds a new port for the SEMS SIP media server, which provides a number of functions (Voicemail, conferencing, B2BUA, etc.) in conjunction with a SIP router like Kamailio or OpenSIPS. The most recent release (1.6.0) is both old and has a significant number of issues on FreeBSD, so this corresponds to the current development branch, which should hopefully become 1.7 in not too very long. I've added one other patch (from SEMS pull request 57) that is required to make message-waiting notifications behave in a useful way but has yet to be merged upstream. WWW: https://github.com/sems-server/sems/ PR: 240048 Reviewed by: koobs (ports) Approved by: koobs (ports) Differential Revision: D21410 Added: head/net/sems/ head/net/sems/Makefile (contents, props changed) head/net/sems/distinfo (contents, props changed) head/net/sems/files/ head/net/sems/files/patch-core-CMakeLists.txt (contents, props changed) head/net/sems/files/patch-mwi-57 (contents, props changed) head/net/sems/files/sems.in (contents, props changed) head/net/sems/pkg-descr (contents, props changed) head/net/sems/pkg-plist (contents, props changed) Modified: head/GIDs head/UIDs head/net/Makefile Modified: head/GIDs ============================================================================== --- head/GIDs Tue Aug 27 02:43:28 2019 (r509980) +++ head/GIDs Tue Aug 27 03:15:35 2019 (r509981) @@ -190,7 +190,7 @@ mastodon:*:244: fcron:*:247: # free: 248 # free: 249 -# free: 250 +sems:*:250: # free: 251 # free: 252 _adsuck:*:253: Modified: head/UIDs ============================================================================== --- head/UIDs Tue Aug 27 02:43:28 2019 (r509980) +++ head/UIDs Tue Aug 27 03:15:35 2019 (r509981) @@ -195,7 +195,7 @@ mastodon:*:244:244::0:0:Mastodon User:/usr/local/www/m 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 Modified: head/net/Makefile ============================================================================== --- head/net/Makefile Tue Aug 27 02:43:28 2019 (r509980) +++ head/net/Makefile Tue Aug 27 03:15:35 2019 (r509981) @@ -1358,6 +1358,7 @@ SUBDIR += sdl_net SUBDIR += seda SUBDIR += self-service-password + SUBDIR += sems SUBDIR += sendemail SUBDIR += sendsms SUBDIR += sendsnpp Added: head/net/sems/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/Makefile Tue Aug 27 03:15:35 2019 (r509981) @@ -0,0 +1,48 @@ +# Created by: Nathan Whitehon +# $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 Added: head/net/sems/distinfo ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/distinfo Tue Aug 27 03:15:35 2019 (r509981) @@ -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 Added: head/net/sems/files/patch-core-CMakeLists.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/files/patch-core-CMakeLists.txt Tue Aug 27 03:15:35 2019 (r509981) @@ -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) Added: head/net/sems/files/patch-mwi-57 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/files/patch-mwi-57 Tue Aug 27 03:15:35 2019 (r509981) @@ -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(""); +- 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); + Added: head/net/sems/files/sems.in ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/files/sems.in Tue Aug 27 03:15:35 2019 (r509981) @@ -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 Added: head/net/sems/pkg-descr ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/pkg-descr Tue Aug 27 03:15:35 2019 (r509981) @@ -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 Added: head/net/sems/pkg-plist ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/net/sems/pkg-plist Tue Aug 27 03:15:35 2019 (r509981) @@ -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