diff --git a/conf/yaml/extensions.yaml b/conf/vanilla/yaml/extensions.yaml
similarity index 100%
rename from conf/yaml/extensions.yaml
rename to conf/vanilla/yaml/extensions.yaml
diff --git a/conf/yaml/mod_yaml.yaml b/conf/vanilla/yaml/mod_yaml.yaml
similarity index 100%
rename from conf/yaml/mod_yaml.yaml
rename to conf/vanilla/yaml/mod_yaml.yaml
diff --git a/configure.in b/configure.in
index 9599c2617f..d362db9dd0 100644
--- a/configure.in
+++ b/configure.in
@@ -3,10 +3,10 @@
# Must change all of the below together
# For a release, set revision for that tagged release as well and uncomment
-AC_INIT([freeswitch], [1.0.head], BUG-REPORT-ADDRESS)
+AC_INIT([freeswitch], [1.1.beta1], BUG-REPORT-ADDRESS)
AC_SUBST(SWITCH_VERSION_MAJOR, [1])
-AC_SUBST(SWITCH_VERSION_MINOR, [0])
-AC_SUBST(SWITCH_VERSION_MICRO, [head])
+AC_SUBST(SWITCH_VERSION_MINOR, [1])
+AC_SUBST(SWITCH_VERSION_MICRO, [beta1])
#AC_SUBST(SWITCH_VERSION_REVISION, [])
AC_CONFIG_FILES([src/include/switch_version.h.in:src/include/switch_version.h.template])
diff --git a/debian/freeswitch.init b/debian/freeswitch.init
index c09e7128d1..6cae11ba39 100755
--- a/debian/freeswitch.init
+++ b/debian/freeswitch.init
@@ -28,7 +28,7 @@ WORKDIR=/opt/$NAME
CALLEDSCRIPT=`basename $0`
-if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME; fi
+if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME; fi
if [ "$FREESWITCH_ENABLED" != "true" ]; then
echo "$DESC not enabled yet. Edit /etc/default/$NAME first."
@@ -180,5 +180,3 @@ case "$1" in
exit 3
;;
esac
-
-:
diff --git a/docs/ChangeLog b/docs/ChangeLog
index 78d8f84d85..6f92097c5f 100644
--- a/docs/ChangeLog
+++ b/docs/ChangeLog
@@ -31,6 +31,9 @@ freeswitch (1.0.7)
build: unimrcp vs2010 build fixes for new version (r:2dcca5f4)
build: add sqlite to clean on make current or update-clean (r:2366f429)
build: Update windows to use Lame 3.98.4 (r:4349ec00)
+ build: fix mod_silk build issue (r:6fe6d8d7/FS-3649)
+ build: Rename AUTOMAKE_OPTS to AUTOMAKE_OPTIONS in several places (r:992eafd0)
+ build: don't allow using system libcurl on systems that strip out Curl_setopt, we use it (r:36f0a5b8/FS-2936)
codec2: working prototype, still for testing only (r:04ca0751)
config: move limit.conf to db.conf
config: Update VM phrase macros to voice option then action on main, config menus
@@ -57,6 +60,7 @@ freeswitch (1.0.7)
config: Fix mod_directory phrase file references to 'dir-press.wav' (correct: vm-press) (r:3ef2692f)
config: bump ru sounds version to 1.0.13 (r:2b1b19bf)
config: Fix eavesdrop so that *0 works as well as 88 as the access code (r:cbfe83cc)
+ config: change default to short date-time in VM sounds (r:3603a69d)
core: Add RTCP support (FSRTP-14)
core: handle some errors on missing db handle conditions
core: add ... and shutdown as a fail-safe when no modules are loaded
@@ -336,6 +340,15 @@ freeswitch (1.0.7)
core: add getGlobalVariable and setGlobalVariable to swig stuff (r:2faaee0e)
core: Fix erroneous "module busy" messages on module unload (r:bad5964b/FS-3589)
core: move code from uuid_kill into core (r:3c9551ee)
+ core: Directed pickup sends "call completed elsewhere" (r:43ca3ee8/FS-3634)
+ core: jitter-buffer tweaks (r:e3ade445/FS-3671 and r:599a4543/FS-3672)
+ core: Add option to disable PLC when using the jitter buffer (r:ba14f95d/FS-3678)
+ core: Allow fail_on_single_reject to do negated causes, i.e. fail_on_single_reject=!UNALLOCATED_NUMBER (r:522c0d53/FS-3675)
+ core: move the thing that passes proto_specific_hangup_cause to the core and prefix it with last_bridge_ and also log last_bridge_hangup_cauuse for good measure (r:e04f9ba9)
+ core: Add CHANNEL_EXECUTE to the list of default "verbose events" (r:ff7432d9/FS-3680)
+ core: fix queued dtmf on channels with no timer issue (r:bc968ca8)
+ core: use the non-signal checking version of switch_channel_up/down in the core (r:9ecf187d)
+ core: Link curl into core (r:74ed2cef)
docs: Major clean up of doxygen generated core API documentation (r:794246e1)
docs: Add libteletone back to core API documentation (r:c35c138d)
embedded languages: Provide core level support for conditional Set Global Variable (r:c017c24b/FSCORE-612)
@@ -404,6 +417,7 @@ freeswitch (1.0.7)
libs: Merged OpenZAP and FreeTDM into the FreeSWITCH tree.
libs: Add support for TLS on Windows using openssl (r:1abe3b93/MODSOFIA-92)
libs: fix bsd shell incompatibility (r:e2b85e94/FS-287)
+ libsndfile: Update libsndfile and edit mod_sndfile.c to support ogg and flac (r:02a604f7/FS-1197)
libsofiasip: Fix random crashes (r:c15ee980/SFSIP-219)
libsofiasip: Fix T.38 bug in sofia_glue (r:2843f1ad/MODSOFIA-94)
libsofiasip: VS2010 sofia posix problem (r:46dd24c2/SFSIP-220)
@@ -478,6 +492,7 @@ freeswitch (1.0.7)
mod_callcenter: New strategies: round-robin, random, and 'top-down' (r:2b4b23aa,r:bee247ca)
mod_callcenter: Display an warning when MOH is invalid and resume wait with silence. (r:37b14c9a/FS-2740)
mod_callcenter: Fix member been switch as abandoned when he was pickup by an agent (r:9ff8f53f/FS-3281)
+ mod_callcenter: Adapt mod_callcenter loopback agent fix to work with commit 2eae19e6 (r:d32ba761/FS-3657)
mod_cdr_mongodb: add MongoDB CDR module (r:a9169199)
mod_cdr_sqlite: initial commit (r:f625fe3b)
mod_cdr_sqlite: config file for mod_cdr_sqlite (r:25bc8fe3)
@@ -562,9 +577,14 @@ freeswitch (1.0.7)
mod_conference: remove waste flags from both conference and member and explicitly always send audio from conferences to avoid random interop issues and general discomfort these flags are now deprecated (r:5d77e789)
mod_conference: add conference cdrs to mod_conference (r:127be02d)
mod_conference: add custom kick sound to conference (r:8fde25cc)
+ mod_conference: Fix bug where not entering PIN allows caller into PIN-protected conference (r:9dd45e35/FS-3661)
+ mod_conference: fix crash in video-bridge mode (r:4c13e7c0)
mod_curl: use method=post when post requested (r:c6a4ddd0/FSMOD-69)
mod_db: fix stack corruption (MODAPP-407)
mod_dialplan_xml: Add in the INFO log the caller id number when processing a request (Currenly only show the caller name) (r:e1df5e13)
+ mod_dialplan_xml: Add tag for OR logic in XML dialplan (r:c1615dbb/FS-3655)
+ mod_dialplan_xml: add xor to regex attr (r:7c7b0068/FS-3655)
+ mod_dialplan_xml: add tod_tz_offset variable to set to the integer value of the tz offset or the tz-offset tag on a per-tag basis (r:65a75664)
mod_dingaling: make mod_dingaling compat with google's new free phonecalls thing (r:ba0a2a32)
mod_dingaling: make dingaling work with google voice inbound too (r:4ee68141)
mod_dingaling: Fix crash when testing the new gv-dingaling with around 24 concurrent calls (r:73e1ec5e/FSCORE-667)
@@ -602,6 +622,8 @@ freeswitch (1.0.7)
mod_dptools: fix seg on user_recurse_variables reported on the mailing list (r:01b2bd04)
mod_dptools: add digit_action_set_target app that can set the target (direction of the dtmf flow and subsequent channel who gets the events) to self or peer (bridged channel when possible) (r:cf9859ea)
mod_dptools: get rid of digit_action_set target and add target,bind_target params to bind_digit_action (r:42b64ccd)
+ mod_dptools: add flags to digit bindings (r:d93ed90b)
+ mod_dptools: New dialplan app: play_and_detect_speech (r:34338e5a/FS-3692)
mod_easyroute: Fix possible segfaults and memory leak during unload, and add new setting odbc-retries (r:7fbc47f8/FS-2973)
mod_enum: switch mod_enum to use new portable in-tree version (r:2bbc37e3)
mod_enum: fix race condition between ldns configure creating ldns/util.h and mod_enum (r:87884c5c)
@@ -685,6 +707,15 @@ freeswitch (1.0.7)
mod_gsmopen: copy from branch
mod_gsmopen: fix FS-2793, compilation stops (r:355c0dbb/FS-2793)
mod_gsmopen: retry serial initialization if failed, zeroing audio buffers, slower retry on soundcard busy (EAGAIN) (r:c7aefe93)
+ mod_h323: initial t.38 support. remake logical channel opening. add missing param name in example config. (r:8c58074c)
+ mod_h323: some t.38 and locking improvements. replace ptrace with switch_log_printf. (r:5efe5c88)
+ mod_h323: add missing conf praameter (r:0b353d7a)
+ mod_h323: Add mod_h323 to windows (r:015bcaf6/MODENDP-301)
+ mod_h323: move PTrace level set to FSH323EndPoint::Initialise. partially apply patch from from Peter Olsson, Remove UnLock() when TryLock() failed and DEBUG_RTP_PACKETS directiv e. (r:7b5803f7)
+ mod_h323: set network_addr of caller profile to signaling ip address. (requested by Steven Ayre) (r:072bf5ad)
+ mod_h323: fix race condition on destroying signaling thread in h323 library (r:c22aac0e)
+ mod_h323: move the switch_rtp_request_port() call from the contructor to FSH323Connection::CreateRealTimeLogicalChannel() - fix rtp port leak. tnx to Peter Olsson. (r:6f4c4ea0)
+ mod_h323: fix stale calls then fax send/recv in some circumstance (r:00fce043)
mod_hash: free all hashtables on shutdown (r:e76d7d92)
mod_hash: remove unneeded initializer (r:10d468a6)
mod_hash: begin working on remote support (r:c5ad49da)
@@ -701,14 +732,6 @@ freeswitch (1.0.7)
mod_hash: limit_remote_thread sending invalid handle to esl_connect_timeout causing core (r:6cdd3e2a/MODAPP-446)
mod_hash: avoid scheduler calling a function on null hash during shutdown (r:8458adeb)
mod_hash: add realm filter to hash_dump db command so that you can quickly dump all entries that belong only to a specific realm without getting the whole db (r:81347126)
- mod_h323: initial t.38 support. remake logical channel opening. add missing param name in example config. (r:8c58074c)
- mod_h323: some t.38 and locking improvements. replace ptrace with switch_log_printf. (r:5efe5c88)
- mod_h323: add missing conf praameter (r:0b353d7a)
- mod_h323: Add mod_h323 to windows (r:015bcaf6/MODENDP-301)
- mod_h323: move PTrace level set to FSH323EndPoint::Initialise. partially apply patch from from Peter Olsson, Remove UnLock() when TryLock() failed and DEBUG_RTP_PACKETS directiv e. (r:7b5803f7)
- mod_h323: set network_addr of caller profile to signaling ip address. (requested by Steven Ayre) (r:072bf5ad)
- mod_h323: fix race condition on destroying signaling thread in h323 library (r:c22aac0e)
- mod_h323: move the switch_rtp_request_port() call from the contructor to FSH323Connection::CreateRealTimeLogicalChannel() - fix rtp port leak. tnx to Peter Olsson. (r:6f4c4ea0)
mod_http_cache: Initial commit of new module (thanks crienzo) (r:c51acfcc/FS-3597)
mod_java: fix eventConsumer issue and add flush() method (r:7fd3aff6)
mod_java: Allow user defined java methods to be called at startup and shutdown of JVM (r:1339e218/MODLANG-117)
@@ -730,6 +753,7 @@ freeswitch (1.0.7)
mod_lcr: fix "as xml" for larger number of arguments (r:3dca2ebb/FS-3283)
mod_lcr: fix malformed XML when has embedded %s (r:5fa9619f/FS-3284)
mod_lcr: initial addition of very basic LRN (r:6d1d4a9c)
+ mod_logfile: Replace hard-coded file permissions w/ OS default or umask (r:513a9e1a/FS-3710)
mod_loopback: add loopback_bowout_on_execute var to make 1 legged loopback calls bow out of the picture
mod_loopback: only execute app once in app mode (r:64f58f2d)
mod_loopback: fix bug in mod_loopback where bowout=false (r:e9ab5368)
@@ -780,7 +804,8 @@ freeswitch (1.0.7)
mod_portaudio: move load_config a bit lower since it needs to use the hashtables (r:1529c0ec)
mod_portaudio: Fix Windows crash (r:94c9cbf6/FS-3498)
mod_portaudio_stream: update to specify the channel index (r:d1169d6e)
- mod_protovm: This is a very early new prototype voicemail ivr system. You need to copy the sounds.xml and make it loadale in the language folder and protovm.conf.xml inside the autoload_configs folder. Configs file will most definitly change. Once stabilized, we make it install those file by default. (r:fb549777)
+ mod_portaudio: mod_portaudio: fix incorrect use of pa input buffer that could lead to garbage audio (r:f2cf68bf)
+ mod_protovm: Removed by author; replaced by mod_voicemail_ivr
mod_python: add chat app to python (r:08917021)
mod_radius_cdr: Add 'Freeswitch-Direction' av pair (r:a5170df0)
mod_radius_cdr: Add 'Freeswitch-Other-Leg-Id' av pair (r:18d29b46)
@@ -818,6 +843,7 @@ freeswitch (1.0.7)
mod_say_de: method PRONOUNCED - grammatical fixes, thank you Christian Benke (r:5d46ddbc/FS-3195)
mod_say_en: introduce new say_string method of doing say and use it in mod_say_en as an example. try: eval ${say_string en.gsm en current_date_time pronounced ${strepoch()}} from the cli with this patch. We can do more to centralize the say things and go back and apply it to other langs, using this method you can set the desired file ext as well which I think is a bounty.... (r:d5ef86d7)
mod_say_en: If you only tell SAY CURRENCY to say 100 it should only say 100 dollars without the "0 cents" (r:426a4e76/FS-2922)
+ mod_say_en: add "PRONOUNCED_YEAR" so 1985 is "nineteen eighty-five" (r:c0af0a85)
mod_say_es: fix grammar when saying dates and time (r:6bed19b2/MODAPP-429)
mod_say_he: Add Hebrew say module (r:ebd9c83e/FS-3211)
mod_say_ja: initial commit, still needs sound files (r:b2423158/FS-2755)
@@ -828,6 +854,7 @@ freeswitch (1.0.7)
mod_shout: bump mod_shout to use mpg123-1.13.2 to hopefully address unwanted calls to exit() and inherit other upstream fixes (r:079f3f73)
mod_shout: add append flag to mod_shout, can append MP3's (r:0419c4e0)
mod_shout: add ability to set bitrate, samplerate, and encoder quality in config file (r:8ea3cbd5/FS-1231)
+ mod_shout: Initialize Lame sooner for file open (r:44b5cf82/FS-3646)
mod_silk: Fix mod_silk compliance and performance issues (r:2ddbc457/MODCODEC-20)
mod_skinny: Add the missing api files
mod_skinny: add example dialplan and directory config (r:1bfcc17e)
@@ -1093,6 +1120,16 @@ freeswitch (1.0.7)
mod_sofia: add presence_map config (r:48416707)
mod_sofia: add lookup params to presence_map (r:ea7f6a18)
mod_sofia: add missing mod_sofia indexes (r:40df8d65)
+ mod_sofia: When doing direct pickup send CANCEL with reason="call completed elsewhere" (r:6cd6a719/FS-3634)
+ mod_sofia: Handle "isup-oli" in SIP From: field (similar to "gw" handling) (r:0ed54079/FS-3663)
+ mod_sofia: Fix NOTIFY expiry time to conform to RFC 3265 (r:42c69c04/FS-3685)
+ mod_sofia: Preserve VIA headers in sofia recovery (r:5a6231b6/FS-3686)
+ mod_sofia: Add respond 503 "Maximum Calls In Progress" param for incoming SIP OPTIONS when busy (r:a891514c/FS-3697)
+ mod_sofia: don't list all registrations when doing "sofia status profile foo" (use 'reg' option instead) (r:00e381f1/FS-3699)
+ mod_sofia: Fix typo and possible memory corruption in sofia presence (r:ff910276/FS-3706)
+ mod_sofia: comment out optional Require header from re-invites for the sake of interop with testy t.38 terminals (r:58c3c3a0)
+ mod_sofia: Set reg and invite auto failures to loglevel debug10 to satisfy Fail2ban (r:35112f22/FS-3586)
+ mod_sofia: Fix segfault on malformed NOTIFY (r:82807998/FS-3718)
mod_soundtouch: updated soundtouch to library 1.5.0 to fix gcc > 4.3 incompatibilities (r:dfb5c629)
mod_soundtouch: Update soundtouch to 1.6.0 to fix FS-3634 (r:d8ae59fd/FS-3634)
mod_spandsp: initial checkin of mod_fax/mod_voipcodecs merge into mod_spandsp (r:fa9a59a8)
@@ -1143,6 +1180,7 @@ freeswitch (1.0.7)
mod_valet_parking: valet_info now returns uuid properly (r:34ddeb75/FS-3613)
mod_valet_parking: add presence to mod_valet_parking subscribe to the lot name for general stats or individual slots to monitor with park+ prefix *note* this used to be used in mod_fifo which now will use queue+ going forward (r:9daa42c1)
mod_valet_parking: lower token freq to 5, put it in a define and have more obvious warning about full lots (r:2f786a07)
+ mod_valet_parking: make auto unpark choose the one waiting the longest instead of the earliest ext val (r:00cf5aed)
mod_voicemail: Fix vm_prefs profile lock (MODAPP-417)
mod_voicemail: add 'vm-enabled' param (default true)
mod_voicemail: fix vm msg being deleted when pressing key to forward to email (MODAPP-403)
@@ -1167,6 +1205,9 @@ freeswitch (1.0.7)
mod_voicemail: use vm_email as notification address if vm_notify_email isn't set (that behavior was in voicemail_leave_main but not in deliver_vm) (r:8974f9d6)
mod_voicemail: better fix for voicemail email key match (r:aff4bcbe/FS-3080)
mod_voicemail: Prevent rewind key from breaking out of message playback (r:923a104b/FS-3637)
+ mod_voicemail: add variable vm_auth_only or option auth_only to voicemail app so you can use it as a pin checker (r:3051480d)
+ mod_voicemail: fix wrong message count with saved urgent messages (r:54b4b088)
+ mod_voicemail: add voicemail_formatted_caller_id_number param for templates in vm (r:94b9cc0f)
mod_xml_cdr: add force_process_cdr var to process b leg cdr on a case by case basis when b leg cdr is disabled (XML-17)
mod_xml_cdr: add leg param to query string (XML-24)
mod_xml_cdr: fix locked sessions (XML-26)
diff --git a/docs/phrase/phrase_en.xml b/docs/phrase/phrase_en.xml
index d073cf447a..f9b2a3e221 100644
--- a/docs/phrase/phrase_en.xml
+++ b/docs/phrase/phrase_en.xml
@@ -241,6 +241,13 @@
+
+
+
+
+
+
+
@@ -296,6 +303,10 @@
+
+
+
+
@@ -494,22 +505,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -529,6 +547,8 @@
+
+
@@ -1064,8 +1084,13 @@
diff --git a/erlang.spec b/erlang.spec
new file mode 100644
index 0000000000..6cdd7245b9
--- /dev/null
+++ b/erlang.spec
@@ -0,0 +1,297 @@
+%define ver %{VERSION_NUMBER}
+%define rel %{RELEASE_NUMBER}
+
+Name: erlang
+Version: %{ver}
+Release: %{rel}.1%{?dist}
+Summary: General-purpose programming language and runtime environment
+
+Group: Development/Languages
+License: ERPL
+URL: http://www.erlang.org
+Source: http://www.erlang.org/download/otp_src_R14B03.tar.gz
+Source1: http://www.erlang.org/download/otp_doc_html_R14B03.tar.gz
+Source2: http://www.erlang.org/download/otp_doc_man_R14B03.tar.gz
+Patch1: otp-R14B-00-0001-Do-not-format-man-pages.patch
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires: ncurses-devel
+BuildRequires: openssl-devel
+BuildRequires: unixODBC-devel
+BuildRequires: tcl-devel
+BuildRequires: tk-devel
+BuildRequires: gd-devel
+# BuildRequires: jdk
+BuildRequires: flex
+BuildRequires: m4
+
+Requires: tk
+
+# Added virtual Provides for each erlang module
+Provides: erlang-appmon = %{version}-%{release}
+Provides: erlang-asn1 = %{version}-%{release}
+Provides: erlang-common_test = %{version}-%{release}
+Provides: erlang-compiler = %{version}-%{release}
+Provides: erlang-cosEvent = %{version}-%{release}
+Provides: erlang-cosEventDomain = %{version}-%{release}
+Provides: erlang-cosFileTransfer = %{version}-%{release}
+Provides: erlang-cosNotification = %{version}-%{release}
+Provides: erlang-cosProperty = %{version}-%{release}
+Provides: erlang-cosTime = %{version}-%{release}
+Provides: erlang-cosTransactions = %{version}-%{release}
+Provides: erlang-crypto = %{version}-%{release}
+Provides: erlang-debugger = %{version}-%{release}
+Provides: erlang-dialyzer = %{version}-%{release}
+Provides: erlang-docbuilder = %{version}-%{release}
+Provides: erlang-edoc = %{version}-%{release}
+Provides: erlang-erts = %{version}-%{release}
+Provides: erlang-et = %{version}-%{release}
+Provides: erlang-eunit = %{version}-%{release}
+Provides: erlang-gs = %{version}-%{release}
+Provides: erlang-hipe = %{version}-%{release}
+Provides: erlang-ic = %{version}-%{release}
+Provides: erlang-inets = %{version}-%{release}
+Provides: erlang-inviso = %{version}-%{release}
+Provides: erlang-kernel = %{version}-%{release}
+Provides: erlang-megaco = %{version}-%{release}
+Provides: erlang-mnesia = %{version}-%{release}
+Provides: erlang-observer = %{version}-%{release}
+Provides: erlang-odbc = %{version}-%{release}
+Provides: erlang-orber = %{version}-%{release}
+Provides: erlang-os_mon = %{version}-%{release}
+Provides: erlang-otp_mibs = %{version}-%{release}
+Provides: erlang-parsetools = %{version}-%{release}
+Provides: erlang-percept = %{version}-%{release}
+Provides: erlang-pman = %{version}-%{release}
+Provides: erlang-public_key = %{version}-%{release}
+Provides: erlang-runtime_tools = %{version}-%{release}
+Provides: erlang-sasl = %{version}-%{release}
+Provides: erlang-snmp = %{version}-%{release}
+Provides: erlang-ssh = %{version}-%{release}
+Provides: erlang-ssl = %{version}-%{release}
+Provides: erlang-stdlib = %{version}-%{release}
+Provides: erlang-syntax_tools = %{version}-%{release}
+Provides: erlang-test_server = %{version}-%{release}
+Provides: erlang-toolbar = %{version}-%{release}
+Provides: erlang-tools = %{version}-%{release}
+Provides: erlang-tv = %{version}-%{release}
+Provides: erlang-typer = %{version}-%{release}
+Provides: erlang-webtool = %{version}-%{release}
+Provides: erlang-xmerl = %{version}-%{release}
+
+%description
+Erlang is a general-purpose programming language and runtime
+environment. Erlang has built-in support for concurrency, distribution
+and fault tolerance. Erlang is used in several large telecommunication
+systems from Ericsson.
+
+
+%package doc
+Summary: Erlang documentation
+Group: Development/Languages
+
+%description doc
+Documentation for Erlang.
+
+
+%prep
+%setup -q -n otp_src_%{ver}%{rel}
+#%setup -q -n otp_src_%{ver}
+
+%build
+# WARN: --enable-dynamic-ssl-lib needed for preventing strange messages about missing dependencies on EPEL
+# see https://bugzilla.redhat.com/458646 and https://bugzilla.redhat.com/499525
+%ifarch sparcv9 sparc64
+CFLAGS="$RPM_OPT_FLAGS -mcpu=ultrasparc -fno-strict-aliasing" %configure --enable-dynamic-ssl-lib
+%else
+CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" %configure --enable-dynamic-ssl-lib
+%endif
+chmod -R u+w .
+make
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make INSTALL_PREFIX=$RPM_BUILD_ROOT install
+
+# clean up
+find $RPM_BUILD_ROOT%{_libdir}/erlang -perm 0775 | xargs chmod 755
+find $RPM_BUILD_ROOT%{_libdir}/erlang -name Makefile | xargs chmod 644
+find $RPM_BUILD_ROOT%{_libdir}/erlang -name \*.o | xargs chmod 644
+find $RPM_BUILD_ROOT%{_libdir}/erlang -name \*.bat | xargs rm -f
+find $RPM_BUILD_ROOT%{_libdir}/erlang -name index.txt.old | xargs rm -f
+
+# doc
+mkdir -p erlang_doc
+tar -C erlang_doc -zxf %{SOURCE1}
+tar -C $RPM_BUILD_ROOT/%{_libdir}/erlang -zxf %{SOURCE2}
+
+# make links to binaries
+#mkdir -p $RPM_BUILD_ROOT/%{_bindir}
+#cd $RPM_BUILD_ROOT/%{_bindir}
+#for file in erl erlc escript dialyzer
+#do
+# ln -sf ../%{_lib}/erlang/bin/$file .
+#done
+
+# remove buildroot from installed files
+cd $RPM_BUILD_ROOT/%{_libdir}/erlang
+sed -i "s|$RPM_BUILD_ROOT||" erts*/bin/{erl,start} releases/RELEASES bin/{erl,start}
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS EPLICENCE README.md
+%{_bindir}/*
+%{_libdir}/erlang
+
+
+%files doc
+%defattr(-,root,root)
+%doc erlang_doc/*
+
+
+%post
+%{_libdir}/erlang/Install -minimal %{_libdir}/erlang >/dev/null 2>/dev/null
+
+
+%changelog
+* Wed Sep 29 2010 Anthony Molinaro - R14B-00.1
+- modified R13B04 spec to work with R14B
+
+* Wed Jul 7 2010 Anthony Molinaro - R13B-04.1
+- modified the R12B spec to work with R13B04
+
+* Mon Jun 7 2010 Peter Lemenkov - R12B-5.10
+- Added missing virtual provides erlang-erts
+
+* Tue May 25 2010 Peter Lemenkov - R12B-5.9
+- Use java-1.4.2 only for EL-[45]
+- Added virtual provides for each erlang module
+- Small typo fix
+
+* Mon Apr 19 2010 Peter Lemenkov - R12B-5.8
+- Patches rebased
+- Added patches 6,7 from trunk
+- Use %%configure
+
+* Tue Apr 21 2009 Debarshi Ray R12B-5.7
+- Updated rpath patch.
+- Fixed configure to respect $RPM_OPT_FLAGS.
+
+* Sun Mar 1 2009 Gerard Milmeister - R12B-5.6
+- new release R12B-5
+- link escript and dialyzer to %{_bindir}
+
+* Tue Feb 24 2009 Fedora Release Engineering - R12B-5.5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Sat Feb 14 2009 Dennis Gilmore - R12B-4.5
+- fix sparc arches to compile
+
+* Fri Jan 16 2009 Tomas Mraz - R12B-4.4
+- rebuild with new openssl
+
+* Sat Oct 25 2008 Gerard Milmeister - R12B-4.1
+- new release R12B-4
+
+* Fri Sep 5 2008 Gerard Milmeister - R12B-3.3
+- fixed sslrpath patch
+
+* Thu Jul 17 2008 Tom "spot" Callaway - R12B-3.2
+- fix license tag
+
+* Sun Jul 6 2008 Gerard Milmeister - R12B-3.1
+- new release R12B-3
+
+* Thu Mar 27 2008 Gerard Milmeister - R12B-1.1
+- new release R12B-1
+
+* Sat Feb 23 2008 Gerard Milmeister - R12B-0.3
+- disable strict aliasing optimization
+
+* Mon Feb 18 2008 Fedora Release Engineering - R12B-0.2
+- Autorebuild for GCC 4.3
+
+* Sat Dec 8 2007 Gerard Milmeister - R12B-0.1
+- new release R12B-0
+
+* Wed Dec 05 2007 Release Engineering - R11B-6
+ - Rebuild for deps
+
+* Sun Aug 19 2007 Gerard Milmeister - R11B-5.3
+- fix some permissions
+
+* Sat Aug 18 2007 Gerard Milmeister - R11B-5.2
+- enable dynamic linking for ssl
+
+* Sat Aug 18 2007 Gerard Milmeister - R11B-5.1
+- new release R11B-5
+
+* Sat Mar 24 2007 Thomas Fitzsimmons - R11B-2.4
+- Require java-1.5.0-gcj-devel for build.
+
+* Sun Dec 31 2006 Gerard Milmeister - R11B-2.3
+- remove buildroot from installed files
+
+* Sat Dec 30 2006 Gerard Milmeister - R11B-2.2
+- added patch for compiling with glibc 2.5
+
+* Sat Dec 30 2006 Gerard Milmeister - R11B-2.1
+- new version R11B-2
+
+* Mon Aug 28 2006 Gerard Milmeister - R11B-0.3
+- Rebuild for FE6
+
+* Wed Jul 5 2006 Gerard Milmeister - R11B-0.2
+- add BR m4
+
+* Thu May 18 2006 Gerard Milmeister - R11B-0.1
+- new version R11B-0
+
+* Wed May 3 2006 Gerard Milmeister - R10B-10.3
+- added patch for run_erl by Knut-HÃ¥vard Aksnes
+
+* Mon Mar 13 2006 Gerard Milmeister - R10B-10.1
+- new version R10B-10
+
+* Thu Dec 29 2005 Gerard Milmeister - R10B-9.1
+- New Version R10B-9
+
+* Sat Oct 29 2005 Gerard Milmeister - R10B-8.2
+- updated rpath patch
+
+* Sat Oct 29 2005 Gerard Milmeister - R10B-8.1
+- New Version R10B-8
+
+* Sat Oct 1 2005 Gerard Milmeister - R10B-6.4
+- Added tk-devel and tcl-devel to buildreq
+- Added tk to req
+
+* Tue Sep 6 2005 Gerard Milmeister - R10B-6.3
+- Remove perl BuildRequires
+
+* Tue Aug 30 2005 Gerard Milmeister - R10B-6.2
+- change /usr/lib to %%{_libdir}
+- redirect output in %%post to /dev/null
+- add unixODBC-devel to BuildRequires
+- split doc off to erlang-doc package
+
+* Sat Jun 25 2005 Gerard Milmeister - R10B-6.1
+- New Version R10B-6
+
+* Sun Feb 13 2005 Gerard Milmeister - R10B-3.1
+- New Version R10B-3
+
+* Mon Dec 27 2004 Gerard Milmeister - 0:R10B-2-0.fdr.1
+- New Version R10B-2
+
+* Wed Oct 6 2004 Gerard Milmeister - 0:R10B-0.fdr.1
+- New Version R10B
+
+* Thu Oct 16 2003 Gerard Milmeister - 0:R9B-1.fdr.1
+- First Fedora release
diff --git a/freeswitch-sounds-en-us-callie.spec b/freeswitch-sounds-en-us-callie.spec
index dabf1e45de..468911c53d 100644
--- a/freeswitch-sounds-en-us-callie.spec
+++ b/freeswitch-sounds-en-us-callie.spec
@@ -2,7 +2,7 @@
# Copyright and license
##############################################################################
#
-# Spec file for package freeswitch-sounds-en-us-callie (version 1.0.16-8)
+# Spec file for package freeswitch-sounds-en-us-callie (version 1.0.18-1)
#
# Copyright (c) 2009 Patrick Laimbock
# Some fixes and additions (c) 2011 Michal Bielicki
@@ -14,20 +14,51 @@
# Determine distribution
##############################################################################
-%define is_rhel5 %(test -f /etc/redhat-release && egrep -q 'release 5' /etc/redhat-release && echo 1 || echo 0)
+# %define is_rhel5 %(test -f /etc/redhat-release && egrep -q 'release 5' /etc/redhat-release && echo 1 || echo 0)
##############################################################################
# Set variables
##############################################################################
-%define version 1.0.16
-%define release 1
+%define version %{VERSION_NUMBER}
+%define release %{BUILD_NUMBER}
%define fsname freeswitch
# you could add a version number to be more strict
-%define prefix /opt/freeswitch
-%define _prefix %{prefix}
+%define PREFIX %{_prefix}
+%define EXECPREFIX %{_exec_prefix}
+%define BINDIR %{_bindir}
+%define SBINDIR %{_sbindir}
+%define LIBEXECDIR %{_libexecdir}/%{fsname}
+%define SYSCONFDIR %{_sysconfdir}/%{fsname}
+%define SHARESTATEDIR %{_sharedstatedir}/%{fsname}
+%define LOCALSTATEDIR %{_localstatedir}/lib/%{fsname}
+%define LIBDIR %{_libdir}
+%define INCLUDEDIR %{_includedir}
+%define _datarootdir %{_prefix}/share
+%define DATAROOTDIR %{_datarootdir}
+%define DATADIR %{_datadir}
+%define INFODIR %{_infodir}
+%define LOCALEDIR %{_datarootdir}/locale
+%define MANDIR %{_mandir}
+%define DOCDIR %{_defaultdocdir}/%{fsname}
+%define HTMLDIR %{_defaultdocdir}/%{fsname}/html
+%define DVIDIR %{_defaultdocdir}/%{fsname}/dvi
+%define PDFDIR %{_defaultdocdir}/%{fsname}/pdf
+%define PSDIR %{_defaultdocdir}/%{fsname}/ps
+%define LOGFILEDIR /var/log/%{fsname}
+%define MODINSTDIR %{_libdir}/%{fsname}/mod
+%define RUNDIR %{_localstatedir}/run/%{fsname}
+%define DBDIR %{LOCALSTATEDIR}/db
+%define HTDOCSDIR %{_datarootdir}/%{fsname}/htdocs
+%define SOUNDSDIR %{_datarootdir}/%{fsname}/sounds
+%define GRAMMARDIR %{_datarootdir}/%{fsname}/grammar
+%define SCRIPTDIR %{_datarootdir}/%{fsname}/scripts
+%define RECORDINGSDIR %{LOCALSTATEDIR}/recordings
+%define PKGCONFIGDIR %{_datarootdir}/%{fsname}/pkgconfig
+%define HOMEDIR %{LOCALSTATEDIR}
+
##############################################################################
# General
@@ -142,13 +173,13 @@ done' > ./us/callie/buildsounds-callie.sh
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
# create the sounds directories
-%{__install} -d -m 0750 %{buildroot}%{_prefix}/sounds/en/us/callie
+%{__install} -d -m 0750 %{buildroot}%{SOUNDSDIR}/en/us/callie
pushd us/callie
# first install the 48KHz sounds
-%{__cp} -prv ./* %{buildroot}%{_prefix}/sounds/en/us/callie
+%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/en/us/callie
# now resample the 48KHz ones to 8KHz, 16KHz and 32KHz
-./buildsounds-callie.sh %{buildroot}%{_prefix}/sounds/en/us/callie
+./buildsounds-callie.sh %{buildroot}%{SOUNDSDIR}/en/us/callie
popd
##############################################################################
@@ -164,8 +195,8 @@ popd
%post
# generate the 8KHz, 16KHz and 32KHz prompts from the 48KHz ones
-cd %{_prefix}/sounds/en/us/callie
-./buildsounds-callie.sh %{_prefix}/sounds/en/us/callie
+cd %{SOUNDSDIR}/en/us/callie
+./buildsounds-callie.sh %{SOUNDSDIR}/en/us/callie
##############################################################################
# Postun
@@ -182,115 +213,115 @@ cd %{_prefix}/sounds/en/us/callie
%files
%defattr(-,root,root)
-%attr(0750,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/buildsounds-callie.sh
+%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/buildsounds-callie.sh
%files -n freeswitch-sounds-en-us-callie-8000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ascii/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/base256/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/conference/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/currency/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/digits/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/directory/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ivr/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/misc/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/phonetic-ascii/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/time/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/voicemail/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/zrtp/8000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ascii/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/base256/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/conference/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/currency/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/digits/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/directory/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ivr/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/misc/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/phonetic-ascii/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/time/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/voicemail/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/zrtp/8000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ascii/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/base256/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/conference/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/currency/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/digits/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/directory/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ivr/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/misc/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/phonetic-ascii/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/time/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/voicemail/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/zrtp/8000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ascii/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/base256/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/conference/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/currency/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/digits/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/directory/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ivr/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/misc/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/phonetic-ascii/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/time/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/voicemail/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/zrtp/8000/*.wav
%files -n freeswitch-sounds-en-us-callie-16000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ascii/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/base256/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/conference/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/currency/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/digits/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/directory/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ivr/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/misc/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/phonetic-ascii/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/time/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/voicemail/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/zrtp/16000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ascii/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/base256/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/conference/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/currency/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/digits/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/directory/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ivr/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/misc/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/phonetic-ascii/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/time/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/voicemail/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/zrtp/16000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ascii/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/base256/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/conference/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/currency/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/digits/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/directory/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ivr/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/misc/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/phonetic-ascii/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/time/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/voicemail/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/zrtp/16000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ascii/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/base256/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/conference/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/currency/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/digits/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/directory/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ivr/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/misc/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/phonetic-ascii/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/time/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/voicemail/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/zrtp/16000/*.wav
%files -n freeswitch-sounds-en-us-callie-32000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ascii/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/base256/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/conference/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/currency/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/digits/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/directory/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ivr/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/misc/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/phonetic-ascii/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/time/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/voicemail/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/zrtp/32000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ascii/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/base256/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/conference/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/currency/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/digits/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/directory/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ivr/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/misc/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/phonetic-ascii/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/time/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/voicemail/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/zrtp/32000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ascii/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/base256/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/conference/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/currency/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/digits/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/directory/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ivr/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/misc/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/phonetic-ascii/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/time/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/voicemail/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/zrtp/32000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ascii/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/base256/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/conference/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/currency/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/digits/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/directory/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ivr/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/misc/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/phonetic-ascii/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/time/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/voicemail/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/zrtp/32000/*.wav
%files -n freeswitch-sounds-en-us-callie-48000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ascii/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/base256/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/conference/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/currency/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/digits/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/directory/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/ivr/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/misc/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/phonetic-ascii/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/time/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/voicemail/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/en/us/callie/zrtp/48000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ascii/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/base256/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/conference/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/currency/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/digits/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/directory/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/ivr/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/misc/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/phonetic-ascii/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/time/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/voicemail/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/en/us/callie/zrtp/48000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ascii/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/base256/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/conference/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/currency/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/digits/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/directory/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/ivr/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/misc/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/phonetic-ascii/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/time/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/voicemail/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/us/callie/zrtp/48000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ascii/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/base256/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/conference/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/currency/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/digits/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/directory/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/ivr/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/misc/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/phonetic-ascii/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/time/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/voicemail/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/zrtp/48000/*.wav
%files -n freeswitch-sounds-en-us-callie-all
@@ -299,6 +330,9 @@ cd %{_prefix}/sounds/en/us/callie
##############################################################################
%changelog
+* Sun Mar 05 2012 Ken Rice - 1.0.18-1
+- update to FHS Layout for FreeSWITCH
+- bump up version
* Sun May 22 2011 Michal Bielicki - 1.0.16-1
- bump up version
* Tue Jan 18 2011 Michal Bielicki - 1.0.14-1
diff --git a/freeswitch-sounds-music.spec b/freeswitch-sounds-music.spec
index 6864e10fa3..e43ada5736 100644
--- a/freeswitch-sounds-music.spec
+++ b/freeswitch-sounds-music.spec
@@ -1,11 +1,41 @@
-%define prefix /opt/freeswitch
-%define _prefix %{prefix}
+%define PREFIX %{_prefix}
+%define EXECPREFIX %{_exec_prefix}
+%define BINDIR %{_bindir}
+%define SBINDIR %{_sbindir}
+%define LIBEXECDIR %{_libexecdir}/%{fsname}
+%define SYSCONFDIR %{_sysconfdir}/%{fsname}
+%define SHARESTATEDIR %{_sharedstatedir}/%{fsname}
+%define LOCALSTATEDIR %{_localstatedir}/lib/%{fsname}
+%define LIBDIR %{_libdir}
+%define INCLUDEDIR %{_includedir}
+%define _datarootdir %{_prefix}/share
+%define DATAROOTDIR %{_datarootdir}
+%define DATADIR %{_datadir}
+%define INFODIR %{_infodir}
+%define LOCALEDIR %{_datarootdir}/locale
+%define MANDIR %{_mandir}
+%define DOCDIR %{_defaultdocdir}/%{fsname}
+%define HTMLDIR %{_defaultdocdir}/%{fsname}/html
+%define DVIDIR %{_defaultdocdir}/%{fsname}/dvi
+%define PDFDIR %{_defaultdocdir}/%{fsname}/pdf
+%define PSDIR %{_defaultdocdir}/%{fsname}/ps
+%define LOGFILEDIR /var/log/%{fsname}
+%define MODINSTDIR %{_libdir}/%{fsname}/mod
+%define RUNDIR %{_localstatedir}/run/%{fsname}
+%define DBDIR %{LOCALSTATEDIR}/db
+%define HTDOCSDIR %{_datarootdir}/%{fsname}/htdocs
+%define SOUNDSDIR %{_datarootdir}/%{fsname}/sounds
+%define GRAMMARDIR %{_datarootdir}/%{fsname}/grammar
+%define SCRIPTDIR %{_datarootdir}/%{fsname}/scripts
+%define RECORDINGSDIR %{LOCALSTATEDIR}/recordings
+%define PKGCONFIGDIR %{_datarootdir}/%{fsname}/pkgconfig
+%define HOMEDIR %{LOCALSTATEDIR}
Summary: FreeSWITCH Music on Hold soundfiles
Name: freeswitch-sounds-music
Version: 1.0.8
-Release: 1%{?dist}
+Release: 2%{?dist}
License: MPL
Group: Productivity/Telephony/Servers
Packager: Joseph L. Casale
@@ -80,8 +110,8 @@ FreeSWITCH 48kHz Music On Hold soundfiles
%install
%{__rm} -rf %{buildroot}
-%{__install} -d -m 0750 %{buildroot}/%{_prefix}/sounds/music/{8000,16000,32000,48000}
-%{__cp} -prv ./{8000,16000,32000,48000} %{buildroot}%{_prefix}/sounds/music
+%{__install} -d -m 0750 %{buildroot}/%{SOUNDSDIR}/music/{8000,16000,32000,48000}
+%{__cp} -prv ./{8000,16000,32000,48000} %{buildroot}%{SOUNDSDIR}/music
%clean
@@ -99,28 +129,30 @@ FreeSWITCH 48kHz Music On Hold soundfiles
%files -n freeswitch-sounds-music-8000
%defattr(-,root,root,-)
-%dir %{_prefix}/sounds/music/8000
-%{_prefix}/sounds/music/8000/*.wav
+%dir %{SOUNDSDIR}/music/8000
+%{SOUNDSDIR}/music/8000/*.wav
%files -n freeswitch-sounds-music-16000
%defattr(-,root,root,-)
-%dir %{_prefix}/sounds/music/16000
-%{_prefix}/sounds/music/16000/*.wav
+%dir %{SOUNDSDIR}/music/16000
+%{SOUNDSDIR}/music/16000/*.wav
%files -n freeswitch-sounds-music-32000
%defattr(-,root,root,-)
-%dir %{_prefix}/sounds/music/32000
-%{_prefix}/sounds/music/32000/*.wav
+%dir %{SOUNDSDIR}/music/32000
+%{SOUNDSDIR}/music/32000/*.wav
%files -n freeswitch-sounds-music-48000
%defattr(-,root,root,-)
-%dir %{_prefix}/sounds/music/48000
-%{_prefix}/sounds/music/48000/*.wav
+%dir %{SOUNDSDIR}/music/48000
+%{SOUNDSDIR}/music/48000/*.wav
%changelog
+* Sat Jul 16 2011 Joseph Casale 1.0.8-2
+- Fix up for FreeSWITCH FHS and AutoBuild System
* Sat Jul 16 2011 Joseph Casale 1.0.8-1
-- Initial release
\ No newline at end of file
+- Initial release
diff --git a/freeswitch-sounds-ru-RU-elena.spec b/freeswitch-sounds-ru-RU-elena.spec
index 5edc0a6bae..99e913b4d3 100644
--- a/freeswitch-sounds-ru-RU-elena.spec
+++ b/freeswitch-sounds-ru-RU-elena.spec
@@ -20,14 +20,48 @@
# Set variables
##############################################################################
-%define version 1.0.13
-%define release 1
+%define version %{VERSION_NUMBER}
+%define release %{BUILD_NUMBER}
%define fsname freeswitch
# you could add a version number to be more strict
-%define prefix /opt/freeswitch
-%define _prefix %{prefix}
+%define PREFIX %{_prefix}
+%define EXECPREFIX %{_exec_prefix}
+%define BINDIR %{_bindir}
+%define SBINDIR %{_sbindir}
+%define LIBEXECDIR %{_libexecdir}/%{fsname}
+%define SYSCONFDIR %{_sysconfdir}/%{fsname}
+%define SHARESTATEDIR %{_sharedstatedir}/%{fsname}
+%define LOCALSTATEDIR %{_localstatedir}/lib/%{fsname}
+%define LIBDIR %{_libdir}
+%define INCLUDEDIR %{_includedir}
+%define _datarootdir %{_prefix}/share
+%define DATAROOTDIR %{_datarootdir}
+%define DATADIR %{_datadir}
+%define INFODIR %{_infodir}
+%define LOCALEDIR %{_datarootdir}/locale
+%define MANDIR %{_mandir}
+%define DOCDIR %{_defaultdocdir}/%{fsname}
+%define HTMLDIR %{_defaultdocdir}/%{fsname}/html
+%define DVIDIR %{_defaultdocdir}/%{fsname}/dvi
+%define PDFDIR %{_defaultdocdir}/%{fsname}/pdf
+%define PSDIR %{_defaultdocdir}/%{fsname}/ps
+%define LOGFILEDIR /var/log/%{fsname}
+%define MODINSTDIR %{_libdir}/%{fsname}/mod
+%define RUNDIR %{_localstatedir}/run/%{fsname}
+%define DBDIR %{LOCALSTATEDIR}/db
+%define HTDOCSDIR %{_datarootdir}/%{fsname}/htdocs
+%define SOUNDSDIR %{_datarootdir}/%{fsname}/sounds
+%define GRAMMARDIR %{_datarootdir}/%{fsname}/grammar
+%define SCRIPTDIR %{_datarootdir}/%{fsname}/scripts
+%define RECORDINGSDIR %{LOCALSTATEDIR}/recordings
+%define PKGCONFIGDIR %{_datarootdir}/%{fsname}/pkgconfig
+%define HOMEDIR %{LOCALSTATEDIR}
+
+
+
+
##############################################################################
# General
@@ -141,13 +175,13 @@ done' > ./RU/elena/buildsounds-elena.sh
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
# create the sounds directories
-%{__install} -d -m 0750 %{buildroot}%{_prefix}/sounds/ru/RU/elena
+%{__install} -d -m 0750 %{buildroot}%{SOUNDSDIR}/ru/RU/elena
pushd RU/elena
# first install the 48KHz sounds
-%{__cp} -prv ./* %{buildroot}%{_prefix}/sounds/ru/RU/elena
+%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/ru/RU/elena
# now resample the 48KHz ones to 8KHz, 16KHz and 32KHz
-./buildsounds-elena.sh %{buildroot}%{_prefix}/sounds/ru/RU/elena
+./buildsounds-elena.sh %{buildroot}%{SOUNDSDIR}/ru/RU/elena
popd
##############################################################################
@@ -163,8 +197,8 @@ popd
%post
# generate the 8KHz, 16KHz and 32KHz prompts from the 48KHz ones
-cd %{_prefix}/sounds/ru/RU/elena
-./buildsounds-elena.sh %{_prefix}/sounds/ru/RU/elena
+cd %{SOUNDSDIR}/ru/RU/elena
+./buildsounds-elena.sh %{SOUNDSDIR}/ru/RU/elena
##############################################################################
# Postun
@@ -181,123 +215,123 @@ cd %{_prefix}/sounds/ru/RU/elena
%files
%defattr(-,root,root)
-%attr(0750,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/buildsounds-elena.sh
+%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/buildsounds-elena.sh
%files -n freeswitch-sounds-ru-RU-elena-8000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ascii/8000
-#%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/base256/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/conference/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/currency/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/digits/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/directory/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ivr/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/misc/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/time/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/voicemail/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/zrtp/8000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/users/8000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ascii/8000/*.wav
-#%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/base256/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/conference/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/currency/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/digits/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/directory/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ivr/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/misc/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/time/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/voicemail/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/zrtp/8000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/users/8000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ascii/8000
+#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/base256/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/conference/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/currency/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/digits/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/directory/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ivr/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/misc/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/time/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/voicemail/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/zrtp/8000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/users/8000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ascii/8000/*.wav
+#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/base256/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/conference/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/currency/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/digits/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/directory/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ivr/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/misc/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/time/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/voicemail/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/zrtp/8000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/users/8000/*.wav
%files -n freeswitch-sounds-ru-RU-elena-16000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ascii/16000
-#%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/base256/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/conference/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/currency/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/digits/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/directory/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ivr/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/misc/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/time/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/voicemail/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/zrtp/16000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/users/16000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ascii/16000/*.wav
-#%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/base256/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/conference/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/currency/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/digits/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/directory/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ivr/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/misc/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/time/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/voicemail/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/zrtp/16000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/users/16000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ascii/16000
+#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/base256/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/conference/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/currency/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/digits/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/directory/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ivr/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/misc/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/time/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/voicemail/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/zrtp/16000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/users/16000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ascii/16000/*.wav
+#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/base256/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/conference/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/currency/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/digits/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/directory/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ivr/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/misc/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/time/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/voicemail/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/zrtp/16000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/users/16000/*.wav
%files -n freeswitch-sounds-ru-RU-elena-32000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ascii/32000
-#%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/base256/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/conference/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/currency/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/digits/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/directory/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ivr/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/misc/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/time/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/voicemail/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/zrtp/32000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/users/32000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ascii/32000/*.wav
-#%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/base256/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/conference/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/currency/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/digits/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/directory/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ivr/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/misc/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/time/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/voicemail/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/zrtp/32000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/users/32000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ascii/32000
+#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/base256/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/conference/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/currency/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/digits/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/directory/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ivr/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/misc/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/time/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/voicemail/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/zrtp/32000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/users/32000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ascii/32000/*.wav
+#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/base256/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/conference/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/currency/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/digits/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/directory/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ivr/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/misc/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/time/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/voicemail/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/zrtp/32000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/users/32000/*.wav
%files -n freeswitch-sounds-ru-RU-elena-48000
%defattr(-,root,root,-)
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ascii/48000
-#%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/base256/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/conference/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/currency/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/digits/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/directory/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/ivr/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/misc/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/time/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/voicemail/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/zrtp/48000
-%attr(0750,freeswitch,daemon) %dir %{_prefix}/sounds/ru/RU/elena/users/48000
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ascii/48000/*.wav
-#%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/base256/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/conference/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/currency/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/digits/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/directory/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/ivr/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/misc/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/phonetic-ascii/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/time/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/voicemail/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/zrtp/48000/*.wav
-%attr(0640,freeswitch,daemon) %{_prefix}/sounds/ru/RU/elena/users/48000/*.wav
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ascii/48000
+#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/base256/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/conference/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/currency/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/digits/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/directory/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/ivr/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/misc/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/time/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/voicemail/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/zrtp/48000
+%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/ru/RU/elena/users/48000
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ascii/48000/*.wav
+#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/base256/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/conference/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/currency/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/digits/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/directory/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/ivr/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/misc/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/phonetic-ascii/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/time/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/voicemail/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/zrtp/48000/*.wav
+%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/users/48000/*.wav
%files -n freeswitch-sounds-ru-RU-elena-all
@@ -306,5 +340,7 @@ cd %{_prefix}/sounds/ru/RU/elena
##############################################################################
%changelog
+* Mon Mar 06 2012 Ken Rice - 1.0.13-2
+- created out of the spec file for elena
* Mon Jul 11 2011 Michal Bielicki - 1.0.13-1
- created out of the spec file for elena
diff --git a/freeswitch.spec b/freeswitch.spec
index b99f1c68d5..6fd9ad706e 100644
--- a/freeswitch.spec
+++ b/freeswitch.spec
@@ -32,30 +32,78 @@
%define build_sng_ss7 0
%define build_sng_tc 0
%define build_py26_esl 0
+%define build_timerfd 0
+%define build_mod_esl 0
+
%{?with_sang_tc:%define build_sng_tc 1 }
%{?with_sang_isdn:%define build_sng_isdn 1 }
%{?with_sang_ss7:%define build_sng_ss7 1 }
%{?with_py26_esl:%define build_py26_esl 1 }
+%{?with_timerfd:%define build_timerfd 1 }
+%{?with_mod_esl:%define build_mod_esl 1 }
+
+%define version %{VERSION_NUMBER}
+%define release %{BUILD_NUMBER}
######################################################################################################################
#
# disable rpath checking
-%define __arch_install_post /usr/lib/rpm/check-buildroot
-%define _prefix /opt/freeswitch
-%define prefix %{_prefix}
-%define sysconfdir /opt/freeswitch/conf
-%define _sysconfdir %{sysconfdir}
-%define logfiledir /var/log/freeswitch
-%define runtimedir /var/run/freeswitch
+#%define __arch_install_post /usr/lib/rpm/check-buildroot
+#%define _prefix /usr
+#%define prefix %{_prefix}
+#%define sysconfdir /etc/freeswitch
+#%define _sysconfdir %{sysconfdir}
+#%define logfiledir /var/log/freeswitch
+#%define _logfiledir %{logfiledir}
+#%define runtimedir /var/run/freeswitch
+#%define _runtimedir %{runtimedir}
+
+######################################################################################################################
+# Layout of packages FHS (Redhat/SUSE), FS (Standard FreeSWITCH layout using /usr/local), OPT (/opt based layout)
+%define packagelayout FHS
+
+%define PREFIX %{_prefix}
+%define EXECPREFIX %{_exec_prefix}
+%define BINDIR %{_bindir}
+%define SBINDIR %{_sbindir}
+%define LIBEXECDIR %{_libexecdir}/%name
+%define SYSCONFDIR %{_sysconfdir}/%name
+%define SHARESTATEDIR %{_sharedstatedir}/%name
+%define LOCALSTATEDIR %{_localstatedir}/lib/%name
+%define LIBDIR %{_libdir}
+%define INCLUDEDIR %{_includedir}
+%define _datarootdir %{_prefix}/share
+%define DATAROOTDIR %{_datarootdir}
+%define DATADIR %{_datadir}
+%define INFODIR %{_infodir}
+%define LOCALEDIR %{_datarootdir}/locale
+%define MANDIR %{_mandir}
+%define DOCDIR %{_defaultdocdir}/%name
+%define HTMLDIR %{_defaultdocdir}/%name/html
+%define DVIDIR %{_defaultdocdir}/%name/dvi
+%define PDFDIR %{_defaultdocdir}/%name/pdf
+%define PSDIR %{_defaultdocdir}/%name/ps
+%define LOGFILEDIR /var/log/%name
+%define MODINSTDIR %{_libdir}/%name/mod
+%define RUNDIR %{_localstatedir}/run/%name
+%define DBDIR %{LOCALSTATEDIR}/db
+%define HTDOCSDIR %{_datarootdir}/%name/htdocs
+%define SOUNDSDIR %{_datarootdir}/%name/sounds
+%define GRAMMARDIR %{_datarootdir}/%name/grammar
+%define SCRIPTDIR %{_datarootdir}/%name/scripts
+%define RECORDINGSDIR %{LOCALSTATEDIR}/recordings
+%define PKGCONFIGDIR %{_datarootdir}/%name/pkgconfig
+%define HOMEDIR %{LOCALSTATEDIR}
+
Name: freeswitch
Summary: FreeSWITCH open source telephony platform
-License: MPL
+License: MPL1.1
Group: Productivity/Telephony/Servers
-Version: 1.0.7
-Release: trunk
+Version: %{version}
+Release: %{release}%{?dist}
URL: http://www.freeswitch.org/
-Packager: Michal Bielicki
+Packager: Ken Rice
Vendor: http://www.freeswitch.org/
######################################################################################################################
@@ -65,13 +113,13 @@ Vendor: http://www.freeswitch.org/
######################################################################################################################
Source0: http://files.freeswitch.org/%{name}-%{version}.tar.bz2
Source1: http://files.freeswitch.org/downloads/libs/celt-0.10.0.tar.gz
-Source2: http://files.freeswitch.org/downloads/libs/flite-1.3.99-latest.tar.gz
+Source2: http://files.freeswitch.org/downloads/libs/flite-1.5.1-current.tar.bz2
Source3: http://files.freeswitch.org/downloads/libs/lame-3.97.tar.gz
Source4: http://files.freeswitch.org/downloads/libs/libshout-2.2.2.tar.gz
Source5: http://files.freeswitch.org/downloads/libs/mpg123-1.13.2.tar.gz
Source6: http://files.freeswitch.org/downloads/libs/openldap-2.4.11.tar.gz
Source7: http://files.freeswitch.org/downloads/libs/pocketsphinx-0.7.tar.gz
-Source8: http://files.freeswitch.org/downloads/libs/soundtouch-1.5.0.tar.gz
+Source8: http://files.freeswitch.org/downloads/libs/soundtouch-1.6.0.tar.gz
Source9: http://files.freeswitch.org/downloads/libs/sphinxbase-0.7.tar.gz
Source10: http://files.freeswitch.org/downloads/libs/communicator_semi_6000_20080321.tar.gz
Source11: http://files.freeswitch.org/downloads/libs/libmemcached-0.32.tar.gz
@@ -199,15 +247,374 @@ Requires: %{name} = %{version}-%{release}
%description devel
FreeSWITCH development files
-%package codec-passthru-amrwb
-Summary: Pass-through AMR WideBand Codec support for FreeSWITCH open source telephony platform
+######################################################################################################################
+# FreeSWITCH Application Modules
+######################################################################################################################
+%package application-abstraction
+Summary: FreeSWITCH mod_abstraction
Group: System/Libraries
Requires: %{name} = %{version}-%{release}
-Conflicts: codec-amrwb
-%description codec-passthru-amrwb
-Pass-through AMR WideBand Codec support for FreeSWITCH open source telephony platform
+%description application-abstraction
+Provide an abstraction to FreeSWITCH API calls
+%package application-avmd
+Summary: FreeSWITCH voicemail detector
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-avmd
+Provide an voicemail beep detector for FreeSWITCH
+
+%package application-blacklist
+Summary: FreeSWITCH blacklist module
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-blacklist
+Provide black/white listing of various fields used for routing calls in
+FreeSWITCH
+
+%package application-callcenter
+Summary: FreeSWITCH mod_callcenter Call Queuing Application
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-callcenter
+Provide Automated Call Distribution capabilities for FreeSWITCH
+
+%package application-cidlookup
+Summary: FreeSWITCH mod_cidlookup
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-cidlookup
+Provide FreeSWITCH access to third party CallerID Name Databases via HTTP
+
+%package application-conference
+Summary: FreeSWITCH mod_conference
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-conference
+Provide FreeSWITCH Conference Bridge Services.
+
+%package application-curl
+Summary: FreeSWITCH mod_curl
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-curl
+Provide FreeSWITCH dialplan access to CURL
+
+%package application-db
+Summary: FreeSWITCH mod_db
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-db
+mod_db implements an API and dialplan interface to a database backend for
+FreeSWITCH. The database can either be in sqlite or ODBC. It also provides
+support for group dialing and provides database backed limit interface.
+
+%package application-directory
+Summary: FreeSWITCH mod_directory
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-directory
+Provides FreeSWITCH mod_directory, a dial by name directory application.
+
+%package application-distributor
+Summary: FreeSWITCH mod_distributor
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-distributor
+Provides FreeSWITCH mod_distributor, a simple round-robbin style distribution
+to call gateways.
+
+%package application-easyroute
+Summary: FreeSWITCH mod_easyroute
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-easyroute
+Provides FreeSWITCH mod_easyroute, a simple, easy to use DB Backed DID routing
+Engine. Uses ODBC to connect to the DB of your choice.
+
+%package application-enum
+Summary: FreeSWITCH mod_enum
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-enum
+Provides FreeSWITCH mod_enum, a ENUM dialplan, with API and Dialplan extensions
+supporting ENUM lookups.
+
+%package application-esf
+Summary: FreeSWITCH mod_esf
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-esf
+Provides FreeSWITCH mod_esf, Extra Sip Functionality such as Multicast Support
+
+%if %{build_mod_esl}
+%package application-esl
+Summary: FreeSWITCH mod_esl
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-esl
+Provides FreeSWITCH mod_esl, add api commands for remote ESL commands
+%endif
+
+%package application-expr
+Summary: FreeSWITCH mod_expr
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-expr
+Provides FreeSWITCH mod_expr, implements Brian Allen Vanderburg's ExprEval
+expression evaluation library for FreeSWITCH.
+
+%package application-fifo
+Summary: FreeSWITCH mod_fifo
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-fifo
+Provides FreeSWITCH mod_fifo, a parking-like app which allows you to make
+custom call queues
+
+%package application-fsk
+Summary: FreeSWITCH mod_fsk
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-fsk
+Provides FreeSWITCH mod_fsk, a module to send and receive information via
+Frequency-shift keying
+
+%package application-fsv
+Summary: FreeSWITCH mod_fsv
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-fsv
+Provides FreeSWITCH mod_fsk, implements functions to record and play back video
+
+%package application-hash
+Summary: FreeSWITCH mod_hash
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-hash
+Provides FreeSWITCH mod_hash, implements an API and application interface for
+manipulating a hash table. It also provides a limit backend.
+
+%package application-httapi
+Summary: FreeSWITCH mod_httapi
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-httapi
+Provides FreeSWITCH mod_httapi, provides an HTTP based Telephony API using a
+standard FreeSWITCH application interface as well as a cached http file format
+interface
+
+%package application-http-cache
+Summary: FreeSWITCH mod_http_cache
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-http-cache
+Provides FreeSWITCH mod_http_cache, allows one to make a HTTP GET request to
+cache a document. The primary use case is to download and cache audio files
+from a web server.
+
+%package application-lcr
+Summary: FreeSWITCH mod_lcr
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-lcr
+Provides FreeSWITCH mod_lcr, provide basic Least Cost Routing Services
+
+%package application-limit
+Summary: FreeSWITCH mod_limit
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-limit
+Provides FreeSWITCH mod_limit, provide application to limit both concurrent and call per time period
+
+%package application-memcache
+Summary: FreeSWITCH mod_memcache
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-memcache
+Provides FreeSWITCH mod_memcache, implements an API interface to memcached which
+is a "high-performance, distributed memory object caching system, generic in
+nature, but intended for use in speeding up dynamic web applications by
+alleviating database load."
+
+%package application-nibblebill
+Summary: FreeSWITCH mod_nibblebill
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-nibblebill
+Provides FreeSWITCH mod_nibblebill, provides a credit/debit module for
+FreeSWITCH to allow real-time debiting of credit or cash from a database
+while calls are in progress.
+
+%package application-redis
+Summary: FreeSWITCH mod_redis
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-redis
+Provides FreeSWITCH mod_redis, access to the redis key value pair db system from
+FreeSWITCH
+
+%package application-rss
+Summary: FreeSWITCH mod_rss
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-rss
+Provides FreeSWITCH mod_rss, edisrse and read an XML based RSS feed, then read
+the entries aloud via a TTS engine
+
+%package application-sms
+Summary: FreeSWITCH mod_sms
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-sms
+Provides FreeSWITCH mod_sms, provide a way to route messages in freeswitch,
+potentially allowing one to build a powerful chatting system like in XMPP using
+using SIP SIMPLE on SIP clients
+
+%package application-snapshot
+Summary: FreeSWITCH mod_snapshot
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-snapshot
+Provides FreeSWITCH mod_snapshot, allows recording a sliding window of audio
+and taking snapshots to disk.
+
+%package application-snom
+Summary: FreeSWITCH mod_snom
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-snom
+Provides FreeSWITCH mod_snom, an application for controlling the functionality
+and appearance of the programmable softkeys on Snom phones
+
+%package application-soundtouch
+Summary: FreeSWITCH mod_soundtouch
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-soundtouch
+Provides FreeSWITCH mod_soundtouch, uses the soundtouch library, which can do
+pitch shifting and other audio effects, so you can pipe the audio of a call
+(or any other channel audio) through this module and achieve those effects. You
+can specifically adjust pitch, rate, and tempo.
+
+%package application-spy
+Summary: FreeSWITCH mod_spy
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-spy
+Provides FreeSWITCH mod_spy, implements userspy application which provides
+persistent eavesdrop on all channels bridged to a certain user
+
+%package application-stress
+Summary: FreeSWITCH mod_stress
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-stress
+Provides FreeSWITCH mod_stress. mod_stress attempts to detect stress in a
+person's voice and generates FreeSWITCH events based on that data.
+
+%package application-valet_parking
+Summary: FreeSWITCH mod_valet_parking
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-valet_parking
+Provides FreeSWITCH mod_valet_parking. Provides 'Call Parking' in the switch
+as opposed to on the phone and allows for a number of options to handle call
+retrieval
+
+%package application-voicemail
+Summary: FreeSWITCH mod_voicemail
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-voicemail
+Provides FreeSWITCH mod_voicemail. Implements Voicemail Application
+
+%package application-voicemail-ivr
+Summary: FreeSWITCH mod_voicemail_ivr
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description application-voicemail-ivr
+Provides FreeSWITCH mod_voicemail_ivr. Provides a custimizable audio navigation
+system for backend voicemail systems
+
+######################################################################################################################
+# FreeSWITCH ASR TTS Modules
+######################################################################################################################
+
+%package asrtts-flite
+Summary: FreeSWITCH mod_flite
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description asrtts-flite
+Provides FreeSWITCH mod_flite, a interface to the flite text to speech engine
+
+%package asrtts-pocketsphinx
+Summary: FreeSWITCH mod_pocketsphinx
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description asrtts-pocketsphinx
+Provides FreeSWITCH mod_pocketsphinx, a interface to the OpenSource
+Pocketsphinx speech recognition engine
+
+%package asrtts-tts-commandline
+Summary: FreeSWITCH mod_tts_commandline
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description asrtts-tts-commandline
+Provides FreeSWITCH mod_tts_commandline, Run a command line and play the
+output file.
+
+%package asrtts-unimrcp
+Summary: FreeSWITCH mod_unimrcp
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description asrtts-unimrcp
+Provides FreeSWITCH mod_unimrcp, allows communication with Media Resource
+Control Protocol (MRCP) servers
+
+######################################################################################################################
+# FreeSWITCH Codec Modules
+######################################################################################################################
%package codec-passthru-amr
Summary: Pass-through AMR Codec support for FreeSWITCH open source telephony platform
@@ -218,6 +625,40 @@ Conflicts: codec-amr
%description codec-passthru-amr
Pass-through AMR Codec support for FreeSWITCH open source telephony platform
+%package codec-passthru-amrwb
+Summary: Pass-through AMR WideBand Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Conflicts: codec-amrwb
+
+%description codec-passthru-amrwb
+Pass-through AMR WideBand Codec support for FreeSWITCH open source telephony platform
+
+%package codec-bv
+Summary: BroadVoice16 and BroadVoice32 WideBand Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-bv
+BroadVoice16 and BroadVoice32 WideBand Codec support for FreeSWITCH open source telephony platform
+
+%package codec-celt
+Summary: CELT ultra low delay Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-celt
+CELT ultra low delay Codec support for FreeSWITCH open source telephony platform
+
+%package codec-codec2
+Summary: Codec2 Narrow Band Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-codec2
+CODEC2 narrow band codec support for FreeSWITCH open source telephony platform.
+CODEC2 was created by the developers of Speex.
+
%package codec-passthru-g723_1
Summary: Pass-through g723.1 Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
@@ -231,82 +672,179 @@ Pass-through g723.1 Codec support for FreeSWITCH open source telephony platform
Summary: Pass-through g729 Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
Requires: %{name} = %{version}-%{release}
-Conflicts: codec-g729
+Conflicts: codec-com-g729
%description codec-passthru-g729
Pass-through g729 Codec support for FreeSWITCH open source telephony platform
-%package spidermonkey
-Summary: JavaScript support for the FreeSWITCH open source telephony platform
-Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
-
-%description spidermonkey
-
-%package lua
-Summary: Lua support for the FreeSWITCH open source telephony platform
-Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
-
-%description lua
-
-%package perl
-Summary: Perl support for the FreeSWITCH open source telephony platform
-Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
-Requires: perl
-
-%description perl
-
-%package python
-Summary: Python support for the FreeSWITCH open source telephony platform
+%package codec-h26x
+Summary: H.263/H.264 Video Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
Requires: %{name} = %{version}-%{release}
-Requires: python
-%description python
+%description codec-h26x
+H.263/H.264 Video Codec support for FreeSWITCH open source telephony platform
-
-%package lang-en
-Summary: Provides english language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+%package codec-ilbc
+Summary: iLCB Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
-%description lang-en
-English language phrases module and directory structure for say module and voicemail
+%description codec-ilbc
+iLBC Codec support for FreeSWITCH open source telephony platform
-%package lang-ru
-Summary: Provides russian language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+%package codec-isac
+Summary: iSAC Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
-%description lang-ru
-Russian language phrases module and directory structure for say module and voicemail
+%description codec-isac
+iSAC Codec support for FreeSWITCH open source telephony platform
-%package lang-fr
-Summary: Provides french language dependend modules and speech config for the FreeSWITCH Open Source telephone platform.
+%package codec-mp4v
+Summary: MP4V Video Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
-%description lang-fr
-French language phrases module and directory structure for say module and voicemail
+%description codec-mp4v
+MP4V Video Codec support for FreeSWITCH open source telephony platform
-%package lang-de
-Summary: Provides german language dependend modules and speech config for the FreeSWITCH Open Source telephone platform.
+%package codec-opus
+Summary: Opus Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-opus
+OPUS Codec support for FreeSWITCH open source telephony platform
+
+%if %{build_sng_tc}
+%package sangoma-codec
+Summary: Sangoma D100 and D500 Codec Card Support
+Group: System/Libraries
Requires: %{name} = %{version}-%{release}
+Requires: sng-tc-linux
+BuildRequires: sng-tc-linux
-%description lang-de
-German language phrases module and directory structure for say module and voicemail
+%description sangoma-codec
+Sangoma D100 and D500 Codec Card Support
-%package lang-he
-Summary: Provides hebrew language dependend modules and speech config for the FreeSWITCH Open Source telephone platform.
+%endif
+
+%package codec-silk
+Summary: Silk Codec support for FreeSWITCH open source telephony platform
Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
+Requires: %{name} = %{version}-%{release}
-%description lang-he
-Hebrew language phrases module and directory structure for say module and voicemail
+%description codec-silk
+Silk Codec (from Skype) support for FreeSWITCH open source telephony platform
+%package codec-siren
+Summary: Siren Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-siren
+Siren Codec support for FreeSWITCH open source telephony platform. Using
+mod_siren in a commercial product will require you to acquire a patent license
+directly from Polycom(R) for your company.
+see http://www.polycom.com/usa/en/company/about_us/technology/siren_g7221/siren_g7221.html
+and http://www.polycom.com/usa/en/company/about_us/technology/siren14_g7221c/siren14_g7221c.html
+At the time of this packaging, Polycom does not charge for licensing.
+
+%package codec-speex
+Summary: Speex Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-speex
+Speex Codec support for FreeSWITCH open source telephony platform.
+
+%package codec-theora
+Summary: Theora Video Codec support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description codec-theora
+Theora Video Codec support for FreeSWITCH open source telephony platform.
+
+######################################################################################################################
+# FreeSWITCH Directory Modules
+######################################################################################################################
+
+%package directory-ldap
+Summary: LDAP Directory support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description directory-ldap
+LDAP Directory support for FreeSWITCH open source telephony platform.
+
+######################################################################################################################
+# FreeSWITCH Endpoint Modules
+######################################################################################################################
+
+%package endpoint-dingaling
+Summary: Generic XMPP support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description endpoint-dingaling
+XMPP support for FreeSWITCH open source telephony platform. Allows FreeSWITCH
+to be used as a client for GoogleTalk or other XMPP Servers.
+
+#%package endpoint-gsmopen
+#Summary: Generic GSM enpoint support for FreeSWITCH open source telephony platform
+#Group: System/Libraries
+#Requires: %{name} = %{version}-%{release}
+#
+#%description endpoint-gsmopen
+#GSMopen is an endpoint (channel driver) that allows an SMS to be sent or
+#received from FreeSWITCH as well as incoming and outgoing GSM voice calls.
+#SMS is handled via the standard CHAT API in FreeSWITCH.
+
+#%package endpoint-h323
+#Summary: H.323 enpoint support for FreeSWITCH open source telephony platform
+#Group: System/Libraries
+#Requires: %{name} = %{version}-%{release}
+#
+#%description endpoint-h323
+#H.323 enpoint support for FreeSWITCH open source telephony platform
+
+#%package endpoint-khomp
+#Summary: khomp endpoint support for FreeSWITCH open source telephony platform
+#Group: System/Libraries
+#Requires: %{name} = %{version}-%{release}
+#
+#%description endpoint-khomp
+#Khomp hardware endpoint support for FreeSWITCH open source telephony platform.
+
+%package endpoint-portaudio
+Summary: PortAudio endpoint support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: alsa-lib
+BuildRequires: alsa-lib-devel
+
+%description endpoint-portaudio
+PortAudio endpoint support for FreeSWITCH open source telephony platform.
+
+%package endpoint-rtmp
+Summary: RTPM Endpoint support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description endpoint-rtmp
+RTMP Endpoint support for FreeSWITCH open source telephony platform. Allows FreeSWITCH
+to be used from a RTMP client. See http://wiki.freeswitch.org/wiki/Mod_rtmp#Flex_Client
+for the OpenSouce FreeSWITCH backed Client.
+
+%package endpoint-skinny
+Summary: Skinny/SCCP endpoint support for FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description endpoint-skinny
+SCCP/Skinny support for FreeSWITCH open source telephony platform.
%package freetdm
Summary: Provides a unified interface to hardware TDM cards and ss7 stacks for FreeSWITCH
@@ -354,33 +892,344 @@ Sangoma SMG-SS7 drivers for FreeTDM
%endif
-
-%if %{build_sng_tc}
-
-%package sangoma-codec
-Summary: Sangoma D100 and D500 Codec Card Support
-Group: System/Libraries
-Requires: %{name} = %{version}-%{release}
-Requires: sng-tc-linux
-BuildRequires: sng-tc-linux
-
-%description sangoma-codec
-Sangoma D100 and D500 Codec Card Support
-
-%endif
-
-%package skypopen
+%package endpoint-skypopen
Summary: Skype Endpoint
Group: System/Libraries
Requires: %{name} = %{version}-%{release}
Requires: libX11
BuildRequires: libX11-devel
-%description skypopen
-This software (Skypopen) uses the Skype API but is not endorsed, certified or otherwise approved in any way by Skype.
-Skypopen is an endpoint (channel driver) that uses the Skype client as an interface to the Skype network, and allows
-incoming and outgoing Skype calls to/from FreeSWITCH (that can be bridged, originated, answered, etc. as in all other
-endpoints, e.g. Sofia-SIP).
+%description endpoint-skypopen
+This software (Skypopen) uses the Skype API but is not endorsed, certified or
+otherwise approved in any way by Skype. Skypopen is an endpoint (channel
+driver) that uses the Skype client as an interface to the Skype network, and
+allows incoming and outgoing Skype calls to/from FreeSWITCH (that can be
+bridged, originated, answered, etc. as in all other endpoints, e.g. Sofia-SIP).
+
+######################################################################################################################
+# FreeSWITCH Event Handler Modules
+######################################################################################################################
+
+%package event-cdr-mongodb
+Summary: MongoDB CDR Logger for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description event-cdr-mongodb
+MongoDB CDR Logger for FreeSWITCH
+
+%package event-cdr-pg-csv
+Summary: PostgreSQL CDR Logger for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: postgresql-libs
+BuildRequires: postgresql-devel
+
+%description event-cdr-pg-csv
+PostgreSQL CDR Logger for FreeSWITCH.
+
+%package event-cdr-sqlite
+Summary: SQLite CDR Logger for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description event-cdr-sqlite
+SQLite CDR Logger for FreeSWITCH.
+
+%package event-erlang-event
+Summary: Erlang Event Module for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: erlang
+BuildRequires: erlang
+
+%description event-erlang-event
+Erlang Event Module for FreeSWITCH.
+
+%package event-multicast
+Summary: Multicast Event System for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description event-multicast
+Multicast Event System for FreeSWITCH.
+
+#%package event-zmq
+#Summary: ZeroMQ Event System for the FreeSWITCH open source telephony platform
+#Group: System/Libraries
+#Requires: %{name} = %{version}-%{release}
+#
+#%description event-zmq
+#ZeroMQ Event System for FreeSWITCH.
+
+%package event-json-cdr
+Summary: JSON CDR Logger for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description event-json-cdr
+JSON CDR Logger for FreeSWITCH.
+
+%package event-snmp
+Summary: SNMP stats reporter for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: net-snmp
+BuildRequires: net-snmp-devel
+
+%description event-snmp
+SNMP stats reporter for the FreeSWITCH open source telephony platform
+
+######################################################################################################################
+# FreeSWITCH Media Format Modules
+######################################################################################################################
+
+%package format-local-stream
+Summary: Local File Streamer for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description format-local-stream
+Local File Streamer for FreeSWITCH. It streams files from a directory and
+multiple channels connected to the same stream will hear the same (looped)
+file playback .. similar to a shoutcast stream. Useful for Music-on-hold type
+scenarios.
+
+%package format-native-file
+Summary: Native Media File support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description format-native-file
+The native file module is designed to make it easy to play sound files where no
+transcoding is necessary. The default FreeSWITCH sound files are in wav format.
+Generally, these require transcoding when being played to callers. However, if
+a native format sound file is available then FreeSWITCH can use it.
+
+%package format-portaudio-stream
+Summary: PortAudio Media Steam support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description format-portaudio-stream
+Portaudio Streaming interface Audio for FreeSWITCH
+
+%package format-shell-stream
+Summary: Implements Media Steaming from arbitrary shell commands for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description format-shell-stream
+Mod shell stream is a FreeSWITCH module to allow you to stream audio from an
+arbitrary shell command. You could use it to read audio from a database, from
+a soundcard, etc.
+
+%package format-mod-shout
+Summary: Implements Media Steaming from arbitrary shell commands for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description format-mod-shout
+Mod Shout is a FreeSWITCH module to allow you to stream audio from MP3s or a i
+shoutcast stream.
+
+%package format-tone-stream
+Summary: Implements TGML Tone Generation for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description format-tone-stream
+Implements TGML Tone Generation for the FreeSWITCH open source telephony platform
+
+######################################################################################################################
+# FreeSWITCH Programing Language Modules
+######################################################################################################################
+
+%package lua
+Summary: Lua support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description lua
+
+%package perl
+Summary: Perl support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: perl
+
+%description perl
+
+%package python
+Summary: Python support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: python
+
+%description python
+
+%package spidermonkey
+Summary: JavaScript support for the FreeSWITCH open source telephony platform
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description spidermonkey
+
+######################################################################################################################
+# FreeSWITCH Say Modules
+######################################################################################################################
+
+%package lang-en
+Summary: Provides english language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description lang-en
+English language phrases module and directory structure for say module and voicemail
+
+%package lang-ru
+Summary: Provides russian language dependand modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description lang-ru
+Russian language phrases module and directory structure for say module and voicemail
+
+%package lang-fr
+Summary: Provides french language dependend modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description lang-fr
+French language phrases module and directory structure for say module and voicemail
+
+%package lang-de
+Summary: Provides german language dependend modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description lang-de
+German language phrases module and directory structure for say module and voicemail
+
+%package lang-he
+Summary: Provides hebrew language dependend modules and speech config for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description lang-he
+Hebrew language phrases module and directory structure for say module and voicemail
+
+######################################################################################################################
+# FreeSWITCH Timer Modules
+######################################################################################################################
+
+%package timer-posix
+Summary: Provides posix timer for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description timer-posix
+Provides posix timer for the FreeSWITCH Open Source telephone platform.
+
+%if %{build_timerfd}
+%package timer-timerfd
+Summary: Provides Linux Timerfs based timer for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description timer-timerfd
+Provides Linux Timerfs based timer for the FreeSWITCH Open Source telephone
+platform.
+%endif
+
+######################################################################################################################
+# FreeSWITCH XML INT Modules
+######################################################################################################################
+
+%package xml-cdr
+Summary: Provides XML CDR interface for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description xml-cdr
+Provides XML CDR interface for the FreeSWITCH Open Source telephone platform.
+
+%package xml-curl
+Summary: Provides XML Curl interface for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description xml-curl
+Provides XML Curl interface for the FreeSWITCH Open Source telephone platform.
+Pull dynamic XML configs for FreeSWITCH over HTTP.
+
+%package xml-rpc
+Summary: Provides XML-RPC interface for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description xml-rpc
+Provides XML-RPC interface for the FreeSWITCH Open Source telephone platform.
+
+######################################################################################################################
+# FreeSWITCH basic config module
+######################################################################################################################
+
+%package config-vanilla
+Summary: Basic vanilla config set for the FreeSWITCH Open Source telephone platform.
+Group: System/Libraries
+Requires: %{name} = %{version}-%{release}
+Requires: freeswitch-application-abstraction
+Requires: freeswitch-application-avmd
+Requires: freeswitch-application-blacklist
+Requires: freeswitch-application-callcenter
+Requires: freeswitch-application-cidlookup
+Requires: freeswitch-application-conference
+Requires: freeswitch-application-curl
+Requires: freeswitch-application-db
+Requires: freeswitch-application-directory
+Requires: freeswitch-application-distributor
+Requires: freeswitch-application-easyroute
+Requires: freeswitch-application-enum
+Requires: freeswitch-application-esf
+Requires: freeswitch-application-expr
+Requires: freeswitch-application-fifo
+Requires: freeswitch-application-fsk
+Requires: freeswitch-application-fsv
+Requires: freeswitch-application-hash
+Requires: freeswitch-application-httapi
+Requires: freeswitch-application-http-cache
+Requires: freeswitch-application-lcr
+Requires: freeswitch-application-limit
+Requires: freeswitch-application-memcache
+Requires: freeswitch-application-nibblebill
+Requires: freeswitch-application-redis
+Requires: freeswitch-application-rss
+Requires: freeswitch-application-sms
+Requires: freeswitch-application-snapshot
+Requires: freeswitch-application-snom
+Requires: freeswitch-application-soundtouch
+Requires: freeswitch-application-spy
+Requires: freeswitch-application-stress
+Requires: freeswitch-application-valet_parking
+Requires: freeswitch-application-voicemail
+Requires: freeswitch-application-voicemail-ivr
+Requires: freeswitch-codec-passthru-amr
+Requires: freeswitch-codec-bv
+Requires: freeswitch-codec-passthru-g723_1
+Requires: freeswitch-codec-passthru-g729
+Requires: freeswitch-codec-h26x
+Requires: freeswitch-codec-ilbc
+Requires: freeswitch-codec-siren
+Requires: freeswitch-codec-speex
+Requires: freeswitch-format-local-stream
+Requires: freeswitch-format-native-file
+Requires: freeswitch-format-portaudio-stream
+Requires: freeswitch-format-tone-stream
+Requires: freeswitch-lang-en
+
+%description config-vanilla
+Basic vanilla config set for the FreeSWITCH Open Source telephone platform.
######################################################################################################################
#
@@ -430,72 +1279,90 @@ export QA_RPATHS=$[ 0x0001|0x0002 ]
#
######################################################################################################################
APPLICATION_MODULES_AC="applications/mod_abstraction applications/mod_avmd applications/mod_blacklist \
- applications/mod_callcenter applications/mod_cidlookup applications/mod_cluechoo \
- applications/mod_commands applications/mod_conference applications/mod_curl"
+ applications/mod_callcenter applications/mod_cidlookup \
+ applications/mod_commands applications/mod_conference applications/mod_curl"
APPLICATION_MODULES_DE="applications/mod_db applications/mod_directory applications/mod_distributor \
- applications/mod_dptools applications/mod_easyroute applications/mod_enum applications/mod_esf \
- applications/mod_expr"
-APPLICATION_MODULES_FR="applications/mod_fifo applications/mod_fsv applications/mod_hash applications/mod_lcr \
- applications/mod_limit applications/mod_memcache applications/mod_http_cache \
- applications/mod_nibblebill applications/mod_redis applications/mod_rss"
-APPLICATION_MODULES_SZ="applications/mod_sms applications/mod_snom applications/mod_soundtouch \
- applications/mod_spandsp applications/mod_spy applications/mod_stress \
- applications/mod_valet_parking applications/mod_vmd applications/mod_voicemail \
- applications/mod_voicemail_ivr"
+ applications/mod_dptools applications/mod_easyroute applications/mod_enum applications/mod_esf \
+ applications/mod_expr "
+
+%if %{build_mod_esl}
+APPLICATION_MODULES_DE+="applications/mod_esl"
+%endif
+
+APPLICATION_MODULES_FR="applications/mod_fifo applications/mod_fsk applications/mod_fsv applications/mod_hash \
+ applications/mod_httapi applications/mod_http_cache applications/mod_lcr applications/mod_limit \
+ applications/mod_memcache applications/mod_nibblebill applications/mod_redis applications/mod_rss"
+
+APPLICATION_MODULES_SZ="applications/mod_sms applications/mod_snapshot applications/mod_snom applications/mod_soundtouch \
+ applications/mod_spandsp applications/mod_spy applications/mod_stress \
+ applications/mod_valet_parking applications/mod_voicemail \
+ applications/mod_voicemail_ivr"
APPLICATIONS_MODULES="$APPLICATION_MODULES_AC $APPLICATION_MODULES_DE $APPLICATION_MODULES_FR $APPLICATION_MODULES_SZ"
+
######################################################################################################################
#
# Automatic Speech Recognition and Text To Speech Modules
#
######################################################################################################################
-ASR_TTS_MODULES="asr_tts/mod_pocketsphinx asr_tts/mod_flite asr_tts/mod_unimrcp"
+ASR_TTS_MODULES="asr_tts/mod_flite asr_tts/mod_pocketsphinx asr_tts/mod_tts_commandline asr_tts/mod_unimrcp"
+
######################################################################################################################
#
# Codecs
#
######################################################################################################################
-CODECS_MODULES="codecs/mod_bv codecs/mod_h26x codecs/mod_speex codecs/mod_celt codecs/mod_codec2 codecs/mod_ilbc \
- codecs/mod_mp4v codecs/mod_opus codecs/mod_silk codecs/mod_siren codecs/mod_theora "
+CODECS_MODULES="codecs/mod_amr codecs/mod_amrwb codecs/mod_bv codecs/mod_celt codecs/mod_codec2 codecs/mod_g723_1 \
+ codecs/mod_g729 codecs/mod_h26x codecs/mod_ilbc codecs/mod_isac codecs/mod_mp4v codecs/mod_opus codecs/mod_silk \
+ codecs/mod_siren codecs/mod_speex codecs/mod_theora "
#
%if %{build_sng_tc}
CODECS_MODULES+="codecs/mod_sangoma_codec"
%endif
+
######################################################################################################################
#
# Dialplan Modules
#
######################################################################################################################
-DIALPLANS_MODULES="dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml"
+DIALPLANS_MODULES="dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml"
+#DISABLED DIALPLANS dialplans/mod_dialplan_asterisk
######################################################################################################################
#
# Directory Modules
#
######################################################################################################################
DIRECTORIES_MODULES=""
+
######################################################################################################################
#
# Endpoints
#
######################################################################################################################
-ENDPOINTS_MODULES="endpoints/mod_dingaling endpoints/mod_loopback ../../libs/freetdm/mod_freetdm \
- endpoints/mod_portaudio endpoints/mod_sofia endpoints/mod_skinny endpoints/mod_skypopen \
- endpoints/mod_rtmp"
+ENDPOINTS_MODULES="endpoints/mod_dingaling ../../libs/freetdm/mod_freetdm \
+ endpoints/mod_loopback endpoints/mod_portaudio endpoints/mod_rtmp \
+ endpoints/mod_skinny endpoints/mod_skypopen endpoints/mod_sofia"
+
+## DISABLED MODULES DUE TO BUILD ISSUES endpoints/mod_gsmopen endpoints/mod_h323 endpoints/mod_khomp
######################################################################################################################
#
# Event Handlers
#
######################################################################################################################
-EVENT_HANDLERS_MODULES="event_handlers/mod_cdr_csv event_handlers/mod_cdr_sqlite event_handlers/mod_event_socket \
- event_handlers/mod_event_multicast"
+EVENT_HANDLERS_MODULES="event_handlers/mod_cdr_csv event_handlers/mod_cdr_pg_csv event_handlers/mod_cdr_sqlite \
+ event_handlers/mod_cdr_mongodb event_handlers/mod_erlang_event event_handlers/mod_event_multicast \
+ event_handlers/mod_event_socket event_handlers/mod_json_cdr \
+ event_handlers/mod_snmp"
+
+#### BUILD ISSUES NET RESOLVED FOR RELEASE event_handlers/mod_event_zmq
######################################################################################################################
#
# File and Audio Format Handlers
#
######################################################################################################################
FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_portaudio_stream \
- formats/mod_shout formats/mod_sndfile formats/mod_tone_stream"
+ formats/mod_shell_stream formats/mod_shout formats/mod_sndfile formats/mod_tone_stream"
######################################################################################################################
#
@@ -503,42 +1370,44 @@ FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_po
#
######################################################################################################################
LANGUAGES_MODULES="languages/mod_lua languages/mod_perl languages/mod_python languages/mod_spidermonkey"
+
######################################################################################################################
#
# Logging Modules
#
######################################################################################################################
LOGGERS_MODULES="loggers/mod_console loggers/mod_logfile loggers/mod_syslog"
-######################################################################################################################
-#
-# Passthru Codecs
-#
-######################################################################################################################
-PASSTHRU_CODEC_MODULES="codecs/mod_amr codecs/mod_amrwb codecs/mod_g723_1 codecs/mod_g729"
+
######################################################################################################################
#
# Phrase engine language modules
#
######################################################################################################################
SAY_MODULES="say/mod_say_de say/mod_say_en say/mod_say_fr say/mod_say_he say/mod_say_ru"
+
######################################################################################################################
#
# Timers
#
######################################################################################################################
-TIMERS_MODULES=
+TIMERS_MODULES="timers/mod_posix_timer "
+%if %{build_timerfd}
+TIMERS_MODULES+="timers/mod_timerfd"
+%endif
+
######################################################################################################################
#
# XML Modules
#
######################################################################################################################
XML_INT_MODULES="xml_int/mod_xml_cdr xml_int/mod_xml_curl xml_int/mod_xml_rpc"
+
######################################################################################################################
#
# Create one environment variable out of all the module defs
#
######################################################################################################################
-MYMODULES="$PASSTHRU_CODEC_MODULES $APPLICATIONS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES \
+MYMODULES="$APPLICATIONS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES \
$ENDPOINTS_MODULES $ASR_TTS_MODULES $EVENT_HANDLERS_MODULES $FORMATS_MODULES $LANGUAGES_MODULES $LOGGERS_MODULES \
$SAY_MODULES $TIMERS_MODULES $XML_INT_MODULES"
@@ -565,31 +1434,40 @@ export ACLOCAL_FLAGS="-I /usr/share/aclocal"
if test ! -f Makefile.in
then
- ./bootstrap.sh
+ ./bootstrap.sh -j
fi
+%configure -C \
+--prefix=%{PREFIX} \
+--exec-prefix=%{EXECPREFIX} \
+--bindir=%{BINDIR} \
+--sbindir=%{SBINDIR} \
+--libexecdir=%{LIBEXECDIR} \
+--sharedstatedir=%{SHARESTATEDIR} \
+--localstatedir=%{LOCALSTATEDIR} \
+--libdir=%{LIBDIR} \
+--includedir=%{INCLUDEDIR} \
+--datadir=%{DATADIR} \
+--infodir=%{INFODIR} \
+--mandir=%{MANDIR} \
+--with-logfiledir=%{LOGFILEDIR} \
+--with-modinstdir=%{MODINSTDIR} \
+--with-rundir=%{RUNDIR} \
+--with-dbdir=%{DBDIR} \
+--with-htdocsdir=%{HTDOCSDIR} \
+--with-soundsdir=%{SOUNDSDIR} \
+--enable-core-odbc-support \
+--enable-core-libedit-support \
+--with-grammardir=%{GRAMMARDIR} \
+--with-scriptdir=%{SCRIPTDIR} \
+--with-recordingsdir=%{RECORDINGSDIR} \
+--with-pkgconfigdir=%{PKGCONFIGDIR} \
+--with-odbc \
+--with-erlang \
+--with-openssl \
+%{?configure_options}
- %configure -C \
- --prefix=%{prefix} \
- --infodir=%{_infodir} \
- --mandir=%{_mandir} \
- --sysconfdir=%{sysconfdir} \
- --libdir=%{prefix}/lib \
- --enable-core-libedit-support \
- --enable-core-odbc-support \
-%ifos linux
-%if 0%{?fedora_version} >= 8
-%else
- --with-libcurl \
-%endif
-%endif
- --with-openssl \
- %{?configure_options}
-
-#Create the version header file here
-#cat src/include/switch_version.h.in | sed "s/@SVN_VERSION@/%{version}/g" > src/include/switch_version.h
-#touch .noversion
-
+unset MODULES
%{__make}
cd libs/esl
@@ -653,12 +1531,12 @@ cd ../..
%if %{build_sng_ss7}
#do not delete a thing
%else
-%{__rm} -f %{buildroot}/%{prefix}/mod/ftmod_sangoma_ss7*
+%{__rm} -f %{buildroot}/%{MODINSTDIR}/ftmod_sangoma_ss7*
%endif
%if %{build_sng_isdn}
#do not delete a thing
%else
-%{__rm} -f %{buildroot}/%{prefix}/mod/ftmod_sangoma_isdn*
+%{__rm} -f %{buildroot}/%{MODINSTDIR}/ftmod_sangoma_isdn*
%endif
@@ -679,8 +1557,10 @@ fi
%post
%{?run_ldconfig:%run_ldconfig}
# Make FHS2.0 happy
-%{__mkdir} -p /etc/opt
-%{__ln_s} -f %{prefix}/conf /etc%{prefix}
+# %{__mkdir} -p /etc/opt
+# %{__ln_s} -f %{sysconfdir} /etc%{prefix}
+
+chown freeswitch:daemon /var/log/freeswitch /var/run/freeswitch
chkconfig --add freeswitch
@@ -713,167 +1593,46 @@ fi
#
#################################### Basic Directory Structure #######################################################
#
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf
-%dir %attr(0750, freeswitch, daemon) %{prefix}/db
-%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar
-%dir %attr(0750, freeswitch, daemon) %{prefix}/htdocs
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}
+%dir %attr(0750, freeswitch, daemon) %{DBDIR}
+%dir %attr(0750, freeswitch, daemon) %{GRAMMARDIR}
+%dir %attr(0750, freeswitch, daemon) %{HTDOCSDIR}
%dir %attr(0750, freeswitch, daemon) %{logfiledir}
%dir %attr(0750, freeswitch, daemon) %{runtimedir}
-%dir %attr(0750, freeswitch, daemon) %{prefix}/scripts
+%dir %attr(0750, freeswitch, daemon) %{SCRIPTDIR}
#
#################################### Config Directory Structure #######################################################
#
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan/default
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan/public
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan/skinny-patterns
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/directory
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/directory/default
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/jingle_profiles
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/mrcp_profiles
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/sip_profiles
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/sip_profiles/external
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/sip_profiles/internal
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/skinny_profiles
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/autoload_configs
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/dialplan
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/dialplan/default
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/dialplan/public
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/dialplan/skinny-patterns
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/directory
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/directory/default
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/jingle_profiles
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/mrcp_profiles
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/sip_profiles
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/sip_profiles/external
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/sip_profiles/internal
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/skinny_profiles
#
#################################### Grammar Directory Structure #####################################################
#
-%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar/model
-%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar/model/communicator
+%dir %attr(0750, freeswitch, daemon) %{GRAMMARDIR}/model
+%dir %attr(0750, freeswitch, daemon) %{GRAMMARDIR}/model/communicator
%ifos linux
%config(noreplace) %attr(0644, freeswitch, daemon) /etc/monit.d/freeswitch.monitrc
%endif
-######################################################################################################################
-#
-# Config Files
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.tpl
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.ttml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/extensions.conf
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/mime.types
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/abstraction.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/acl.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/alsa.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/blacklist.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/callcenter.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cdr_csv.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cdr_mongodb.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cdr_pg_csv.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cdr_sqlite.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cepstral.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/cidlookup.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/conference.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/console.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/db.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/dialplan_directory.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/dingaling.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/directory.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/distributor.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/easyroute.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/enum.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/erlang_event.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/event_multicast.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/event_socket.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/fax.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/fifo.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/hash.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/http_cache.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/ivr.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/java.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/lcr.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/local_stream.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/logfile.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/memcache.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/modules.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/mongo.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/nibblebill.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/opal.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/osp.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/pocketsphinx.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/portaudio.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/post_load_modules.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/presence_map.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/redis.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/rss.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/rtmp.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/sangoma_codec.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/shout.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/skinny.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/sofia.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/spandsp.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/switch.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/syslog.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/timezones.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/tts_commandline.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/unicall.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/unimrcp.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/voicemail.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/voicemail_ivr.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_cdr.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_curl.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_rpc.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/zeroconf.conf.xml
-######################################################################################################################
-#
-# Chatplans
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/chatplan/default.xml
-######################################################################################################################
-#
-# Dialplans
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/default/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/public/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/skinny-patterns/*.xml
-######################################################################################################################
-#
-# User Directories
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/default/*
-######################################################################################################################
-#
-# IVR Menues
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/ivr_menus/*.xml
-######################################################################################################################
-#
-# Sip Profiles
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/internal/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/external/*.xml
-######################################################################################################################
-#
-# Other Protocol Profiles (skinny, jingle, mrcp)
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/skinny_profiles/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/jingle_profiles/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/mrcp_profiles/*.xml
-######################################################################################################################
-#
-# Grammar Files
-#
-######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/default.dic
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/model/communicator/*
+
+
######################################################################################################################
#
# Other FÃles
#
######################################################################################################################
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/htdocs/*
+%config(noreplace) %attr(0640, freeswitch, daemon) %{HTDOCSDIR}/*
%ifos linux
/etc/rc.d/init.d/freeswitch
/etc/sysconfig/freeswitch
@@ -890,89 +1649,28 @@ fi
#
######################################################################################################################
%attr(0755, freeswitch, daemon) %{prefix}/bin/*
-%{prefix}/lib/libfreeswitch*.so*
+%{LIBDIR}/libfreeswitch*.so*
######################################################################################################################
#
# Modules in Alphabetical Order, please keep them that way..
#
######################################################################################################################
-%{prefix}/mod/mod_abstraction.so*
-%{prefix}/mod/mod_amrwb.so*
-%{prefix}/mod/mod_avmd.so*
-%{prefix}/mod/mod_blacklist.so*
-%{prefix}/mod/mod_bv.so*
-%{prefix}/mod/mod_callcenter.so*
-%{prefix}/mod/mod_cdr_csv.so*
-%{prefix}/mod/mod_cdr_sqlite.so*
-%{prefix}/mod/mod_celt.so*
-%{prefix}/mod/mod_cidlookup.so*
-%{prefix}/mod/mod_cluechoo.so*
-%{prefix}/mod/mod_codec2.so*
-%{prefix}/mod/mod_console.so*
-%{prefix}/mod/mod_commands.so*
-%{prefix}/mod/mod_conference.so*
-%{prefix}/mod/mod_curl.so*
-%{prefix}/mod/mod_db.so*
-%{prefix}/mod/mod_dialplan_asterisk.so*
-%{prefix}/mod/mod_dialplan_directory.so*
-%{prefix}/mod/mod_dialplan_xml.so*
-%{prefix}/mod/mod_dingaling.so*
-%{prefix}/mod/mod_directory.so*
-%{prefix}/mod/mod_distributor.so*
-%{prefix}/mod/mod_dptools.so*
-%{prefix}/mod/mod_easyroute.so*
-%{prefix}/mod/mod_enum.so*
-%{prefix}/mod/mod_esf.so*
-%{prefix}/mod/mod_event_multicast.so*
-%{prefix}/mod/mod_event_socket.so*
-%{prefix}/mod/mod_expr.so*
-%{prefix}/mod/mod_fifo.so*
-%{prefix}/mod/mod_flite.so*
-%{prefix}/mod/mod_fsv.so*
-%{prefix}/mod/mod_hash.so*
-%{prefix}/mod/mod_http_cache.so*
-%{prefix}/mod/mod_h26x.so*
-%{prefix}/mod/mod_ilbc.so*
-%{prefix}/mod/mod_lcr.so*
-%{prefix}/mod/mod_limit.so*
-%{prefix}/mod/mod_local_stream.so*
-%{prefix}/mod/mod_logfile.so*
-%{prefix}/mod/mod_loopback.so*
-%{prefix}/mod/mod_memcache.so*
-%{prefix}/mod/mod_mp4v.so*
-%{prefix}/mod/mod_native_file.so*
-%{prefix}/mod/mod_nibblebill.so*
-%{prefix}/mod/mod_opus.so*
-%{prefix}/mod/mod_pocketsphinx.so*
-%{prefix}/mod/mod_portaudio.so*
-%{prefix}/mod/mod_portaudio_stream.so*
-%{prefix}/mod/mod_redis.so*
-%{prefix}/mod/mod_rss.so*
-%{prefix}/mod/mod_rtmp.so*
-%{prefix}/mod/mod_shout.so*
-%{prefix}/mod/mod_silk.so*
-%{prefix}/mod/mod_siren.so*
-%{prefix}/mod/mod_skinny.so*
-%{prefix}/mod/mod_sms.so*
-%{prefix}/mod/mod_sndfile.so*
-%{prefix}/mod/mod_snom.so*
-%{prefix}/mod/mod_sofia.so*
-%{prefix}/mod/mod_soundtouch.so*
-%{prefix}/mod/mod_spandsp.so*
-%{prefix}/mod/mod_speex.so*
-%{prefix}/mod/mod_spy.so*
-%{prefix}/mod/mod_stress.so*
-%{prefix}/mod/mod_syslog.so*
-%{prefix}/mod/mod_theora.so*
-%{prefix}/mod/mod_tone_stream.so*
-%{prefix}/mod/mod_unimrcp.so*
-%{prefix}/mod/mod_valet_parking.so*
-%{prefix}/mod/mod_vmd.so*
-%{prefix}/mod/mod_voicemail.so*
-%{prefix}/mod/mod_voicemail_ivr.so*
-%{prefix}/mod/mod_xml_cdr.so*
-%{prefix}/mod/mod_xml_curl.so*
-%{prefix}/mod/mod_xml_rpc.so*
+%{MODINSTDIR}/mod_cdr_csv.so*
+%{MODINSTDIR}/mod_console.so*
+%{MODINSTDIR}/mod_commands.so*
+%{MODINSTDIR}/mod_dialplan_directory.so*
+%{MODINSTDIR}/mod_dialplan_xml.so*
+%{MODINSTDIR}/mod_dptools.so*
+%{MODINSTDIR}/mod_event_socket.so*
+%{MODINSTDIR}/mod_logfile.so*
+%{MODINSTDIR}/mod_loopback.so*
+%{MODINSTDIR}/mod_native_file.so*
+%{MODINSTDIR}/mod_sndfile.so*
+%{MODINSTDIR}/mod_sofia.so*
+%{MODINSTDIR}/mod_spandsp.so*
+%{MODINSTDIR}/mod_syslog.so*
+%{MODINSTDIR}/mod_tone_stream.so*
+%{MODINSTDIR}/mod_xml_rpc.so*
######################################################################################################################
#
# Package for the developer
@@ -980,12 +1678,423 @@ fi
######################################################################################################################
%files devel
%defattr(-, freeswitch, daemon)
-%{prefix}/lib/*.a
-%{prefix}/lib/*.la
-%{prefix}/lib/pkgconfig/*
-%{prefix}/mod/*.a
-%{prefix}/mod/*.la
-%{prefix}/include/*.h
+%{LIBDIR}/*.a
+%{LIBDIR}/*.la
+%{PKGCONFIGDIR}/*
+%{MODINSTDIR}/*.a
+%{MODINSTDIR}/*.la
+%{INCLUDEDIR}/*.h
+
+
+######################################################################################################################
+# Vanilla Config Files
+######################################################################################################################
+%files config-vanilla
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/*.tpl
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/*.ttml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/extensions.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/mime.types
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/abstraction.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/acl.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/alsa.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/blacklist.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/callcenter.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/cdr_csv.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/cdr_mongodb.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/cdr_pg_csv.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/cdr_sqlite.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/cepstral.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/cidlookup.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/conference.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/console.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/db.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/dialplan_directory.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/dingaling.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/directory.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/distributor.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/easyroute.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/enum.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/erlang_event.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/event_multicast.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/event_socket.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/fax.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/fifo.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/hash.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/httapi.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/http_cache.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/ivr.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/java.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/lcr.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/local_stream.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/logfile.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/memcache.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/modules.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/mongo.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/nibblebill.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/opal.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/osp.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/pocketsphinx.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/portaudio.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/post_load_modules.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/presence_map.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/redis.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/rss.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/rtmp.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/sangoma_codec.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/shout.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/skinny.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/sofia.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/spandsp.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/switch.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/syslog.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/timezones.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/tts_commandline.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/unicall.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/unimrcp.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/voicemail.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/voicemail_ivr.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/xml_cdr.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/xml_curl.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/xml_rpc.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/zeroconf.conf.xml
+######################################################################################################################
+# Chatplans
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/chatplan/default.xml
+######################################################################################################################
+# Dialplans
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/dialplan/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/dialplan/default/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/dialplan/public/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/dialplan/skinny-patterns/*.xml
+######################################################################################################################
+# User Directories
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/directory/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/directory/default/*
+######################################################################################################################
+# IVR Menues
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/ivr_menus/*.xml
+######################################################################################################################
+# Sip Profiles
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/sip_profiles/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/sip_profiles/internal/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/sip_profiles/external/*.xml
+######################################################################################################################
+# Other Protocol Profiles (skinny, jingle, mrcp)
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/skinny_profiles/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/jingle_profiles/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/mrcp_profiles/*.xml
+######################################################################################################################
+# Grammar Files
+######################################################################################################################
+%config(noreplace) %attr(0640, freeswitch, daemon) %{GRAMMARDIR}/default.dic
+%config(noreplace) %attr(0640, freeswitch, daemon) %{GRAMMARDIR}/model/communicator/*
+
+### END OF config-vanilla
+
+######################################################################################################################
+#
+# Application Packages
+#
+######################################################################################################################
+%files application-abstraction
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_abstraction.so*
+
+%files application-avmd
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_avmd.so*
+
+%files application-blacklist
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_blacklist.so*
+
+%files application-callcenter
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_callcenter.so*
+
+%files application-cidlookup
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_cidlookup.so*
+
+%files application-conference
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_conference.so*
+
+%files application-curl
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_curl.so*
+
+%files application-db
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_db.so*
+
+%files application-directory
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_directory.so*
+
+%files application-distributor
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_distributor.so*
+
+%files application-easyroute
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_easyroute.so*
+
+%files application-enum
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_enum.so*
+
+%files application-esf
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_esf.so*
+
+%if %{build_mod_esl}
+%files application-esl
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_esl.so*
+%endif
+
+%files application-expr
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_expr.so*
+
+%files application-fifo
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_fifo.so*
+
+%files application-fsk
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_fsk.so*
+
+%files application-fsv
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_fsv.so*
+
+%files application-hash
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_hash.so*
+
+%files application-httapi
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_httapi.so*
+
+%files application-http-cache
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_http_cache.so*
+
+%files application-lcr
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_lcr.so*
+
+%files application-limit
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_limit.so*
+
+%files application-memcache
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_memcache.so*
+
+%files application-nibblebill
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_nibblebill.so*
+
+%files application-redis
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_redis.so*
+
+%files application-rss
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_rss.so*
+
+%files application-sms
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_sms.so*
+
+%files application-snapshot
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_snapshot.so*
+
+%files application-snom
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_snom.so*
+
+%files application-soundtouch
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_soundtouch.so*
+
+%files application-spy
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_spy.so*
+
+%files application-stress
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_stress.so*
+
+%files application-valet_parking
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_valet_parking.so*
+
+%files application-voicemail
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_voicemail.so*
+
+%files application-voicemail-ivr
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_voicemail_ivr.so*
+
+######################################################################################################################
+#
+# ASR RRS Packages
+#
+######################################################################################################################
+%files asrtts-flite
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_flite.so*
+
+%files asrtts-pocketsphinx
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_pocketsphinx.so*
+
+%files asrtts-tts-commandline
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_tts_commandline.so*
+
+%files asrtts-unimrcp
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_unimrcp.so*
+
+######################################################################################################################
+#
+# CODEC Packages
+#
+######################################################################################################################
+
+%files codec-passthru-amr
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_amr.so*
+
+%files codec-passthru-amrwb
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_amrwb.so*
+
+%files codec-bv
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_bv.so*
+
+%files codec-celt
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_celt.so*
+
+%files codec-codec2
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_codec2.so*
+
+
+%files codec-passthru-g723_1
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_g723_1.so*
+
+%files codec-passthru-g729
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_g729.so*
+
+%files codec-h26x
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_h26x.so*
+
+%files codec-ilbc
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_ilbc.so*
+
+%files codec-isac
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_isac.so*
+
+%files codec-mp4v
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_mp4v.so*
+
+%files codec-opus
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_opus.so*
+
+%if %{build_sng_tc}
+%files sangoma-codec
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_sangoma_codec.so*
+%endif
+
+%files codec-silk
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_silk.so*
+
+%files codec-siren
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_siren.so*
+
+%files codec-speex
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_speex.so*
+
+%files codec-theora
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_theora.so*
+
+######################################################################################################################
+#
+# FreeSWITCH Directory Modules
+#
+######################################################################################################################
+
+%files directory-ldap
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_theora.so*
+
+######################################################################################################################
+#
+# FreeSWITCH endpoint Modules
+#
+######################################################################################################################
+
+%files endpoint-dingaling
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_dingaling.so*
+
+#%files endpoint-gsmopen
+#%defattr(-,freeswitch,daemon)
+#%{MODINSTDIR}/mod_gsmopen.so*
+
+#%files endpoint-h323
+#%defattr(-,freeswitch,daemon)
+#%{MODINSTDIR}/mod_h323.so*
+
+#%files endpoint-khomp
+#%defattr(-,freeswitch,daemon)
+#%{MODINSTDIR}/mod_khomp.so*
+
+%files endpoint-portaudio
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_portaudio.so*
+
+%files endpoint-rtmp
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_rtmp.so*
+
+%files endpoint-skinny
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_skinny.so*
+
+%files endpoint-skypopen
+%defattr(-,freeswitch,daemon)
+%{MODINSTDIR}/mod_skypopen.so*
+
######################################################################################################################
#
# FreeTDM Module for TDM Interaction
@@ -993,96 +2102,134 @@ fi
######################################################################################################################
%files freetdm
%defattr(-, freeswitch, daemon)
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/tones.conf
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/freetdm.conf.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/pika.conf
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/freetdm.conf
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/wanpipe.conf
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/zt.conf
-%{prefix}/lib/libfreetdm.so*
-%{prefix}/mod/mod_freetdm.so*
-%{prefix}/mod/ftmod_skel*.so*
-%{prefix}/mod/ftmod_[a-r,t-z]*.so*
-
-%if %{build_sng_tc}
-%files sangoma-codec
-%defattr(-, freeswitch, daemon)
-%{prefix}/mod/mod_sangoma_codec.so*
-%endif
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/tones.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/freetdm.conf.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/pika.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/freetdm.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/wanpipe.conf
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/zt.conf
+%{LIBDIR}/libfreetdm.so*
+%{MODINSTDIR}/mod_freetdm.so*
+%{MODINSTDIR}/ftmod_skel*.so*
+%{MODINSTDIR}/ftmod_[a-r,t-z]*.so*
%if %{build_sng_ss7}
%files freetdm-sng-ss7
%defattr(-, freeswitch, daemon)
-%{prefix}/mod/ftmod_sangoma_ss7.so*
+%{MODINSTDIR}/ftmod_sangoma_ss7.so*
%endif
%if %{build_sng_isdn}
%files freetdm-sng-isdn
%defattr(-, freeswitch, daemon)
-%{prefix}/mod/ftmod_sangoma_isdn.so*
+%{MODINSTDIR}/ftmod_sangoma_isdn.so*
%endif
######################################################################################################################
#
-# Passthru Codec Modules
+# Event Modules
#
######################################################################################################################
-%files codec-passthru-amrwb
-%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_amrwb.so*
-%files codec-passthru-amr
-%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_amr.so*
+%files event-cdr-mongodb
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_cdr_mongodb.so*
-%files codec-passthru-g723_1
-%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_g723_1.so*
+%files event-cdr-pg-csv
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_cdr_pg_csv.so*
-%files codec-passthru-g729
-%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_g729.so*
+%files event-cdr-sqlite
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_cdr_sqlite.so*
+
+%files event-erlang-event
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_erlang_event.so*
+
+%files event-multicast
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_event_multicast.so*
+
+#%files event-zmq
+#%defattr(-, freeswitch, daemon)
+#%{MODINSTDIR}/mod_xmq.so*
+
+%files event-json-cdr
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_json_cdr.so*
+
+%files event-snmp
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_snmp.so*
+
+######################################################################################################################
+#
+# Event Modules
+#
+######################################################################################################################
+
+%files format-local-stream
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_local_stream.so*
+
+%files format-native-file
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_native_file.so*
+
+%files format-portaudio-stream
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_portaudio_stream.so*
+
+%files format-shell-stream
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_shell_stream.so*
+
+%files format-mod-shout
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_shout.so*
+
+%files format-tone-stream
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_tone_stream.so*
######################################################################################################################
#
# Embedded Language Modules
#
######################################################################################################################
-%files spidermonkey
-%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_spidermonkey*.so*
-%{prefix}/lib/libjs.so*
-%{prefix}/lib/libnspr4.so
-%{prefix}/lib/libplds4.so
-%{prefix}/lib/libplc4.so
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/spidermonkey.conf.xml
-
%files lua
%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_lua*.so*
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/lua.conf.xml
+%{MODINSTDIR}/mod_lua*.so*
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/autoload_configs
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/lua.conf.xml
%files perl
%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_perl*.so*
+%{MODINSTDIR}/mod_perl*.so*
%{prefix}/perl/*
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/perl.conf.xml
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/autoload_configs
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/perl.conf.xml
%files python
%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_python*.so*
+%{MODINSTDIR}/mod_python*.so*
%attr(0644, root, bin) /usr/lib/python*/site-packages/freeswitch.py*
%attr(0755, root, bin) /usr/lib/python*/site-packages/_ESL.so*
%attr(0755, root, bin) /usr/lib/python*/site-packages/ESL.py*
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/python.conf.xml
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/autoload_configs
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/python.conf.xml
-%files skypopen
+%files spidermonkey
%defattr(-,freeswitch,daemon)
-%{prefix}/mod/mod_skypopen.so*
+%{MODINSTDIR}/mod_spidermonkey*.so*
+%{LIBDIR}/libjs.so*
+%{LIBDIR}/libnspr4.so
+%{LIBDIR}/libplds4.so
+%{LIBDIR}/libplc4.so
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/autoload_configs
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/spidermonkey.conf.xml
+
######################################################################################################################
#
# Language Modules
@@ -1090,63 +2237,93 @@ fi
######################################################################################################################
%files lang-en
%defattr(-, freeswitch, daemon)
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/en
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/en/demo
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/en/vm
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/en/dir
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/en/ivr
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/en/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/en/demo/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/en/vm/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/en/dir/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/en/ivr/*.xml
-%{prefix}/mod/mod_say_en.so*
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/en
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/en/demo
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/en/vm
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/en/dir
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/en/ivr
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/en/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/en/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/en/vm/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/en/dir/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/en/ivr/*.xml
+%{MODINSTDIR}/mod_say_en.so*
%files lang-de
%defattr(-, freeswitch, daemon)
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/de
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/de/demo
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/de/vm
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/de/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/de/demo/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/de/vm/*.xml
-%{prefix}/mod/mod_say_de.so*
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/de
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/de/demo
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/de/vm
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/de/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/de/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/de/vm/*.xml
+%{MODINSTDIR}/mod_say_de.so*
%files lang-fr
%defattr(-, freeswitch, daemon)
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr/demo
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr/vm
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/fr/dir
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/demo/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/vm/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/fr/dir/*.xml
-%{prefix}/mod/mod_say_fr.so*
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/fr
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/fr/demo
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/fr/vm
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/fr/dir
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/fr/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/fr/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/fr/vm/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/fr/dir/*.xml
+%{MODINSTDIR}/mod_say_fr.so*
%files lang-ru
%defattr(-, freeswitch, daemon)
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru/demo
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru/vm
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/ru/dir
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/demo/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/vm/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/ru/dir/*.xml
-%{prefix}/mod/mod_say_ru.so*
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/ru
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/ru/demo
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/ru/vm
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/ru/dir
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/ru/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/ru/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/ru/vm/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/ru/dir/*.xml
+%{MODINSTDIR}/mod_say_ru.so*
%files lang-he
%defattr(-, freeswitch, daemon)
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/he/
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/he/demo
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/he/vm
-%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang/he/dir
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/he/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/he/demo/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/he/vm/*.xml
-%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/lang/he/dir/*.xml
-%{prefix}/mod/mod_say_he.so*
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/he/
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/he/demo
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/he/vm
+%dir %attr(0750, freeswitch, daemon) %{sysconfdir}/lang/he/dir
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/he/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/he/demo/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/he/vm/*.xml
+%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/lang/he/dir/*.xml
+%{MODINSTDIR}/mod_say_he.so*
+
+######################################################################################################################
+#
+# Timer Modules
+#
+######################################################################################################################
+
+%files timer-posix
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_posix_timer.so*
+
+%if %{build_timerfd}
+%files timer-timerfd
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_timerfd.so*
+%endif
+
+######################################################################################################################
+#
+# XMLINT Modules
+#
+######################################################################################################################
+
+%files xml-cdr
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_xml_cdr.so*
+
+%files xml-curl
+%defattr(-, freeswitch, daemon)
+%{MODINSTDIR}/mod_xml_curl.so*
######################################################################################################################
#
@@ -1154,6 +2331,8 @@ fi
#
######################################################################################################################
%changelog
+* Thu Jan 26 2012 - krice@freeswitch.org
+- complete rework of spec file
* Tue Jun 14 2011 - michal.bielicki@seventhsignal.de
- added mod_http_cache
* Tue Jun 14 2011 - michal.bielicki@seventhsignal.de
diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c
index 36651e49d8..875b359ec3 100644
--- a/libs/esl/fs_cli.c
+++ b/libs/esl/fs_cli.c
@@ -747,6 +747,8 @@ static const char *cli_usage =
static int process_command(esl_handle_t *handle, const char *cmd)
{
while (*cmd == ' ') cmd++;
+
+
if ((*cmd == '/' && cmd++) || !strncasecmp(cmd, "...", 3)) {
if (!strcasecmp(cmd, "help")) {
output_printf("%s", cli_usage);
@@ -793,6 +795,13 @@ static int process_command(esl_handle_t *handle, const char *cmd)
} else {
char cmd_str[1024] = "";
const char *err = NULL;
+
+ if (!strncasecmp(cmd, "console loglevel ", 17)) {
+ snprintf(cmd_str, sizeof(cmd_str), "log %s", cmd + 17);
+ esl_send_recv(handle, cmd_str);
+ printf("%s\n", handle->last_sr_reply);
+ }
+
snprintf(cmd_str, sizeof(cmd_str), "api %s\nconsole_execute: true\n\n", cmd);
if (esl_send_recv(handle, cmd_str)) {
output_printf("Socket interrupted, bye!\n");
diff --git a/libs/esl/ivrd.c b/libs/esl/ivrd.c
index 4066327257..c71e392117 100644
--- a/libs/esl/ivrd.c
+++ b/libs/esl/ivrd.c
@@ -34,39 +34,37 @@
#include
#include
#include
-
+#include
static void mycallback(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in *addr)
{
esl_handle_t handle = {{0}};
- char path_buffer[1024] = { 0 };
const char *path;
if (esl_attach_handle(&handle, client_sock, addr) != ESL_SUCCESS || !handle.info_event) {
+ close(client_sock);
esl_log(ESL_LOG_ERROR, "Socket Error\n");
- exit(0);
+ return;
}
if (!(path = esl_event_get_header(handle.info_event, "variable_ivr_path"))) {
esl_disconnect(&handle);
esl_log(ESL_LOG_ERROR, "Missing ivr_path param!\n");
- exit(0);
+ return;
}
- strncpy(path_buffer, path, sizeof(path_buffer) - 1);
-
/* hotwire the socket to STDIN/STDOUT */
- dup2(client_sock, STDIN_FILENO);
- dup2(client_sock, STDOUT_FILENO);
+ if (!(dup2(client_sock, STDIN_FILENO)) && !(dup2(client_sock, STDOUT_FILENO))){
+ esl_disconnect(&handle);
+ esl_log(ESL_LOG_ERROR, "Socket Error hotwiring socket to STDIN/STDOUT!\n");
+ return;
+ }
- /* close the handle but leak the socket on purpose cos the child will need it open */
- handle.sock = -1;
+ if(system(path)) {
+ esl_log(ESL_LOG_ERROR, "System Call Failed! [%s]\n", strerror(errno));
+ }
esl_disconnect(&handle);
- execl(path_buffer, path_buffer, (char *)NULL);
- //system(path_buffer);
- close(client_sock);
- exit(0);
}
int main(int argc, char *argv[])
diff --git a/libs/esl/managed/ManagedEslTest/Program.cs b/libs/esl/managed/ManagedEslTest/Program.cs
index f19c19ceeb..cbede4d028 100644
--- a/libs/esl/managed/ManagedEslTest/Program.cs
+++ b/libs/esl/managed/ManagedEslTest/Program.cs
@@ -166,7 +166,7 @@ namespace ManagedEslTest
ESLconnection eslConnection = new ESLconnection(sckClient.Handle.ToInt32());
ESLevent eslEvent = eslConnection.GetInfo();
- string strUuid = eslEvent.GetHeader("UNIQUE-ID", 0);
+ string strUuid = eslEvent.GetHeader("UNIQUE-ID", -1);
eslConnection.SendRecv("myevents");
eslConnection.SendRecv("divert_events on");
diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c
index 562ee2d84c..02ab7ef271 100644
--- a/libs/esl/src/esl.c
+++ b/libs/esl/src/esl.c
@@ -741,9 +741,10 @@ ESL_DECLARE(int) esl_wait_sock(esl_socket_t sock, uint32_t ms, esl_poll_t flags)
FD_ZERO(&wfds);
FD_ZERO(&efds);
+#ifndef WIN32
/* Wouldn't you rather know?? */
assert(sock <= FD_SETSIZE);
-
+#endif
if ((flags & ESL_POLL_READ)) {
diff --git a/libs/freetdm/.update b/libs/freetdm/.update
index e9475b68ed..b537cc4f2d 100644
--- a/libs/freetdm/.update
+++ b/libs/freetdm/.update
@@ -1 +1 @@
-Fri Oct 3 17:54:41 EDT 2008
+Fri Feb 3 11:55:29 PST 2012
diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c
index 066d803b2b..cb3d69cf04 100755
--- a/libs/freetdm/mod_freetdm/mod_freetdm.c
+++ b/libs/freetdm/mod_freetdm/mod_freetdm.c
@@ -586,6 +586,7 @@ static switch_status_t channel_on_hangup(switch_core_session_t *session)
break;
case FTDM_CHAN_TYPE_FXS:
{
+ tokencnt = ftdm_channel_get_token_count(tech_pvt->ftdmchan);
if (!ftdm_channel_call_check_busy(tech_pvt->ftdmchan) && !ftdm_channel_call_check_done(tech_pvt->ftdmchan)) {
if (tokencnt) {
cycle_foreground(tech_pvt->ftdmchan, 0, NULL);
@@ -4848,11 +4849,13 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_freetdm_load)
ftdm_global_set_config_directory(SWITCH_GLOBAL_dirs.conf_dir);
if (ftdm_global_init() != FTDM_SUCCESS) {
+ ftdm_global_destroy();
ftdm_log(FTDM_LOG_ERROR, "Error loading FreeTDM\n");
return SWITCH_STATUS_TERM;
}
if (ftdm_global_configuration() != FTDM_SUCCESS) {
+ ftdm_global_destroy();
ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM\n");
return SWITCH_STATUS_TERM;
}
diff --git a/libs/freetdm/src/ftdm_config.c b/libs/freetdm/src/ftdm_config.c
index 1b023e93eb..4dfc395e06 100644
--- a/libs/freetdm/src/ftdm_config.c
+++ b/libs/freetdm/src/ftdm_config.c
@@ -255,7 +255,8 @@ FT_DECLARE (int) ftdm_config_get_cas_bits(char *strvalue, unsigned char *outbits
if ('1' == cas_bits[x]) {
*outbits |= bit;
} else if ('0' != cas_bits[x]) {
- ftdm_log(FTDM_LOG_ERROR, "Invalid CAS pattern specified: %s, just 0 or 1 allowed for each bit\n");
+ ftdm_log(FTDM_LOG_ERROR, "Invalid CAS pattern specified: %s, just 0 or 1 allowed for each bit\n",
+ strvalue);
return -1;
}
bit >>= 1;
diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c
index 07def33034..caab35143a 100644
--- a/libs/freetdm/src/ftdm_io.c
+++ b/libs/freetdm/src/ftdm_io.c
@@ -149,7 +149,7 @@ static void dump_chan_io_to_file(ftdm_channel_t *fchan, ftdm_io_dump_t *dump, FI
if (dump->wrapped) {
rc = fwrite(&dump->buffer[dump->windex], 1, towrite, file);
if (rc != towrite) {
- ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %d out of %d bytes in io dump buffer\n",
+ ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %"FTDM_SIZE_FMT" out of %"FTDM_SIZE_FMT" bytes in io dump buffer: %s\n",
rc, towrite, strerror(errno));
}
}
@@ -157,7 +157,7 @@ static void dump_chan_io_to_file(ftdm_channel_t *fchan, ftdm_io_dump_t *dump, FI
towrite = dump->windex;
rc = fwrite(&dump->buffer[0], 1, towrite, file);
if (rc != towrite) {
- ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %d out of %d bytes in io dump buffer: %s\n",
+ ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %"FTDM_SIZE_FMT" out of %"FTDM_SIZE_FMT" bytes in io dump buffer: %s\n",
rc, towrite, strerror(errno));
}
}
@@ -1174,7 +1174,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_next_event(ftdm_span_t *span, ftdm_event_t *
status = ftdm_event_handle_oob(*event);
if (status != FTDM_SUCCESS) {
- ftdm_log(FTDM_LOG_ERROR, "failed to handle event %d\n", **event);
+ ftdm_log(FTDM_LOG_ERROR, "failed to handle event %d\n", (*event)->e_type);
}
return status;
}
@@ -1204,7 +1204,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_read_event(ftdm_channel_t *ftdmchan, ftdm
status = ftdm_event_handle_oob(*event);
if (status != FTDM_SUCCESS) {
- ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "failed to handle event %d\n", **event);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "failed to handle event %d\n", (*event)->e_type);
}
done:
@@ -2980,7 +2980,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
GOTO_STATUS(done, FTDM_FAIL);
}
if (start_chan_io_dump(ftdmchan, &ftdmchan->txdump, size) != FTDM_SUCCESS) {
- ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to enable output dump of size %d\n", size);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to enable output dump of size %"FTDM_SIZE_FMT"\n", size);
GOTO_STATUS(done, FTDM_FAIL);
}
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Enabled output dump with size %"FTDM_SIZE_FMT"\n", size);
@@ -3012,7 +3012,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
GOTO_STATUS(done, FTDM_FAIL);
}
dump_chan_io_to_file(ftdmchan, &ftdmchan->rxdump, obj);
- ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Dumped input of size %d to file %p\n", ftdmchan->rxdump.size, obj);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Dumped input of size %"FTDM_SIZE_FMT" to file %p\n", ftdmchan->rxdump.size, obj);
GOTO_STATUS(done, FTDM_SUCCESS);
}
break;
@@ -3635,7 +3635,7 @@ FT_DECLARE(ftdm_status_t) ftdm_raw_write (ftdm_channel_t *ftdmchan, void *data,
}
if (ftdmchan->fds[FTDM_WRITE_TRACE_INDEX] > -1) {
if ((write(ftdmchan->fds[FTDM_WRITE_TRACE_INDEX], data, dlen)) != dlen) {
- ftdm_log(FTDM_LOG_WARNING, "Raw output trace failed to write all of the %"FTDM_SIZE_FMT" bytes\n", dlen);
+ ftdm_log(FTDM_LOG_WARNING, "Raw output trace failed to write all of the %d bytes\n", dlen);
}
}
write_chan_io_dump(&ftdmchan->txdump, data, dlen);
@@ -3681,7 +3681,8 @@ FT_DECLARE(ftdm_status_t) ftdm_raw_read (ftdm_channel_t *ftdmchan, void *data, f
if (ftdmchan->dtmfdbg.file) {
rc = fwrite(data, 1, dlen, ftdmchan->dtmfdbg.file);
if (rc != dlen) {
- ftdm_log(FTDM_LOG_WARNING, "DTMF debugger wrote only %d out of %d bytes: %s\n", rc, datalen, strerror(errno));
+ ftdm_log(FTDM_LOG_WARNING, "DTMF debugger wrote only %"FTDM_SIZE_FMT" out of %"FTDM_SIZE_FMT" bytes: %s\n",
+ rc, *datalen, strerror(errno));
}
ftdmchan->dtmfdbg.closetimeout--;
if (!ftdmchan->dtmfdbg.closetimeout) {
@@ -3900,7 +3901,9 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_process_media(ftdm_channel_t *ftdmchan, v
*(str+mlen) = '\0';
ftdm_copy_string(str, sp, ++mlen);
ftdm_clean_string(str);
- ftdm_log(FTDM_LOG_DEBUG, "FSK: TYPE %s LEN %d VAL [%s]\n", ftdm_mdmf_type2str(type), mlen-1, str);
+
+ ftdm_log(FTDM_LOG_DEBUG, "FSK: TYPE %s LEN %"FTDM_SIZE_FMT" VAL [%s]\n",
+ ftdm_mdmf_type2str(type), mlen-1, str);
switch(type) {
case MDMF_DDN:
@@ -4610,6 +4613,9 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const
}
span->channels[chan_index]->dtmfdetect.duration_ms = chan_config->dtmfdetect_ms;
+ if (chan_config->dtmf_on_start) {
+ span->channels[chan_index]->dtmfdetect.trigger_on_start = 1;
+ }
}
return FTDM_SUCCESS;
@@ -4632,7 +4638,6 @@ static ftdm_status_t load_config(void)
memset(&chan_config, 0, sizeof(chan_config));
sprintf(chan_config.group_name, "__default");
- chan_config.dtmfdetect_ms = 45;
if (!ftdm_config_open_file(&cfg, cfg_name)) {
return FTDM_FAIL;
@@ -4808,9 +4813,23 @@ static ftdm_status_t load_config(void)
chan_config.debugdtmf = ftdm_true(val);
ftdm_log(FTDM_LOG_DEBUG, "Setting debugdtmf to '%s'\n", chan_config.debugdtmf ? "yes" : "no");
} else if (!strncasecmp(var, "dtmfdetect_ms", sizeof("dtmfdetect_ms")-1)) {
+ if (chan_config.dtmf_on_start == FTDM_TRUE) {
+ chan_config.dtmf_on_start = FTDM_FALSE;
+ ftdm_log(FTDM_LOG_WARNING, "dtmf_on_start parameter disabled because dtmfdetect_ms specified\n");
+ }
if (sscanf(val, "%d", &(chan_config.dtmfdetect_ms)) != 1) {
ftdm_log(FTDM_LOG_ERROR, "invalid dtmfdetect_ms: '%s'\n", val);
}
+ } else if (!strncasecmp(var, "dtmf_on_start", sizeof("dtmf_on_start")-1)) {
+ if (chan_config.dtmfdetect_ms) {
+ ftdm_log(FTDM_LOG_WARNING, "dtmf_on_start parameter ignored because dtmf_detect_ms specified\n");
+ } else {
+ if (ftdm_true(val)) {
+ chan_config.dtmf_on_start = FTDM_TRUE;
+ } else {
+ chan_config.dtmf_on_start = FTDM_FALSE;
+ }
+ }
} else if (!strncasecmp(var, "iostats", sizeof("iostats")-1)) {
if (ftdm_true(val)) {
chan_config.iostats = FTDM_TRUE;
@@ -5810,6 +5829,8 @@ FT_DECLARE(ftdm_status_t) ftdm_global_destroy(void)
/* destroy signaling and io modules */
ftdm_unload_modules();
+ ftdm_global_set_logger( NULL );
+
/* finally destroy the globals */
ftdm_mutex_lock(globals.mutex);
ftdm_sched_destroy(&globals.timingsched);
diff --git a/libs/freetdm/src/ftdm_sched.c b/libs/freetdm/src/ftdm_sched.c
index c48c3e9433..e644067aad 100644
--- a/libs/freetdm/src/ftdm_sched.c
+++ b/libs/freetdm/src/ftdm_sched.c
@@ -119,10 +119,15 @@ static void *run_main_schedule(ftdm_thread_t *thread, void *data)
/* there are no free runs, wait a bit and check again (FIXME: use ftdm_interrupt_t for this) */
ftdm_mutex_unlock(sched_globals.mutex);
- ftdm_sleep(sleepms);
+ if (ftdm_running()) {
+ ftdm_sleep(sleepms);
+ }
}
for (current = sched_globals.freeruns; current; current = current->next) {
+ if (!ftdm_running()) {
+ break;
+ }
/* first run the schedule */
ftdm_sched_run(current);
@@ -142,7 +147,9 @@ static void *run_main_schedule(ftdm_thread_t *thread, void *data)
ftdm_mutex_unlock(sched_globals.mutex);
- ftdm_sleep(sleepms);
+ if (ftdm_running()) {
+ ftdm_sleep(sleepms);
+ }
}
ftdm_log(FTDM_LOG_NOTICE, "Main scheduling thread going out ...\n");
sched_globals.running = 0;
diff --git a/libs/freetdm/src/ftdm_threadmutex.c b/libs/freetdm/src/ftdm_threadmutex.c
index 56653811fa..20b85ae91e 100644
--- a/libs/freetdm/src/ftdm_threadmutex.c
+++ b/libs/freetdm/src/ftdm_threadmutex.c
@@ -472,7 +472,7 @@ FT_DECLARE(ftdm_status_t) ftdm_interrupt_signal(ftdm_interrupt_t *interrupt)
* otherwise users that never call interrupt wait eventually will
* eventually have the pipe buffer filled */
if ((err = write(interrupt->writefd, "w", 1)) != 1) {
- ftdm_log(FTDM_LOG_ERROR, "Failed to signal interrupt: %s\n", errno, strerror(errno));
+ ftdm_log(FTDM_LOG_ERROR, "Failed to signal interrupt: %s\n", strerror(errno));
return FTDM_FAIL;
}
}
diff --git a/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c b/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c
index 9673549f79..38480950e7 100644
--- a/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c
+++ b/libs/freetdm/src/ftmod/ftmod_misdn/ftmod_misdn.c
@@ -25,6 +25,15 @@
* NOTE: This is intended as a Layer 1 interface only, signaling
* is handled by other modules (e.g. ftmod_libpri or ftmod_isdn).
*/
+/*
+ * TODO:
+ * - Use a fifo and PH_DATA_CNF for b-channel write polling (drop timerfd)
+ *
+ * - Disable L1 idle deactivation on BRI PTMP with IMGL1HOLD ioctl(? optional)
+ *
+ * - Add hfcsusb specific state + flag defines and try to do something useful with
+ * it in misdn_handle_mph_information_ind().
+ */
#include
#include
@@ -67,6 +76,15 @@
#define MIN(x,y) (((x) < (y)) ? (x) : (y))
#endif
+#ifndef MAX
+#define MAX(x,y) (((x) > (y)) ? (x) : (y))
+#endif
+
+#ifndef CLAMP
+#define CLAMP(val,min,max) (MIN(max,MAX(min,val)))
+#endif
+
+
typedef enum {
MISDN_CAPS_NONE = 0,
@@ -91,23 +109,33 @@ typedef enum {
#define MISDN_IS_RAW(x) (x & MISDN_CAPS_RAW)
#define MISDN_IS_HDLC(x) (x & MISDN_CAPS_HDLC)
+#define MISDN_MSG_DATA(x) ((void *)((unsigned char *)(x) + MISDN_HEADER_LEN))
const static struct {
const int id;
const char *name;
} misdn_event_types[] = {
- { PH_DATA_REQ, "PH_DATA_REQ" },
- { PH_DATA_IND, "PH_DATA_IND" },
- { PH_DATA_CNF, "PH_DATA_CNF" },
- { PH_CONTROL_REQ, "PH_CONTROL_REQ" },
- { PH_CONTROL_IND, "PH_CONTROL_IND" },
- { PH_CONTROL_CNF, "PH_CONTROL_CNF" },
- { PH_ACTIVATE_REQ, "PH_ACTIVATE_REQ" },
- { PH_ACTIVATE_IND, "PH_ACTIVATE_IND" },
- { PH_ACTIVATE_CNF, "PH_ACTIVATE_CNF" },
- { PH_DEACTIVATE_REQ, "PH_DEACTIVATE_REQ" },
- { PH_DEACTIVATE_IND, "PH_DEACTIVATE_IND" },
- { PH_DEACTIVATE_CNF, "PH_DEACTIVATE_CNF" },
+#define MISDN_EVENT_TYPE(x) { x, #x }
+ MISDN_EVENT_TYPE(PH_DATA_REQ),
+ MISDN_EVENT_TYPE(PH_DATA_IND),
+ MISDN_EVENT_TYPE(PH_DATA_CNF),
+ MISDN_EVENT_TYPE(PH_DATA_E_IND),
+ MISDN_EVENT_TYPE(PH_CONTROL_REQ),
+ MISDN_EVENT_TYPE(PH_CONTROL_IND),
+ MISDN_EVENT_TYPE(PH_CONTROL_CNF),
+ MISDN_EVENT_TYPE(PH_ACTIVATE_REQ),
+ MISDN_EVENT_TYPE(PH_ACTIVATE_IND),
+ MISDN_EVENT_TYPE(PH_ACTIVATE_CNF),
+ MISDN_EVENT_TYPE(PH_DEACTIVATE_REQ),
+ MISDN_EVENT_TYPE(PH_DEACTIVATE_IND),
+ MISDN_EVENT_TYPE(PH_DEACTIVATE_CNF),
+ MISDN_EVENT_TYPE(MPH_ACTIVATE_REQ),
+ MISDN_EVENT_TYPE(MPH_ACTIVATE_IND),
+ MISDN_EVENT_TYPE(MPH_DEACTIVATE_REQ),
+ MISDN_EVENT_TYPE(MPH_DEACTIVATE_IND),
+ MISDN_EVENT_TYPE(MPH_INFORMATION_REQ),
+ MISDN_EVENT_TYPE(MPH_INFORMATION_IND),
+#undef MISDN_EVENT_TYPE
};
static const char *misdn_event2str(const int event)
@@ -128,6 +156,7 @@ const static struct {
} misdn_control_types[] = {
#define MISDN_CONTROL_TYPE(x) { x, #x }
MISDN_CONTROL_TYPE(DTMF_HFC_COEF),
+#undef MISDN_CONTROL_TYPE
};
#if 0 /* unused for now */
@@ -143,6 +172,63 @@ static const char *misdn_control2str(const int ctrl)
}
#endif
+
+/***********************************************************************************
+ * mISDN <-> FreeTDM audio conversion
+ ***********************************************************************************/
+
+/*
+ * Code used to generate table values taken from
+ * Linux Call Router (LCR) http://www.linux-call-router.de/
+ *
+ * chan_lcr.c:3488 ff., load_module()
+ */
+static const unsigned char conv_audio_tbl[256] = {
+ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
+};
+
+/* Convert ISDN_P_B_RAW audio data to/from a-/u-law */
+static inline void misdn_convert_audio_bits(char *buf, int buflen)
+{
+ int i;
+
+ for (i = 0; i < buflen; i++) {
+ buf[i] = conv_audio_tbl[(unsigned char)buf[i]];
+ }
+}
+
+
/***********************************************************************************
* mISDN <-> FreeTDM data structures
***********************************************************************************/
@@ -171,10 +257,15 @@ struct misdn_chan_private {
int state;
int debugfd;
int timerfd;
+ int active;
/* hw addr of channel */
struct sockaddr_mISDN addr;
+ /* audio tx pipe */
+ int audio_pipe_in;
+ int audio_pipe_out;
+
/* counters */
unsigned long tx_cnt;
unsigned long tx_ack_cnt;
@@ -189,6 +280,12 @@ struct misdn_chan_private {
#define ftdm_span_io_private(x) ((x)->io_data)
static ftdm_status_t misdn_handle_incoming(ftdm_channel_t *ftdmchan, const char *rbuf, const int size);
+static int misdn_handle_mph_information_ind(ftdm_channel_t *chan, const struct mISDNhead *hh, const void *data, const int data_len);
+
+static const char *ftdm_channel_get_type_str(const ftdm_channel_t *chan)
+{
+ return ftdm_chan_type2str(ftdm_channel_get_type(chan));
+}
/***********************************************************************************
* mISDN interface functions
@@ -378,12 +475,17 @@ static inline int ts_before(struct timespec *a, struct timespec *b)
static ftdm_status_t misdn_activate_channel(ftdm_channel_t *chan, int activate)
{
+ struct misdn_chan_private *priv = ftdm_chan_io_private(chan);
char buf[MAX_DATA_MEM] = { 0 };
struct mISDNhead *hh = (struct mISDNhead *) buf;
struct timespec abstimeout;
int req = 0, resp = 0, ms_left = MISDN_PH_ACTIVATE_TIMEOUT_MS;
int retval;
+ /* NOTE: sending PH_DEACTIVATE_REQ to closed b-channels kills the d-channel (hfcsusb)... */
+ if ((activate && priv->active) || (!activate && !priv->active))
+ return FTDM_SUCCESS;
+
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN sending %s request\n",
(activate) ? "activation" : "deactivation");
@@ -407,7 +509,7 @@ static ftdm_status_t misdn_activate_channel(ftdm_channel_t *chan, int activate)
struct pollfd pfd;
pfd.fd = chan->sockfd;
- pfd.events = POLLIN /* | POLLPRI */;
+ pfd.events = POLLIN | POLLPRI;
pfd.revents = 0;
switch ((retval = poll(&pfd, 1, ms_left))) {
@@ -432,28 +534,37 @@ static ftdm_status_t misdn_activate_channel(ftdm_channel_t *chan, int activate)
return FTDM_FAIL;
}
//#ifdef MISDN_DEBUG_EVENTS
- ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN got event '%s' while waiting for %s confirmation\n",
- misdn_event2str(hh->prim), (activate) ? "activation" : "deactivation");
+ ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN got event '%s (%#x)', id %#x, while waiting for %s confirmation on %c-channel\n",
+ misdn_event2str(hh->prim), hh->prim, hh->id, (activate) ? "activation" : "deactivation",
+ ftdm_channel_get_type(chan) == FTDM_CHAN_TYPE_B ? 'B' : 'D');
//#endif
switch (hh->prim) {
- case PH_ACTIVATE_IND: /* success (or not): save last response, */
- case PH_DEACTIVATE_IND: /* stop looping if it's the one we've been waiting for */
- resp = hh->prim;
- if (hh->prim == (activate) ? PH_ACTIVATE_IND : PH_DEACTIVATE_IND) goto out;
- break;
+ case PH_ACTIVATE_IND:
case PH_ACTIVATE_CNF:
- case PH_DEACTIVATE_CNF:
resp = hh->prim;
- if (hh->prim == (activate) ? PH_ACTIVATE_CNF : PH_DEACTIVATE_CNF) goto out;
+ priv->active = 1;
+ if (activate) goto out;
+ break;
+ case PH_DEACTIVATE_CNF:
+ case PH_DEACTIVATE_IND:
+ resp = hh->prim;
+ priv->active = 0;
+ if (!activate) goto out;
break;
case PH_ACTIVATE_REQ: /* REQ echo, ignore */
case PH_DEACTIVATE_REQ:
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN got '%s' echo while waiting for %s confirmation (id: %#x)\n",
misdn_event2str(hh->prim), (activate) ? "activation" : "deactivation", hh->id);
break;
+ case MPH_INFORMATION_IND:
+ misdn_handle_mph_information_ind(chan, hh, MISDN_MSG_DATA(buf), retval - MISDN_HEADER_LEN);
+ break;
+ case PH_DATA_IND: /* ignore */
+ case PH_DATA_CNF: /* ignore */
+ break;
default: /* other messages, ignore */
- ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN ignoring event '%s' while waiting for %s confirmation\n",
- misdn_event2str(hh->prim), (activate) ? "activation" : "deactivation");
+ ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN ignoring event '%s (%#x)', id %#x, while waiting for %s confirmation\n",
+ misdn_event2str(hh->prim), hh->prim, hh->id, (activate) ? "activation" : "deactivation");
break;
}
}
@@ -470,8 +581,8 @@ out:
(activate) ? "activation" : "deactivation");
return FTDM_TIMEOUT;
}
- if ((req == PH_ACTIVATE_IND && !(resp == PH_ACTIVATE_CNF || resp == PH_ACTIVATE_IND)) ||
- (req == PH_DEACTIVATE_IND && !(resp == PH_DEACTIVATE_CNF || resp == PH_DEACTIVATE_CNF))) {
+ if ((req == PH_ACTIVATE_REQ && !(resp == PH_ACTIVATE_CNF || resp == PH_ACTIVATE_IND)) ||
+ (req == PH_DEACTIVATE_REQ && !(resp == PH_DEACTIVATE_CNF || resp == PH_DEACTIVATE_IND))) {
ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN received '%s' while waiting for %s\n",
misdn_event2str(resp), (activate) ? "activation" : "deactivation");
return FTDM_FAIL;
@@ -602,53 +713,188 @@ static int misdn_handle_ph_control_ind(ftdm_channel_t *chan, const struct mISDNh
return FTDM_SUCCESS;
}
+/*
+ * TE/NT state names
+ * taken from linux-3.2.1/drivers/isdn/hardware/mISDN/hfcsusb.h
+ */
+static const char *misdn_layer1_te_states[] = {
+ "TE F0 - Reset",
+ "TE F1 - Reset",
+ "TE F2 - Sensing",
+ "TE F3 - Deactivated",
+ "TE F4 - Awaiting signal",
+ "TE F5 - Identifying input",
+ "TE F6 - Synchronized",
+ "TE F7 - Activated",
+ "TE F8 - Lost framing",
+};
+
+static const char *misdn_layer1_nt_states[] = {
+ "NT G0 - Reset",
+ "NT G1 - Deactive",
+ "NT G2 - Pending activation",
+ "NT G3 - Active",
+ "NT G4 - Pending deactivation",
+};
+
+static const char *misdn_hw_state_name(const int proto, const int id)
+{
+ if (IS_ISDN_P_TE(proto)) {
+ if (id < 0 || id >= ftdm_array_len(misdn_layer1_te_states))
+ return NULL;
+ return misdn_layer1_te_states[id];
+ }
+ else if (IS_ISDN_P_NT(proto)) {
+ if (id < 0 || id >= ftdm_array_len(misdn_layer1_nt_states))
+ return NULL;
+ return misdn_layer1_nt_states[id];
+ }
+ return NULL;
+}
+
+
+static const struct misdn_hw_flag {
+ const unsigned int flag;
+ const char *name;
+} misdn_hw_flags[] = {
+#define MISDN_HW_FLAG(v,n) { v, #n }
+ MISDN_HW_FLAG(0, FLG_TX_BUSY),
+ MISDN_HW_FLAG(1, FLG_TX_NEXT),
+ MISDN_HW_FLAG(2, FLG_L1_BUSY),
+ MISDN_HW_FLAG(3, FLG_L2_ACTIVATED),
+ MISDN_HW_FLAG(5, FLG_OPEN),
+ MISDN_HW_FLAG(6, FLG_ACTIVE),
+ MISDN_HW_FLAG(7, FLG_BUSY_TIMER),
+ MISDN_HW_FLAG(8, FLG_DCHANNEL),
+ MISDN_HW_FLAG(9, FLG_BCHANNEL),
+ MISDN_HW_FLAG(10, FLG_ECHANNEL),
+ MISDN_HW_FLAG(12, FLG_TRANSPARENT),
+ MISDN_HW_FLAG(13, FLG_HDLC),
+ MISDN_HW_FLAG(14, FLG_L2DATA),
+ MISDN_HW_FLAG(15, FLG_ORIGIN),
+ MISDN_HW_FLAG(16, FLG_FILLEMPTY),
+ MISDN_HW_FLAG(17, FLG_ARCOFI_TIMER),
+ MISDN_HW_FLAG(18, FLG_ARCOFI_ERROR),
+ MISDN_HW_FLAG(17, FLG_INITIALIZED),
+ MISDN_HW_FLAG(18, FLG_DLEETX),
+ MISDN_HW_FLAG(19, FLG_LASTDLE),
+ MISDN_HW_FLAG(20, FLG_FIRST),
+ MISDN_HW_FLAG(21, FLG_LASTDATA),
+ MISDN_HW_FLAG(22, FLG_NMD_DATA),
+ MISDN_HW_FLAG(23, FLG_FTI_RUN),
+ MISDN_HW_FLAG(24, FLG_LL_OK),
+ MISDN_HW_FLAG(25, FLG_LL_CONN),
+ MISDN_HW_FLAG(26, FLG_DTMFSEND),
+ MISDN_HW_FLAG(30, FLG_RECVQUEUE),
+ MISDN_HW_FLAG(31, FLG_PHCHANGE),
+#undef MISDN_HW_FLAG
+};
+
+static const char *misdn_hw_print_flags(unsigned int flags, char *buf, int buflen)
+{
+ int i;
+
+ buf[0] = '\0';
+ for (i = 0; i < ftdm_array_len(misdn_hw_flags); i++) {
+ if ((1 << misdn_hw_flags[i].flag) & flags) {
+ strncat(buf, misdn_hw_flags[i].name, buflen);
+ flags &= ~(1 << misdn_hw_flags[i].flag);
+ if (!flags) break;
+ strncat(buf, ",", buflen);
+ }
+ }
+ return buf;
+}
+
static int misdn_handle_mph_information_ind(ftdm_channel_t *chan, const struct mISDNhead *hh, const void *data, const int data_len)
{
struct misdn_chan_private *priv = ftdm_chan_io_private(chan);
- int alarm_flags, value;
- if (data_len < sizeof(value)) {
- ftdm_log_chan_msg(chan, FTDM_LOG_ERROR, "mISDN MPH_INFORMATION_IND message is too short\n");
+ /*
+ * mISDN has some inconsistency issues here.
+ *
+ * There are only two drivers that emit MPH_INFORMATION_IND messages,
+ * hfcsusb and hfcmulti. The former sends a set of ph_info and ph_info_ch structures,
+ * while the latter just sends an int containing the current L1_SIGNAL_* event id.
+ *
+ * The flags and state information in the ph_info and ph_info_ch structures
+ * are defined in kernel internal hw-specific headers (mISDNhw.h).
+ *
+ * Use the payload size to guess the type of message.
+ */
+ if (data_len >= sizeof(struct ph_info)) {
+ /* complete port status, hfcsusb sends this */
+ struct ph_info *info = (struct ph_info *)data;
+ struct ph_info_ch *bch_info = NULL;
+ char tmp[1024] = { 0 };
+
+ if (data_len < (sizeof(*info) + info->dch.num_bch * sizeof(*bch_info))) {
+ ftdm_log_chan_msg(chan, FTDM_LOG_ERROR, "mISDN MPH_INFORMATION_IND message is too short\n");
+ return FTDM_FAIL;
+ }
+ bch_info = &info->bch[0];
+
+ ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN port state:\n\tD-Chan proto:\t%hu\n\tD-Chan state:\t%s (%hu)\n\tD-Chan flags:\t%#lx\n\t\t\t%-70s\n",
+ info->dch.ch.protocol,
+ misdn_hw_state_name(info->dch.ch.protocol, info->dch.state), info->dch.state,
+ info->dch.ch.Flags,
+ misdn_hw_print_flags(info->dch.ch.Flags, tmp, sizeof(tmp) - 1));
+
+ /* TODO: try to translate this to a usable set of alarm flags */
+
+ } else if (data_len == sizeof(int)) {
+ /* alarm info, sent by hfcmulti */
+ int value = *(int *)data;
+ int alarm_flags = chan->alarm_flags;
+
+ if (data_len < sizeof(value)) {
+ ftdm_log_chan_msg(chan, FTDM_LOG_ERROR, "mISDN MPH_INFORMATION_IND message is too short\n");
+ return FTDM_FAIL;
+ }
+
+ switch (value) {
+ case L1_SIGNAL_LOS_ON:
+ alarm_flags |= FTDM_ALARM_RED;
+ break;
+ case L1_SIGNAL_LOS_OFF:
+ alarm_flags &= ~FTDM_ALARM_RED;
+ break;
+ case L1_SIGNAL_AIS_ON:
+ alarm_flags |= FTDM_ALARM_AIS;
+ break;
+ case L1_SIGNAL_AIS_OFF:
+ alarm_flags &= ~FTDM_ALARM_AIS;
+ break;
+ case L1_SIGNAL_RDI_ON:
+ alarm_flags |= FTDM_ALARM_YELLOW;
+ break;
+ case L1_SIGNAL_RDI_OFF:
+ alarm_flags &= ~FTDM_ALARM_YELLOW;
+ break;
+ case L1_SIGNAL_SLIP_RX:
+ priv->slip_rx_cnt++;
+ break;
+ case L1_SIGNAL_SLIP_TX:
+ priv->slip_tx_cnt++;
+ break;
+ default:
+ ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN unknown MPH_INFORMATION_IND signal: %#04x\n",
+ value);
+ return FTDM_FAIL;
+ }
+
+ /* check whether alarm status has changed, update channel flags if it has */
+ if ((value = (alarm_flags ^ chan->alarm_flags))) {
+ ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN alarm flags have changed %#x -> %#x\n",
+ chan->alarm_flags, alarm_flags);
+ chan->alarm_flags ^= value;
+ }
+ } else {
+ ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN sent MPH_INFORMATION_IND message with unknown size %d\n",
+ data_len);
return FTDM_FAIL;
}
- value = *(int *)data;
- alarm_flags = chan->alarm_flags;
- switch (value) {
- case L1_SIGNAL_LOS_ON:
- alarm_flags |= FTDM_ALARM_RED;
- break;
- case L1_SIGNAL_LOS_OFF:
- alarm_flags &= ~FTDM_ALARM_RED;
- break;
- case L1_SIGNAL_AIS_ON:
- alarm_flags |= FTDM_ALARM_AIS;
- break;
- case L1_SIGNAL_AIS_OFF:
- alarm_flags &= ~FTDM_ALARM_AIS;
- break;
- case L1_SIGNAL_RDI_ON:
- alarm_flags |= FTDM_ALARM_YELLOW;
- break;
- case L1_SIGNAL_RDI_OFF:
- alarm_flags &= ~FTDM_ALARM_YELLOW;
- break;
- case L1_SIGNAL_SLIP_RX:
- priv->slip_rx_cnt++;
- break;
- case L1_SIGNAL_SLIP_TX:
- priv->slip_tx_cnt++;
- break;
- default:
- ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN unknown MPH_INFORMATION_IND message: %d\n",
- value);
- return FTDM_FAIL;
- }
- if ((value = (alarm_flags ^ chan->alarm_flags))) {
- ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN alarm flags have changed %#x -> %#x\n",
- chan->alarm_flags, alarm_flags);
- chan->alarm_flags ^= value;
- }
return FTDM_SUCCESS;
}
@@ -696,6 +942,7 @@ static FIO_OPEN_FUNCTION(misdn_open)
switch (ftdmchan->type) {
case FTDM_CHAN_TYPE_B: {
+#if 0
struct itimerspec its = {
.it_interval = { 0, 0 },
.it_value = { 0, 0 },
@@ -722,13 +969,14 @@ static FIO_OPEN_FUNCTION(misdn_open)
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN created tx interval (%d ms) timer\n",
ftdmchan->effective_interval);
+#endif
}
case FTDM_CHAN_TYPE_DQ921:
chan_priv->state = MISDN_CHAN_STATE_OPEN;
break;
default:
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN invalid channel type '%s'\n",
- ftdm_channel_get_type(ftdmchan));
+ ftdm_channel_get_type_str(ftdmchan));
break;
}
return FTDM_SUCCESS;
@@ -745,8 +993,12 @@ static FIO_CLOSE_FUNCTION(misdn_close)
assert(chan_priv);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "mISDN trying to close %c-channel\n",
+ ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B ? 'B' : 'D');
+
/* deactivate b-channels on close */
if (ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B) {
+#if 0
/*
* Stop tx timerfd
*/
@@ -754,17 +1006,19 @@ static FIO_CLOSE_FUNCTION(misdn_close)
close(chan_priv->timerfd);
chan_priv->timerfd = -1;
}
-
+#endif
/*
* Send deactivation request (don't wait for answer)
*/
ret = misdn_activate_channel(ftdmchan, 0);
if (ret != FTDM_SUCCESS) {
- ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "Failed to deactivate channel\n");
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to deactivate %c-channel\n",
+ ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B ? 'B' : 'D');
return FTDM_FAIL;
}
- ftdm_log_chan_msg(ftdmchan, FTDM_LOG_INFO, "mISDN channel deactivated\n");
+ ftdm_log_chan(ftdmchan, FTDM_LOG_INFO, "mISDN %c-channel deactivated\n",
+ ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B ? 'B' : 'D');
chan_priv->state = MISDN_CHAN_STATE_CLOSED;
}
@@ -823,8 +1077,8 @@ static FIO_COMMAND_FUNCTION(misdn_command)
case FTDM_COMMAND_GET_INTERVAL:
FTDM_COMMAND_OBJ_INT = ftdm_channel_get_io_interval(ftdmchan);
- ftdm_log(FTDM_LOG_NOTICE, "Interval %d ms [%d:%d]\n",
- ftdm_channel_get_io_interval(ftdmchan), ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan));
+ ftdm_log_chan(ftdmchan, FTDM_LOG_NOTICE, "Interval %d ms\n",
+ ftdm_channel_get_io_interval(ftdmchan));
break;
default:
@@ -852,8 +1106,8 @@ static FIO_WAIT_FUNCTION(misdn_wait)
switch (ftdm_channel_get_type(ftdmchan)) {
case FTDM_CHAN_TYPE_B:
if (*flags & FTDM_WRITE) {
- pfds[nr_fds].fd = chan_priv->timerfd;
- pfds[nr_fds].events = POLLIN;
+ pfds[nr_fds].fd = chan_priv->audio_pipe_in;
+ pfds[nr_fds].events = POLLOUT;
nr_fds++;
}
if (*flags & (FTDM_READ | FTDM_EVENTS)) {
@@ -877,8 +1131,11 @@ static FIO_WAIT_FUNCTION(misdn_wait)
*flags = FTDM_NO_FLAGS;
- if (!(pfds[0].events || pfds[1].events))
+ if (!(pfds[0].events || pfds[1].events)) {
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_NOTICE, "mISDN poll(): no flags set!\n");
return FTDM_SUCCESS;
+ }
+
if ((retval = poll(pfds, nr_fds, to)) < 0) {
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN poll() failed: %s\n",
strerror(errno));
@@ -889,18 +1146,13 @@ static FIO_WAIT_FUNCTION(misdn_wait)
switch (ftdm_channel_get_type(ftdmchan)) {
case FTDM_CHAN_TYPE_B:
- if (pfds[0].fd == chan_priv->timerfd) {
- if (pfds[0].revents & POLLIN) {
- uint64_t tmp = 0; /* clear pending events on timerfd */
- retval = read(pfds[0].fd, &tmp, sizeof(tmp));
- *flags |= FTDM_WRITE;
- }
- if (pfds[1].revents & POLLIN)
- *flags |= FTDM_READ;
- if (pfds[1].revents & POLLPRI)
- *flags |= FTDM_EVENTS;
- break;
- }
+ if (pfds[0].revents & POLLOUT)
+ *flags |= FTDM_WRITE;
+ if ((pfds[0].revents & POLLIN) || (pfds[1].revents & POLLIN))
+ *flags |= FTDM_READ;
+ if ((pfds[0].revents & POLLPRI) || (pfds[1].revents & POLLPRI))
+ *flags |= FTDM_EVENTS;
+ break;
default:
if (pfds[0].revents & POLLIN)
*flags |= FTDM_READ;
@@ -913,6 +1165,81 @@ static FIO_WAIT_FUNCTION(misdn_wait)
return FTDM_SUCCESS;
}
+
+/**
+ * Handle incoming mISDN message on d-channel
+ * @param[in] ftdmchan
+ * @param[in] msg_buf
+ * @param[in] msg_len
+ * @internal
+ */
+static ftdm_status_t misdn_handle_incoming(ftdm_channel_t *ftdmchan, const char *msg_buf, const int msg_len)
+{
+ struct misdn_chan_private *priv = ftdm_chan_io_private(ftdmchan);
+ struct mISDNhead *hh = (struct mISDNhead *)msg_buf;
+ const char *data = msg_buf + sizeof(*hh);
+ int data_len = msg_len - sizeof(*hh);
+
+ assert(msg_buf);
+ assert(priv);
+
+ if (msg_len < sizeof(*hh)) {
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN message to small (%d < %d bytes)\n",
+ msg_len, sizeof(*hh));
+ return FTDM_FAIL;
+ }
+
+#ifdef MISDN_DEBUG_EVENTS
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN %c-channel received '%s' message (id: 0x%x, additional data: %d bytes)\n",
+ ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B ? 'B' : 'D', misdn_event2str(hh->prim), hh->id, data_len);
+#endif
+
+ switch (hh->prim) {
+ /* data events */
+ case PH_DATA_CNF: /* TX: ack */
+ priv->tx_ack_cnt++;
+ break;
+ case PH_DATA_REQ: /* TX: request echo (ignore) */
+ break;
+ case PH_DATA_E_IND: /* RX: e-channel data received (monitoring?) */
+ break;
+
+ /* control requests */
+ case PH_CONTROL_IND:
+ return misdn_handle_ph_control_ind(ftdmchan, hh, data, data_len);
+ case PH_CONTROL_REQ:
+ case PH_CONTROL_CNF:
+ break;
+
+ /* information */
+ case MPH_INFORMATION_IND:
+ return misdn_handle_mph_information_ind(ftdmchan, hh, data, data_len);
+
+ /* channel de-/activation */
+ case PH_ACTIVATE_REQ: /* Echoed requests, ignore */
+ case PH_DEACTIVATE_REQ:
+ break;
+ case PH_ACTIVATE_IND:
+ case PH_DEACTIVATE_IND: {
+ /* other events, enqueue and let misdn_event_next handle it */
+ struct misdn_span_private *span_priv = ftdm_span_io_private(ftdmchan->span);
+ struct misdn_event evt = { 0 };
+ evt.id = hh->prim;
+
+ misdn_event_queue_push(priv->events, &evt);
+
+ /* wake possible readers */
+ pthread_cond_signal(&span_priv->event_cond);
+ break;
+ }
+ default: /* error? */
+ ftdm_log(FTDM_LOG_DEBUG, "mISDN channel %d:%d received unknown event %d\n",
+ ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan), hh->prim);
+ break;
+ }
+ return FTDM_SUCCESS;
+}
+
/**
* \brief Read data
* \param ftdmchan FreeTDM channel
@@ -926,22 +1253,29 @@ static FIO_READ_FUNCTION(misdn_read)
struct mISDNhead *hh = (struct mISDNhead *)rbuf;
int bytes = *datalen;
int retval;
+ int maxretry = 10;
if (priv->state == MISDN_CHAN_STATE_CLOSED) {
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "mISDN ignoring read on closed channel\n");
/* ignore */
*datalen = 0;
return FTDM_SUCCESS;
}
+ /* nothing read yet */
+ *datalen = 0;
+
/*
* try to read all messages, as long as we haven't received a PH_DATA_IND one
* we'll get a lot of "mISDN_send: error -12" message in dmesg otherwise
* (= b-channel receive queue overflowing)
*/
- while (1) {
- if ((retval = recvfrom(ftdmchan->sockfd, rbuf, sizeof(rbuf), 0, NULL, NULL)) < 0) {
- if (errno == EWOULDBLOCK) break;
- if (errno == EAGAIN) continue;
+ while (maxretry--) {
+ struct sockaddr_mISDN addr;
+ socklen_t addrlen = sizeof(addr);
+
+ if ((retval = recvfrom(ftdmchan->sockfd, rbuf, sizeof(rbuf), 0, (struct sockaddr *)&addr, &addrlen)) < 0) {
+ if (errno == EWOULDBLOCK || errno == EAGAIN) break;
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN failed to receive incoming message: %s\n",
strerror(errno));
return FTDM_FAIL;
@@ -953,22 +1287,94 @@ static FIO_READ_FUNCTION(misdn_read)
}
if (hh->prim == PH_DATA_IND) {
- *datalen = MIN(bytes, retval - MISDN_HEADER_LEN);
- memcpy(data, rbuf + MISDN_HEADER_LEN, *datalen);
+ *datalen = CLAMP(retval - MISDN_HEADER_LEN, 0, bytes);
#ifdef MISDN_DEBUG_IO
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "misdn_read() received '%s', id: %#x, with %d bytes from channel socket %d [dev.ch: %d.%d]\n",
+ misdn_event2str(hh->prim), hh->id, retval - MISDN_HEADER_LEN, ftdmchan->sockfd, addr.dev, addr.channel);
+
if (*datalen > 0) {
char hbuf[MAX_DATA_MEM] = { 0 };
print_hex_bytes(data, *datalen, hbuf, sizeof(hbuf));
- ftdm_log(FTDM_LOG_DEBUG, "mISDN read data: %s\n", hbuf);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN read data: %s\n", hbuf);
}
#endif
+ if (*datalen <= 0)
+ continue;
+
+ /*
+ * Copy data into ouput buffer (excluding the mISDN message header)
+ * NOTE: audio data needs to be converted to a-law / u-law!
+ */
+ memcpy(data, rbuf + MISDN_HEADER_LEN, *datalen);
+
+ switch (ftdm_channel_get_type(ftdmchan)) {
+ case FTDM_CHAN_TYPE_B:
+ hh->prim = PH_DATA_REQ;
+ hh->id = MISDN_ID_ANY;
+ bytes = *datalen;
+
+ /* Convert incoming audio data to *-law */
+ misdn_convert_audio_bits(data, *datalen);
+
+ /*
+ * Fetch required amount of audio from tx pipe, using the amount
+ * of received bytes as an indicator for how much free space the
+ * b-channel tx buffer has available.
+ *
+ * (see misdn_write() for the part that fills the tx pipe)
+ *
+ * NOTE: can't use blocking I/O here since both parts are serviced
+ * from the same thread
+ */
+ if ((retval = read(priv->audio_pipe_out, rbuf + MISDN_HEADER_LEN, bytes)) < 0) {
+ if (!(errno == EAGAIN || errno == EWOULDBLOCK)) {
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN failed to read %d bytes of audio data: %s\n",
+ bytes, strerror(errno));
+ break;
+ }
+ /* Tx pipe is empty, completely fill buffer up to "bytes" with silence value */
+ retval = 0;
+ }
+
+ /*
+ * Use a-law / u-law silence to fill missing bytes,
+ * in case there was not enough audio data available in the
+ * tx pipe to satisfy the request.
+ */
+ if (retval < bytes) {
+ memset(&rbuf[MISDN_HEADER_LEN + retval],
+ (ftdm_channel_get_codec(ftdmchan) == FTDM_CODEC_ALAW) ? 0x2a : 0xff,
+ bytes - retval);
+ }
+
+ /* Convert outgoing audio data to wire format */
+ misdn_convert_audio_bits(rbuf + MISDN_HEADER_LEN, bytes);
+ bytes += MISDN_HEADER_LEN;
+
+ /* Send converted audio to b-channel */
+ if ((retval = sendto(ftdmchan->sockfd, rbuf, bytes, 0, (struct sockaddr *)&priv->addr, sizeof(priv->addr))) < bytes) {
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN failed to send %d bytes of audio data: (%d) %s\n",
+ bytes, retval, strerror(errno));
+ }
+ break;
+ default:
+ break;
+ }
return FTDM_SUCCESS;
} else {
*datalen = 0;
+#ifdef MISDN_DEBUG_IO
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "misdn_read() received '%s', id: %#x, with %d bytes from channel socket %d [dev.ch: %d.%d]\n",
+ misdn_event2str(hh->prim), hh->id, retval - MISDN_HEADER_LEN, ftdmchan->sockfd, addr.dev, addr.channel);
+#endif
/* event */
misdn_handle_incoming(ftdmchan, rbuf, retval);
}
}
+#ifdef MISDN_DEBUG_IO
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN nothing received on %c-channel\n",
+ ftdm_channel_get_type(ftdmchan) == FTDM_CHAN_TYPE_B ? 'B' : 'D');
+#endif
return FTDM_SUCCESS;
}
@@ -985,6 +1391,7 @@ static FIO_WRITE_FUNCTION(misdn_write)
struct mISDNhead *hh = (struct mISDNhead *)wbuf;
int size = *datalen;
int retval = 0;
+ ftdm_wait_flag_t wflags;
assert(priv);
@@ -999,30 +1406,56 @@ static FIO_WRITE_FUNCTION(misdn_write)
ftdm_log(FTDM_LOG_DEBUG, "mISDN write data: %s\n", hbuf);
}
#endif
- hh->prim = PH_DATA_REQ;
- hh->id = MISDN_ID_ANY;
+ *datalen = 0;
- /* avoid buffer overflow */
- size = MIN(size, MAX_DATA_MEM);
+ switch (ftdm_channel_get_type(ftdmchan)) {
+ case FTDM_CHAN_TYPE_B:
+ /*
+ * Write to audio pipe, misdn_read() will pull
+ * from there as needed and send it to the b-channel
+ *
+ * NOTE: can't use blocking I/O here since both parts are serviced
+ * from the same thread
+ */
+ if ((retval = write(priv->audio_pipe_in, data, size)) < size) {
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN channel audio pipe write error: %s\n",
+ strerror(errno));
+ return FTDM_FAIL;
+ }
+ *datalen = retval;
+ break;
+ default:
+ hh->prim = PH_DATA_REQ;
+ hh->id = MISDN_ID_ANY;
- memcpy(wbuf + MISDN_HEADER_LEN, data, size);
- size += MISDN_HEADER_LEN;
+ /* Avoid buffer overflow */
+ size = MIN(size, MAX_DATA_MEM - MISDN_HEADER_LEN);
+
+ memcpy(wbuf + MISDN_HEADER_LEN, data, size);
+ size += MISDN_HEADER_LEN;
+
+ /* wait for channel to get ready */
+ wflags = FTDM_WRITE;
+ retval = misdn_wait(ftdmchan, &wflags, 20);
+ if (retval) {
+ /* timeout, io error */
+ *datalen = 0;
+ return FTDM_FAIL;
+ }
#ifdef MISDN_DEBUG_IO
- ftdm_log(FTDM_LOG_DEBUG, "mISDN writing %d bytes to channel %d:%d socket %d\n",
- size, ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan), ftdmchan->sockfd);
+ ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN writing %d bytes to channel socket %d [dev.ch: %d.%d]\n",
+ size, ftdmchan->sockfd, priv->addr.dev, priv->addr.channel);
#endif
- if ((retval = sendto(ftdmchan->sockfd, wbuf, size, 0, NULL, 0)) != size) {
- ftdm_log(FTDM_LOG_ERROR, "mISDN channel %d:%d socket write error: %s\n",
- ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan),
- strerror(errno));
- return FTDM_FAIL;
- }
- *datalen = retval;
-// if (priv->debugfd >= 0) {
-// write(priv->debugfd, wbuf + MISDN_HEADER_LEN, size - MISDN_HEADER_LEN);
-// }
+ if ((retval = sendto(ftdmchan->sockfd, wbuf, size, 0, NULL, 0)) < size) {
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "mISDN channel socket write error: %s\n",
+ strerror(errno));
+ return FTDM_FAIL;
+ }
+ *datalen = retval;
+ break;
+ }
priv->tx_cnt++;
return FTDM_SUCCESS;
@@ -1149,12 +1582,30 @@ static ftdm_status_t misdn_open_range(ftdm_span_t *span, ftdm_chan_type_t type,
ftdmchan->physical_chan_id = x;
if (ftdmchan->type == FTDM_CHAN_TYPE_B) {
+ int pipefd[2] = { -1, -1 };
+
ftdmchan->packet_len = 10 /* ms */ * (ftdmchan->rate / 1000);
ftdmchan->effective_interval = ftdmchan->native_interval = ftdmchan->packet_len / 8;
ftdmchan->native_codec = ftdmchan->effective_codec = FTDM_CODEC_ALAW;
ftdm_channel_set_feature(ftdmchan, FTDM_CHANNEL_FEATURE_INTERVAL);
+
+ /*
+ * Create audio tx pipe, use non-blocking I/O to avoid deadlock since both ends
+ * are used from the same thread
+ */
+ if (pipe2(pipefd, O_NONBLOCK) < 0) {
+ ftdm_log(FTDM_LOG_ERROR, "Failed to create mISDN audio write pipe [%d:%d]: %s\n",
+ addr.dev, x, strerror(errno));
+ close(sockfd);
+ return FTDM_FAIL;
+ }
+ priv->audio_pipe_in = pipefd[1];
+ priv->audio_pipe_out = pipefd[0];
+
} else {
+ /* early activate D-Channel */
+ misdn_activate_channel(ftdmchan, 1);
ftdmchan->native_codec = ftdmchan->effective_codec = FTDM_CODEC_NONE;
}
num_configured++;
@@ -1589,71 +2040,6 @@ static FIO_SPAN_DESTROY_FUNCTION(misdn_span_destroy)
}
-static ftdm_status_t misdn_handle_incoming(ftdm_channel_t *ftdmchan, const char *rbuf, const int size)
-{
- struct mISDNhead *hh = (struct mISDNhead *)rbuf;
- struct misdn_chan_private *priv = ftdm_chan_io_private(ftdmchan);
- const char *data = rbuf + sizeof(*hh);
- int data_len = size - sizeof(*hh);
-
- assert(priv);
-
-#ifdef MISDN_DEBUG_EVENTS
- ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN channel received '%s' message (additional data: %d bytes)\n",
- misdn_event2str(hh->prim), data_len);
-#endif
-
- switch (hh->prim) {
- /* data events */
- case PH_DATA_CNF: /* TX ack */
- priv->tx_ack_cnt++;
- break;
- case PH_DATA_REQ: /* request echo? */
- break;
- case PH_DATA_E_IND: /* TX/RX ERR(?) */
- break;
-
- /* control events */
- case PH_ACTIVATE_REQ:
- case PH_DEACTIVATE_REQ:
- /*
- * Echoed(?) L2->L1 requests, ignore...
- * (something broken in mISDN or the way we setup the channel?)
- */
- break;
- case PH_CONTROL_IND:
- return misdn_handle_ph_control_ind(ftdmchan, hh, data, data_len);
- case PH_CONTROL_REQ:
- case PH_CONTROL_CNF:
- break;
-
- case MPH_INFORMATION_IND:
- return misdn_handle_mph_information_ind(ftdmchan, hh, data, data_len);
-
- case PH_ACTIVATE_IND:
- case PH_DEACTIVATE_IND:
- {
- /* other events, enqueue and let misdn_event_next handle it */
- struct misdn_span_private *span_priv = ftdm_span_io_private(ftdmchan->span);
- struct misdn_event evt = { 0 };
- evt.id = hh->prim;
-
- misdn_event_queue_push(priv->events, &evt);
-
- /* wake possible readers */
- pthread_cond_signal(&span_priv->event_cond);
- }
- break;
-
- default: /* error? */
- ftdm_log(FTDM_LOG_DEBUG, "mISDN channel %d:%d received unknown event %d\n",
- ftdm_channel_get_span_id(ftdmchan), ftdm_channel_get_id(ftdmchan), hh->prim);
- break;
- }
- return FTDM_SUCCESS;
-}
-
-
/**
* \brief ftmod_misdn interface
*/
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
index e6740c2ddd..e3af9d9b98 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn.c
@@ -682,16 +682,26 @@ static ftdm_status_t ftdm_sangoma_isdn_process_state_change(ftdm_channel_t *ftdm
break;
case FTDM_CHANNEL_STATE_DIALING: /* outgoing call request */
{
- if (FTDM_SPAN_IS_BRI(ftdmchan->span) &&
- ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM) &&
- ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) {
-
- sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) ftdmchan->span->signal_data;
-
- ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Requesting Line activation\n");
- sngisdn_set_flag(sngisdn_info, FLAG_ACTIVATING);
- ftdm_sangoma_isdn_wakeup_phy(ftdmchan);
- ftdm_sched_timer(signal_data->sched, "timer_t3", signal_data->timer_t3*1000, sngisdn_t3_timeout, (void*) sngisdn_info, NULL);
+ if (FTDM_SPAN_IS_BRI(ftdmchan->span) && ftdm_test_flag(ftdmchan->span, FTDM_SPAN_PWR_SAVING)) {
+ ftdm_signaling_status_t sigstatus;
+ ftdm_span_get_sig_status(ftdmchan->span, &sigstatus);
+ if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_IN_ALARM)) {
+ sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)ftdmchan->span->signal_data;
+
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Requesting Physical Line activation\n");
+ sngisdn_set_flag(sngisdn_info, FLAG_ACTIVATING);
+ ftdm_sangoma_isdn_wakeup_phy(ftdmchan);
+ ftdm_sched_timer(signal_data->sched, "timer_t3", signal_data->timer_t3*1000, sngisdn_t3_timeout, (void*) sngisdn_info, NULL);
+ } else if (sigstatus == FTDM_SIG_STATE_DOWN) {
+ sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)ftdmchan->span->signal_data;
+
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Requesting Q.921 Line activation\n");
+ sngisdn_set_flag(sngisdn_info, FLAG_ACTIVATING);
+ sngisdn_snd_info_req(ftdmchan);
+ ftdm_sched_timer(signal_data->sched, "timer_t3", signal_data->timer_t3*1000, sngisdn_t3_timeout, (void*) sngisdn_info, NULL);
+ } else {
+ sngisdn_snd_setup(ftdmchan);
+ }
} else {
sngisdn_snd_setup(ftdmchan);
}
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c
index 668b63006c..15def40218 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_cntrl.c
@@ -49,6 +49,16 @@ void sngisdn_set_chan_sig_status(ftdm_channel_t *ftdmchan, ftdm_signaling_status
sig.event_id = FTDM_SIGEVENT_SIGSTATUS_CHANGED;
sig.ev_data.sigstatus.status = status;
ftdm_span_send_signal(ftdmchan->span, &sig);
+
+ if (FTDM_SPAN_IS_BRI(ftdmchan->span)) {
+ sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;
+ sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*)ftdmchan->span->signal_data;
+ if (ftdm_test_flag(sngisdn_info, FLAG_ACTIVATING)) {
+ ftdm_clear_flag(sngisdn_info, FLAG_ACTIVATING);
+
+ ftdm_sched_timer(signal_data->sched, "delayed_setup", 1000, sngisdn_delayed_setup, (void*) sngisdn_info, NULL);
+ }
+ }
return;
}
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
index 4d3786c258..a1229dcab9 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_cfg.c
@@ -981,8 +981,18 @@ ftdm_status_t sngisdn_stack_cfg_q931_lce(ftdm_span_t *span)
cfg.t.cfg.s.inLCe.lnkUpDwnInd = TRUE;
}
- cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
- cfg.t.cfg.s.inLCe.tCon.val = 35;
+ if (FTDM_SPAN_IS_BRI(span)) {
+ /* tCon Timer causes unwanted hangup on BRI links
+ where the Q.921 link goes into disconnected
+ state when idle. */
+
+ cfg.t.cfg.s.inLCe.tCon.enb = FALSE;
+ cfg.t.cfg.s.inLCe.tCon.val = 0;
+ } else {
+ cfg.t.cfg.s.inLCe.tCon.enb = TRUE;
+ cfg.t.cfg.s.inLCe.tCon.val = 35;
+ }
+
cfg.t.cfg.s.inLCe.tDisc.enb = TRUE;
cfg.t.cfg.s.inLCe.tDisc.val = 35;
cfg.t.cfg.s.inLCe.t314.enb = FALSE; /* if segmentation enabled, set to TRUE */
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
index 064dbf6547..d963acc60d 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_hndl.c
@@ -446,7 +446,12 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event)
/* Do nothing */
break;
case FTDM_CHANNEL_STATE_RESET:
- ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Processing SETUP but channel in RESET state, ignoring\n");
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring ALERT/PROCEED/PROGRESS because channel is in RESET state\n");
+ break;
+ case FTDM_CHANNEL_STATE_HANGUP:
+ case FTDM_CHANNEL_STATE_HANGUP_COMPLETE:
+ /* Ignore this message as we already started the hangup process */
+ ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring ALERT/PROCEED/PROGRESS because we are already hanging up\n");
break;
default:
ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Processing ALERT/PROCEED/PROGRESS in an invalid state (%s)\n", ftdm_channel_state2str(ftdmchan->state));
@@ -1164,12 +1169,13 @@ static ftdm_status_t sngisdn_bring_down(ftdm_channel_t *ftdmchan)
void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event)
{
+ ftdm_signaling_status_t sigstatus;
int16_t suId = sngisdn_event->suId;
int16_t dChan = sngisdn_event->dChan;
uint8_t ces = sngisdn_event->ces;
uint8_t evntType = sngisdn_event->evntType;
uint8_t chan_no = 0;
- Rst *rstEvnt = &sngisdn_event->event.rstEvnt;
+ Rst *rstEvnt = &sngisdn_event->event.rstEvnt;
sngisdn_span_data_t *signal_data = g_sngisdn_data.dchans[dChan].spans[1];
if (!signal_data) {
@@ -1217,33 +1223,26 @@ void sngisdn_process_rst_cfm (sngisdn_event_data_t *sngisdn_event)
return;
}
}
-
- if (chan_no) { /* For a single channel */
- ftdm_iterator_t *chaniter = NULL;
- ftdm_iterator_t *curr = NULL;
-
- chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
- for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
- ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
- sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*) ftdmchan->call_data;
- if (sngisdn_info->ces == ces && ftdmchan->physical_chan_id == chan_no) {
+
+ ftdm_span_get_sig_status(signal_data->ftdm_span, &sigstatus);
+ if (sigstatus == FTDM_SIG_STATE_DOWN) {
+ if (chan_no) { /* For a single channel */
+ if (chan_no > ftdm_span_get_chan_count(signal_data->ftdm_span)) {
+ ftdm_log(FTDM_LOG_CRIT, "Received RESTART on invalid channel:%d\n", chan_no);
+ } else {
+ ftdm_channel_t *ftdmchan = ftdm_span_get_channel(signal_data->ftdm_span, chan_no);
sngisdn_bring_down(ftdmchan);
}
- }
- ftdm_iterator_free(chaniter);
- } else { /* for all channels */
- ftdm_iterator_t *chaniter = NULL;
- ftdm_iterator_t *curr = NULL;
+ } else { /* for all channels */
+ ftdm_iterator_t *chaniter = NULL;
+ ftdm_iterator_t *curr = NULL;
- chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
- for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
- ftdm_channel_t *ftdmchan = (ftdm_channel_t*)ftdm_iterator_current(curr);
- sngisdn_chan_data_t *sngisdn_info = (sngisdn_chan_data_t*) ftdmchan->call_data;
- if (sngisdn_info->ces == ces) {
- sngisdn_bring_down(ftdmchan);
+ chaniter = ftdm_span_get_chan_iterator(signal_data->ftdm_span, NULL);
+ for (curr = chaniter; curr; curr = ftdm_iterator_next(curr)) {
+ sngisdn_bring_down((ftdm_channel_t*)ftdm_iterator_current(curr));
}
+ ftdm_iterator_free(chaniter);
}
- ftdm_iterator_free(chaniter);
}
ftdm_log(FTDM_LOG_DEBUG, "Processing RESTART CFM (suId:%u dChan:%d ces:%d type:%d)\n", suId, dChan, ces, evntType);
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
index 076cb54a61..f528333634 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_out.c
@@ -305,6 +305,7 @@ void sngisdn_snd_fac_req(ftdm_channel_t *ftdmchan)
return;
}
+/* This is used to request Q.921 to initiate link establishment */
void sngisdn_snd_info_req(ftdm_channel_t *ftdmchan)
{
CnStEvnt cnStEvnt;
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
index fe11e194b2..b0e7d77284 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_stack_rcv.c
@@ -689,6 +689,17 @@ void sngisdn_rcv_q921_ind(BdMngmt *status)
DECODE_LCM_CATEGORY(status->t.usta.alarm.category),
DECODE_LLD_EVENT(status->t.usta.alarm.event), status->t.usta.alarm.event,
DECODE_LLD_CAUSE(status->t.usta.alarm.cause), status->t.usta.alarm.cause);
+
+ if (FTDM_SPAN_IS_BRI(ftdmspan) && (status->t.usta.alarm.event == PROT_ST_DN)) {
+ /* Q.921 link is down - This is a line where the Q.921 stops transmitting
+ after the line goes idle.
+
+ Do not drop current calls, but set sigstatus do down so that we
+ can try to re-initialize link before trying new outbound calls */
+
+ sngisdn_set_span_sig_status(ftdmspan, FTDM_SIG_STATE_DOWN);
+ sngisdn_set_span_avail_rate(ftdmspan, SNGISDN_AVAIL_PWR_SAVING);
+ }
break;
default:
ftdm_log(FTDM_LOG_INFO, "[SNGISDN Q921] %s: %s: %s(%d): %s(%d)\n",
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c
index db1a8d3a0d..254b3abbfb 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_support.c
@@ -595,6 +595,11 @@ ftdm_status_t set_calling_num(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb)
if (!len) {
return FTDM_SUCCESS;
}
+
+ if (!strncasecmp(caller_data->cid_num.digits, "0000000000", strlen("0000000000"))) {
+ return FTDM_SUCCESS;
+ }
+
cgPtyNmb->eh.pres = PRSNT_NODEF;
cgPtyNmb->screenInd.pres = PRSNT_NODEF;
diff --git a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c
index 52c4f4d321..56797fbf9c 100644
--- a/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c
+++ b/libs/freetdm/src/ftmod/ftmod_sangoma_isdn/ftmod_sangoma_isdn_trace.c
@@ -112,7 +112,7 @@ uint8_t get_bits(uint8_t octet, uint8_t bitLo, uint8_t bitHi)
void sngisdn_trace_interpreted_q921(sngisdn_span_data_t *signal_data, ftdm_trace_dir_t dir, uint8_t *data, uint32_t data_len)
{
- char *data_str = ftdm_calloc(1,200); /* TODO Find a proper size */
+ char *data_str = ftdm_calloc(1,500); /* TODO Find a proper size */
sngisdn_decode_q921(data_str, data, data_len);
ftdm_log(FTDM_LOG_DEBUG, "[SNGISDN Q921] %s FRAME %s:\n%s\n", signal_data->ftdm_span->name, ftdm_trace_dir2str(dir), data_str);
ftdm_safe_free(data_str);
diff --git a/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c b/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
index 834c9d4f02..1e9f3b059f 100644
--- a/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
+++ b/libs/freetdm/src/ftmod/ftmod_wanpipe/ftmod_wanpipe.c
@@ -1470,18 +1470,28 @@ static __inline__ ftdm_status_t wanpipe_channel_process_event(ftdm_channel_t *fc
if (tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT) {
ftdm_set_flag(fchan, FTDM_CHANNEL_MUTE);
- fchan->dtmfdetect.start_time = ftdm_current_time_in_ms();
+ if (fchan->dtmfdetect.duration_ms) {
+ fchan->dtmfdetect.start_time = ftdm_current_time_in_ms();
+ } else if (fchan->dtmfdetect.trigger_on_start) {
+ ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c\n", tmp_dtmf[0]);
+ ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
+ }
}
if (tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_STOP) {
ftdm_clear_flag(fchan, FTDM_CHANNEL_MUTE);
if (ftdm_test_flag(fchan, FTDM_CHANNEL_INUSE)) {
- ftdm_time_t diff = ftdm_current_time_in_ms() - fchan->dtmfdetect.start_time;
- if (diff > fchan->dtmfdetect.duration_ms) {
- ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c (duration:%d min:%d)\n", tmp_dtmf[0], diff, fchan->dtmfdetect.duration_ms);
+ if (fchan->dtmfdetect.duration_ms) {
+ ftdm_time_t diff = ftdm_current_time_in_ms() - fchan->dtmfdetect.start_time;
+ if (diff > fchan->dtmfdetect.duration_ms) {
+ ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c (duration:%d min:%d)\n", tmp_dtmf[0], diff, fchan->dtmfdetect.duration_ms);
+ ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
+ } else {
+ ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Ignoring wanpipe DTMF: %c (duration:%d min:%d)\n", tmp_dtmf[0], diff, fchan->dtmfdetect.duration_ms);
+ }
+ } else if (!fchan->dtmfdetect.trigger_on_start) {
+ ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c\n", tmp_dtmf[0]);
ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
- } else {
- ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Ignoring wanpipe DTMF: %c (duration:%d min:%d)\n", tmp_dtmf[0], diff, fchan->dtmfdetect.duration_ms);
}
}
}
diff --git a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c
index 0282b222c8..f531d2b375 100644
--- a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c
+++ b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c
@@ -1052,12 +1052,14 @@ static __inline__ ftdm_status_t zt_channel_process_event(ftdm_channel_t *fchan,
switch(zt_event_id) {
case ZT_EVENT_RINGEROFF:
{
- return FTDM_FAIL;
+ ftdm_log_chan_msg(fchan, FTDM_LOG_DEBUG, "ZT RINGER OFF\n");
+ *event_id = FTDM_OOB_NOOP;
}
break;
case ZT_EVENT_RINGERON:
{
- return FTDM_FAIL;
+ ftdm_log_chan_msg(fchan, FTDM_LOG_DEBUG, "ZT RINGER ON\n");
+ *event_id = FTDM_OOB_NOOP;
}
break;
case ZT_EVENT_RINGBEGIN:
@@ -1176,7 +1178,7 @@ FIO_CHANNEL_NEXT_EVENT_FUNCTION(zt_channel_next_event)
/* the core already locked the channel for us, so it's safe to call zt_channel_process_event() here */
if ((zt_channel_process_event(ftdmchan, &event_id, zt_event_id)) != FTDM_SUCCESS) {
- ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "Failed to process event from channel\n");
+ ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to process DAHDI event %d from channel\n", zt_event_id);
return FTDM_FAIL;
}
@@ -1210,7 +1212,7 @@ FIO_SPAN_NEXT_EVENT_FUNCTION(zt_next_event)
ftdm_channel_lock(fchan);
if ((zt_channel_process_event(fchan, &event_id, zt_event_id)) != FTDM_SUCCESS) {
- ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "Failed to process event from channel\n");
+ ftdm_log_chan(fchan, FTDM_LOG_ERROR, "Failed to process DAHDI event %d from channel\n", zt_event_id);
ftdm_channel_unlock(fchan);
return FTDM_FAIL;
}
diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h
index 8a554c219f..26e4b67584 100755
--- a/libs/freetdm/src/include/freetdm.h
+++ b/libs/freetdm/src/include/freetdm.h
@@ -488,6 +488,7 @@ typedef struct ftdm_channel_config {
float rxgain;
float txgain;
uint8_t debugdtmf;
+ uint8_t dtmf_on_start;
uint32_t dtmfdetect_ms;
uint8_t iostats;
} ftdm_channel_config_t;
diff --git a/libs/freetdm/src/include/private/ftdm_core.h b/libs/freetdm/src/include/private/ftdm_core.h
index 830238b54e..6418baa3be 100644
--- a/libs/freetdm/src/include/private/ftdm_core.h
+++ b/libs/freetdm/src/include/private/ftdm_core.h
@@ -387,6 +387,8 @@ typedef struct {
typedef struct {
uint32_t duration_ms;
ftdm_time_t start_time;
+ /* If set to 1, we will send DTMF event the the tone starts, instead of waiting for end */
+ uint8_t trigger_on_start;
} ftdm_dtmf_detect_t;
/* 2^8 table size, one for each byte (sample) value */
diff --git a/libs/freetdm/src/testr2.c b/libs/freetdm/src/testr2.c
index 72d98020bc..24dde38b08 100644
--- a/libs/freetdm/src/testr2.c
+++ b/libs/freetdm/src/testr2.c
@@ -10,7 +10,7 @@ static ftdm_channel_indication_t indication = FTDM_CHANNEL_INDICATE_NONE;
static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
{
int chanid = ftdm_channel_get_ph_id(sigmsg->channel);
- ftdm_log(FTDM_LOG_DEBUG, "Got R2 channel sig [%s] in channel\n", ftdm_signal_event2str(sigmsg->event_id), chanid);
+ ftdm_log(FTDM_LOG_DEBUG, "Got R2 channel sig [%s] in channel %d\n", ftdm_signal_event2str(sigmsg->event_id), chanid);
switch (sigmsg->event_id) {
case FTDM_SIGEVENT_START:
{
diff --git a/libs/libzrtp/AUTHORS b/libs/libzrtp/AUTHORS
new file mode 100644
index 0000000000..471f0148b3
--- /dev/null
+++ b/libs/libzrtp/AUTHORS
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2006-2009 Philip R. Zimmermann. All rights reserved.
+# Contact: http://philzimmermann.com
+# For licensing and other legal details, see the file zrtp_legal.c.
+#
+# Viktor Krikun
+
+libzrtp BETA
+
+Created by Phil Zimmermann.
+
+Developers:
+ Viktor Krikun
+ Nikolay Popok
+ Vitaly Rozhkov
+ Andrey Rozinko
+ Bryce Wilcox-O'Hearn
+
+Thanks to:
+ Alan Johnston
+ Jon Callas
+ Hal Finney
+ Colin Plumb
+ Sagar Pai
+ Werner Dittmann
+ L. Amber Wilcox-O'Hearn
+ Ariel Boston
+ Donovan Preston
+
+Software development services provided by Soft_industry http://www.soft-industry.com/en.
+
+Portions of this software are available under open source licenses from other authors.
+Notably, Brian Gladman's AES implementation, and David McGrew's libSRTP package.
diff --git a/libs/libzrtp/ChangeLog b/libs/libzrtp/ChangeLog
new file mode 100644
index 0000000000..e86032d299
--- /dev/null
+++ b/libs/libzrtp/ChangeLog
@@ -0,0 +1,556 @@
+ * libZRTP SDK library, implements the ZRTP secure VoIP protocol.
+ * Copyright (c) 2006-2009 Philip R. Zimmermann. All rights reserved.
+ * Contact: http://philzimmermann.com
+ * For licensing and other legal details, see the file zrtp_legal.c.
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+SINCE LIBZRTP v0.80 CHANGELOG IS A PART OF HTML DOCUMENTATION.
+https://developers.zfoneproject.com/libzrtp/wiki/LibzrtpChangeLog
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+libzrtp 0.7.1 18.11.2008
+--------------------------------------------------------------------------------
+1. Fixed bug with hardcoded AES128 cipher for generating SRTP keys. In this
+ version is selected according to ZRTP discovery.
+
+2. Added initialization/deinitalization functions to zrtp helper functions.
+
+libzrtp 0.7.0 04.11.2008
+--------------------------------------------------------------------------------
+1. Changes in libzrtp sources tree.
+
+2. Improvements in libzrtp initialization routine:
+ - all global zrtp options were combined in zrtp_config_t structure;
+ - zrtp_init() allocates memory for zrtp global context;
+ - zrtp_config_defaults()
+
+3. Improvements for Passive/Active mode support.
+ a) A passive endpoint never sends a commit message, period. Also, it
+ declares itself as a passive endpoint by setting the P flag it its own
+ Hello message;
+ b) A active endpoint does not send a commit to a passive endpoint, which it
+ recognizes by detecting the P flag;
+ c) A passive phone, if acting as a SIP initiator (meaning it initiated the
+ call), rejects all commit packets from everyone;
+ d) A passive phone rejects all commit messages from a PBX, which is easily
+ recognized by the M flag.
+ Passive mode support is built into the library logic and will be used
+ automatically if the developer specifies signaling role by setting
+ is_initiator flag in zrtp_init_session_ctx().
+
+4. Improvements in ZRTP feedback interface and system-dependent functions.
+ There are two types of interface functions in libzrtp: system dependent API
+ and realization of helper functions and events. System dependent API in
+ defined in zrtp_iface_system.h as set of extern functions. System
+ functions are already implemented for several basic platforms in
+ zrtp_iface.sys.c libzrtp feedback and helper functions were re-factored
+ and implemented as set of callbacks. If the developer doesn't want to
+ handle one or another event it may just leave necessary pointer empty.
+ See zrtp_init() and zrtp_callback_t, zrtp_iface.h for more details.
+
+5. ZRTP configuration approach was improved: zrtp_config_xxx.h contains
+ adjustments for necessary target platform. libzrtp contains default
+ configs for Linux, OS X, Windows, Window CE and Symbian platforms.
+ All ZRTP protocol and behavior related adjustments are collected in
+ zrtp_config_user.h. Edit this file to configure libzrtp for your
+ needs.
+
+6. Implemented new functions in protocol according to the Internet Draft v 10.
+
+7. Improved realization of built-in libzrtp scheduler. Fixed bug with crashing
+ on performing delay call when zrtp session have been already deleted.
+
+8. Logging function was improved. Use ZRTP_LOG macro to print log messages. See
+ zrtp_log.h for more information.
+
+
+libzrtp 0.6.8 03.09.2008
+--------------------------------------------------------------------------------
+ZRTP
+1. Fixed bug with incorrect maximum value for T1 retry interval timer which
+ increased delay between LOOKING_FOR_ZRTP and NO_ZRTP_SUPPORT states.
+ Internal fix, no API changes required;
+2. Implemented version negotiation according to the latest specification.
+ libzrtp v 0.6.8 supports ZRTP v0.90 only. No changes required in
+ applications that use the SDK.
+3. Compilation flag WITH_ZFONE was removed. The developer, who wants to use
+ built-in ZRTP cache, has to set name of the ZRTP cache explicitly,
+ implementing zrtp_get_cache_path() function.
+4. New libzrtp licensing scheme was implemented. It allows the licensing policy
+ to be changed at run time. See zrtp_license_mode_t doc. for more details.
+ Affected API - zrtp_init().
+5. ZRTP Protocol version was changed to 0.90 according to ZRTP Internet Draft.
+6. Some changes in Linux config files: surplus configuration flags were removed
+ from ./cfg.XXX templates.
+7. Added experimental ZRTP messages retries scheduler for slow channels. As
+ ex ample for GSM CSD channel with average bandwidth 6Kb/s. To use this
+ option build library with BUILD_FOR_CSD flag.
+
+
+libzrtp 0.6.6 27.06.2008
+--------------------------------------------------------------------------------
+ZRTP
+1. Small bug was fixed in S0 calculation: when RS1 is corrupted the library uses
+ RS2 instead;
+2. Some changes in Makefile and building process: unused header were eliminated
+ from the installation process.
+3. -DBUILD_WITH_ZRTP_MUTEXES was replaced with --enable_mutexes option passed to
+ ./configure script. This change allows not to specify any libzrtp compilation
+ flags during user application compilation. --enable-mutexes adds
+ BUILD_ZRTP_MUTEXES definition to the ./config/zrtp_unix_config.h so if you
+ build libzrtp on other platforms - define this flag manually (windows
+ configuration file already includes this option).
+4. Clean-up in .h and .c comments was made.
+
+
+libzrtp 0.6.5 04.06.2008
+--------------------------------------------------------------------------------
+ZRTP
+1. New names for: other_secret - pbxs; srtps - auxs. In bits and secrets storages;
+2. RS2 secret was eliminated form DH s0 calculation;
+3. Protocol version number was increased to 0.85
+
+
+libzrtp 0.6.4 19.05.2008
+--------------------------------------------------------------------------------
+ZRTP
+1. According to the new version of the Internet Draft Signaling shared secret was
+ removed from the protocol and from the sources. It was not used by interface
+ functions and developers may change nothing in libzrtp based applications.
+
+2. DH4K Key echange was eleminated from the specification and from the sources.
+ Now ECDH is used for all larger AES key sizes.
+
+
+libzrtp 0.6.2 04.02.2008
+--------------------------------------------------------------------------------
+ZRTP
+1. New behaviour for Secure --> Clear --> Secure scenario was implemnted. According
+ to ZRTP ID 06 section 5.7.2.1 new value of ZRTPSess computed as hash(ZRTPSess).
+
+DOC:
+ Libzrtp documentation was updated up to version 0.6.2.
+
+
+libzrtp 0.6.1 03.14.2008
+--------------------------------------------------------------------------------
+ZRTP
+1. Multistream mode was implemented according to ZRTP Internet Draft 05.n:
+ - new stream mode zrtp_stream_mode_t:: ZRTP_STREAM_MODE_MULT;
+ - Multistream key exchange component was added with ID zrtp_pktype_id_t::
+ ZRTP_PKTYPE_MULT and symbolic name ZRTP_MULT. To allow libzrtp use Multistream
+ mode - ZRTP_PKTYPE_MULT have to be added to the stream profile in the first
+ position;
+ - According to the new draft SAS and ZRTPSess key are Session option and
+ were moved to the zrtp_conn_ctx_t structure. New specification defines
+ single SAS values for all streams within the session;
+ - ZRTP state-machine was changed to handle Multistream mode. In .Fast. mode
+ DH exchange is omitted and stream skips ZRTP_STATE_WAIT_CONFIRM1 and
+ ZRTP_STATE_PENDINGSECURE for the Initiator and Responder state-machines,
+ respectively;
+
+2. Hash preimages were added to prevent DOS attacks. See ZRTP ID sec 9.0 for detail
+ information. This option is available using zrtp_set_signaling_hash() and
+ zrtp_get_signaling_hash() functions.
+
+3. Hmac values were added to every packet to allow eliminate SAS validation
+ if SIP is protected;
+
+4. Autosave. of the default realization of the ZRTP cache to the hard drive was
+ implemented;
+
+5. Lot of other internal changes and improvements according to the latest ZRTP
+ specification v06.
+
+
+libzrtp 0.4.5-6
+--------------------------------------------------------------------------------
+ 1. Full PBX support. Tested on GS-Labs Asterisk
+ API:
+ DOC:
+
+ 2. Resolved problem with BG ciphers compilation: initialization of AES hash tables.
+
+ 3. Fixed bug in SRTP replay protection. (Undeleted nodes for mulsy-stream encryption)
+ (May resulted in a error zrtp_protocol_error_t::zrtp_status_rp_fail)
+
+ 4. Vrification is a session option. Input parameter of zrtp_set_verified() was
+ changed from stream to ZRTP session structure.
+
+ 5. Fixed bug with malformed ZRTP Hello packet.
+
+ 5. fast video
+
+libzrtp 0.4.4 31.07.2007
+--------------------------------------------------------------------------------
+ 1. New extra error code for replay protection was added.
+ See zrtp_status_t::zrtp_status_rp_fail.
+
+ 2. Fixed bug which may resulted in a dammage with decrypt failed 7 error. It
+ was happen when libzrtp passed RTP alerts packet to the replay protection
+ engine and ROC was broken.
+
+ 3. Fixed RTCP encryption/decryption.
+
+ 4. Fixed bug with RS1 and RS2 swapping when one of the sides lost RS1.
+ (May resulted in a error zrtp_protocol_error_t::zrtp_error_auth_decrypt )
+
+
+libzrtp 0.4.3 06.07.2007
+--------------------------------------------------------------------------------
+ 1. Beta version of API for PBX support according to the latest ZRTP draft.
+ Not tested. For internal development only. Follow // PBX comments;
+ - secret's cache format was changed.
+
+ 2. S0 calculation according to NIST recommendations; Internal change
+ - ZRTP protocol version was increased to 0.07.
+
+ 3. All libzrtp sources was audited with coverity code analyzer. http://coverity.com/
+
+libzrtp (0.3.9 - 0.4.2) 27.06.2008
+--------------------------------------------------------------------------------
+ 1. Changes according to new draft 04a. All changes are internal.
+ a) new DH packets: pvi/pvr, nonce field is at the end of the DH packet.
+ In "Preshared" mode both DH packets contain nonce value instead of pvi/r;
+ b) new hvi value the same for all modes (DH and Preshared)
+ hvi = hash(initiator's DHPart2 message | responder's Hello message);
+ c) new algorithm of SAS computing: sasvalue = HMAC(hmackeyi,"SAS");
+
+ 2. New GUI based test-unite forSymbian platform
+
+ 3. Default implementation of the packet retries unite for Symbian was added
+ to the libzrtp package. Except besides scheduler, libzrtp includes
+ realization of some synchronization and threading routines. These
+ components written in C++ and can't be linked with the library. One should
+ add them to own Symbian project project.
+
+ 4. Compilation of default realization of ZRTP mutexes was separated from
+ the other system interfaces. To build library with default mutexes
+ BUILD_ZRTP_MUTEXES flag should be used;
+
+ 5. New clearing logic. Goals:
+ API:
+ - state-machine states were changed
+ - goclear reason was eliminated. Now we can switch to CLEAR just on
+ user action.
+ - ZRTP_EVENT_IS_INITIATINGCLEAR was removed as a uperfluous event. As a
+ result all event codes were changed.
+ - new clear_hmac = HMAC(hmakkeyi/r, "Clear Hmac")
+ 6. New Errors handling logic. See updated state-macine diagram and "developers
+ guide".
+ API:
+ - ZRTP_STATE_ERROR was added to handle error requests. Libzrtp switches
+ to this state after the Error exchange. From ZRTP_STATE_ERROR stream
+ cxan be started again or destroyed, depending on application strategy.
+ - ZRTP_ERRORACK and ZRTP_ERROR packets were added
+ - new event ZRTP_ENEVT_NO_ZRTP inform's user that other side doesn't
+ support ZRTP encryption.
+
+ 7. -D WITH_STACK_MINIM compilation flag allows to minimize coasts for the
+ system stack. In the most critical places dynamic allocation will be used
+ instead of static variables. This option can be useful on mobile platforms
+ in kernel mode, etc.
+
+ 8. Several bug fixes in scheduler. Improved built-in realization of Symbian
+ platform. If you use our default realization on Symbian - please update.
+
+ 9. David A. McGrew's srtp was replaced with our own. We did it to get control
+ over all crypto functions, generalize interface of crypto component. It
+ allows us to port libsrtp to any platforms more smoothly. We have one
+ configuration file, all platform-dependent function and definitions are
+ concentrated at one place. We eliminated superfluous functionality from
+ libsrtp, made it crossplatform and thread-safe. In SRTP engine we use our
+ own crypto-components based on by Dr. Brian Gladman's sources. Each component
+ has strong self-test function allows it to be tested on any platform and
+ in any environment.
+ - project structure was changed;
+ - bgaes folder includes AES and SHA routines by Dr. Brian Gladman. For details
+ see dgaes/howto and bg2zrtp.h files;
+ - libzrtp supports external realizations of SRTP (Use zrtp_srtp.h API and flag
+ -D WITHOUT_BUILTIN_SRTP );
+
+ 10. Header files were refactored: one can add just single zrtp.h include to use
+ any libzrtp function or data type;
+
+ 11. Solved problem with deadlock during Video conferences. (One side starts
+ negotioation with Video and another one with Audio stream)
+
+ 12. Some changes in test-unite:
+ - test vectores and test-cases for all cryptio components are available;
+ - zrtp_system_test.h checks environment and compilation flags
+ - use ZRTP_ENABLE_TEST flag to build library with all tests
+ 13. Full documentation review and updating.
+
+ 14. Sources clean up and some refactoring;
+
+ 15. Fixing in "break the tie" logic. See diagrams and zrtp_preparse_commit(),
+ zrtp_preparse_init_commit();
+
+ 16. Some changes according to the lates ZRTP specification:
+ - sasvalue was trancated to 32 bits and used mostleft parts of the hashvalue.
+
+ 17. Small bug fixes (zrtp_can_start_dh and zrtp_can_start_preshared() mixed into
+ zrtp_can_start_stream);
+
+ 18. New key derivation mechanism according to NIST standarts. See ZRTP Draft
+ 5.4.4 and 5.5.4.
+
+libzrtp (0.3.7)
+--------------------------------------------------------------------------------
+ 1. New, more clear and useful test-unite
+ 2. Eliminated zrtp_stop_protocol(). Now zrtp_done_session_ctx() includes
+ protocol stopping.
+ 3. Some simplifications in project structure: removed zrtp_inet.h and bnase32.h,
+ zrtp_iface.c was removed to src\iface folder;
+ 4. ZSTR_GET_VALUE should be used to convert zrtp_stringxx_t to zrtp_stringn_t;
+ 5. Some changes for windows CE;
+ 6. Changed default options: SAS base256 enabled by defauld and "staysecure" is on.
+
+libzrtp (0.3.6)
+--------------------------------------------------------------------------------
+ FIXES:
+ a) CRC now covers the whole ZRTP packet, not just a body
+ b) improved names of some crypto-components in HELLO/COMMIT packets
+ c) improved messages hash: hash function covers all ZRTP message with
+ magic number and length fields;
+ d) fixed DHPart1 and DHPart2 packets format according to last version
+ of ZRTP Internet draft.
+ e) fixed retain secrets sorting algorithm according to the last version
+ of the internet draft.
+
+ 1. Windows CE support. Now library is fully compatible with Windows CE.
+ - .\libzrtp\projects\libzrtp_wince_vc8.sln project file for MS VS 2005
+ - .\libzrtp\test\WinCE contains sources of simple test-unite ( We have
+ just started working in this direction and more intelligent test unite
+ will be available soon. Tested on HTC S620 with Windows CE 2005 )
+
+ 2. Added previous state field to ZRTP stream structure. It can be used to
+ analyze conditions of switching from one state to another. (For libzrtp
+ developers only)
+ API:
+ - zrtp_stream_ctx_t#_prev_state was added
+ - _zrtp_change_state() MUST be used to switch from one state to another
+
+ 3. Some changes in PENDING_CLEAR state handler. In case of error during
+ transition from CLEAR to SECURE state-machine will switch back to CLEAR
+ without the confirmation by user.
+
+
+libzrtp (0.3.5)
+--------------------------------------------------------------------------------
+ Full description is in progress
+
+ 1. Support of all crypto futures according to the new ZRTP draft v 0.3. Lots
+ of internal changes were provided in ZRTP kernel.
+
+ 2. Symbian support. Now you can build libzrtp and test unites on Symbian
+ platforms. There are .inf and .mmp files in corresponded directories.
+ (Symbian project files are a little bit row and we will appreciate any
+ suggestions and advices.)
+
+ 3. ZRTP stream became more independent. You can use different configurations
+ for different streams. So
+ ZRTP profile: profile;
+ "staysecure" flag: staysecure;
+ SAS values: sas_values;
+ cache TTL: cache_ttl;
+ and all used crypto components were removed from session context
+ (zrtp_conn_ctx_t) to stream context (zrtp_stream_ctx_t).
+ API:
+ - you should configure every stream in the same way as the whole session in
+ previous version has been done. See zrtp_init_session_ctx()
+ and zrtp_attach_stream()
+
+ 4. "Multistream" mode was replaced by "Preshared" (based on retain secrets
+ from previous call. See http://zfoneproject.com/docs/ietf/draft-zimmermann-avt-zrtp-03.html#anchor19 .
+ Preshared mode is available as a normal ZRTP crypto component e.g."DH3K"
+ or "DH4K". If you enable Preshared mode in profile and libzrtp finds
+ secrets in your cache - "Preshared" mode will be used for all next calls
+ API:
+ - the choice of stream mode was removed from zrtp_start_stream() and
+ from zrtp_secure_stream().
+
+ 5. Integer enumerations for all crypto components e.g. Hash type, cipher type
+ etc. You should use these values instead of character values for optional
+ profile configuration. (as an example for enabling "preshared" mode)
+ API:
+ - enumerations types zrtp_hash_id, zrtp_cipher_idzrtp_atl_id,
+ zrtp_pktype_id, zrtp_sas_id in zrtp_crypto.h
+ - all crypto components structures now have id field and libzrtp
+ operates with this field to find, register or delete crypto
+ components.
+ - ZRTP profile: zrtp_profile_t uses this integer values too. (list of
+ crypto-components is a zero terminated array of values of necessary
+ type)
+ - zrtp_find_in_profile() and zrtp_find_comp() operate with component
+ integer identifiers
+ - there are two special functions to convert component ID to ZRTP
+ character name: zrtp_comp_id2type(), zrtp_comp_type2id.
+
+ 6. Integer error codes were provided instead of 4-character values. One should
+ use them to analyze zrtp_stream_ctx_t#last_error value in your ZRTP
+ errors handlers.
+ API:
+ - zrtp_protocol_error_t was added to zrtp_error.h.
+ - zrtp_stream_ctx_t#last_error now is an integer value from
+ zrtp_protocol_error_t space.
+
+ 7. Special function for verification of SAS value was added. One should use
+ this function to set/unset SAS verification flag from his own
+ application.
+ API:
+ - zrtp_set_verified() was added to zrtp.h
+
+ 8. Some optimization of types was provided. Here are some possible changes which you
+ need to make in your product:
+ - libzrtp uses it own strings (zrtp_stringXX_t group) to operate with
+ binary and character strings. In this version we made attempt to
+ minimize memory coasts and replaced zrtp_string_t with zrtp_stringXX_t
+ group, where XX - maximum length in bytes. zrtp_stringxx_t contains
+ its length and as a result all functions for work with strings are
+ type independent. So one should use one of these types to store binary
+ strings and zrtp_stringn_t as a type of operand in all global functions.
+ - all retain secrets holders and flags were removed to zrtp_secrets
+ structure in zrtp_conn_ctx_t#secrets.
+ - zrtp_packet_string4_t was replaced by zrtp_ucharXX_t group where XX -
+ type length in bytes. These types are used in library for packets
+ construction instead of char arrays.
+
+ 9. Packets retries synchronization was added. zrtp_retry_task_t structure
+ from zrtp_types_t is used for all operations with scheduler. One should
+ use #callback and #timeout fields from this structure.
+ API:
+ - zrtp_send_packet_later(), zrtp_cancel_send_packet_later()
+
+libzrtp (0.3.4)
+--------------------------------------------------------------------------------
+ 1. ZRTP state-macine was fully refactored. All transitions between states
+ are absolutely identical to diagram attached to documentation.
+ DOC:
+ - See doc/img/png/state_mach_ext.png
+
+ 2. ZRTP uses new packets format according to draft-zimmermann-avt-zrtp-03i
+
+ 3. Improved some mistakes in libbn make-files for windows. Unused
+ functions were omitted.
+
+ 4. Provided types optimization to decrease RAM memory costs.
+
+ 5. Packets retries were synchronized.
+
+ 6. zrtp_voip_proto_t was removed from the library
+ API:
+ - if you need this enumeration see zfone_types.h in zfone project
+
+ 7. "GoClear reasons" support
+
+ 8. Some internal changes according to draft-zimmermann-avt-zrtp-03i
+ a) Commit hash covers the whole Hello body
+ b) GoClear hmac includes "Reason string"
+ c) Confirm body encrypted by AES CDB cipher
+ d) Confirm hmac covers whole encrypted part of the packet
+
+ 9. Use BUILD_ZRTP_DEBUG_LOG flag instead of BUILD_DEBUG_LOG to build the
+ library with debug logs.
+
+libzrtp (0.3.3) 21.02.2007
+--------------------------------------------------------------------------------
+ 1. libzrtp test application refactored for better performance and usability.
+ For addition information see test application README file and
+ "libzrtp test suite" chapter in main documentation page.
+
+ 2. Some changes in documentation for better English
+
+ 3. Use microseconds in zrtp_time_t instead of milliseconds.
+ API changes:
+ - change zrtp_get_time() function realization if needed
+
+ 4. Fixed several small mistakes
+
+
+libzrtp (0.3.2) 09.02.2007
+--------------------------------------------------------------------------------
+ 1. Global context allocation removed to user space.
+ This was made to able RNG using before library initialization.
+ API changes:
+ - zrtp_init(), zrtp_down()
+ - zrtp_randstr(), zrtp_add_system_state()
+
+ 2. Fixed bug in srtp SHA1 calculation for Windows.
+
+ 3. Confirm and GoClear HMAC was truncated to 64 bits.
+
+ 4. Calls stack minimized for library using in kernel mode
+
+ 5. Default realization of secrets' cache is available. Cache was implemented
+ as a simple binary file and can be built using -DBUILD_DEFAULT_CACHE file.
+ API:
+ - realization at src\iface\zrtp_cache.c
+ DOC:
+ - 1.4 libZRTP setup and building
+ - 2.2 System-dependent functions
+
+ 6. Default cross-platform realization of time-out sending unite is available.
+ This unite is available for Linux, MacOS and Windows. It can be built using
+ -DBUILD_DEFAULT_TIMER flag.
+ API:
+ - realization at src\iface\zrtp_scheduler.c
+ DOC:
+ - 1.4 libZRTP setup and building
+ - 2.2 System-dependent functions
+
+ 7. "HOWTO libzrtp" was added to the library documentation
+
+libzrtp (0.3.1) 06.12.2006
+--------------------------------------------------------------------------------
+ 1. Global variables were removed from c-files. Added global context
+ zrtp_global_ctx_t for necessary data storing. This was made to allow
+ to build library in some special environment as Symbian OS ed2.
+ DOC changes:
+ - 2.1.2 data structure
+ API changes:
+ - zrtp_global_ctx_t added
+ - zrtp_init(), zrtp_down(), zrtp_init_session(), zrtp_down_session()
+
+ 2. Added multithreading support. Now libzrtp is thread-safe. About all
+ conditions of usage in multithreading application and synchronization
+ schemes see section "2.3.3 Multithreading and concurrent streams" in
+ developers guide.
+ DOC changes:
+ - 2.2.3 Multithreading and concurrent streams
+ API changes:
+ - mutex were added to main data structures
+ - mutex interface section at zrtp_iface.c, default realization at
+ zrtp_iface.c
+
+ 3. Session configuration routine was simplified. ZRTP profile is applied on
+ session initialization. Some configuration functions were removed and
+ changed.
+ DOC changes:
+ - 2.3.1 Setup, initialization and deinitialization
+ API:
+ - zrtp_profile_autoload() removed
+ - zrtp_init_session(), zrtp_check_profile()
+
+ 4. Default realizations of system interfaces was added (for Windows, Linux
+ and MacOS).
+ API:
+ - zrtp_iface.c added
+
+ 5. Test suit developed.
+ Simple test-unite created. It runs several ZRTP sessions, enters SECURE
+ mode, shows statistics and is closed. To build test-suite on Unix - use C
+ flags -DBUILD_DEBUG_LOG -DBUILD_WITH_CFUNC -DBUILD_EMPTY_CACHE
+ -DBUILD_EMPTY_TIMER and configure param. --enable-test. To run tests:
+ make check. To build test-suite on Windows use necessary project files.
+ DOC changes:
+ - 1.4 libZRTP setup and building
+ API:
+ - Sources can be found at /test directory
+
+ 6. Some changes in project structure, configuration and make files according
+ to new functionality.
+ DOC changes:
+ - 1.4 libZRTP setup and building
+
\ No newline at end of file
diff --git a/libs/libzrtp/README b/libs/libzrtp/README
new file mode 100644
index 0000000000..c6d90aae2e
--- /dev/null
+++ b/libs/libzrtp/README
@@ -0,0 +1,10 @@
+#
+# libZRTP SDK library, implements the ZRTP secure VoIP protocol.
+# Copyright (c) 2006-2009 Philip R. Zimmermann. All rights reserved.
+# Contact: http://philzimmermann.com
+# For licensing and other legal details, see the file zrtp_legal.c.
+#
+
+- Check HTML Documentation ./doc
+- Visit the Zfone Project Home Page http://zfoneproject.com/
+- Report bugs via the Zfone Bugs Page http://zfoneproject.com/bugs.html
diff --git a/libs/libzrtp/doc/Doxyfile b/libs/libzrtp/doc/Doxyfile
new file mode 100644
index 0000000000..b01900e4d5
--- /dev/null
+++ b/libs/libzrtp/doc/Doxyfile
@@ -0,0 +1,1553 @@
+# Doxyfile 1.5.8
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = libzrtp
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = v0.91
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = ./out
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene,
+# Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH = /Users/dimitri/doxygen/mail/1.5.7/doxywizard/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page. This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command , where is the value of
+# the FILE_VERSION_FILTER tag, and is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ./manuals/main.dox \
+ ./manuals/howto.dox \
+ ./manuals/changelog.dox \
+ ./manuals/rng.dox \
+ ./../include/zrtp_config_user.h \
+ ./../include/zrtp.h \
+ ./../include/zrtp_iface_system.h \
+ ./../include/zrtp_iface.h \
+ ./../include/zrtp_error.h \
+ ./../include/zrtp_types.h \
+ ./../include/zrtp_string.h \
+ ./../include/zrtp_pbx.h
+
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = *.c \
+ *.cc \
+ *.cxx \
+ *.cpp \
+ *.c++ \
+ *.d \
+ *.java \
+ *.ii \
+ *.ixx \
+ *.ipp \
+ *.i++ \
+ *.inl \
+ *.h \
+ *.hh \
+ *.hxx \
+ *.hpp \
+ *.h++ \
+ *.idl \
+ *.odl \
+ *.cs \
+ *.php \
+ *.php3 \
+ *.inc \
+ *.m \
+ *.mm \
+ *.dox \
+ *.py \
+ *.f90 \
+ *.f \
+ *.vhd \
+ *.vhdl
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command , where
+# is the value of the INPUT_FILTER tag, and is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET = doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = YES
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# Qt Help Project / Custom Filters.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# Qt Help Project / Filter Attributes.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature. Other possible values
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = NO
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/libs/libzrtp/doc/doxygen.css b/libs/libzrtp/doc/doxygen.css
new file mode 100644
index 0000000000..1d38770349
--- /dev/null
+++ b/libs/libzrtp/doc/doxygen.css
@@ -0,0 +1,451 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+ font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+
+BODY,TD {
+ font-size: 100%;
+}
+
+CODE {
+ font-size: 120%;
+ font-family: monospace;
+}
+
+.fragment, pre {
+ font-size: 110%;
+ font-family: monospace;
+}
+H1 {
+ text-align: center;
+ font-size: 240%;
+}
+H2 {
+ font-size: 180%;
+ margin-top: 60px;
+}
+H3 {
+ font-size: 140%;
+}
+H4 {
+ font-size: 120%;
+}
+
+caption {
+ font-weight: bold;
+}
+
+div.qindex, div.navtab{
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ padding: 2px;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #153788;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #1b77c5;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #6666cc;
+ color: #ffffff;
+ border: 1px double #9295C2;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code {
+}
+
+a.codeRef {
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+.fragment {
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+pre.fragment {
+ border: 1px solid #CCCCCC;
+ background-color: #f5f5f5;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+}
+
+div.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ margin-bottom: 6px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background: white;
+ color: black;
+ margin-right: 20px;
+ margin-left: 20px;
+}
+
+td.indexkey {
+ background-color: #e8eef2;
+ font-weight: bold;
+ border: 1px solid #CCCCCC;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+}
+
+td.indexvalue {
+ background-color: #e8eef2;
+ border: 1px solid #CCCCCC;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #f0f0f0;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+/* @end */
+
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #84b0c7;
+}
+
+th.dirtab {
+ background: #e8eef2;
+ font-weight: bold;
+}
+
+hr {
+ height: 0;
+ border: none;
+ border-top: 1px solid #666;
+}
+
+/* @group Member Descriptions */
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #FAFAFA;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memItemLeft, .memItemRight, .memTemplParams {
+ border-top: 1px solid #ccc;
+}
+
+.memTemplParams {
+ color: #606060;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+ margin-left: 3px;
+}
+
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.memitem {
+ padding: 0;
+}
+
+.memname {
+ white-space: nowrap;
+ font-weight: bold;
+}
+
+.memproto, .memdoc {
+ border: 1px solid #84b0c7;
+}
+
+.memproto {
+ padding: 0;
+ background-color: #d5e1e8;
+ font-weight: bold;
+ -webkit-border-top-left-radius: 8px;
+ -webkit-border-top-right-radius: 8px;
+ -moz-border-radius-topleft: 8px;
+ -moz-border-radius-topright: 8px;
+}
+
+.memdoc {
+ padding: 2px 5px;
+ background-color: #eef3f5;
+ border-top-width: 0;
+ -webkit-border-bottom-left-radius: 8px;
+ -webkit-border-bottom-right-radius: 8px;
+ -moz-border-radius-bottomleft: 8px;
+ -moz-border-radius-bottomright: 8px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+
+/* @end */
+
+/* @group Directory (tree) */
+
+/* for the tree view */
+
+.ftvtree {
+ font-family: sans-serif;
+ margin: 0.5em;
+}
+
+/* these are for tree view when used as main index */
+
+.directory {
+ font-size: 9pt;
+ font-weight: bold;
+}
+
+.directory h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+/*
+The following two styles can be used to replace the root node title
+with an image of your choice. Simply uncomment the next two styles,
+specify the name of your image and be sure to set 'height' to the
+proper pixel height of your image.
+*/
+
+/*
+.directory h3.swap {
+ height: 61px;
+ background-repeat: no-repeat;
+ background-image: url("yourimage.gif");
+}
+.directory h3.swap span {
+ display: none;
+}
+*/
+
+.directory > h3 {
+ margin-top: 0;
+}
+
+.directory p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory div {
+ display: none;
+ margin: 0px;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+/* these are for tree view when not used as main index */
+
+.directory-alt {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.directory-alt h3 {
+ margin: 0px;
+ margin-top: 1em;
+ font-size: 11pt;
+}
+
+.directory-alt > h3 {
+ margin-top: 0;
+}
+
+.directory-alt p {
+ margin: 0px;
+ white-space: nowrap;
+}
+
+.directory-alt div {
+ display: none;
+ margin: 0px;
+}
+
+.directory-alt img {
+ vertical-align: -30%;
+}
+
+/* @end */
+
+address {
+ font-style: normal;
+ color: #333;
+}
diff --git a/libs/libzrtp/doc/footer.html b/libs/libzrtp/doc/footer.html
new file mode 100644
index 0000000000..292249e9d9
--- /dev/null
+++ b/libs/libzrtp/doc/footer.html
@@ -0,0 +1,4 @@
+
+Generated on $datetime for $projectname
+
+