mirror of
https://git.freebsd.org/ports.git
synced 2026-06-02 11:08:52 +00:00
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
This commit is contained in:
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=509981
@@ -190,7 +190,7 @@ mastodon:*:244:
|
||||
fcron:*:247:
|
||||
# free: 248
|
||||
# free: 249
|
||||
# free: 250
|
||||
sems:*:250:
|
||||
# free: 251
|
||||
# free: 252
|
||||
_adsuck:*:253:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1358,6 +1358,7 @@
|
||||
SUBDIR += sdl_net
|
||||
SUBDIR += seda
|
||||
SUBDIR += self-service-password
|
||||
SUBDIR += sems
|
||||
SUBDIR += sendemail
|
||||
SUBDIR += sendsms
|
||||
SUBDIR += sendsnpp
|
||||
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user