Merge branch 'master' into v1.4
Conflicts: freeswitch.spec
This commit is contained in:
commit
55d0aec559
|
@ -227,3 +227,5 @@ libs/libsndfile/src/Symbols.gnu-binutils
|
|||
libs/libsndfile/src/Symbols.static
|
||||
libs/libsndfile/src/version-metadata.rc
|
||||
libs/libsndfile/tests/pedantic-header-test.sh
|
||||
yum/RPMS
|
||||
yum/temp
|
||||
|
|
|
@ -1 +1 @@
|
|||
1.0.8
|
||||
1.0.50
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
en-us-callie 1.0.25
|
||||
ru-RU-elena 1.0.13
|
||||
en-us-callie 1.0.50
|
||||
ru-RU-elena 1.0.50
|
||||
fr-ca-june 1.0.18
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
</settings>
|
||||
|
||||
<routes>
|
||||
<route service="E2U+SIP" regex="sip:(.*)" replace="sofia/${use_profile}/$1;transport=udp"/>
|
||||
<route service="E2T+SIP" regex="sip:(.*)" replace="sofia/${use_profile}/$1;transport=tcp"/>
|
||||
<!--<route service="E2U+XMPP" regex="XMPP:(.*)" replace="dingaling/$${xmpp_server_profile}/$1"/>-->
|
||||
<route service="E2U+SIP" regex="sip:(.*)" replace="sofia/${use_profile}-ipv6/$1;transport=udp|sofia/${use_profile}/$1;transport=udp"/>
|
||||
<route service="E2T+SIP" regex="sip:(.*)" replace="sofia/${use_profile}-ipv6/$1;transport=tcp|sofia/${use_profile}/$1;transport=tcp"/>
|
||||
<route service="E2T+SIPS" regex="sip:(.*)" replace="sofia/${use_profile}-ipv6/$1;transport=tls|sofia/${use_profile}/$1;transport=tls"/>
|
||||
</routes>
|
||||
</configuration>
|
||||
|
|
|
@ -508,7 +508,7 @@
|
|||
After call is retrieved, park extension is free for another call.
|
||||
-->
|
||||
<extension name="valet_park">
|
||||
<condition field="destination_number" expression="^(60\d[1-9])$">
|
||||
<condition field="destination_number" expression="^((?!6000)60\d{2})$">
|
||||
<action application="answer"/>
|
||||
<action application="valet_park" data="valet_parking_lot $1"/>
|
||||
</condition>
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>
|
||||
<X-PRE-PROCESS cmd="set" data="domain_name=$${domain}"/>
|
||||
<X-PRE-PROCESS cmd="set" data="hold_music=local_stream://moh"/>
|
||||
<X-PRE-PROCESS cmd="set" data="use_profile=internal"/>
|
||||
<X-PRE-PROCESS cmd="set" data="use_profile=external"/>
|
||||
<X-PRE-PROCESS cmd="set" data="rtp_sdes_suites=AEAD_AES_256_GCM_8|AEAD_AES_128_GCM_8|AES_CM_256_HMAC_SHA1_80|AES_CM_192_HMAC_SHA1_80|AES_CM_128_HMAC_SHA1_80|AES_CM_256_HMAC_SHA1_32|AES_CM_192_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_32|AES_CM_128_NULL_AUTH"/>
|
||||
<!--
|
||||
Enable ZRTP globally you can override this on a per channel basis
|
||||
|
@ -390,6 +390,14 @@
|
|||
|
||||
<!--
|
||||
TLS cipher suite: default ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
|
||||
|
||||
The actual ciphers supported will change per platform.
|
||||
|
||||
openssl ciphers -v 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'
|
||||
|
||||
Will show you what is available in your verion of openssl.
|
||||
Freeswitch does not support non-Elliptic Curve Diffie Hellman key
|
||||
exchange.
|
||||
-->
|
||||
<X-PRE-PROCESS cmd="set" data="sip_tls_ciphers=ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"/>
|
||||
|
||||
|
|
|
@ -601,6 +601,7 @@ if test x"$enable_core_pgsql_support" = x"yes" ; then
|
|||
AC_MSG_RESULT([$POSTGRESQL_LIBDIR])
|
||||
|
||||
AC_DEFINE([SWITCH_HAVE_PGSQL], [1], [Define to 1 if PostgreSQL libraries are available])
|
||||
AM_CONDITIONAL([HAVE_PGSQL],[true])
|
||||
AC_DEFINE_UNQUOTED([POSTGRESQL_VERSION], "${POSTGRESQL_VERSION}", [Specifies the version of PostgreSQL we are linking against])
|
||||
AC_DEFINE_UNQUOTED([POSTGRESQL_MAJOR_VERSION], ${POSTGRESQL_MAJOR_VERSION}, [Specifies the version of PostgreSQL we are linking against])
|
||||
AC_DEFINE_UNQUOTED([POSTGRESQL_MINOR_VERSION], ${POSTGRESQL_MINOR_VERSION}, [Specifies the version of PostgreSQL we are linking against])
|
||||
|
@ -612,6 +613,8 @@ if test x"$enable_core_pgsql_support" = x"yes" ; then
|
|||
SWITCH_AM_LDFLAGS="$POSTGRESQL_LDFLAGS $SWITCH_AM_LDFLAGS"
|
||||
|
||||
LIBS="$save_LIBS"
|
||||
else
|
||||
AM_CONDITIONAL([HAVE_PGSQL],[false])
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(deprecated-core-db-events,
|
||||
|
|
|
@ -7,6 +7,13 @@ Download the Source Code
|
|||
git clone https://stash.freeswitch.org/scm/fs/freeswitch.git
|
||||
cd freeswitch
|
||||
|
||||
Ensure Git is Setup
|
||||
-------------------
|
||||
|
||||
# tell git your full name and email address; make sure to use your
|
||||
# real name and not a username
|
||||
./scripts/setup-git.sh
|
||||
|
||||
Create Your Patch
|
||||
-----------------
|
||||
|
||||
|
@ -24,6 +31,9 @@ Create Your Patch
|
|||
# logically separate change
|
||||
#while true; do emacs .; git commit -va; done
|
||||
|
||||
# review changes; ensure your author name is correct
|
||||
git log -p
|
||||
|
||||
# create patch files
|
||||
git format-patch origin/master..HEAD
|
||||
|
||||
|
|
|
@ -0,0 +1,318 @@
|
|||
##############################################################################
|
||||
# Copyright and license
|
||||
##############################################################################
|
||||
#
|
||||
# Spec file for package freeswitch-sounds-en-ca-june (version 1.0.50-1)
|
||||
#
|
||||
# Based on parts by Copyright (c) 2009 Patrick Laimbock
|
||||
# Copyright (c) 2014 FreeSWITCH.org
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
# Set variables
|
||||
##############################################################################
|
||||
|
||||
%define version 1.0.50
|
||||
%define release 1
|
||||
|
||||
%define fsname freeswitch
|
||||
# you could add a version number to be more strict
|
||||
|
||||
%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
|
||||
##############################################################################
|
||||
|
||||
Summary: FreeSWITCH fr-CA June prompts
|
||||
Name: freeswitch-sounds-en-ca-june
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: MPL
|
||||
Group: Applications/Communications
|
||||
Packager: Ken Rice <krice@freeswitch.org>
|
||||
URL: http://www.freeswitch.org
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.gz
|
||||
Source1:http://files.freeswitch.org/%{name}-32000-%{version}.tar.gz
|
||||
Source2:http://files.freeswitch.org/%{name}-16000-%{version}.tar.gz
|
||||
Source3:http://files.freeswitch.org/%{name}-8000-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
BuildRequires: sox
|
||||
Requires: freeswitch
|
||||
Requires: freeswitch-sounds-en-ca-june-48000
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
%description
|
||||
FreeSWITCH 48kHz fr CA June prompts plus, during the installation,
|
||||
it will also install locally generated 8KHz, 16KHz and 32KHz prompts
|
||||
|
||||
%package -n freeswitch-sounds-en-ca-june-8000
|
||||
Summary: FreeSWITCH 8kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-en-ca-june-8000
|
||||
FreeSWITCH 8kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-en-ca-june-16000
|
||||
Summary: FreeSWITCH 16kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-en-ca-june-16000
|
||||
FreeSWITCH 16kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-en-ca-june-32000
|
||||
Summary: FreeSWITCH 32kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-en-ca-june-32000
|
||||
FreeSWITCH 32kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-en-ca-june-48000
|
||||
Summary: FreeSWITCH 48kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-en-ca-june-48000
|
||||
FreeSWITCH 48kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-en-ca-june-all
|
||||
Summary: FreeSWITCH fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
Requires: freeswitch-sounds-en-ca-june-8000 = %{version}
|
||||
Requires: freeswitch-sounds-en-ca-june-16000 = %{version}
|
||||
Requires: freeswitch-sounds-en-ca-june-32000 = %{version}
|
||||
Requires: freeswitch-sounds-en-ca-june-48000 = %{version}
|
||||
|
||||
%description -n freeswitch-sounds-en-ca-june-all
|
||||
FreeSWITCH Elena prompts package that pulls in the 8KHz, 16KHz, 32KHz and 48KHz RPMs
|
||||
|
||||
##############################################################################
|
||||
# Prep
|
||||
##############################################################################
|
||||
|
||||
%prep
|
||||
%setup -n en
|
||||
%setup -T -D -b 0 -n en
|
||||
%setup -T -D -b 1 -n en
|
||||
%setup -T -D -b 2 -n en
|
||||
%setup -T -D -b 3 -n en
|
||||
|
||||
##############################################################################
|
||||
# Build
|
||||
##############################################################################
|
||||
|
||||
%build
|
||||
# nothing to do here
|
||||
|
||||
##############################################################################
|
||||
# Install
|
||||
##############################################################################
|
||||
|
||||
%install
|
||||
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
|
||||
|
||||
# create the sounds directories
|
||||
%{__install} -d -m 0750 %{buildroot}%{SOUNDSDIR}/en/ca/june
|
||||
|
||||
pushd ca/june
|
||||
# first install the 48KHz sounds
|
||||
%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/en/ca/june
|
||||
popd
|
||||
|
||||
##############################################################################
|
||||
# Clean
|
||||
##############################################################################
|
||||
|
||||
%clean
|
||||
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
|
||||
|
||||
##############################################################################
|
||||
# Post
|
||||
##############################################################################
|
||||
|
||||
%post
|
||||
|
||||
##############################################################################
|
||||
# Postun
|
||||
##############################################################################
|
||||
|
||||
%postun
|
||||
|
||||
##############################################################################
|
||||
# Files
|
||||
##############################################################################
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
|
||||
%files -n freeswitch-sounds-en-ca-june-8000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ascii/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/base256/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/conference/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/currency/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/digits/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/directory/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ivr/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/misc/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/phonetic-ascii/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/time/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/voicemail/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/zrtp/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/users/8000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ascii/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/base256/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/conference/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/currency/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/digits/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/directory/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ivr/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/misc/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/phonetic-ascii/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/time/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/voicemail/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/zrtp/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/users/8000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-en-ca-june-16000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ascii/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/base256/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/conference/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/currency/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/digits/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/directory/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ivr/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/misc/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/phonetic-ascii/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/time/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/voicemail/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/zrtp/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/users/16000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ascii/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/base256/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/conference/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/currency/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/digits/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/directory/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ivr/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/misc/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/phonetic-ascii/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/time/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/voicemail/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/zrtp/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/users/16000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-en-ca-june-32000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ascii/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/base256/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/conference/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/currency/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/digits/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/directory/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ivr/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/misc/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/phonetic-ascii/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/time/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/voicemail/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/zrtp/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/users/32000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ascii/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/base256/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/conference/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/currency/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/digits/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/directory/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ivr/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/misc/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/phonetic-ascii/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/time/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/voicemail/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/zrtp/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/users/32000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-en-ca-june-48000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ascii/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/base256/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/conference/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/currency/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/digits/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/directory/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/ivr/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/misc/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/phonetic-ascii/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/time/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/voicemail/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/zrtp/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/en/ca/june/users/48000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ascii/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/base256/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/conference/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/currency/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/digits/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/directory/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/ivr/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/misc/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/phonetic-ascii/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/time/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/voicemail/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/zrtp/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/en/ca/june/users/48000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-en-ca-june-all
|
||||
|
||||
##############################################################################
|
||||
# Changelog
|
||||
##############################################################################
|
||||
|
||||
%changelog
|
||||
* Fri Sep 12 2014 Ken Rice <krice@freeswitch.org> - 1.0.50-1
|
||||
- created out of the spec file for june
|
|
@ -20,8 +20,8 @@
|
|||
# Set variables
|
||||
##############################################################################
|
||||
|
||||
%define version %{VERSION_NUMBER}
|
||||
%define release %{BUILD_NUMBER}
|
||||
%define version 1.0.50
|
||||
%define release 1
|
||||
|
||||
%define fsname freeswitch
|
||||
# you could add a version number to be more strict
|
||||
|
@ -73,6 +73,9 @@ Group: Applications/Communications
|
|||
Packager: Patrick Laimbock <vc-rpms@voipconsulting.nl>
|
||||
URL: http://www.freeswitch.org
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.gz
|
||||
Source1:http://files.freeswitch.org/%{name}-32000-%{version}.tar.gz
|
||||
Source2:http://files.freeswitch.org/%{name}-16000-%{version}.tar.gz
|
||||
Source3:http://files.freeswitch.org/%{name}-8000-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
BuildRequires: sox
|
||||
Requires: freeswitch
|
||||
|
@ -139,25 +142,11 @@ FreeSWITCH Callie prompts package that pulls in the 8KHz, 16KHz,
|
|||
##############################################################################
|
||||
|
||||
%prep
|
||||
%setup -b0 -q -n en
|
||||
mkdir -p ./usr/callie
|
||||
# create buildsounds-callie.sh script in working dir
|
||||
echo '#!/bin/bash
|
||||
|
||||
sounds_location=$1
|
||||
for rate in 32000 16000 8000
|
||||
do
|
||||
for i in ascii base256 conference currency digits directory ivr misc phonetic-ascii time voicemail zrtp
|
||||
do
|
||||
mkdir -p $sounds_location/$i/$rate
|
||||
for f in `find $sounds_location/$i/48000 -name \*.wav`
|
||||
do
|
||||
echo "generating" $sounds_location/$i/$rate/`basename $f`
|
||||
sox $f -r $rate $sounds_location/$i/$rate/`basename $f`
|
||||
done
|
||||
done
|
||||
done' > ./us/callie/buildsounds-callie.sh
|
||||
%{__chmod} 0750 ./us/callie/buildsounds-callie.sh
|
||||
%setup -n en
|
||||
%setup -T -D -b 0 -n en
|
||||
%setup -T -D -b 1 -n en
|
||||
%setup -T -D -b 2 -n en
|
||||
%setup -T -D -b 3 -n en
|
||||
|
||||
##############################################################################
|
||||
# Build
|
||||
|
@ -180,7 +169,6 @@ pushd us/callie
|
|||
# first install the 48KHz sounds
|
||||
%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/en/us/callie
|
||||
# now resample the 48KHz ones to 8KHz, 16KHz and 32KHz
|
||||
./buildsounds-callie.sh %{buildroot}%{SOUNDSDIR}/en/us/callie
|
||||
popd
|
||||
|
||||
##############################################################################
|
||||
|
@ -196,8 +184,6 @@ popd
|
|||
|
||||
%post
|
||||
# generate the 8KHz, 16KHz and 32KHz prompts from the 48KHz ones
|
||||
cd %{SOUNDSDIR}/en/us/callie
|
||||
./buildsounds-callie.sh %{SOUNDSDIR}/en/us/callie
|
||||
|
||||
##############################################################################
|
||||
# Postun
|
||||
|
@ -214,7 +200,6 @@ cd %{SOUNDSDIR}/en/us/callie
|
|||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/en/us/callie/buildsounds-callie.sh
|
||||
|
||||
%files -n freeswitch-sounds-en-us-callie-8000
|
||||
%defattr(-,root,root,-)
|
||||
|
|
|
@ -0,0 +1,326 @@
|
|||
##############################################################################
|
||||
# Copyright and license
|
||||
##############################################################################
|
||||
#
|
||||
# Spec file for package freeswitch-sounds-fr-ca-june (version 1.0.50-1)
|
||||
#
|
||||
# Based on parts by Copyright (c) 2009 Patrick Laimbock
|
||||
# Copyright (c) 2014 FreeSWITCH.org
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
# Set variables
|
||||
##############################################################################
|
||||
|
||||
%define version 1.0.50
|
||||
%define release 1
|
||||
|
||||
%define fsname freeswitch
|
||||
# you could add a version number to be more strict
|
||||
|
||||
%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
|
||||
##############################################################################
|
||||
|
||||
Summary: FreeSWITCH fr-CA June prompts
|
||||
Name: freeswitch-sounds-fr-ca-june
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: MPL
|
||||
Group: Applications/Communications
|
||||
Packager: Ken Rice <krice@freeswitch.org>
|
||||
URL: http://www.freeswitch.org
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.gz
|
||||
Source1:http://files.freeswitch.org/%{name}-32000-%{version}.tar.gz
|
||||
Source2:http://files.freeswitch.org/%{name}-16000-%{version}.tar.gz
|
||||
Source3:http://files.freeswitch.org/%{name}-8000-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
BuildRequires: sox
|
||||
Requires: freeswitch
|
||||
Requires: freeswitch-sounds-fr-ca-june-48000
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
%description
|
||||
FreeSWITCH 48kHz fr CA June prompts plus, during the installation,
|
||||
it will also install locally generated 8KHz, 16KHz and 32KHz prompts
|
||||
|
||||
%package -n freeswitch-sounds-fr-ca-june-8000
|
||||
Summary: FreeSWITCH 8kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-fr-ca-june-8000
|
||||
FreeSWITCH 8kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-fr-ca-june-16000
|
||||
Summary: FreeSWITCH 16kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-fr-ca-june-16000
|
||||
FreeSWITCH 16kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-fr-ca-june-32000
|
||||
Summary: FreeSWITCH 32kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-fr-ca-june-32000
|
||||
FreeSWITCH 32kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-fr-ca-june-48000
|
||||
Summary: FreeSWITCH 48kHz fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-fr-ca-june-48000
|
||||
FreeSWITCH 48kHz fr CA June prompts
|
||||
|
||||
%package -n freeswitch-sounds-fr-ca-june-all
|
||||
Summary: FreeSWITCH fr CA June prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
Requires: freeswitch-sounds-fr-ca-june-8000 = %{version}
|
||||
Requires: freeswitch-sounds-fr-ca-june-16000 = %{version}
|
||||
Requires: freeswitch-sounds-fr-ca-june-32000 = %{version}
|
||||
Requires: freeswitch-sounds-fr-ca-june-48000 = %{version}
|
||||
|
||||
%description -n freeswitch-sounds-fr-ca-june-all
|
||||
FreeSWITCH Elena prompts package that pulls in the 8KHz, 16KHz, 32KHz and 48KHz RPMs
|
||||
|
||||
##############################################################################
|
||||
# Prep
|
||||
##############################################################################
|
||||
|
||||
%prep
|
||||
%setup -n fr
|
||||
%setup -T -D -b 0 -n fr
|
||||
%setup -T -D -b 1 -n fr
|
||||
%setup -T -D -b 2 -n fr
|
||||
%setup -T -D -b 3 -n fr
|
||||
|
||||
##############################################################################
|
||||
# Build
|
||||
##############################################################################
|
||||
|
||||
%build
|
||||
# nothing to do here
|
||||
|
||||
##############################################################################
|
||||
# Install
|
||||
##############################################################################
|
||||
|
||||
%install
|
||||
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
|
||||
|
||||
# create the sounds directories
|
||||
%{__install} -d -m 0750 %{buildroot}%{SOUNDSDIR}/fr/ca/june
|
||||
|
||||
pushd ca/june
|
||||
# first install the 48KHz sounds
|
||||
%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/fr/ca/june
|
||||
popd
|
||||
|
||||
##############################################################################
|
||||
# Clean
|
||||
##############################################################################
|
||||
|
||||
%clean
|
||||
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
|
||||
|
||||
##############################################################################
|
||||
# Post
|
||||
##############################################################################
|
||||
|
||||
%post
|
||||
|
||||
##############################################################################
|
||||
# Postun
|
||||
##############################################################################
|
||||
|
||||
%postun
|
||||
|
||||
##############################################################################
|
||||
# Files
|
||||
##############################################################################
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
|
||||
%files -n freeswitch-sounds-fr-ca-june-8000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ascii/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/base256/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/conference/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/currency/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/digits/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/directory/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ivr/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/misc/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/time/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/voicemail/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/zrtp/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/users/8000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ascii/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/base256/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/conference/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/currency/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/digits/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/directory/8000/*.wav
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ivr/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/misc/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/time/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/voicemail/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/zrtp/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/users/8000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-fr-ca-june-16000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ascii/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/base256/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/conference/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/currency/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/digits/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/directory/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ivr/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/misc/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/time/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/voicemail/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/zrtp/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/users/16000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ascii/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/base256/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/conference/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/currency/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/digits/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/directory/16000/*.wav
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ivr/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/misc/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/time/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/voicemail/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/zrtp/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/users/16000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-fr-ca-june-32000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ascii/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/base256/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/conference/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/currency/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/digits/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/directory/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ivr/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/misc/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/time/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/voicemail/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/zrtp/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/users/32000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ascii/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/base256/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/conference/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/currency/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/digits/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/directory/32000/*.wav
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ivr/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/misc/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/time/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/voicemail/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/zrtp/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/users/32000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-fr-ca-june-48000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ascii/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/base256/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/conference/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/currency/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/digits/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/directory/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/ivr/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/misc/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/time/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/voicemail/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/zrtp/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/fr/ca/june/users/48000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ascii/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/base256/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/conference/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/currency/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/digits/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/directory/48000/*.wav
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/extra-attempt-record/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/ivr/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/misc/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/phonetic-ascii/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/time/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/voicemail/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/zrtp/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/fr/ca/june/users/48000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-fr-ca-june-all
|
||||
|
||||
##############################################################################
|
||||
# Changelog
|
||||
##############################################################################
|
||||
|
||||
%changelog
|
||||
* Fri Sep 12 2014 Ken Rice <krice@freeswitch.org> - 1.0.50-1
|
||||
- created out of the spec file for june
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
Summary: FreeSWITCH Music on Hold soundfiles
|
||||
Name: freeswitch-sounds-music
|
||||
Version: 1.0.8
|
||||
Version: 1.0.50
|
||||
Release: 2%{?dist}
|
||||
License: MPL
|
||||
Group: Productivity/Telephony/Servers
|
||||
|
|
|
@ -0,0 +1,318 @@
|
|||
##############################################################################
|
||||
# Copyright and license
|
||||
##############################################################################
|
||||
#
|
||||
# Spec file for package freeswitch-sounds-pt-BR-karina (version 1.0.50-1)
|
||||
#
|
||||
# Based on parts by Copyright (c) 2009 Patrick Laimbock
|
||||
# Copyright (c) 2014 FreeSWITCH.org
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
# Set variables
|
||||
##############################################################################
|
||||
|
||||
%define version 1.0.50
|
||||
%define release 1
|
||||
|
||||
%define fsname freeswitch
|
||||
# you could add a version number to be more strict
|
||||
|
||||
%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
|
||||
##############################################################################
|
||||
|
||||
Summary: FreeSWITCH pt-BR Karina prompts
|
||||
Name: freeswitch-sounds-pt-BR-karina
|
||||
Version: %{version}
|
||||
Release: %{release}%{?dist}
|
||||
License: MPL
|
||||
Group: Applications/Communications
|
||||
Packager: Ken Rice <krice@freeswitch.org>
|
||||
URL: http://www.freeswitch.org
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.gz
|
||||
Source1:http://files.freeswitch.org/%{name}-32000-%{version}.tar.gz
|
||||
Source2:http://files.freeswitch.org/%{name}-16000-%{version}.tar.gz
|
||||
Source3:http://files.freeswitch.org/%{name}-8000-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
BuildRequires: sox
|
||||
Requires: freeswitch
|
||||
Requires: freeswitch-sounds-pt-BR-karina-48000
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
%description
|
||||
FreeSWITCH 48kHz fr BR Karina prompts plus, during the installation,
|
||||
it will also install locally generated 8KHz, 16KHz and 32KHz prompts
|
||||
|
||||
%package -n freeswitch-sounds-pt-BR-karina-8000
|
||||
Summary: FreeSWITCH 8kHz fr BR Karina prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-pt-BR-karina-8000
|
||||
FreeSWITCH 8kHz fr BR Karina prompts
|
||||
|
||||
%package -n freeswitch-sounds-pt-BR-karina-16000
|
||||
Summary: FreeSWITCH 16kHz fr BR Karina prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-pt-BR-karina-16000
|
||||
FreeSWITCH 16kHz fr BR Karina prompts
|
||||
|
||||
%package -n freeswitch-sounds-pt-BR-karina-32000
|
||||
Summary: FreeSWITCH 32kHz fr BR Karina prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-pt-BR-karina-32000
|
||||
FreeSWITCH 32kHz fr BR Karina prompts
|
||||
|
||||
%package -n freeswitch-sounds-pt-BR-karina-48000
|
||||
Summary: FreeSWITCH 48kHz fr BR Karina prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
|
||||
%description -n freeswitch-sounds-pt-BR-karina-48000
|
||||
FreeSWITCH 48kHz fr BR Karina prompts
|
||||
|
||||
%package -n freeswitch-sounds-pt-BR-karina-all
|
||||
Summary: FreeSWITCH fr BR Karina prompts
|
||||
Group: Applications/Communications
|
||||
BuildArch: noarch
|
||||
Requires: %{fsname}
|
||||
Requires: freeswitch-sounds-pt-BR-karina-8000 = %{version}
|
||||
Requires: freeswitch-sounds-pt-BR-karina-16000 = %{version}
|
||||
Requires: freeswitch-sounds-pt-BR-karina-32000 = %{version}
|
||||
Requires: freeswitch-sounds-pt-BR-karina-48000 = %{version}
|
||||
|
||||
%description -n freeswitch-sounds-pt-BR-karina-all
|
||||
FreeSWITCH Elena prompts package that pulls in the 8KHz, 16KHz, 32KHz and 48KHz RPMs
|
||||
|
||||
##############################################################################
|
||||
# Prep
|
||||
##############################################################################
|
||||
|
||||
%prep
|
||||
%setup -n pt
|
||||
%setup -T -D -b 0 -n pt
|
||||
%setup -T -D -b 1 -n pt
|
||||
%setup -T -D -b 2 -n pt
|
||||
%setup -T -D -b 3 -n pt
|
||||
|
||||
##############################################################################
|
||||
# Build
|
||||
##############################################################################
|
||||
|
||||
%build
|
||||
# nothing to do here
|
||||
|
||||
##############################################################################
|
||||
# Install
|
||||
##############################################################################
|
||||
|
||||
%install
|
||||
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
|
||||
|
||||
# create the sounds directories
|
||||
%{__install} -d -m 0750 %{buildroot}%{SOUNDSDIR}/pt/BR/karina
|
||||
|
||||
pushd BR/karina
|
||||
# first install the 48KHz sounds
|
||||
%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/pt/BR/karina
|
||||
popd
|
||||
|
||||
##############################################################################
|
||||
# Clean
|
||||
##############################################################################
|
||||
|
||||
%clean
|
||||
[ "%{buildroot}" != '/' ] && rm -rf %{buildroot}
|
||||
|
||||
##############################################################################
|
||||
# Post
|
||||
##############################################################################
|
||||
|
||||
%post
|
||||
|
||||
##############################################################################
|
||||
# Postun
|
||||
##############################################################################
|
||||
|
||||
%postun
|
||||
|
||||
##############################################################################
|
||||
# Files
|
||||
##############################################################################
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
|
||||
%files -n freeswitch-sounds-pt-BR-karina-8000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ascii/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/base256/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/conference/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/currency/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/digits/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/directory/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ivr/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/misc/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/time/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/voicemail/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/zrtp/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/users/8000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ascii/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/base256/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/conference/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/currency/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/digits/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/directory/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ivr/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/misc/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/time/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/voicemail/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/zrtp/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/users/8000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-pt-BR-karina-16000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ascii/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/base256/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/conference/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/currency/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/digits/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/directory/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ivr/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/misc/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/time/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/voicemail/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/zrtp/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/users/16000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ascii/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/base256/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/conference/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/currency/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/digits/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/directory/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ivr/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/misc/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/time/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/voicemail/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/zrtp/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/users/16000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-pt-BR-karina-32000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ascii/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/base256/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/conference/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/currency/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/digits/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/directory/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ivr/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/misc/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/time/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/voicemail/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/zrtp/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/users/32000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ascii/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/base256/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/conference/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/currency/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/digits/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/directory/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ivr/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/misc/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/time/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/voicemail/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/zrtp/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/users/32000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-pt-BR-karina-48000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ascii/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/base256/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/conference/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/currency/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/digits/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/directory/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/ivr/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/misc/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/time/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/voicemail/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/zrtp/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/pt/BR/karina/users/48000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ascii/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/base256/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/conference/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/currency/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/digits/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/directory/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/ivr/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/misc/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/phonetic-ascii/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/time/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/voicemail/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/zrtp/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/pt/BR/karina/users/48000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-pt-BR-karina-all
|
||||
|
||||
##############################################################################
|
||||
# Changelog
|
||||
##############################################################################
|
||||
|
||||
%changelog
|
||||
* Fri Sep 12 2014 Ken Rice <krice@freeswitch.org> - 1.0.50-1
|
||||
- created out of the spec file for june
|
|
@ -14,14 +14,14 @@
|
|||
# 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 %{VERSION_NUMBER}
|
||||
%define release %{BUILD_NUMBER}
|
||||
%define version 1.0.50
|
||||
%define release 1
|
||||
|
||||
%define fsname freeswitch
|
||||
# you could add a version number to be more strict
|
||||
|
@ -76,6 +76,9 @@ Group: Applications/Communications
|
|||
Packager: Michal Bielicki <michal.bielicki@seventhsignal.de>
|
||||
URL: http://www.freeswitch.org
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.gz
|
||||
Source1:http://files.freeswitch.org/%{name}-32000-%{version}.tar.gz
|
||||
Source2:http://files.freeswitch.org/%{name}-16000-%{version}.tar.gz
|
||||
Source3:http://files.freeswitch.org/%{name}-8000-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
BuildRequires: sox
|
||||
Requires: freeswitch
|
||||
|
@ -140,25 +143,11 @@ FreeSWITCH Elena prompts package that pulls in the 8KHz, 16KHz, 32KHz and 48KHz
|
|||
##############################################################################
|
||||
|
||||
%prep
|
||||
%setup -b0 -q -n ru
|
||||
mkdir -p ./RU/elena
|
||||
# create buildsounds-elena.sh script in working dir
|
||||
echo '#!/bin/bash
|
||||
|
||||
sounds_location=$1
|
||||
for rate in 32000 16000 8000
|
||||
do
|
||||
for i in ascii base256 conference currency digits directory ivr misc phonetic-ascii time voicemail zrtp users
|
||||
do
|
||||
mkdir -p $sounds_location/$i/$rate
|
||||
for f in `find $sounds_location/$i/48000 -name \*.wav`
|
||||
do
|
||||
echo "generating" $sounds_location/$i/$rate/`basename $f`
|
||||
sox $f -r $rate $sounds_location/$i/$rate/`basename $f`
|
||||
done
|
||||
done
|
||||
done' > ./RU/elena/buildsounds-elena.sh
|
||||
%{__chmod} 0750 ./RU/elena/buildsounds-elena.sh
|
||||
%setup -n ru
|
||||
%setup -T -D -b 0 -n ru
|
||||
%setup -T -D -b 1 -n ru
|
||||
%setup -T -D -b 2 -n ru
|
||||
%setup -T -D -b 3 -n ru
|
||||
|
||||
##############################################################################
|
||||
# Build
|
||||
|
@ -180,8 +169,6 @@ done' > ./RU/elena/buildsounds-elena.sh
|
|||
pushd RU/elena
|
||||
# first install the 48KHz sounds
|
||||
%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/ru/RU/elena
|
||||
# now resample the 48KHz ones to 8KHz, 16KHz and 32KHz
|
||||
./buildsounds-elena.sh %{buildroot}%{SOUNDSDIR}/ru/RU/elena
|
||||
popd
|
||||
|
||||
##############################################################################
|
||||
|
@ -196,18 +183,12 @@ popd
|
|||
##############################################################################
|
||||
|
||||
%post
|
||||
# generate the 8KHz, 16KHz and 32KHz prompts from the 48KHz ones
|
||||
cd %{SOUNDSDIR}/ru/RU/elena
|
||||
./buildsounds-elena.sh %{SOUNDSDIR}/ru/RU/elena
|
||||
|
||||
##############################################################################
|
||||
# Postun
|
||||
##############################################################################
|
||||
|
||||
%postun
|
||||
# you could check if there are sound files in 8000/ or
|
||||
# 16000/ or 32000/ and remove them *only* if the files
|
||||
# do not belong to an rpm
|
||||
|
||||
##############################################################################
|
||||
# Files
|
||||
|
@ -215,7 +196,6 @@ cd %{SOUNDSDIR}/ru/RU/elena
|
|||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/ru/RU/elena/buildsounds-elena.sh
|
||||
|
||||
%files -n freeswitch-sounds-ru-RU-elena-8000
|
||||
%defattr(-,root,root,-)
|
||||
|
@ -340,6 +320,8 @@ cd %{SOUNDSDIR}/ru/RU/elena
|
|||
##############################################################################
|
||||
|
||||
%changelog
|
||||
* Fri Sep 12 2014 Ken Rice <krice@freeswitch.org> - 1.0.50-1
|
||||
- created out of the spec file for elena
|
||||
* Mon Mar 06 2012 Ken Rice <krice@freeswitch.org> - 1.0.13-2
|
||||
- created out of the spec file for elena
|
||||
* Mon Jul 11 2011 Michal Bielicki <michal.bielicki@seventhsignal.de> - 1.0.13-1
|
||||
|
|
|
@ -5,24 +5,18 @@
|
|||
# Spec file for package freeswitch-sounds-sv-se-jakob (version 1.0.18-1)
|
||||
#
|
||||
# Copyright (c) 2009 Patrick Laimbock
|
||||
# Some fixes and additions (c) 2011 Michal Bielicki
|
||||
# Copied and modified for mod_say_sv (c) 2013 Jakob Sundberg
|
||||
# Additional changes (c) 2014 Ken Rice
|
||||
# This file and all modifications and additions to the pristine
|
||||
# package are under the same license as the package itself.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
# Determine distribution
|
||||
##############################################################################
|
||||
|
||||
# %define is_rhel5 %(test -f /etc/redhat-release && egrep -q 'release 5' /etc/redhat-release && echo 1 || echo 0)
|
||||
|
||||
##############################################################################
|
||||
# Set variables
|
||||
##############################################################################
|
||||
|
||||
%define version %{VERSION_NUMBER}
|
||||
%define release %{BUILD_NUMBER}
|
||||
%define version 1.0.50
|
||||
%define release 1
|
||||
|
||||
%define fsname freeswitch
|
||||
# you could add a version number to be more strict
|
||||
|
@ -71,9 +65,12 @@ Version: %{version}
|
|||
Release: %{release}%{?dist}
|
||||
License: MPL
|
||||
Group: Applications/Communications
|
||||
Packager: Patrick Laimbock <vc-rpms@voipconsulting.nl>
|
||||
Packager: Ken Rice <krice@freeswitch.org>
|
||||
URL: http://www.freeswitch.org
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.bz2
|
||||
Source0:http://files.freeswitch.org/%{name}-48000-%{version}.tar.gz
|
||||
Source1:http://files.freeswitch.org/%{name}-32000-%{version}.tar.gz
|
||||
Source2:http://files.freeswitch.org/%{name}-16000-%{version}.tar.gz
|
||||
Source3:http://files.freeswitch.org/%{name}-8000-%{version}.tar.gz
|
||||
BuildArch: noarch
|
||||
BuildRequires: sox
|
||||
Requires: freeswitch
|
||||
|
@ -140,25 +137,11 @@ FreeSWITCH jakob prompts package that pulls in the 8KHz, 16KHz,
|
|||
##############################################################################
|
||||
|
||||
%prep
|
||||
%setup -b0 -q -n en
|
||||
mkdir -p ./usr/jakob
|
||||
# create buildsounds-jakob.sh script in working dir
|
||||
echo '#!/bin/bash
|
||||
|
||||
sounds_location=$1
|
||||
for rate in 32000 16000 8000
|
||||
do
|
||||
for i in ascii base256 conference currency digits directory ivr misc phonetic-ascii time voicemail zrtp
|
||||
do
|
||||
mkdir -p $sounds_location/$i/$rate
|
||||
for f in `find $sounds_location/$i/48000 -name \*.wav`
|
||||
do
|
||||
echo "generating" $sounds_location/$i/$rate/`basename $f`
|
||||
sox $f -r $rate $sounds_location/$i/$rate/`basename $f`
|
||||
done
|
||||
done
|
||||
done' > ./sv/jakob/buildsounds-jakob.sh
|
||||
%{__chmod} 0750 ./sv/jakob/buildsounds-jakob.sh
|
||||
%setup -n sv
|
||||
%setup -T -D -b 0 -n sv
|
||||
%setup -T -D -b 1 -n sv
|
||||
%setup -T -D -b 2 -n sv
|
||||
%setup -T -D -b 3 -n sv
|
||||
|
||||
##############################################################################
|
||||
# Build
|
||||
|
@ -177,11 +160,9 @@ done' > ./sv/jakob/buildsounds-jakob.sh
|
|||
# create the sounds directories
|
||||
%{__install} -d -m 0750 %{buildroot}%{SOUNDSDIR}/sv/se/jakob
|
||||
|
||||
pushd sv/jakob
|
||||
pushd se/jakob
|
||||
# first install the 48KHz sounds
|
||||
%{__cp} -prv ./* %{buildroot}%{SOUNDSDIR}/sv/se/jakob
|
||||
# now resample the 48KHz ones to 8KHz, 16KHz and 32KHz
|
||||
./buildsounds-jakob.sh %{buildroot}%{SOUNDSDIR}/sv/se/jakob
|
||||
popd
|
||||
|
||||
##############################################################################
|
||||
|
@ -196,9 +177,6 @@ popd
|
|||
##############################################################################
|
||||
|
||||
%post
|
||||
# generate the 8KHz, 16KHz and 32KHz prompts from the 48KHz ones
|
||||
cd %{SOUNDSDIR}/sv/se/jakob
|
||||
./buildsounds-jakob.sh %{SOUNDSDIR}/sv/se/jakob
|
||||
|
||||
##############################################################################
|
||||
# Postun
|
||||
|
@ -215,115 +193,114 @@ cd %{SOUNDSDIR}/sv/se/jakob
|
|||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%attr(0750,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/buildsounds-jakob.sh
|
||||
|
||||
%files -n freeswitch-sounds-sv-se-jakob-8000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ascii/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/currency/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/digits/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/time/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/voicemail/8000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/8000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/8000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ascii/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/currency/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/digits/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/time/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/voicemail/8000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/8000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/8000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-sv-se-jakob-16000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ascii/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/currency/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/digits/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/time/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/voicemail/16000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/16000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/16000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ascii/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/currency/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/digits/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/time/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/voicemail/16000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/16000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/16000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-sv-se-jakob-32000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ascii/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/currency/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/digits/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/time/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/voicemail/32000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/32000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/32000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ascii/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/currency/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/digits/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/time/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/voicemail/32000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/32000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/32000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-sv-se-jakob-48000
|
||||
%defattr(-,root,root,-)
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ascii/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/base256/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/conference/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/currency/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/digits/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/directory/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/ivr/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/misc/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/time/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/voicemail/48000
|
||||
%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/48000
|
||||
#%attr(0750,freeswitch,daemon) %dir %{SOUNDSDIR}/sv/se/jakob/zrtp/48000
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ascii/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/base256/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/conference/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/currency/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/digits/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/directory/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/ivr/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/misc/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/phonetic-ascii/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/time/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/voicemail/48000/*.wav
|
||||
%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/48000/*.wav
|
||||
#%attr(0640,freeswitch,daemon) %{SOUNDSDIR}/sv/se/jakob/zrtp/48000/*.wav
|
||||
|
||||
%files -n freeswitch-sounds-sv-se-jakob-all
|
||||
|
||||
|
@ -332,46 +309,5 @@ cd %{SOUNDSDIR}/sv/se/jakob
|
|||
##############################################################################
|
||||
|
||||
%changelog
|
||||
* Sun Mar 05 2012 Ken Rice <krice@freeswitch.org> - 1.0.18-1
|
||||
- update to FHS Layout for FreeSWITCH
|
||||
- bump up version
|
||||
* Sun May 22 2011 Michal Bielicki <michal.bielicki@seventhsignal.de> - 1.0.16-1
|
||||
- bump up version
|
||||
* Tue Jan 18 2011 Michal Bielicki <michal.bielicki@seventhsignal.de> - 1.0.14-1
|
||||
- bump up version
|
||||
- include script into freeswitch core
|
||||
- include specfile into freeswitch core
|
||||
- runtime does not require sox, only building
|
||||
|
||||
* Thu Dec 17 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-8
|
||||
- update perms and user/group to sync with the old situation
|
||||
|
||||
* Wed Dec 16 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-7
|
||||
- make main package require freeswitch-sounds-sv-se-jakob-48000 and
|
||||
- generate the 8KHz, 16KHz and 32KHz sounds from there
|
||||
- add license to spec file
|
||||
|
||||
* Wed Dec 16 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-5
|
||||
- put 48KHz in a separate package and let the main package Require 48KHz
|
||||
- and then use the script to generate the 8KHz, 16KHz and 32KHz sounds
|
||||
|
||||
* Wed Dec 16 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-4
|
||||
- add freeswitch-sounds-sv-se-jakob-all package that pulls in the 8KHz,
|
||||
- 16KHz, 32KHz and 48KHz RPM packages
|
||||
|
||||
* Tue Dec 15 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-3
|
||||
- override subpackage name with -n so it no longer builds an empty main RPM
|
||||
- rework spec file
|
||||
- add sox as a requirement
|
||||
- run buildsounds-jakob.sh in post to generate 8KHz, 16KHz and 32KHz prompts
|
||||
|
||||
* Tue Dec 15 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-2
|
||||
- can't override Name in subpackage so put all versions in RPM subpackages
|
||||
- with an empty main RPM package
|
||||
|
||||
* Tue Dec 15 2009 Patrick Laimbock <vc-rpms@voipconsulting.nl> - 1.0.12-1
|
||||
- create spec file with the following requirement:
|
||||
- source only contains the 48KHz sound prompts
|
||||
- during build the 48KHz sound prompts are resampled to 8KHz, 16KHz and 32KHz
|
||||
- the 8KHz, 16KHz, 32KHz and 48KHz sound prompts are packaged separately
|
||||
|
||||
* Mon Sep 15 2014 Ken Rice <krice@freeswitch.org> - 1.0.50-1
|
||||
- new spec file for jakob
|
||||
|
|
|
@ -121,13 +121,13 @@ Source3: http://files.freeswitch.org/downloads/libs/lame-3.98.4.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
|
||||
Source6: http://files.freeswitch.org/downloads/libs/pocketsphinx-0.7.tar.gz
|
||||
Source6: http://files.freeswitch.org/downloads/libs/pocketsphinx-0.8.tar.gz
|
||||
Source7: http://files.freeswitch.org/downloads/libs/soundtouch-1.7.1.tar.gz
|
||||
Source8: http://files.freeswitch.org/downloads/libs/sphinxbase-0.7.tar.gz
|
||||
Source8: http://files.freeswitch.org/downloads/libs/sphinxbase-0.8.tar.gz
|
||||
Source9: http://files.freeswitch.org/downloads/libs/communicator_semi_6000_20080321.tar.gz
|
||||
Source10: http://files.freeswitch.org/downloads/libs/libmemcached-0.32.tar.gz
|
||||
Source11: http://files.freeswitch.org/downloads/libs/json-c-0.9.tar.gz
|
||||
Source12: http://files.freeswitch.org/downloads/libs/opus-1.1.tar.gz
|
||||
Source12: http://files.freeswitch.org/downloads/libs/opus-1.1-p2.tar.gz
|
||||
Source13: http://files.freeswitch.org/downloads/libs/v8-3.24.14.tar.bz2
|
||||
Prefix: %{prefix}
|
||||
|
||||
|
@ -146,6 +146,7 @@ BuildRequires: lzo-devel
|
|||
%endif
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: automake
|
||||
BuildRequires: bzip2
|
||||
BuildRequires: curl-devel
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: gnutls-devel
|
||||
|
@ -155,9 +156,10 @@ BuildRequires: openssl-devel >= 1.0.1e
|
|||
BuildRequires: pcre-devel
|
||||
BuildRequires: speex-devel
|
||||
BuildRequires: sqlite-devel
|
||||
BuildRequires: ldns-devel
|
||||
BuildRequires: libedit-devel
|
||||
BuildRequires: perl
|
||||
%if 0%{?fedora_version} >= 8 || 0%{?rhel} >= 6
|
||||
%if 0%{?fedora} >= 8 || 0%{?rhel} >= 6
|
||||
BuildRequires: perl-ExtUtils-Embed
|
||||
%endif
|
||||
BuildRequires: pkgconfig
|
||||
|
@ -166,7 +168,11 @@ BuildRequires: termcap
|
|||
%endif
|
||||
BuildRequires: unixODBC-devel
|
||||
BuildRequires: gdbm-devel
|
||||
%if 0%{?suse_version} > 100
|
||||
BuildRequires: db-devel
|
||||
%else
|
||||
BuildRequires: db4-devel
|
||||
%endif
|
||||
BuildRequires: python-devel
|
||||
BuildRequires: libogg-devel
|
||||
BuildRequires: libvorbis-devel
|
||||
|
@ -179,6 +185,9 @@ BuildRequires: e2fsprogs-devel
|
|||
BuildRequires: libtheora-devel
|
||||
BuildRequires: libxml2-devel
|
||||
BuildRequires: bison
|
||||
BuildRequires: net-snmp-devel
|
||||
BuildRequires: libmemcached-devel
|
||||
BuildRequires: portaudio-devel
|
||||
%if %{build_py26_esl}
|
||||
BuildRequires: python26-devel
|
||||
Requires: python26
|
||||
|
@ -858,6 +867,22 @@ Requires: %{name} = %{version}-%{release}
|
|||
%description endpoint-skinny
|
||||
SCCP/Skinny support for FreeSWITCH open source telephony platform.
|
||||
|
||||
%package endpoint-verto
|
||||
Summary: Verto endpoint support for FreeSWITCH open source telephony platform
|
||||
Group: System/Libraries
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%description endpoint-verto
|
||||
Verto protocol support for FreeSWITCH open source telephony platform.
|
||||
|
||||
%package endpoint-rtc
|
||||
Summary: Verto endpoint support for FreeSWITCH open source telephony platform
|
||||
Group: System/Libraries
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%description endpoint-rtc
|
||||
Verto protocol support for FreeSWITCH open source telephony platform.
|
||||
|
||||
%package freetdm
|
||||
Summary: Provides a unified interface to hardware TDM cards and ss7 stacks for FreeSWITCH
|
||||
Group: System/Libraries
|
||||
|
@ -1396,7 +1421,7 @@ DIRECTORIES_MODULES=""
|
|||
######################################################################################################################
|
||||
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"
|
||||
endpoints/mod_skinny endpoints/mod_verto endpoints/mod_rtc endpoints/mod_skypopen endpoints/mod_sofia"
|
||||
|
||||
## DISABLED MODULES DUE TO BUILD ISSUES endpoints/mod_gsmopen endpoints/mod_h323 endpoints/mod_khomp
|
||||
|
||||
|
@ -1518,6 +1543,7 @@ fi
|
|||
--with-dbdir=%{DBDIR} \
|
||||
--with-htdocsdir=%{HTDOCSDIR} \
|
||||
--with-soundsdir=%{SOUNDSDIR} \
|
||||
--enable-core-pgsql-support \
|
||||
--enable-core-odbc-support \
|
||||
--enable-core-libedit-support \
|
||||
--with-grammardir=%{GRAMMARDIR} \
|
||||
|
@ -2092,6 +2118,12 @@ fi
|
|||
%files endpoint-skinny
|
||||
%{MODINSTDIR}/mod_skinny.so*
|
||||
|
||||
%files endpoint-verto
|
||||
%{MODINSTDIR}/mod_verto.so*
|
||||
|
||||
%files endpoint-rtc
|
||||
%{MODINSTDIR}/mod_rtc.so*
|
||||
|
||||
%files endpoint-skypopen
|
||||
%{MODINSTDIR}/mod_skypopen.so*
|
||||
|
||||
|
@ -2339,9 +2371,11 @@ fi
|
|||
#
|
||||
######################################################################################################################
|
||||
%changelog
|
||||
* Thu Sep 11 2014 - krice@freeswitch.org
|
||||
- add and fix mod_verto and mod_rtc
|
||||
* Fri Jul 20 2014 - krice@freeswitch.org
|
||||
- remove mod_cdr_pg_csv as its broken on centos
|
||||
* Fri Jun 02 2014 - krice@freeswitch.org
|
||||
* Mon Jun 02 2014 - krice@freeswitch.org
|
||||
- remove mod_spidermoney as its been deprecated
|
||||
* Fri Feb 21 2014 - crienzo@grasshopper.com
|
||||
- change file owner to root
|
||||
|
@ -2354,11 +2388,11 @@ fi
|
|||
* Mon Dec 09 2013 - crienzo@grasshopper.com
|
||||
- Add mod_ssml, mod_rayo
|
||||
- Fix build on master
|
||||
* Thu Jun 28 2013 - krice@freeswitch.org
|
||||
* Fri Jun 28 2013 - krice@freeswitch.org
|
||||
- Add module for VP8
|
||||
* Thu Jun 19 2013 - krice@freeswitch.org
|
||||
* Wed Jun 19 2013 - krice@freeswitch.org
|
||||
- tweak files included for vanilla configs
|
||||
* Thu Sep 19 2012 - krice@freeswitch.org
|
||||
* Wed Sep 19 2012 - krice@freeswitch.org
|
||||
- Add support for Spanish and Portugese say language modules
|
||||
* Thu Jan 26 2012 - krice@freeswitch.org
|
||||
- complete rework of spec file
|
||||
|
@ -2440,10 +2474,10 @@ fi
|
|||
- added directory files to russian language
|
||||
* Sat Nov 21 2009 - michal.bielicki@seventhsignal.de
|
||||
- added patch by Igor Neves <neves.igor@gmail.com>: Added some checkup in %post and %postun to prevent upgrades from removing freeswitch user
|
||||
* Thu Nov 18 2009 - michal.bielicki@seventhsignal.de
|
||||
* Wed Nov 18 2009 - michal.bielicki@seventhsignal.de
|
||||
- added new config files for diretory and distributor
|
||||
- removed sangoma boost from openzap for builds that do not inherit wanpipe while building.
|
||||
* Tue Jul 24 2009 - mike@jerris.com
|
||||
* Fri Jul 24 2009 - mike@jerris.com
|
||||
- removed mod_http
|
||||
- removed ozmod_wanpipe
|
||||
* Tue Jun 23 2009 - raulfragoso@gmail.com
|
||||
|
@ -2451,7 +2485,7 @@ fi
|
|||
- Included new config and mod files to catch up with latest SVN
|
||||
- Included new sound files for base256 and zrtp
|
||||
- mod_unimrcp must be built after mod_sofia
|
||||
* Mon Feb 17 2009 - michal.bielicki@halokwadrat.de
|
||||
* Tue Feb 17 2009 - michal.bielicki@halokwadrat.de
|
||||
- added mod_python
|
||||
- added mod_fax
|
||||
- added mod_amrwb.so
|
||||
|
@ -2488,7 +2522,7 @@ fi
|
|||
- abstraction of mkdir, mv, rm, install etc into macros
|
||||
* Fri Jan 18 2008 - michal.bielicki@voiceworks.pl
|
||||
- fixes, fixes and more fixes in preparation for rc1
|
||||
* Thu Dec 5 2007 - michal.bielicki@voiceworks.pl
|
||||
* Wed Dec 5 2007 - michal.bielicki@voiceworks.pl
|
||||
- put in detail configfiles in to split of spidermonkey configs
|
||||
- created link from /opt/freesxwitch/conf to /etc%{prefix}
|
||||
* Thu Nov 29 2007 - michal.bielicki@voiceworks.pl
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
#!/bin/sh
|
||||
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
||||
|
||||
declare -a specfiles=('freeswitch-sounds-en-ca-june.spec' 'freeswitch-sounds-fr-ca-june.spec' 'freeswitch-sounds-ru-RU-elena.spec' 'freeswitch-sounds-en-us-callie.spec' 'freeswitch-sounds-sv-se-jakob.spec')
|
||||
|
||||
sdir="."
|
||||
[ -n "${0%/*}" ] && sdir="${0%/*}"
|
||||
. $sdir/common.sh
|
||||
|
||||
check_pwd
|
||||
|
||||
basedir=$(pwd);
|
||||
|
||||
(mkdir -p rpmbuild && cd rpmbuild && mkdir -p SOURCES BUILD BUILDROOT i386 x86_64 SPECS)
|
||||
|
||||
if [ ! -d "$basedir/../freeswitch-sounds" ]; then
|
||||
cd $basedir/..
|
||||
git clone https://stash.freeswitch.org/scm/fs/freeswitch-sounds.git
|
||||
else
|
||||
cd $basedir/../freeswitch-sounds
|
||||
git clean -fdx
|
||||
git pull
|
||||
fi
|
||||
|
||||
for i in "${specfiles[@]}"
|
||||
do
|
||||
|
||||
cd $basedir/../freeswitch-sounds/sounds/trunk
|
||||
|
||||
./dist.pl `echo $i|sed -e 's/freeswitch-sounds-//g' -e 's/\.spec//g' -e 's/-/\//g'`
|
||||
|
||||
mv `echo $i|sed -e's/\.spec//g'`*.tar.* $basedir/rpmbuild/SOURCES
|
||||
|
||||
cd $basedir
|
||||
|
||||
rpmbuild --define "_topdir %(pwd)/rpmbuild" \
|
||||
--define "_rpmdir %{_topdir}" \
|
||||
--define "_srcrpmdir %{_topdir}" \
|
||||
-ba $i
|
||||
|
||||
done
|
||||
|
||||
mkdir $src_repo/RPMS
|
||||
mv $src_repo/rpmbuild/*/*.rpm $src_repo/RPMS/.
|
||||
|
||||
cat 1>&2 <<EOF
|
||||
----------------------------------------------------------------------
|
||||
The Sound RPMs have been rolled
|
||||
----------------------------------------------------------------------
|
||||
EOF
|
|
@ -10,11 +10,25 @@ check_input_ver_build $@
|
|||
eval $(parse_version "$1")
|
||||
build="$2"
|
||||
|
||||
cd rpmbuild/SOURCES
|
||||
basedir=$(pwd);
|
||||
|
||||
wget http://files.freeswitch.org/freeswitch-sounds-en-us-callie-48000-$ver.tar.gz
|
||||
(mkdir -p rpmbuild && cd rpmbuild && mkdir -p SOURCES BUILD BUILDROOT i386 x86_64 SPECS)
|
||||
|
||||
cd ../..
|
||||
if [ ! -d "$basedir/../freeswitch-sounds" ]; then
|
||||
cd $basedir/..
|
||||
git clone https://stash.freeswitch.org/scm/fs/freeswitch-sounds.git
|
||||
else
|
||||
cd $basedir/../freeswitch-sounds
|
||||
git clean -fdx
|
||||
git pull
|
||||
fi
|
||||
|
||||
cd $basedir/../freeswitch-sounds/sounds/trunk
|
||||
./dist.pl en/us/callie
|
||||
|
||||
mv freeswitch-sounds-en-us-callie-*.tar.gz $basedir/rpmbuild/SOURCES
|
||||
|
||||
cd $basedir
|
||||
|
||||
rpmbuild --define "VERSION_NUMBER $ver" \
|
||||
--define "BUILD_NUMBER 1" \
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
#!/bin/sh
|
||||
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
||||
|
||||
sdir="."
|
||||
[ -n "${0%/*}" ] && sdir="${0%/*}"
|
||||
. $sdir/common.sh
|
||||
|
||||
basedir=$(pwd);
|
||||
|
||||
(mkdir -p rpmbuild && cd rpmbuild && mkdir -p SOURCES BUILD BUILDROOT i386 x86_64 SPECS)
|
||||
|
||||
if [ ! -d "$basedir/../freeswitch-sounds" ]; then
|
||||
cd $basedir/..
|
||||
git clone https://stash.freeswitch.org/scm/fs/freeswitch-sounds.git
|
||||
else
|
||||
cd $basedir/../freeswitch-sounds
|
||||
git clean -fdx
|
||||
git pull
|
||||
fi
|
||||
|
||||
cd $basedir/../freeswitch-sounds/sounds/trunk
|
||||
./dist.pl fr/ca/june
|
||||
|
||||
mv freeswitch-sounds-fr-ca-june-*.tar.* $basedir/rpmbuild/SOURCES
|
||||
|
||||
cd $basedir
|
||||
|
||||
rpmbuild --define "_topdir %(pwd)/rpmbuild" \
|
||||
--define "_rpmdir %{_topdir}" \
|
||||
--define "_srcrpmdir %{_topdir}" \
|
||||
-ba freeswitch-sounds-fr-ca-june.spec
|
||||
|
||||
mkdir $src_repo/RPMS
|
||||
mv $src_repo/rpmbuild/*/*.rpm $src_repo/RPMS/.
|
||||
|
||||
cat 1>&2 <<EOF
|
||||
----------------------------------------------------------------------
|
||||
The Sound RPMs have been rolled
|
||||
----------------------------------------------------------------------
|
||||
EOF
|
|
@ -8,16 +8,25 @@ if [ ! -d .git ]; then
|
|||
exit 1;
|
||||
fi
|
||||
|
||||
ver="1.0.8"
|
||||
ver="1.0.50"
|
||||
|
||||
cd rpmbuild/SOURCES
|
||||
basedir=$(pwd);
|
||||
|
||||
wget http://files.freeswitch.org/freeswitch-sounds-music-8000-$ver.tar.gz
|
||||
wget http://files.freeswitch.org/freeswitch-sounds-music-16000-$ver.tar.gz
|
||||
wget http://files.freeswitch.org/freeswitch-sounds-music-32000-$ver.tar.gz
|
||||
wget http://files.freeswitch.org/freeswitch-sounds-music-48000-$ver.tar.gz
|
||||
(mkdir -p rpmbuild && cd rpmbuild && mkdir -p SOURCES BUILD BUILDROOT i386 x86_64 SPECS)
|
||||
|
||||
cd ../..
|
||||
if [ ! -d "$basedir/../freeswitch-sounds" ]; then
|
||||
cd $basedir/..
|
||||
git clone https://stash.freeswitch.org/scm/fs/freeswitch-sounds.git
|
||||
else
|
||||
cd $basedir/../freeswitch-sounds
|
||||
git pull
|
||||
fi
|
||||
|
||||
cd $basedir/../freeswitch-sounds/sounds/trunk
|
||||
./dist.pl music
|
||||
mv freeswitch-sounds-music-*.tar.gz $basedir/rpmbuild/SOURCES
|
||||
|
||||
cd $basedir
|
||||
|
||||
rpmbuild --define "VERSION_NUMBER $ver" \
|
||||
--define "BUILD_NUMBER 1" \
|
||||
|
|
|
@ -1,32 +1,38 @@
|
|||
#!/bin/sh
|
||||
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
||||
|
||||
src_repo="$(pwd)"
|
||||
basedir=$(pwd);
|
||||
|
||||
if [ ! -d .git ]; then
|
||||
echo "error: must be run from within the top level of a FreeSWITCH git tree." 1>&2
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
ver="1.0.13"
|
||||
(mkdir -p rpmbuild && cd rpmbuild && mkdir -p SOURCES BUILD BUILDROOT i386 x86_64 SPECS)
|
||||
|
||||
build="2"
|
||||
if [ ! -d "$basedir/../freeswitch-sounds" ]; then
|
||||
cd $basedir/..
|
||||
git clone https://stash.freeswitch.org/scm/fs/freeswitch-sounds.git
|
||||
else
|
||||
cd $basedir/../freeswitch-sounds
|
||||
git clean -fdx
|
||||
git pull
|
||||
fi
|
||||
|
||||
cd rpmbuild/SOURCES
|
||||
cd $basedir/../freeswitch-sounds/sounds/trunk
|
||||
./dist.pl ru/RU/elena
|
||||
|
||||
wget http://files.freeswitch.org/freeswitch-sounds-ru-RU-elena-48000-$ver.tar.gz
|
||||
mv freeswitch-sounds-ru-RU-elena-*.tar.* $basedir/rpmbuild/SOURCES
|
||||
|
||||
cd ../..
|
||||
cd $basedir
|
||||
|
||||
rpmbuild --define "VERSION_NUMBER $ver" \
|
||||
--define "BUILD_NUMBER $build" \
|
||||
--define "_topdir %(pwd)/rpmbuild" \
|
||||
rpmbuild --define "_topdir %(pwd)/rpmbuild" \
|
||||
--define "_rpmdir %{_topdir}" \
|
||||
--define "_srcrpmdir %{_topdir}" \
|
||||
-ba freeswitch-sounds-ru-RU-elena.spec
|
||||
|
||||
mkdir $src_repo/RPMS
|
||||
mv $src_repo/rpmbuild/*/*.rpm $src_repo/RPMS/.
|
||||
mkdir $basedir/RPMS
|
||||
mv $basedir/rpmbuild/*/*.rpm $basedir/RPMS/.
|
||||
|
||||
cat 1>&2 <<EOF
|
||||
----------------------------------------------------------------------
|
||||
|
|
|
@ -16,7 +16,7 @@ if ! git config user.name >/dev/null 2>&1; then
|
|||
name=$(git config user.name)
|
||||
[ -z "$name" ] \
|
||||
&& [ -n "$NAME" ] && name="$NAME" || name=""
|
||||
echo -n "What is your name? [$name]: "
|
||||
echo -n "What is your full real name? [$name]: "
|
||||
read name_
|
||||
[ -n "$name_" ] && name="$name_"
|
||||
[ -z "$name" ] && err "Your name is required."
|
||||
|
|
|
@ -627,11 +627,28 @@ typedef struct {
|
|||
double mos;
|
||||
} switch_rtp_numbers_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint32_t packet_count;
|
||||
uint32_t packet_count; /* sent packet count */
|
||||
uint32_t octet_count;
|
||||
uint32_t peer_ssrc;
|
||||
uint32_t last_rpt_ts; /* RTP timestamp at which the last report was generated and sent */
|
||||
uint32_t ssrc; /* identifier of the source */
|
||||
uint32_t csrc; /* contributing source 0-15 32bit each */
|
||||
uint32_t last_pkt_tsdiff; /* Jitter calculation, timestamp difference between the two last received packet */
|
||||
double inter_jitter; /* Jitter calculation, Interarrival jitter */
|
||||
uint32_t last_rpt_ext_seq; /* Packet loss calculation, extended sequence number at the begining of this RTCP report interval */
|
||||
uint16_t last_rpt_cycle; /* Packet loss calculation, sequence number cycle at the begining of the current RTCP report interval */
|
||||
uint16_t period_pkt_count; /* Packet loss calculation, packet count received during this RTCP report interval */
|
||||
uint16_t pkt_count; /* Packet loss calculation, packet count received during this session */
|
||||
uint32_t rtcp_rtp_count; /* RTCP report generated count */
|
||||
uint32_t high_ext_seq_recv; /* Packet loss calculation, highest extended sequence number received and processed for stats */
|
||||
uint16_t cycle; /* Packet loss calculation, sequence number cycle of the current RTCP report interval */
|
||||
uint32_t bad_seq; /* Bad SEQ found, used to detect reset on the other side */
|
||||
uint16_t base_seq; /* Packet loss calculation, first sequence number received */
|
||||
uint32_t cum_lost; /* Packet loss calculation, cumulative number of packet lost */
|
||||
uint32_t last_recv_lsr_local; /* RTT calculation, When receiving an SR we save our local timestamp in fraction of 65536 seconds */
|
||||
uint32_t last_recv_lsr_peer; /* RTT calculation, When receiving an SR we extract the middle 32bits of the remote NTP timestamp to include it in the next SR LSR */
|
||||
uint32_t init;
|
||||
} switch_rtcp_numbers_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -884,7 +901,7 @@ typedef struct {
|
|||
#endif
|
||||
|
||||
#if SWITCH_BYTE_ORDER == __BIG_ENDIAN
|
||||
typedef struct {
|
||||
typedef struct switch_rtcp_hdr_s {
|
||||
unsigned version:2; /* protocol version */
|
||||
unsigned p:1; /* padding flag */
|
||||
unsigned count:5; /* number of reception report blocks */
|
||||
|
@ -894,7 +911,7 @@ typedef struct {
|
|||
|
||||
#else /* BIG_ENDIAN */
|
||||
|
||||
typedef struct {
|
||||
typedef struct switch_rtcp_hdr_s {
|
||||
unsigned count:5; /* number of reception report blocks */
|
||||
unsigned p:1; /* padding flag */
|
||||
unsigned version:2; /* protocol version */
|
||||
|
|
|
@ -2531,7 +2531,7 @@ static void conference_set_floor_holder(conference_obj_t *conference, conference
|
|||
int old_id = 0;
|
||||
|
||||
if (!switch_test_flag(conference, CFLAG_VIDEO_BRIDGE) &&
|
||||
((conference->video_floor_holder && !member) ||
|
||||
((conference->video_floor_holder && !member && !switch_test_flag(conference, CFLAG_VID_FLOOR_LOCK)) ||
|
||||
(member && member->channel && switch_channel_test_flag(member->channel, CF_VIDEO)))) {
|
||||
conference_set_video_floor_holder(conference, member, SWITCH_FALSE);
|
||||
}
|
||||
|
|
|
@ -150,21 +150,15 @@ SWITCH_LIMIT_INCR(limit_incr_hash)
|
|||
switch_core_hash_insert(globals.limit_hash, hashkey, item);
|
||||
}
|
||||
|
||||
/* Did we already run on this channel before? */
|
||||
if ((pvt = switch_channel_get_private(channel, "limit_hash"))) {
|
||||
/* Yes, but check if we did that realm+resource
|
||||
If we didnt, allow incrementing the counter.
|
||||
If we did, dont touch it but do the validation anyways
|
||||
*/
|
||||
increment = !switch_core_hash_find(pvt->hash, hashkey);
|
||||
} else {
|
||||
/* This is the first limit check on this channel, create a hashtable, set our private data */
|
||||
if (!(pvt = switch_channel_get_private(channel, "limit_hash"))) {
|
||||
pvt = (limit_hash_private_t *) switch_core_session_alloc(session, sizeof(limit_hash_private_t));
|
||||
memset(pvt, 0, sizeof(limit_hash_private_t));
|
||||
switch_core_hash_init(&pvt->hash);
|
||||
switch_channel_set_private(channel, "limit_hash", pvt);
|
||||
}
|
||||
|
||||
if (!(pvt->hash)) {
|
||||
switch_core_hash_init(&pvt->hash);
|
||||
}
|
||||
increment = !switch_core_hash_find(pvt->hash, hashkey);
|
||||
remote_usage = get_remote_usage(hashkey);
|
||||
|
||||
if (interval > 0) {
|
||||
|
|
|
@ -1603,10 +1603,10 @@ static switch_status_t httapi_sync(client_t *client)
|
|||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) client);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, (void *) client);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, ua);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
|
||||
|
||||
if (client->profile->timeout) {
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, client->profile->timeout);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
|
||||
}
|
||||
|
||||
if (client->profile->ssl_cert_file) {
|
||||
|
|
|
@ -1486,8 +1486,6 @@ static switch_status_t load_config(int reload_type)
|
|||
memset(&newconf, '\0', sizeof(newconf));
|
||||
globals.GSMOPEN_INTERFACES[interface_id] = newconf;
|
||||
|
||||
tech_pvt = &globals.GSMOPEN_INTERFACES[interface_id];
|
||||
|
||||
switch_mutex_init(&globals.GSMOPEN_INTERFACES[interface_id].controldev_lock, SWITCH_MUTEX_NESTED, gsmopen_module_pool);
|
||||
switch_mutex_init(&globals.GSMOPEN_INTERFACES[interface_id].controldev_audio_lock, SWITCH_MUTEX_NESTED, gsmopen_module_pool);
|
||||
|
||||
|
@ -1600,6 +1598,8 @@ static switch_status_t load_config(int reload_type)
|
|||
int res = 0;
|
||||
int interface_id = i;
|
||||
|
||||
tech_pvt = &globals.GSMOPEN_INTERFACES[interface_id];
|
||||
|
||||
if (strlen(globals.GSMOPEN_INTERFACES[i].name) && !globals.GSMOPEN_INTERFACES[i].active) {
|
||||
|
||||
WARNINGA("STARTING interface_id=%u\n", GSMOPEN_P_LOG, interface_id);
|
||||
|
|
|
@ -501,7 +501,7 @@ switch_status_t perform_send_register_ack(listener_t *listener,
|
|||
skinny_create_message(message, REGISTER_ACK_MESSAGE, reg_ack);
|
||||
|
||||
message->data.reg_ack.keep_alive = keep_alive;
|
||||
switch_copy_string(message->data.reg_ack.date_format, date_format, 6);
|
||||
memcpy(message->data.reg_ack.date_format, date_format, 6);
|
||||
switch_copy_string(message->data.reg_ack.reserved, reserved, 2);
|
||||
message->data.reg_ack.secondary_keep_alive = keep_alive;
|
||||
switch_copy_string(message->data.reg_ack.reserved2, reserved2, 4);
|
||||
|
@ -871,7 +871,7 @@ switch_status_t perform_send_version(listener_t *listener,
|
|||
|
||||
skinny_create_message(message, VERSION_MESSAGE, version);
|
||||
|
||||
switch_copy_string(message->data.version.version, version, 16);
|
||||
memcpy(message->data.version.version, version, 16);
|
||||
|
||||
skinny_log_l_ffl(listener, file, func, line, SWITCH_LOG_DEBUG,
|
||||
"Send Version with Version(%s)\n", version);
|
||||
|
|
|
@ -522,6 +522,8 @@ int skinny_session_set_variables_callback(void *pArg, int argc, char **argv, cha
|
|||
"found user (id=%s) in channel var setup\n", uid);
|
||||
|
||||
if ((xvariables = switch_xml_child(xuser, "variables"))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(helper->tech_pvt->session), SWITCH_LOG_DEBUG,
|
||||
"found variables section in user xml");
|
||||
|
||||
for (xvariable = switch_xml_child(xvariables, "variable"); xvariable; xvariable = xvariable->next) {
|
||||
char *name = (char *) switch_xml_attr_soft(xvariable, "name");
|
||||
|
|
|
@ -938,7 +938,12 @@ void sofia_handle_sip_i_bye(switch_core_session_t *session, int status,
|
|||
switch_core_session_get_partner(session, &nsession);
|
||||
|
||||
if (nsession) {
|
||||
const char *vval;
|
||||
switch_channel_t *nchannel = switch_core_session_get_channel(nsession);
|
||||
|
||||
if (!(vval = switch_channel_get_variable(nchannel, "sip_copy_custom_headers")) || switch_true(vval)) {
|
||||
switch_ivr_transfer_variable(session, nsession, SOFIA_SIP_BYE_HEADER_PREFIX_T);
|
||||
}
|
||||
switch_core_session_rwunlock(nsession);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1075,8 +1075,10 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
|
|||
if (switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NUMBER)) {
|
||||
tech_pvt->privacy = "id";
|
||||
} else {
|
||||
if (!(val = switch_channel_get_variable(channel, "sip_cid_suppress_privacy_none")) || !switch_true(val)) {
|
||||
tech_pvt->privacy = "none";
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case CID_TYPE_RPID:
|
||||
|
|
|
@ -137,15 +137,36 @@ static void verto_deinit_ssl(verto_profile_t *profile)
|
|||
}
|
||||
}
|
||||
|
||||
static void close_file(int *sock)
|
||||
{
|
||||
if (*sock > -1) {
|
||||
close(*sock);
|
||||
*sock = -1;
|
||||
}
|
||||
}
|
||||
|
||||
static void close_socket(int *sock)
|
||||
{
|
||||
if (*sock > -1) {
|
||||
shutdown(*sock, 2);
|
||||
close_file(sock);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int ssl_init = 0;
|
||||
|
||||
static void verto_init_ssl(verto_profile_t *profile)
|
||||
static int verto_init_ssl(verto_profile_t *profile)
|
||||
{
|
||||
const char *err = "";
|
||||
int i = 0;
|
||||
|
||||
if (!ssl_init) {
|
||||
SSL_library_init();
|
||||
ssl_init = 1;
|
||||
}
|
||||
|
||||
|
||||
profile->ssl_method = SSLv23_server_method(); /* create server instance */
|
||||
profile->ssl_ctx = SSL_CTX_new(profile->ssl_method); /* create context */
|
||||
profile->ssl_ready = 1;
|
||||
|
@ -162,23 +183,67 @@ static void verto_init_ssl(verto_profile_t *profile)
|
|||
|
||||
/* set the local certificate from CertFile */
|
||||
if (!zstr(profile->chain)) {
|
||||
SSL_CTX_use_certificate_chain_file(profile->ssl_ctx, profile->chain);
|
||||
if (switch_file_exists(profile->chain, NULL) != SWITCH_STATUS_SUCCESS) {
|
||||
err = "SUPPLIED CHAIN FILE NOT FOUND\n";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
SSL_CTX_use_certificate_file(profile->ssl_ctx, profile->cert, SSL_FILETYPE_PEM);
|
||||
if (!SSL_CTX_use_certificate_chain_file(profile->ssl_ctx, profile->chain)) {
|
||||
err = "CERT CHAIN FILE ERROR";
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
if (switch_file_exists(profile->cert, NULL) != SWITCH_STATUS_SUCCESS) {
|
||||
err = "SUPPLIED CERT FILE NOT FOUND\n";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!SSL_CTX_use_certificate_file(profile->ssl_ctx, profile->cert, SSL_FILETYPE_PEM)) {
|
||||
err = "CERT FILE ERROR";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* set the private key from KeyFile */
|
||||
SSL_CTX_use_PrivateKey_file(profile->ssl_ctx, profile->key, SSL_FILETYPE_PEM);
|
||||
|
||||
if (switch_file_exists(profile->key, NULL) != SWITCH_STATUS_SUCCESS) {
|
||||
err = "SUPPLIED KEY FILE NOT FOUND\n";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!SSL_CTX_use_PrivateKey_file(profile->ssl_ctx, profile->key, SSL_FILETYPE_PEM)) {
|
||||
err = "PRIVATE KEY FILE ERROR";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* verify private key */
|
||||
if ( !SSL_CTX_check_private_key(profile->ssl_ctx) ) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "SSL NOT AVAILABLE\n");
|
||||
err = "PRIVATE KEY FILE ERROR";
|
||||
goto fail;
|
||||
}
|
||||
|
||||
SSL_CTX_set_cipher_list(profile->ssl_ctx, "HIGH:!DSS:!aNULL@STRENGTH");
|
||||
|
||||
return 1;
|
||||
|
||||
fail:
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SSL ERR: %s\n", err);
|
||||
|
||||
profile->ssl_ready = 0;
|
||||
verto_deinit_ssl(profile);
|
||||
} else {
|
||||
SSL_CTX_set_cipher_list(profile->ssl_ctx, "HIGH:!DSS:!aNULL@STRENGTH");
|
||||
|
||||
for (i = 0; i < profile->i; i++) {
|
||||
if (profile->ip[i].secure) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SSL NOT ENABLED FOR LISTENER %s:%d. REVERTING TO WS\n",
|
||||
profile->ip[i].local_ip, profile->ip[i].local_port);
|
||||
profile->ip[i].secure = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
struct jsock_sub_node_head_s;
|
||||
|
||||
|
@ -385,22 +450,6 @@ static switch_status_t jsock_sub_channel(jsock_t *jsock, const char *event_chann
|
|||
|
||||
static uint32_t ID = 1;
|
||||
|
||||
static void close_file(int *sock)
|
||||
{
|
||||
if (*sock > -1) {
|
||||
close(*sock);
|
||||
*sock = -1;
|
||||
}
|
||||
}
|
||||
|
||||
static void close_socket(int *sock)
|
||||
{
|
||||
if (*sock > -1) {
|
||||
shutdown(*sock, 2);
|
||||
close_file(sock);
|
||||
}
|
||||
}
|
||||
|
||||
static void del_jsock(jsock_t *jsock)
|
||||
{
|
||||
jsock_t *p, *last = NULL;
|
||||
|
@ -1716,7 +1765,7 @@ static void client_run(jsock_t *jsock)
|
|||
bytes = ws_read_frame(&jsock->ws, &oc, &data);
|
||||
|
||||
if (bytes < 0) {
|
||||
die("BAD READ %" SWITCH_SIZE_T_FMT "\n", bytes);
|
||||
die("BAD READ %" SWITCH_SSIZE_T_FMT "\n", bytes);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3764,7 +3813,7 @@ static int profile_one_loop(verto_profile_t *profile)
|
|||
}
|
||||
|
||||
if (pfds[x].revents & SWITCH_POLL_READ) {
|
||||
if (pfds[x].sock == profile->mcast_sub.sock) {
|
||||
if (profile->mcast_ip && pfds[x].sock == profile->mcast_sub.sock) {
|
||||
handle_mcast_sub(profile);
|
||||
} else {
|
||||
start_jsock(profile, pfds[x].sock);
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
include $(top_srcdir)/build/modmake.rulesam
|
||||
MODNAME=mod_cdr_pg_csv
|
||||
|
||||
if HAVE_PGSQL
|
||||
|
||||
mod_LTLIBRARIES = mod_cdr_pg_csv.la
|
||||
mod_cdr_pg_csv_la_SOURCES = mod_cdr_pg_csv.c
|
||||
mod_cdr_pg_csv_la_CFLAGS = $(AM_CFLAGS) $(SWITCH_AM_CXXFLAGS)
|
||||
mod_cdr_pg_csv_la_LIBADD = $(switch_builddir)/libfreeswitch.la
|
||||
mod_cdr_pg_csv_la_LDFLAGS = -avoid-version -module -no-undefined -shared -lpq $(SWITCH_AM_LDFLAGS)
|
||||
|
||||
else
|
||||
install: error
|
||||
all: error
|
||||
error:
|
||||
$(error You must configure --enable-core-pgsql-support to build this module)
|
||||
endif
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
|
||||
#include <switch.h>
|
||||
#include <sys/stat.h>
|
||||
#include <postgresql/libpq-fe.h>
|
||||
#include <libpq-fe.h>
|
||||
|
||||
SWITCH_MODULE_LOAD_FUNCTION(mod_cdr_pg_csv_load);
|
||||
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_cdr_pg_csv_shutdown);
|
||||
|
|
|
@ -130,6 +130,7 @@ struct shout_context {
|
|||
unsigned char *mp3buf;
|
||||
switch_size_t mp3buflen;
|
||||
switch_thread_rwlock_t *rwlock;
|
||||
int buffer_seconds;
|
||||
};
|
||||
|
||||
typedef struct shout_context shout_context_t;
|
||||
|
@ -477,27 +478,12 @@ static void launch_read_stream_thread(shout_context_t *context)
|
|||
{
|
||||
switch_thread_t *thread;
|
||||
switch_threadattr_t *thd_attr = NULL;
|
||||
int sanity = 10;
|
||||
size_t used;
|
||||
|
||||
context->thread_running = 1;
|
||||
switch_threadattr_create(&thd_attr, context->memory_pool);
|
||||
switch_threadattr_detach_set(thd_attr, 1);
|
||||
switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE);
|
||||
switch_thread_create(&thread, thd_attr, read_stream_thread, context, context->memory_pool);
|
||||
|
||||
while (context->thread_running && --sanity) {
|
||||
/* at least 1s of audio and up to 5s initialize */
|
||||
switch_mutex_lock(context->audio_mutex);
|
||||
used = switch_buffer_inuse(context->audio_buffer);
|
||||
switch_mutex_unlock(context->audio_mutex);
|
||||
|
||||
if (used >= (2 * context->samplerate)) {
|
||||
break;
|
||||
}
|
||||
|
||||
switch_yield(500000);
|
||||
}
|
||||
}
|
||||
|
||||
#define error_check() if (context->err) goto error;
|
||||
|
@ -628,6 +614,7 @@ static switch_status_t shout_file_open(switch_file_handle_t *handle, const char
|
|||
long rate = 0;
|
||||
int channels = 0;
|
||||
int encoding = 0;
|
||||
const char *var = NULL;
|
||||
|
||||
if ((context = switch_core_alloc(handle->memory_pool, sizeof(*context))) == 0) {
|
||||
return SWITCH_STATUS_MEMERR;
|
||||
|
@ -640,6 +627,7 @@ static switch_status_t shout_file_open(switch_file_handle_t *handle, const char
|
|||
context->memory_pool = handle->memory_pool;
|
||||
context->samplerate = handle->samplerate;
|
||||
context->handle = handle;
|
||||
context->buffer_seconds = 1;
|
||||
|
||||
switch_thread_rwlock_create(&(context->rwlock), context->memory_pool);
|
||||
|
||||
|
@ -647,6 +635,17 @@ static switch_status_t shout_file_open(switch_file_handle_t *handle, const char
|
|||
|
||||
switch_mutex_init(&context->audio_mutex, SWITCH_MUTEX_NESTED, context->memory_pool);
|
||||
|
||||
if (handle->params && (var = switch_event_get_header(handle->params, "buffer_seconds"))) {
|
||||
int bs = atol(var);
|
||||
if (bs < 1) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Buffer Seconds %d too low\n", bs);
|
||||
} else if (bs > 60) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Buffer Seconds %d too high\n", bs);
|
||||
} else {
|
||||
context->buffer_seconds = bs;
|
||||
}
|
||||
}
|
||||
|
||||
if (switch_test_flag(handle, SWITCH_FILE_FLAG_READ)) {
|
||||
if (switch_buffer_create_dynamic(&context->audio_buffer, TC_BUFFER_SIZE, TC_BUFFER_SIZE * 2, 0) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n");
|
||||
|
@ -944,12 +943,13 @@ static switch_status_t shout_file_read(switch_file_handle_t *handle, void *data,
|
|||
if (rb) {
|
||||
*len = rb / sizeof(int16_t) / handle->real_channels;
|
||||
} else {
|
||||
/* no data, so insert 1 second of silence */
|
||||
newbytes = 2 * handle->samplerate;
|
||||
/* no data, so insert N seconds of silence */
|
||||
newbytes = (2 * handle->samplerate * handle->real_channels) * context->buffer_seconds;
|
||||
if (newbytes < bytes) {
|
||||
bytes = newbytes;
|
||||
}
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Padding mp3 stream with 1s of empty audio. (%s)\n", context->stream_url);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Padding mp3 stream with %ds of empty audio. (%s)\n",
|
||||
context->buffer_seconds, context->stream_url);
|
||||
|
||||
memset(data, 255, bytes);
|
||||
*len = bytes / sizeof(int16_t) / handle->real_channels;
|
||||
|
|
|
@ -237,10 +237,10 @@ static switch_xml_t xml_url_fetch(const char *section, const char *tag_name, con
|
|||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, file_callback);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &config_data);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "freeswitch-xml/1.0");
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
|
||||
|
||||
if (binding->timeout) {
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, binding->timeout);
|
||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
|
||||
}
|
||||
|
||||
if (binding->disable100continue) {
|
||||
|
|
|
@ -3480,7 +3480,7 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s
|
|||
match = (map->rm_pt == imp->ianacode) ? 1 : 0;
|
||||
} else {
|
||||
match = (!strcasecmp(rm_encoding, imp->iananame) &&
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 96 && imp->ianacode > 96)) &&
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 95 && imp->ianacode > 95)) &&
|
||||
(remote_codec_rate == codec_rate || fmtp_remote_codec_rate == imp->actual_samples_per_second)) ? 1 : 0;
|
||||
if (fmtp_remote_codec_rate) {
|
||||
remote_codec_rate = fmtp_remote_codec_rate;
|
||||
|
@ -8410,7 +8410,7 @@ static void switch_core_media_set_r_sdp_codec_string(switch_core_session_t *sess
|
|||
} else {
|
||||
if (map->rm_encoding) {
|
||||
match = !strcasecmp(map->rm_encoding, imp->iananame) &&
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 96 && imp->ianacode > 96));
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 95 && imp->ianacode > 95));
|
||||
} else {
|
||||
match = 0;
|
||||
}
|
||||
|
@ -8440,7 +8440,7 @@ static void switch_core_media_set_r_sdp_codec_string(switch_core_session_t *sess
|
|||
} else {
|
||||
if (map->rm_encoding) {
|
||||
match = !strcasecmp(map->rm_encoding, imp->iananame) &&
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 96 && imp->ianacode > 96));
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 95 && imp->ianacode > 95));
|
||||
} else {
|
||||
match = 0;
|
||||
}
|
||||
|
@ -8487,7 +8487,7 @@ static void switch_core_media_set_r_sdp_codec_string(switch_core_session_t *sess
|
|||
} else {
|
||||
if (map->rm_encoding) {
|
||||
match = !strcasecmp(map->rm_encoding, imp->iananame) &&
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 96 && imp->ianacode > 96));
|
||||
((map->rm_pt < 96 && imp->ianacode < 96) || (map->rm_pt > 95 && imp->ianacode > 95));
|
||||
} else {
|
||||
match = 0;
|
||||
}
|
||||
|
|
|
@ -1238,6 +1238,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *sess
|
|||
continue;
|
||||
}
|
||||
|
||||
switch_channel_audio_sync(channel);
|
||||
switch_core_session_io_write_lock(session);
|
||||
switch_channel_set_private(channel, "__fh", fh);
|
||||
switch_core_session_io_rwunlock(session);
|
||||
|
|
459
src/switch_rtp.c
459
src/switch_rtp.c
|
@ -34,6 +34,8 @@
|
|||
//#define RTP_DEBUG_WRITE_DELTA
|
||||
//#define DEBUG_MISSED_SEQ
|
||||
//#define DEBUG_EXTRA
|
||||
//#define DEBUG_RTCP
|
||||
|
||||
#include <switch.h>
|
||||
#ifndef _MSC_VER
|
||||
#include <switch_private.h>
|
||||
|
@ -68,6 +70,7 @@
|
|||
#define RTP_MAGIC_NUMBER 42
|
||||
#define WARN_SRTP_ERRS 10
|
||||
#define MAX_SRTP_ERRS 100
|
||||
#define NTP_TIME_OFFSET 2208988800UL
|
||||
|
||||
#define DTMF_SANITY (rtp_session->one_second * 30)
|
||||
|
||||
|
@ -353,6 +356,7 @@ struct switch_rtp {
|
|||
uint32_t samples_per_interval;
|
||||
uint32_t samples_per_second;
|
||||
uint32_t conf_samples_per_interval;
|
||||
uint16_t rtcp_send_rate;
|
||||
uint32_t rsamples_per_interval;
|
||||
uint32_t ms_per_packet;
|
||||
uint32_t one_second;
|
||||
|
@ -426,59 +430,32 @@ struct switch_rtcp_report_block {
|
|||
uint32_t dlsr; /* The delay, expressed in units of 1/65536 seconds, between receiving the last SR packet from source SSRC_n and sending this reception report block */
|
||||
};
|
||||
|
||||
/* This was previously used, but a similar struct switch_rtcp_report_block existed and I merged them both. It also fixed the problem of lost being an integer and not a unsigned.
|
||||
struct switch_rtcp_source {
|
||||
unsigned ssrc1:32;
|
||||
unsigned fraction_lost:8;
|
||||
unsigned cumulative_lost:24;
|
||||
unsigned hi_seq_recieved:32;
|
||||
unsigned interarrival_jitter:32;
|
||||
unsigned lsr:32;
|
||||
unsigned lsr_delay:32;
|
||||
};
|
||||
*/
|
||||
|
||||
struct switch_rtcp_sr_head {
|
||||
unsigned ssrc:32;
|
||||
unsigned ntp_msw:32;
|
||||
unsigned ntp_lsw:32;
|
||||
unsigned ts:32;
|
||||
unsigned pc:32;
|
||||
unsigned oc:32;
|
||||
uint32_t ssrc;
|
||||
uint32_t ntp_msw;
|
||||
uint32_t ntp_lsw;
|
||||
uint32_t ts;
|
||||
uint32_t pc;
|
||||
uint32_t oc;
|
||||
};
|
||||
|
||||
#if SWITCH_BYTE_ORDER == __BIG_ENDIAN
|
||||
struct switch_rtcp_s_desc_head {
|
||||
unsigned v:2;
|
||||
unsigned padding:1;
|
||||
unsigned sc:5;
|
||||
unsigned pt:8;
|
||||
unsigned length:16;
|
||||
struct switch_rtcp_sender_info {
|
||||
uint32_t ntp_msw;
|
||||
uint32_t ntp_lsw;
|
||||
uint32_t ts;
|
||||
uint32_t pc;
|
||||
uint32_t oc;
|
||||
};
|
||||
|
||||
#else /* BIG_ENDIAN */
|
||||
struct switch_rtcp_s_desc_head {
|
||||
unsigned sc:5;
|
||||
unsigned padding:1;
|
||||
unsigned v:2;
|
||||
unsigned pt:8;
|
||||
unsigned length:16;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct switch_rtcp_s_desc_trunk {
|
||||
unsigned ssrc:32;
|
||||
unsigned cname:8;
|
||||
unsigned length:8;
|
||||
char text[1];
|
||||
struct switch_rtcp_sender_report {
|
||||
uint32_t ssrc;
|
||||
struct switch_rtcp_sender_info sender_info;
|
||||
struct switch_rtcp_report_block report_block;
|
||||
};
|
||||
|
||||
/* This is limited to a single block with force description. Not to be used as reference of the rtcp packet*/
|
||||
struct switch_rtcp_senderinfo {
|
||||
struct switch_rtcp_sr_head sr_head;
|
||||
struct switch_rtcp_report_block sr_block;
|
||||
struct switch_rtcp_s_desc_head sr_desc_head;
|
||||
struct switch_rtcp_s_desc_trunk sr_desc_ssrc;
|
||||
struct switch_rtcp_receiver_report {
|
||||
uint32_t ssrc;
|
||||
struct switch_rtcp_report_block report_block;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
|
@ -1441,6 +1418,10 @@ static void send_fir(switch_rtp_t *rtp_session)
|
|||
rtp_session->remote_ssrc = rtp_session->stats.rtcp.peer_ssrc;
|
||||
}
|
||||
|
||||
if (rtp_session->remote_ssrc == 0) {
|
||||
rtp_session->remote_ssrc = ntohl(rtp_session->recv_msg.header.ssrc);
|
||||
}
|
||||
|
||||
if (rtp_session->remote_ssrc == 0) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG, "Peer ssrc not known yet for FIR\n");
|
||||
return;
|
||||
|
@ -1816,6 +1797,194 @@ static void check_jitter(switch_rtp_t *rtp_session)
|
|||
}
|
||||
}
|
||||
|
||||
static void rtcp_generate_sender_info(switch_rtp_t *rtp_session, struct switch_rtcp_sender_info *sr){
|
||||
switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
|
||||
switch_time_t now;
|
||||
uint32_t sec, ntp_sec, ntp_usec;
|
||||
switch_time_exp_t now_hr;
|
||||
now = switch_time_now();
|
||||
sec = now/1000000; /* convert to seconds */
|
||||
ntp_sec = sec+NTP_TIME_OFFSET; /* convert to NTP seconds */
|
||||
sr->ntp_msw = htonl(ntp_sec); /* store result in "most significant word" */
|
||||
ntp_usec = now - (sec*1000000); /* remove seconds to keep only the microseconds */
|
||||
sr->ntp_lsw = htonl(ntp_usec*(double)(((uint64_t)1)<<32)*1.0e-6); /* convert microseconds to fraction of 32bits and store result in "least significatn word" */
|
||||
|
||||
sr->ts = htonl(rtp_session->last_write_ts);
|
||||
sr->pc = htonl(rtp_session->stats.outbound.packet_count);
|
||||
sr->oc = htonl((rtp_session->stats.outbound.raw_bytes - rtp_session->stats.outbound.packet_count * sizeof(srtp_hdr_t)));
|
||||
|
||||
switch_time_exp_gmt(&now_hr,now);
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10,"Sending an RTCP packet[%04d-%02d-%02d %02d:%02d:%02d.%d] lsr[%u] msw[%u] lsw[%u] stats_ssrc[%u]\n",
|
||||
1900 + now_hr.tm_year, now_hr.tm_mday, now_hr.tm_mon, now_hr.tm_hour, now_hr.tm_min, now_hr.tm_sec, now_hr.tm_usec,
|
||||
(ntohl(sr->ntp_lsw)&0xffff0000)>>16 | (ntohl(sr->ntp_msw)&0x0000ffff)<<16,
|
||||
ntohl(sr->ntp_msw),ntohl(sr->ntp_lsw), rtp_session->stats.rtcp.ssrc
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
static void rtcp_generate_report_block(switch_rtp_t *rtp_session, struct switch_rtcp_report_block *rtcp_report_block){
|
||||
#ifdef DEBUG_RTCP
|
||||
switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
|
||||
#endif
|
||||
switch_rtcp_numbers_t * stats=&rtp_session->stats.rtcp;
|
||||
switch_time_t now;
|
||||
uint32_t expected_pkt, dlsr;
|
||||
int32_t pkt_lost;
|
||||
uint32_t ntp_sec, ntp_usec, lsr_now, sec;
|
||||
now = switch_time_now();
|
||||
sec = now/1000000; /* convert to seconds */
|
||||
ntp_sec = sec+NTP_TIME_OFFSET; /* convert to NTP seconds */
|
||||
ntp_usec = now - (sec*1000000); /* remove seconds to keep only the microseconds */
|
||||
|
||||
/* Packet loss */
|
||||
if (stats->rtcp_rtp_count == 0) {
|
||||
expected_pkt = stats->high_ext_seq_recv - stats->base_seq + 1;
|
||||
} else {
|
||||
expected_pkt = stats->high_ext_seq_recv - stats->last_rpt_ext_seq;
|
||||
}
|
||||
|
||||
pkt_lost = expected_pkt - stats->period_pkt_count;
|
||||
stats->cum_lost=stats->cum_lost+pkt_lost;
|
||||
if (expected_pkt > 0 && pkt_lost > 0) {
|
||||
rtcp_report_block->fraction = (uint8_t) (pkt_lost * 256 / expected_pkt);
|
||||
} else {
|
||||
rtcp_report_block->fraction = 0;
|
||||
}
|
||||
#if SWITCH_BYTE_ORDER != __BIG_ENDIAN
|
||||
/* Reversing byte order for 24bits */
|
||||
rtcp_report_block->lost = (((stats->cum_lost&0x0000FF)<<16) | ((stats->cum_lost&0x00FF00)) | ((stats->cum_lost&0xFF0000)>>16));
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_RTCP
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "rtcp_generate_sr: stats_ssrc[%u] received[%d] expected[%d] cum[%d]lost[%d|%d/256]pkt last_seq[%d]cyc[%d] last_rpt_seq[%d]cyc[%d] ssrc[%d]\n",
|
||||
ntohl(rtp_session->recv_msg.header.ssrc), stats->period_pkt_count, expected_pkt,
|
||||
stats->cum_lost, pkt_lost, rtcp_report_block->fraction, stats->high_ext_seq_recv&0x0000ffff,
|
||||
stats->cycle, stats->last_rpt_ext_seq&0x0000ffff, stats->last_rpt_cycle, rtp_session->stats.rtcp.peer_ssrc
|
||||
);
|
||||
#endif
|
||||
rtcp_report_block->highest_sequence_number_received = htonl(stats->high_ext_seq_recv);
|
||||
|
||||
/* Jitter */
|
||||
rtcp_report_block->jitter = htonl((uint32_t)stats->inter_jitter);
|
||||
|
||||
/* Delay since Last Sender Report (DLSR) : 32bits, 1/65536 seconds */
|
||||
lsr_now = (uint32_t)(ntp_usec*0.065536) | (ntp_sec&0x0000ffff)<<16; /* 0.065536 is used for convertion from useconds to fraction of 65536 (x65536/1000000) */
|
||||
|
||||
if (stats->last_recv_lsr_local) {
|
||||
dlsr = lsr_now - stats->last_recv_lsr_local;
|
||||
} else {
|
||||
dlsr = 0;
|
||||
}
|
||||
rtcp_report_block->lsr = stats->last_recv_lsr_peer;
|
||||
rtcp_report_block->dlsr = htonl(dlsr);
|
||||
rtcp_report_block->ssrc = htonl(rtp_session->stats.rtcp.peer_ssrc);
|
||||
stats->rtcp_rtp_count++;
|
||||
}
|
||||
|
||||
static void rtcp_stats_init(switch_rtp_t *rtp_session)
|
||||
{
|
||||
switch_rtcp_numbers_t * stats = &rtp_session->stats.rtcp;
|
||||
srtp_hdr_t * hdr = &rtp_session->recv_msg.header;
|
||||
switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
|
||||
stats->ssrc = ntohl(hdr->ssrc);
|
||||
stats->last_rpt_ts = rtp_session->timer.samplecount;
|
||||
stats->init = 1;
|
||||
stats->last_rpt_ext_seq = 0;
|
||||
stats->last_rpt_cycle = 0;
|
||||
stats->last_pkt_tsdiff = 0;
|
||||
stats->inter_jitter = 0;
|
||||
stats->cycle = 0;
|
||||
stats->high_ext_seq_recv = ntohs((uint16_t)hdr->seq);
|
||||
stats->base_seq = ntohs((uint16_t)hdr->seq);
|
||||
stats->bad_seq = (1<<16) + 1; /* Make sure we wont missmatch 2 consecutive packets, so seq == bad_seq is false */
|
||||
stats->cum_lost = 0;
|
||||
stats->period_pkt_count = 0;
|
||||
stats->pkt_count = 0;
|
||||
stats->rtcp_rtp_count = 0;
|
||||
|
||||
if (!rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP]) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "rtcp_stats_init: rtcp disabled\n");
|
||||
} else if (!rtp_session->rtcp_sock_output) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "rtcp_stats_init: no rtcp socket\n");
|
||||
} else if (rtp_session->flags[SWITCH_RTP_FLAG_RTCP_PASSTHRU]) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "rtcp_stats_init: rtcp passthru\n");
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "rtcp_stats_init: ssrc[%d] base_seq[%d]\n", stats->ssrc, stats->base_seq);
|
||||
}
|
||||
}
|
||||
|
||||
static int rtcp_stats(switch_rtp_t *rtp_session)
|
||||
{
|
||||
switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
|
||||
srtp_hdr_t * hdr = &rtp_session->recv_msg.header;
|
||||
switch_rtcp_numbers_t * stats = &rtp_session->stats.rtcp;
|
||||
uint32_t packet_spacing_diff, pkt_tsdiff, pkt_extended_seq;
|
||||
uint16_t pkt_seq, seq_diff, max_seq;
|
||||
const int MAX_DROPOUT = 3000;
|
||||
const int MAX_MISORDER = 100;
|
||||
const int RTP_SEQ_MOD = (1<<16);
|
||||
|
||||
if(!rtp_session->rtcp_sock_output || !rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP] || rtp_session->flags[SWITCH_RTP_FLAG_RTCP_PASSTHRU] || !rtp_session->rtcp_interval)
|
||||
return 0; /* do not process RTCP in current state */
|
||||
|
||||
pkt_seq = (uint16_t) ntohs((uint16_t) rtp_session->recv_msg.header.seq);
|
||||
|
||||
/* Detect sequence number cycle change */
|
||||
max_seq = stats->high_ext_seq_recv&0x0000ffff;
|
||||
seq_diff = pkt_seq - max_seq;
|
||||
|
||||
if (seq_diff < MAX_DROPOUT) { /* in order, with permissible gap */
|
||||
if (pkt_seq < max_seq) {
|
||||
stats->cycle++;
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE, "rtcp_stats:[cycle change] pkt_seq[%d]cycle[%d] max_seq[%d] stats_ssrc[%u] local_ts[%u]\n",
|
||||
pkt_seq, stats->cycle, max_seq, stats->ssrc, rtp_session->timer.samplecount);
|
||||
}
|
||||
pkt_extended_seq = stats->cycle << 16 | pkt_seq; /* getting the extended packet extended sequence ID */
|
||||
if (pkt_extended_seq > stats->high_ext_seq_recv) {
|
||||
stats->high_ext_seq_recv = pkt_extended_seq;
|
||||
}
|
||||
}
|
||||
else if (seq_diff <= (RTP_SEQ_MOD - MAX_MISORDER)) { /* the sequence number made a very large jump */
|
||||
if (pkt_seq == stats->bad_seq) {
|
||||
rtcp_stats_init(rtp_session);
|
||||
} else {
|
||||
stats->bad_seq = (pkt_seq + 1) & (RTP_SEQ_MOD-1);
|
||||
}
|
||||
return 0; /* no stats, packet is out of sync and will be accounted as lost */
|
||||
} else {
|
||||
/* duplicate or reordered packet */
|
||||
}
|
||||
|
||||
/* Verify that we are on the same stream source (we do not support multiple sources) */
|
||||
if (ntohl(hdr->ssrc) != stats->ssrc || !stats->init) {
|
||||
rtcp_stats_init(rtp_session);
|
||||
}
|
||||
|
||||
stats->period_pkt_count++;
|
||||
stats->pkt_count++;
|
||||
#ifdef DEBUG_RTCP
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "rtcp_stats: period_pkt_count[%d]last_seq[%d]cycle[%d]stats_ssrc[%u]local_ts[%u]\n",
|
||||
stats->period_pkt_count, pkt_seq, stats->cycle, stats->ssrc, rtp_session->timer.samplecount);
|
||||
#endif
|
||||
/* Interarrival jitter calculation */
|
||||
pkt_tsdiff = rtp_session->timer.samplecount - ntohl(hdr->ts) ; /* relative transit times for this packet */
|
||||
if (stats->pkt_count < 2) { /* Can not compute Jitter with only one packet */
|
||||
stats->last_pkt_tsdiff = pkt_tsdiff;
|
||||
} else {
|
||||
packet_spacing_diff = pkt_tsdiff - stats->last_pkt_tsdiff; /* Jitter : difference of relative transit times for the two packets */
|
||||
stats->last_pkt_tsdiff = pkt_tsdiff;
|
||||
/* Interarrival jitter estimation, "J(i) = J(i-1) + ( |D(i-1,i)| - J(i-1) )/16" */
|
||||
stats->inter_jitter = (stats->inter_jitter + (((double)abs(packet_spacing_diff) - stats->inter_jitter) /16.));
|
||||
}
|
||||
|
||||
#ifdef DEBUG_RTCP
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "rtcp_stats: pkt_ts[%d]local_ts[%d]diff[%d]pkt_spacing[%d]inter_jitter[%f]seq[%d]stats_ssrc[%d]",
|
||||
ntohl(hdr->ts), rtp_session->timer.samplecount, pkt_tsdiff, packet_spacing_diff, stats->inter_jitter, ntohs(hdr->seq), stats->ssrc);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static int check_rtcp_and_ice(switch_rtp_t *rtp_session)
|
||||
{
|
||||
int ret = 0;
|
||||
|
@ -1865,85 +2034,47 @@ static int check_rtcp_and_ice(switch_rtp_t *rtp_session)
|
|||
rtcp_ok = 0;
|
||||
}
|
||||
|
||||
if (rtp_session->rtcp_sock_output && rtcp_ok && rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP] && !rtp_session->flags[SWITCH_RTP_FLAG_RTCP_PASSTHRU]) {
|
||||
struct switch_rtcp_senderinfo *sr = (struct switch_rtcp_senderinfo*) rtp_session->rtcp_send_msg.body;
|
||||
//rtp_msg_t *send_msg = &rtp_session->send_msg;
|
||||
switch_size_t rtcp_bytes;
|
||||
switch_byte_t *ptr = (switch_byte_t *)rtp_session->rtcp_send_msg.body;
|
||||
switch_time_t when = 0;
|
||||
if (rtp_session->rtcp_sock_output && rtp_session->flags[SWITCH_RTP_FLAG_ENABLE_RTCP] &&
|
||||
!rtp_session->flags[SWITCH_RTP_FLAG_RTCP_PASSTHRU] &&
|
||||
(rtp_session->timer.samplecount - rtp_session->stats.rtcp.last_rpt_ts >= rtp_session->samples_per_second * rtp_session->rtcp_send_rate) ) {
|
||||
|
||||
switch_rtcp_numbers_t * stats = &rtp_session->stats.rtcp;
|
||||
struct switch_rtcp_receiver_report *rr;
|
||||
struct switch_rtcp_sender_report *sr;
|
||||
struct switch_rtcp_report_block *rtcp_report_block;
|
||||
|
||||
switch_size_t rtcp_bytes = sizeof(struct switch_rtcp_hdr_s)+sizeof(uint32_t); /* add size of the packet header and the ssrc */
|
||||
|
||||
rtp_session->rtcp_send_msg.header.version = 2;
|
||||
rtp_session->rtcp_send_msg.header.p = 0;
|
||||
rtp_session->rtcp_send_msg.header.count = 1;
|
||||
|
||||
sr->sr_head.ssrc = htonl(rtp_session->ssrc);
|
||||
|
||||
if (!rtp_session->stats.inbound.period_packet_count) {
|
||||
rtp_session->rtcp_send_msg.header.type = 201;
|
||||
rtcp_bytes = sizeof(switch_rtcp_hdr_t) + 4;
|
||||
ptr += 4;
|
||||
if (!rtp_session->stats.outbound.packet_count) {
|
||||
rtp_session->rtcp_send_msg.header.type = 201; /* Receiver report */
|
||||
rr=(struct switch_rtcp_receiver_report*) rtp_session->rtcp_send_msg.body;
|
||||
rr->ssrc = htonl(rtp_session->ssrc);
|
||||
rtcp_report_block = &rr->report_block;
|
||||
rtcp_bytes += sizeof(struct switch_rtcp_report_block);
|
||||
} else {
|
||||
switch_time_t when;
|
||||
rtp_session->rtcp_send_msg.header.type = 200;
|
||||
|
||||
if (rtp_session->send_time) {
|
||||
when = rtp_session->send_time;
|
||||
} else {
|
||||
when = switch_micro_time_now();
|
||||
struct switch_rtcp_sender_info *rtcp_sender_info;
|
||||
rtp_session->rtcp_send_msg.header.type = 200; /* Sender report */
|
||||
sr = (struct switch_rtcp_sender_report*) rtp_session->rtcp_send_msg.body;
|
||||
sr->ssrc = htonl(rtp_session->ssrc);
|
||||
rtcp_sender_info = &sr->sender_info;
|
||||
rtcp_generate_sender_info(rtp_session, rtcp_sender_info);
|
||||
rtcp_report_block = &sr->report_block;
|
||||
rtcp_bytes += sizeof(struct switch_rtcp_sender_info) + sizeof(struct switch_rtcp_report_block);
|
||||
}
|
||||
rtcp_generate_report_block(rtp_session, rtcp_report_block);
|
||||
|
||||
sr->sr_head.ntp_msw = htonl((u_long)(when / 1000000 + 2208988800UL));
|
||||
/*
|
||||
sr->ntp_lsw = htonl((u_long)(when % 1000000 * ((UINT_MAX * 1.0)/ 1000000.0)));
|
||||
*/
|
||||
sr->sr_head.ntp_lsw = htonl((u_long)(rtp_session->send_time % 1000000 * 4294.967296));
|
||||
sr->sr_head.ts = htonl(rtp_session->last_write_ts);
|
||||
sr->sr_head.pc = htonl(rtp_session->stats.outbound.packet_count);
|
||||
sr->sr_head.oc = htonl((rtp_session->stats.outbound.raw_bytes - rtp_session->stats.outbound.packet_count * sizeof(srtp_hdr_t)));
|
||||
rtp_session->rtcp_send_msg.header.length = htons((uint16_t)(rtcp_bytes / 4) - 1);
|
||||
|
||||
}
|
||||
|
||||
/* TBD need to put more accurate stats here. */
|
||||
|
||||
sr->sr_block.ssrc = htonl(rtp_session->stats.rtcp.peer_ssrc);
|
||||
sr->sr_block.fraction = 0;
|
||||
sr->sr_block.lost = htonl(rtp_session->stats.inbound.skip_packet_count);
|
||||
sr->sr_block.highest_sequence_number_received = htonl(rtp_session->recv_msg.header.seq);
|
||||
sr->sr_block.jitter = htonl(0);
|
||||
sr->sr_block.lsr = htonl(0);
|
||||
sr->sr_block.dlsr = htonl(0);
|
||||
|
||||
sr->sr_desc_head.v = 0x02;
|
||||
sr->sr_desc_head.padding = 0;
|
||||
sr->sr_desc_head.sc = 1;
|
||||
sr->sr_desc_head.pt = 202;
|
||||
|
||||
sr->sr_desc_ssrc.ssrc = htonl(rtp_session->ssrc);
|
||||
sr->sr_desc_ssrc.cname = 0x1;
|
||||
{
|
||||
char bufa[30];
|
||||
const char* str_cname = switch_get_addr(bufa, sizeof(bufa), rtp_session->rtcp_local_addr);
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "Setting RTCP src-1 to %s\n", str_cname);
|
||||
sr->sr_desc_ssrc.length = (unsigned int)strlen(str_cname);
|
||||
memcpy ((char*)sr->sr_desc_ssrc.text, str_cname, strlen(str_cname));
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "Setting RTCP src-1 LENGTH to %d (%d, %s)\n",
|
||||
sr->sr_desc_ssrc.length, sr->sr_desc_head.length, str_cname);
|
||||
}
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "Setting msw = %d, lsw = %d \n", sr->sr_head.ntp_msw, sr->sr_head.ntp_lsw);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG10, "now = %"SWITCH_TIME_T_FMT", now lo = %d, now hi = %d\n",
|
||||
when, (int32_t)(when&0xFFFFFFFF), (int32_t)((when>>32&0xFFFFFFFF)));
|
||||
|
||||
{
|
||||
size_t sr_length = sizeof(switch_rtcp_hdr_t) + sizeof(struct switch_rtcp_sr_head) + (1 * sizeof(struct switch_rtcp_report_block));
|
||||
size_t sr_desc_length = sizeof(struct switch_rtcp_s_desc_head) + sizeof(struct switch_rtcp_s_desc_trunk) + sr->sr_desc_ssrc.length;
|
||||
|
||||
rtp_session->rtcp_send_msg.header.length = htons((u_short)(sr_length / 4) - 1);
|
||||
sr->sr_desc_head.length = htons((u_short)(sr_desc_length / 4) - 1);
|
||||
|
||||
rtcp_bytes = sr_length + sr_desc_length;
|
||||
}
|
||||
/* Prepare next report */
|
||||
stats->last_rpt_cycle = stats->cycle;
|
||||
stats->last_rpt_ext_seq = stats->high_ext_seq_recv;
|
||||
stats->last_rpt_ts = rtp_session->timer.samplecount;
|
||||
stats->period_pkt_count = 0;
|
||||
rtp_session->rtcp_send_msg.header.length = htons((u_short)(rtcp_bytes / 4) - 1);
|
||||
|
||||
|
||||
#ifdef ENABLE_SRTP
|
||||
|
@ -3734,6 +3865,7 @@ SWITCH_DECLARE(switch_status_t) switch_rtp_activate_rtcp(switch_rtp_t *rtp_sessi
|
|||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG, "RTCP send rate is: %d and packet rate is: %d Remote Port: %d\n", send_rate, rtp_session->ms_per_packet, rtp_session->remote_rtcp_port);
|
||||
|
||||
rtp_session->rtcp_interval = send_rate;
|
||||
rtp_session->rtcp_send_rate = send_rate/1000;
|
||||
rtp_session->next_rtcp_send = switch_time_now() + (rtp_session->rtcp_interval * 1000);
|
||||
}
|
||||
|
||||
|
@ -4773,6 +4905,7 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
|
|||
}
|
||||
|
||||
rtp_session->stats.inbound.packet_count++;
|
||||
rtcp_stats(rtp_session);
|
||||
|
||||
|
||||
if (!rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] && !rtp_session->flags[SWITCH_RTP_FLAG_UDPTL]) {
|
||||
|
@ -4942,22 +5075,35 @@ static switch_status_t read_rtp_packet(switch_rtp_t *rtp_session, switch_size_t
|
|||
static switch_status_t process_rtcp_packet(switch_rtp_t *rtp_session, switch_size_t *bytes)
|
||||
{
|
||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||
switch_core_session_t *session = switch_core_memory_pool_get_data(rtp_session->pool, "__session");
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10,"Received an RTCP packet of length %" SWITCH_SIZE_T_FMT " bytes\n", *bytes);
|
||||
if (rtp_session->rtcp_recv_msg.header.version == 2) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10,"RTCP packet type is %d\n", rtp_session->rtcp_recv_msg.header.type);
|
||||
|
||||
if (rtp_session->rtcp_recv_msg.header.type == 200 || rtp_session->rtcp_recv_msg.header.type == 201) {
|
||||
struct switch_rtcp_report_block *report_block;
|
||||
switch_time_t now;
|
||||
switch_time_exp_t now_hr;
|
||||
uint32_t sec, ntp_sec, ntp_usec, lsr_now;
|
||||
uint32_t lsr;
|
||||
uint32_t packet_ssrc;
|
||||
now = switch_time_now(); /* number of microseconds since 00:00:00 january 1, 1970 UTC */
|
||||
sec = now/1000000; /* converted to second (NTP most significant bits) */
|
||||
ntp_sec = sec+NTP_TIME_OFFSET; /* 32bits most significant */
|
||||
ntp_usec = now - (sec*1000000); /* micro seconds */
|
||||
lsr_now = (uint32_t)(ntp_usec*0.065536) | (ntp_sec&0x0000ffff)<<16; // 0.065536 is used for convertion from useconds
|
||||
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG10,"Received an RTCP packet of length %" SWITCH_SIZE_T_FMT " bytes\n", *bytes);
|
||||
if (rtp_session->rtcp_recv_msg_p->header.version == 2) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG10,"RTCP packet type is %d\n", rtp_session->rtcp_recv_msg_p->header.type);
|
||||
if (rtp_session->rtcp_recv_msg_p->header.type == 200) {
|
||||
struct switch_rtcp_senderinfo* sr = (struct switch_rtcp_senderinfo*)rtp_session->rtcp_recv_msg_p->body;
|
||||
|
||||
rtp_session->rtcp_fresh_frame = 1;
|
||||
|
||||
rtp_session->stats.rtcp.packet_count += ntohl(sr->sr_head.pc);
|
||||
rtp_session->stats.rtcp.octet_count += ntohl(sr->sr_head.oc);
|
||||
rtp_session->stats.rtcp.peer_ssrc = ntohl(sr->sr_head.ssrc);
|
||||
|
||||
/* sender report */
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG10,"Received a SR with %d report blocks, " \
|
||||
if (rtp_session->rtcp_recv_msg.header.type == 200) { /* Sender report */
|
||||
struct switch_rtcp_sender_report* sr = (struct switch_rtcp_sender_report*)rtp_session->rtcp_recv_msg.body;
|
||||
report_block = &sr->report_block;
|
||||
rtp_session->stats.rtcp.packet_count += ntohl(sr->sender_info.pc);
|
||||
rtp_session->stats.rtcp.octet_count += ntohl(sr->sender_info.oc);
|
||||
packet_ssrc = sr->ssrc;
|
||||
/* Extracting LSR from NTP timestamp and save it */
|
||||
lsr = (ntohl(sr->sender_info.ntp_lsw)&0xffff0000)>>16 | (ntohl(sr->sender_info.ntp_msw)&0x0000ffff)<<16; /* The middle 32 bits out of 64 in the NTP timestamp */
|
||||
rtp_session->stats.rtcp.last_recv_lsr_peer = htonl(lsr); /* Save it include it in the next SR */
|
||||
rtp_session->stats.rtcp.last_recv_lsr_local = lsr_now; /* Save it to calculate DLSR when generating next SR */
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10,"Received a SR with %d report blocks, " \
|
||||
"length in words = %d, " \
|
||||
"SSRC = 0x%X, " \
|
||||
"NTP MSW = %u, " \
|
||||
|
@ -4965,14 +5111,35 @@ static switch_status_t process_rtcp_packet(switch_rtp_t *rtp_session, switch_siz
|
|||
"RTP timestamp = %u, " \
|
||||
"Sender Packet Count = %u, " \
|
||||
"Sender Octet Count = %u\n",
|
||||
rtp_session->rtcp_recv_msg_p->header.count,
|
||||
ntohs((uint16_t)rtp_session->rtcp_recv_msg_p->header.length),
|
||||
ntohl(sr->sr_head.ssrc),
|
||||
ntohl(sr->sr_head.ntp_msw),
|
||||
ntohl(sr->sr_head.ntp_lsw),
|
||||
ntohl(sr->sr_head.ts),
|
||||
ntohl(sr->sr_head.pc),
|
||||
ntohl(sr->sr_head.oc));
|
||||
rtp_session->rtcp_recv_msg.header.count,
|
||||
ntohs((uint16_t)rtp_session->rtcp_recv_msg.header.length),
|
||||
ntohl(sr->ssrc),
|
||||
ntohl(sr->sender_info.ntp_msw),
|
||||
ntohl(sr->sender_info.ntp_lsw),
|
||||
ntohl(sr->sender_info.ts),
|
||||
ntohl(sr->sender_info.pc),
|
||||
ntohl(sr->sender_info.oc));
|
||||
} else { /* Receiver report */
|
||||
struct switch_rtcp_receiver_report* rr = (struct switch_rtcp_receiver_report*)rtp_session->rtcp_recv_msg.body;
|
||||
report_block = &rr->report_block;
|
||||
packet_ssrc = rr->ssrc;
|
||||
}
|
||||
|
||||
/* Currently in passthru mode RTT will not be accurate, some work as to be done (something like mapping the NTP timestamp with a local one) to have RTT from both legs */
|
||||
if (report_block->lsr && !rtp_session->flags[SWITCH_RTP_FLAG_RTCP_PASSTHRU]) {
|
||||
switch_time_exp_gmt(&now_hr,now);
|
||||
/* Calculating RTT = A - DLSR - LSR */
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_NOTICE,
|
||||
"Receiving an RTCP packet[%04d-%02d-%02d %02d:%02d:%02d.%d] SSRC[%u]"
|
||||
"RTT[%f] A[%u] - DLSR[%u] - LSR[%u]\n",
|
||||
1900 + now_hr.tm_year, now_hr.tm_mday, now_hr.tm_mon, now_hr.tm_hour, now_hr.tm_min, now_hr.tm_sec, now_hr.tm_usec,
|
||||
ntohl(packet_ssrc), (double)(lsr_now - ntohl(report_block->dlsr) - ntohl(report_block->lsr))/65536,
|
||||
lsr_now, ntohl(report_block->dlsr), ntohl(report_block->lsr));
|
||||
}
|
||||
|
||||
rtp_session->rtcp_fresh_frame = 1;
|
||||
rtp_session->stats.rtcp.peer_ssrc = ntohl(packet_ssrc);
|
||||
status = SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
} else {
|
||||
if (rtp_session->rtcp_recv_msg_p->header.version != 2) {
|
||||
|
@ -5958,19 +6125,19 @@ SWITCH_DECLARE(switch_status_t) switch_rtcp_zerocopy_read_frame(switch_rtp_t *rt
|
|||
|
||||
/* A fresh frame has been found! */
|
||||
if (rtp_session->rtcp_fresh_frame) {
|
||||
struct switch_rtcp_senderinfo* sr = (struct switch_rtcp_senderinfo*)rtp_session->rtcp_recv_msg_p->body;
|
||||
struct switch_rtcp_sender_report* sr = (struct switch_rtcp_sender_report*)rtp_session->rtcp_recv_msg.body;
|
||||
int i = 0;
|
||||
|
||||
/* turn the flag off! */
|
||||
rtp_session->rtcp_fresh_frame = 0;
|
||||
|
||||
frame->ssrc = ntohl(sr->sr_head.ssrc);
|
||||
frame->packet_type = (uint16_t)rtp_session->rtcp_recv_msg_p->header.type;
|
||||
frame->ntp_msw = ntohl(sr->sr_head.ntp_msw);
|
||||
frame->ntp_lsw = ntohl(sr->sr_head.ntp_lsw);
|
||||
frame->timestamp = ntohl(sr->sr_head.ts);
|
||||
frame->packet_count = ntohl(sr->sr_head.pc);
|
||||
frame->octect_count = ntohl(sr->sr_head.oc);
|
||||
frame->ssrc = ntohl(sr->ssrc);
|
||||
frame->packet_type = (uint16_t)rtp_session->rtcp_recv_msg.header.type;
|
||||
frame->ntp_msw = ntohl(sr->sender_info.ntp_msw);
|
||||
frame->ntp_lsw = ntohl(sr->sender_info.ntp_lsw);
|
||||
frame->timestamp = ntohl(sr->sender_info.ts);
|
||||
frame->packet_count = ntohl(sr->sender_info.pc);
|
||||
frame->octect_count = ntohl(sr->sender_info.oc);
|
||||
|
||||
for (i = 0; i < (int)rtp_session->rtcp_recv_msg_p->header.count && i < MAX_REPORT_BLOCKS ; i++) {
|
||||
struct switch_rtcp_report_block* report = (struct switch_rtcp_report_block*) (rtp_session->rtcp_recv_msg_p->body + (sizeof(struct switch_rtcp_sr_head) + (i * sizeof(struct switch_rtcp_report_block))));
|
||||
|
|
|
@ -808,12 +808,19 @@ SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to,
|
|||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (!file && (!body || !switch_stristr("content-type", body))) {
|
||||
bound = NULL;
|
||||
}
|
||||
|
||||
if (bound) {
|
||||
switch_snprintf(buf, B64BUFFLEN, "MIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"%s\"\n", bound);
|
||||
if (!write_buf(fd, buf)) {
|
||||
rval = SWITCH_FALSE;
|
||||
err = "write error.";
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (headers && !write_buf(fd, headers)) {
|
||||
rval = SWITCH_FALSE;
|
||||
|
@ -827,6 +834,7 @@ SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to,
|
|||
goto end;
|
||||
}
|
||||
|
||||
if (bound) {
|
||||
if (body && switch_stristr("content-type", body)) {
|
||||
switch_snprintf(buf, B64BUFFLEN, "--%s\n", bound);
|
||||
} else {
|
||||
|
@ -837,6 +845,7 @@ SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to,
|
|||
err = "write error.";
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (body) {
|
||||
if (!write_buf(fd, body)) {
|
||||
|
@ -846,7 +855,7 @@ SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to,
|
|||
}
|
||||
}
|
||||
|
||||
if (file) {
|
||||
if (file && bound) {
|
||||
const char *stipped_file = switch_cut_path(file);
|
||||
const char *new_type;
|
||||
char *ext;
|
||||
|
@ -904,6 +913,7 @@ SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to,
|
|||
|
||||
}
|
||||
|
||||
if (bound) {
|
||||
switch_snprintf(buf, B64BUFFLEN, "\n\n--%s--\n.\n", bound);
|
||||
|
||||
if (!write_buf(fd, buf)) {
|
||||
|
@ -912,6 +922,7 @@ SWITCH_DECLARE(switch_bool_t) switch_simple_email(const char *to,
|
|||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fd > -1) {
|
||||
close(fd);
|
||||
|
|
|
@ -0,0 +1,347 @@
|
|||
*****************************************************************************
|
||||
The following copyright applies to the Red Hat Linux compilation and any
|
||||
portions of Red Hat Linux it does not conflict with. Whenever this
|
||||
policy does conflict with the copyright of any individual portion of Red Hat
|
||||
Linux, it does not apply.
|
||||
|
||||
*****************************************************************************
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
675 Mass Ave, Cambridge, MA 02139, USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Appendix: How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) 19yy <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
|
@ -0,0 +1,25 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.10 (GNU/Linux)
|
||||
|
||||
mQGiBE8jEfIRBAC+Cca0fPQxhyhn0NMsPaMQJgTvqhWb5/f4Mel++kosmUQQ4fJq
|
||||
4U9NFvpfNyLp5MoHpnlDfAb+e57B2sr47NOJLTh83yQIAnvU+8O0Q4kvMaiiesX5
|
||||
CisApLBs6Vx28y7VWmLsY3vWu8mC7M+PORKfpBV8DWy/7569wQPx2SCsIwCgzv2T
|
||||
8YsnYsSVRrrmh46J1o4/ngsD/13ETX4ws/wNN+82RdqUxu7fjc0fNbUAb6XYddAb
|
||||
1hrw5npQulgUNWkpnVmIDRHDXLNMeT8nZDkxsA8AsT+u7ACfPFa2o3R8w9zOPSO+
|
||||
oSO0+Puhop2+z1gm6lmfMKq9HpeXG3yt/8zsEVUmOYT9m+vYEVghfpXtACVYheDq
|
||||
LzUuA/9E9HBiNPVhJ/mEpOk9bZ1gpwr3mjlpUbvX5aGwTJJ+YoTfZOCL7go3uQHn
|
||||
/sT35WoJ23wJCRlW0SYTFJqCoris9AhI+qw7xRTw9wb+txSI96uhafUUMCn6GLkN
|
||||
+yAixqDwNHKkdax3GSGJtLB0t67QoBDIpcGog7ZfRMvWP3QLNLQ4RnJlZVNXSVRD
|
||||
SCBQYWNrYWdlIFNpZ25pbmcgS2V5IDxwYWNrYWdlc0BmcmVlc3dpdGNoLm9yZz6I
|
||||
YgQTEQIAIgUCTyMR8gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ127c
|
||||
dyXgEM879ACffY0HFi+mACtfFYmX/Uk/qGELSP4An1B8D5L4dLFFr1zV9YawQUbz
|
||||
O9/MuQENBE8jEfIQBAC7vnn855YDuz1gTsUMYDxfIRH5KPmDDEAf1WXoD3QG4qOQ
|
||||
xVW5nhp/bolh2CacAxdOjZePdhGkkdNOBpcu9NlTNRru0myGN8etbnzP3O5dq0io
|
||||
VMf23C5u9KPbxwRWS+WFtC4CRFn6DafDI1qa3Gv3CkiBWtKR0Wid2SQLzl3mVwAF
|
||||
EQP9HlwGjhBfFA26LlSMPhSo0Ll+sdcOJupJ21zmGeg7c0GpBnzDzyyJg04gbahs
|
||||
xWtW3Y/+B4LGM97o6lnu0OQI7MX5gY1G4Jgu6pgYv8tQd5XyU/CAJUA5VWTxUMIi
|
||||
JP6qlzm1bz4AAPmGw4mkS1u4N+vai21Zl4iyFIQFeiuU/K2ISQQYEQIACQUCTyMR
|
||||
8gIbDAAKCRDXbtx3JeAQzxReAJ4if8mss7CU2PBB7ycyqmQ94pfa5gCaArUwapxO
|
||||
y3VNFe8aDajIULY7X3A=
|
||||
=McFP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -0,0 +1,58 @@
|
|||
Name: freeswitch-release
|
||||
Version: 1
|
||||
Release: 0
|
||||
Summary: FreeSWITCH Packages for Enterprise Linux repository configuration
|
||||
|
||||
Group: System Environment/Base
|
||||
License: GPL
|
||||
URL: http://www.freeswitch.org
|
||||
|
||||
Source0: http://files.freeswitch.org/yum/RPM-GPG-KEY-FREESWITCH
|
||||
Source1: GPL
|
||||
Source2: freeswitch.repo
|
||||
Source3: freeswitch-testing.repo
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
BuildArch: noarch
|
||||
Requires: redhat-release >= %{version}
|
||||
|
||||
%description
|
||||
This package contains the FreeSWITCH Yum repository
|
||||
GPG key as well as configuration for yum.
|
||||
|
||||
%prep
|
||||
%setup -q -c -T
|
||||
install -pm 644 %{SOURCE0} .
|
||||
install -pm 644 %{SOURCE1} .
|
||||
|
||||
%build
|
||||
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
#GPG Key
|
||||
install -Dpm 644 %{SOURCE0} \
|
||||
$RPM_BUILD_ROOT%{_sysconfdir}/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
|
||||
# yum
|
||||
install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/yum.repos.d
|
||||
install -pm 644 %{SOURCE2} %{SOURCE3} \
|
||||
$RPM_BUILD_ROOT%{_sysconfdir}/yum.repos.d
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%doc GPL
|
||||
%config(noreplace) /etc/yum.repos.d/*
|
||||
/etc/pki/rpm-gpg/*
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jan 27 2012 Ken Rice <krice at freeswitch.org> - 5-0
|
||||
- Replace GPG key with correct key, and update primary URLs
|
||||
* Wed Dec 21 2011 Ken Rice <krice at freeswitch.org> - 5-0
|
||||
- Initial Version - Thanks to the EPEL Guys I had something to Rip Off. Hense this package is GPL
|
|
@ -0,0 +1,26 @@
|
|||
[freeswitch-testing]
|
||||
name=FreeSwitch Packages for Enterprise Linux $releasever - Testing - $basearch
|
||||
baseurl=http://files.freeswitch.org/yum/testing/$releasever/$basearch
|
||||
#mirrorlist=http://mirrors.freeswitch.org/mirrorlist?repo=testing-freeswitch$releasever&arch=$basearch
|
||||
#failovermethod=priority
|
||||
enabled=0
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
|
||||
[freeswitch-testing-debuginfo]
|
||||
name=FreeSwitch Packages for Enterprise Linux $releasever - Testing - $basearch - Debug
|
||||
baseurl=http://files.freeswitch.org/yum/testing/$releasever/$basearch/debug
|
||||
#mirrorlist=http://mirrors.freeswitch.org/mirrorlist?repo=testing-debug-freeswitch$releasever&arch=$basearch
|
||||
#failovermethod=priority
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
gpgcheck=1
|
||||
|
||||
[freeswitch-testing-source]
|
||||
name=FreeSwitch Packages for Enterprise Linux $releasever - Testing - $basearch - Source
|
||||
baseurl=http://files.freeswitch.org/yum/testing/$releasever/SRPMS
|
||||
#mirrorlist=http://mirrors.freeswitch.org/mirrorlist?repo=testing-source-freeswitch$releasever&arch=$basearch
|
||||
failovermethod=priority
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
gpgcheck=1
|
|
@ -0,0 +1,26 @@
|
|||
[freeswitch]
|
||||
name=FreeSWITCH Packages for Enterprise Linux $releasever - $basearch
|
||||
baseurl=http://files.freeswitch.org/yum/$releasever/$basearch
|
||||
#mirrorlist=http://mirrors.freeswitch.org/mirrorlist?repo=freeswitch-5&arch=$basearch
|
||||
#failovermethod=priority
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
|
||||
[freeswitch-debuginfo]
|
||||
name=FreeSWITCH Packages for Enterprise Linux $releasever - $basearch - Debug
|
||||
baseurl=http://files.freeswitch.org/yum/$releasever/$basearch/debug
|
||||
#mirrorlist=http://mirrors.freeswitch.org/mirrorlist?repo=freeswitch-debug-5&arch=$basearch
|
||||
#failovermethod=priority
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
gpgcheck=1
|
||||
|
||||
[freeswitch-source]
|
||||
name=FreeSWITCH Packages for Enterprise Linux $releasever - $basearch - Source
|
||||
baseurl=http://files.freeswitch.org/yum/$releasever/SRPMS
|
||||
#mirrorlist=http://mirrors.freeswitch.org/mirrorlist?repo=freeswitch-source-5&arch=$basearch
|
||||
#failovermethod=priority
|
||||
enabled=0
|
||||
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-FREESWITCH
|
||||
gpgcheck=1
|
|
@ -0,0 +1,28 @@
|
|||
dst_parent="/tmp/"
|
||||
dst_dir="/tmp/$dst_name"
|
||||
#!/bin/sh
|
||||
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
||||
|
||||
sdir="."
|
||||
[ -n "${0%/*}" ] && sdir="${0%/*}"
|
||||
|
||||
dst_name="freeswitch-release"
|
||||
|
||||
(mkdir -p temp && cd temp && mkdir -p SOURCES BUILD BUILDROOT i386 x86_64 SPECS)
|
||||
|
||||
cp -a * temp/SOURCES/ || true
|
||||
|
||||
rpmbuild --define "_topdir %(pwd)/temp" \
|
||||
--define "_rpmdir %{_topdir}" \
|
||||
--define "_srcrpmdir %{_topdir}" \
|
||||
-ba freeswitch-release.spec
|
||||
|
||||
mkdir ./RPMS
|
||||
mv ./temp/*/*.rpm ./RPMS/.
|
||||
|
||||
cat 1>&2 <<EOF
|
||||
----------------------------------------------------------------------
|
||||
The Repo RPM has been rolled, now we
|
||||
just need to push to the web server
|
||||
----------------------------------------------------------------------
|
||||
EOF
|
Loading…
Reference in New Issue