Compare commits

...

34 Commits

Author SHA1 Message Date
Kevin Harwell
a92aa59c1d ChangeLog: Updated for 14.0.2 2016-09-30 15:36:17 -05:00
Kevin Harwell
6b09ceb72a Release summaries: Add summaries for 14.0.2 2016-09-30 15:36:16 -05:00
Kevin Harwell
f2a0f14d76 Release summaries: Remove previous versions 2016-09-30 15:36:06 -05:00
Kevin Harwell
e79517fd20 .version: Update for 14.0.2 2016-09-30 15:36:05 -05:00
Kevin Harwell
57d5d669f6 .lastclean: Update for 14.0.2 2016-09-30 15:36:05 -05:00
Kevin Harwell
c6a6565f24 realtime: Add database scripts for 14.0.2 2016-09-30 15:36:05 -05:00
Joshua Colp
952e3090c2 Merge "Remove "format_ogg_opus: New format"" into 14.0 2016-09-29 16:14:32 -05:00
Kevin Harwell
7a8e74e287 Merge "logger: Output early verbose messages to console." into 14.0 2016-09-29 16:10:11 -05:00
Corey Farrell
6dc61291f5 logger: Output early verbose messages to console.
Verbose messages should be printed to the console if the sublevel is
less than option_verbose.  This fix ensures the welcome message with
copyright and license are printed at daemon and interactive rasterisk
startup.

ASTERISK-26410 #close

Change-Id: Ia44235e30ec328aba92ea2c8a837b094e65c9a03
(cherry picked from commit 013414ca4b)
2016-09-29 15:08:02 -05:00
Kevin Harwell
0646e40a1e Remove "format_ogg_opus: New format"
This reverts commit 40aa28131b.

ASTERISK-26426 #close

Change-Id: I81e55c3c512f1dd6f49896f0c6b97a07d74fd8f5
2016-09-29 14:31:29 -05:00
George Joseph
5692ea49fa download_externals: Fix issue with re-install
Needed to ignore an xmlstarlet return code for optional element.

Change-Id: I6a96f709b4b38c9a3f3dda4e8b07903787e16873
Reported-by: Dan Jenkins
2016-09-28 15:20:47 -05:00
Kevin Harwell
b633f5ac94 ChangeLog: Updated for 14.0.1 2016-09-27 13:43:33 -05:00
Kevin Harwell
7c8dd167eb Release summaries: Add summaries for 14.0.1 2016-09-27 13:43:32 -05:00
Kevin Harwell
80b3a952e0 Release summaries: Remove previous versions 2016-09-27 13:43:21 -05:00
Kevin Harwell
404c4a6820 .version: Update for 14.0.1 2016-09-27 13:43:21 -05:00
Kevin Harwell
8e0f992505 .lastclean: Update for 14.0.1 2016-09-27 13:43:21 -05:00
Kevin Harwell
801966afa9 realtime: Add database scripts for 14.0.1 2016-09-27 13:43:20 -05:00
George Joseph
d3d8257106 codec_opus: Add download ability to menuselect
Updated codecs/codecs.xml to add codec_opus to the external
download list.

ASTERISK-26409

Change-Id: Ia07b36539f30e852125fb2b94147dc9774df31a4
(cherry picked from commit 2cdab0e36eec4997ca3bd85aa09efc477038e31c)
2016-09-27 12:23:13 -05:00
George Joseph
1e98c8d5c8 codec_opus: Replace res_format_attr_opus with the one from codec_opus
Preparation

ASTERISK-26409

Change-Id: I9f20e7cce00c32464d9a180e81283d49d199d0a3
2016-09-27 12:23:13 -05:00
George Joseph
a091e15985 format_ogg_opus: New format
Add Ogg/Opus playback support.

This uses libopusfile in order to be able to read .opus files and play
them back.

Writing/recording support is not present at this time.

ASTERISK-26409

Change-Id: I8815d23345108d8ca7c0bd640f6a1ce6b4f56955
2016-09-27 12:23:13 -05:00
George Joseph
a13b54df83 build_tools: Add ability to download variants to download_externals
Some external packages have multiple variants that apply to different
builds of asterisk.  The DPMA for instance has a "bundled" variant that
needs to be downloaded if asterisk was configured with
--with-pjproject-bundled.

There are 2 ways to specify variants:

If you need the user to make the decision about which variant to
download, simply create multiple menuselect "member" entries like so...

<member name="res_digium_phone" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
</member>

<member name="res_digium_phone-bundled" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
</member>

Note that the second entry has "-<variant>" appended to the name.
You can then use the existing menuselect facilities to restrict which
members to enable or disable.  Youy probably don't want the user to
enable multiple at the same time.

If you want to hide the details of the variants, the better way to
do it is to create 1 member with "variant" elements.

<member name="res_digium_phone" displayname="..snipped..">
  <support_level>external</support_level>
  <depend>xmlstarlet</depend>
  <depend>bash</depend>
  <defaultenabled>no</defaultenabled>
  <member_data>
    <downloader>
      <variants>
        <variant tag="bundled"
          condition='[[ "$PJPROJECT_BUNDLED" = "yes" ]]'/>
      </variants>
    </downloader>
  </member_data>
</member>

The condition must be a bash expression suitable for use with an "if"
statement.  Any environment variable can be used plus those available
in makeopts.

In this case, if asterisk was configured with --with-pjproject-bundled
the bundled variant will be automatically downloaded.  Otherwise the
normal version will be downloaded.

Change-Id: I4de23e06d4492b0a65e105c8369966547d0faa3e
2016-09-27 10:55:03 -05:00
George Joseph
13cae45bb5 build: Add download capability for external packages
The DPMA and g729a, silk, siren7 and siren14 codecs hosted at
http://downloads.digium.com/pub/telephony/ are now listed in the
"External" sections of the "Resource Modules" and "Codec Translators"
pages in menuselect.  Any that are selected will automatically be
downloaded and installed when "make install" is run.  Their LICENSE and
README (if avaialble) files will be installed to
ASTVARLIBDIR/documentation/thirdparty/<product_name>.

Example use with codecs:

The codecs/codecs.xml file is a menuselect style xml file that lists
the codecs to be included.  Their support levels are 'external', which
triggers the download and install, and defaultenabled is no.  Also
because codec_g729a is actually in a directory named codec_g729 on the
download server, the newly added 'member_data' element is used to
override the default of the directory name being the package name.  You
can use the 'directory_name' attribute to keep default base URL
(http://downloads.digium.com/pub/telephony/) but use the new directory,
or you use the 'remote_url' attribute to specify a full URL to the
download directory.  In this case, you must still follow the same
subdirectory naming conventions as that used for the packages located
at 'http://downloads.digium.com/pub/telephony'.

A new configure option '--with-externals-cache' was added and like
'--with-sounds-cache' it allows the installer to cache tarballs so
they're not downloaded every time.

To assist with the download and install process, each external package
now has a manifest.xml file that, among other things, contains a package
version and checksums for each file in the tarball.  The manifest is
saved to both the cache directory and ASTMODDIR and together with the
manifest.xml on the downloads site, tells the install scripts whether
a download and/or update is needed.

bash and xmlstarlet are required for downloader operation.  If they're
not installed, the external items in menuselect will be unavailable.

Change-Id: Id3dcf1289ffd3cb0bbd7dfab3cafbb87be60323a
(cherry picked from commit 8b6f9dde14)
2016-09-27 09:53:39 -06:00
Kevin Harwell
c6d6dd133c ChangeLog: Updated for 14.0.0 2016-09-23 15:38:14 -05:00
Kevin Harwell
1c648c3ebe Release summaries: Add summaries for 14.0.0 2016-09-23 15:38:00 -05:00
Kevin Harwell
4c941e856b Release summaries: Remove previous versions 2016-09-23 14:49:21 -05:00
Kevin Harwell
bacd5521a0 .version: Update for 14.0.0 2016-09-23 14:49:21 -05:00
Kevin Harwell
0a939b274e .lastclean: Update for 14.0.0 2016-09-23 14:49:21 -05:00
Kevin Harwell
6acd3e3f35 realtime: Add database scripts for 14.0.0 2016-09-23 14:49:21 -05:00
Kevin Harwell
ca81c80ca0 ChangeLog: Updated for 14.0.0 2016-09-23 13:43:18 -05:00
Kevin Harwell
9d2c6bf0f5 Release summaries: Add summaries for 14.0.0 2016-09-23 13:43:09 -05:00
Kevin Harwell
7b52be6019 Release summaries: Remove previous versions 2016-09-23 12:34:29 -05:00
Kevin Harwell
97d18e8649 .version: Update for 14.0.0 2016-09-23 12:34:29 -05:00
Kevin Harwell
0f4f2c6884 .lastclean: Update for 14.0.0 2016-09-23 12:34:29 -05:00
Kevin Harwell
67da18293f realtime: Add database scripts for 14.0.0 2016-09-23 12:34:29 -05:00
21 changed files with 1109 additions and 377 deletions

View File

@@ -1 +1 @@
14.0.0-rc2
14.0.2

15
CHANGES
View File

@@ -8,6 +8,21 @@
===
==============================================================================
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 14.0.0 to Asterisk 14.0.1 ----------
------------------------------------------------------------------------------
Build System
------------------
* The res_digium_phone, codec_g729a, codec_silk, codec_siren7 and
codec_siren14 binary modules hosted at downloads.digium.com can now be
automatically downloaded and installed during the Asterisk install
process. If selected in menuselect, when 'make install' is run, the
script will check the downloads site for a new version and download
and install it if needed. The '--with-externals-cache' option to
./configure can be used to specify a location to cache the latest
tarballs so they don't have to be re-downloaded for every install.
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13 to Asterisk 14 --------------------
------------------------------------------------------------------------------

263
ChangeLog
View File

@@ -1,3 +1,266 @@
2016-09-30 20:36 +0000 Asterisk Development Team <asteriskteam@digium.com>
* asterisk 14.0.2 Released.
2016-09-30 15:36 +0000 [f2a0f14d76] Kevin Harwell <kharwell@digium.com>
* Release summaries: Remove previous versions
2016-09-30 15:36 +0000 [e79517fd20] Kevin Harwell <kharwell@digium.com>
* .version: Update for 14.0.2
2016-09-30 15:36 +0000 [57d5d669f6] Kevin Harwell <kharwell@digium.com>
* .lastclean: Update for 14.0.2
2016-09-30 15:36 +0000 [c6a6565f24] Kevin Harwell <kharwell@digium.com>
* realtime: Add database scripts for 14.0.2
2016-09-27 15:35 +0000 [6dc61291f5] Corey Farrell <git@cfware.com>
* logger: Output early verbose messages to console.
Verbose messages should be printed to the console if the sublevel is
less than option_verbose. This fix ensures the welcome message with
copyright and license are printed at daemon and interactive rasterisk
startup.
ASTERISK-26410 #close
Change-Id: Ia44235e30ec328aba92ea2c8a837b094e65c9a03
(cherry picked from commit 013414ca4b32fa4f25ec37076b537d0bb130be9f)
2016-09-29 14:02 +0000 [0646e40a1e] Kevin Harwell <kharwell@digium.com>
* Remove "format_ogg_opus: New format"
This reverts commit 40aa28131bc30b4516da2b20eb1a1e043920169c.
ASTERISK-26426 #close
Change-Id: I81e55c3c512f1dd6f49896f0c6b97a07d74fd8f5
2016-09-27 16:10 +0000 [5692ea49fa] gtjoseph <gjoseph@digium.com>
* download_externals: Fix issue with re-install
Needed to ignore an xmlstarlet return code for optional element.
Change-Id: I6a96f709b4b38c9a3f3dda4e8b07903787e16873
Reported-by: Dan Jenkins
2016-09-27 18:43 +0000 Asterisk Development Team <asteriskteam@digium.com>
* asterisk 14.0.1 Released.
2016-09-27 13:43 +0000 [80b3a952e0] Kevin Harwell <kharwell@digium.com>
* Release summaries: Remove previous versions
2016-09-27 13:43 +0000 [404c4a6820] Kevin Harwell <kharwell@digium.com>
* .version: Update for 14.0.1
2016-09-27 13:43 +0000 [8e0f992505] Kevin Harwell <kharwell@digium.com>
* .lastclean: Update for 14.0.1
2016-09-27 13:43 +0000 [801966afa9] Kevin Harwell <kharwell@digium.com>
* realtime: Add database scripts for 14.0.1
2016-09-22 09:49 +0000 [d3d8257106] gtjoseph <gjoseph@digium.com>
* codec_opus: Add download ability to menuselect
Updated codecs/codecs.xml to add codec_opus to the external
download list.
ASTERISK-26409
Change-Id: Ia07b36539f30e852125fb2b94147dc9774df31a4
(cherry picked from commit 2cdab0e36eec4997ca3bd85aa09efc477038e31c)
2016-07-23 14:50 +0000 [1e98c8d5c8] gtjoseph <gjoseph@digium.com>
* codec_opus: Replace res_format_attr_opus with the one from codec_opus
Preparation
ASTERISK-26409
Change-Id: I9f20e7cce00c32464d9a180e81283d49d199d0a3
2016-07-23 15:56 +0000 [a091e15985] gtjoseph <gjoseph@digium.com>
* format_ogg_opus: New format
Add Ogg/Opus playback support.
This uses libopusfile in order to be able to read .opus files and play
them back.
Writing/recording support is not present at this time.
ASTERISK-26409
Change-Id: I8815d23345108d8ca7c0bd640f6a1ce6b4f56955
2016-09-24 19:05 +0000 [a13b54df83] gtjoseph <gjoseph@digium.com>
* build_tools: Add ability to download variants to download_externals
Some external packages have multiple variants that apply to different
builds of asterisk. The DPMA for instance has a "bundled" variant that
needs to be downloaded if asterisk was configured with
--with-pjproject-bundled.
There are 2 ways to specify variants:
If you need the user to make the decision about which variant to
download, simply create multiple menuselect "member" entries like so...
<member name="res_digium_phone" displayname="..snipped..">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
</member>
<member name="res_digium_phone-bundled" displayname="..snipped..">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
</member>
Note that the second entry has "-<variant>" appended to the name.
You can then use the existing menuselect facilities to restrict which
members to enable or disable. Youy probably don't want the user to
enable multiple at the same time.
If you want to hide the details of the variants, the better way to
do it is to create 1 member with "variant" elements.
<member name="res_digium_phone" displayname="..snipped..">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
<member_data>
<downloader>
<variants>
<variant tag="bundled"
condition='[[ "$PJPROJECT_BUNDLED" = "yes" ]]'/>
</variants>
</downloader>
</member_data>
</member>
The condition must be a bash expression suitable for use with an "if"
statement. Any environment variable can be used plus those available
in makeopts.
In this case, if asterisk was configured with --with-pjproject-bundled
the bundled variant will be automatically downloaded. Otherwise the
normal version will be downloaded.
Change-Id: I4de23e06d4492b0a65e105c8369966547d0faa3e
2016-08-01 20:55 +0000 [13cae45bb5] gtjoseph <gjoseph@digium.com>
* build: Add download capability for external packages
The DPMA and g729a, silk, siren7 and siren14 codecs hosted at
http://downloads.digium.com/pub/telephony/ are now listed in the
"External" sections of the "Resource Modules" and "Codec Translators"
pages in menuselect. Any that are selected will automatically be
downloaded and installed when "make install" is run. Their LICENSE and
README (if avaialble) files will be installed to
ASTVARLIBDIR/documentation/thirdparty/<product_name>.
Example use with codecs:
The codecs/codecs.xml file is a menuselect style xml file that lists
the codecs to be included. Their support levels are 'external', which
triggers the download and install, and defaultenabled is no. Also
because codec_g729a is actually in a directory named codec_g729 on the
download server, the newly added 'member_data' element is used to
override the default of the directory name being the package name. You
can use the 'directory_name' attribute to keep default base URL
(http://downloads.digium.com/pub/telephony/) but use the new directory,
or you use the 'remote_url' attribute to specify a full URL to the
download directory. In this case, you must still follow the same
subdirectory naming conventions as that used for the packages located
at 'http://downloads.digium.com/pub/telephony'.
A new configure option '--with-externals-cache' was added and like
'--with-sounds-cache' it allows the installer to cache tarballs so
they're not downloaded every time.
To assist with the download and install process, each external package
now has a manifest.xml file that, among other things, contains a package
version and checksums for each file in the tarball. The manifest is
saved to both the cache directory and ASTMODDIR and together with the
manifest.xml on the downloads site, tells the install scripts whether
a download and/or update is needed.
bash and xmlstarlet are required for downloader operation. If they're
not installed, the external items in menuselect will be unavailable.
Change-Id: Id3dcf1289ffd3cb0bbd7dfab3cafbb87be60323a
(cherry picked from commit 8b6f9dde14d5ff30dd63c83ed20fb04dcda07e3e)
2016-09-23 20:38 +0000 Asterisk Development Team <asteriskteam@digium.com>
* asterisk 14.0.0 Released.
2016-09-23 15:38 +0000 [1c648c3ebe] Kevin Harwell <kharwell@digium.com>
* Release summaries: Add summaries for 14.0.0
2016-09-23 14:49 +0000 [4c941e856b] Kevin Harwell <kharwell@digium.com>
* Release summaries: Remove previous versions
2016-09-23 14:49 +0000 [bacd5521a0] Kevin Harwell <kharwell@digium.com>
* .version: Update for 14.0.0
2016-09-23 14:49 +0000 [0a939b274e] Kevin Harwell <kharwell@digium.com>
* .lastclean: Update for 14.0.0
2016-09-23 14:49 +0000 [6acd3e3f35] Kevin Harwell <kharwell@digium.com>
* realtime: Add database scripts for 14.0.0
2016-09-23 13:43 +0000 [ca81c80ca0] Kevin Harwell <kharwell@digium.com>
* ChangeLog: Updated for 14.0.0
2016-09-23 13:43 +0000 [9d2c6bf0f5] Kevin Harwell <kharwell@digium.com>
* Release summaries: Add summaries for 14.0.0
2016-09-23 12:34 +0000 [7b52be6019] Kevin Harwell <kharwell@digium.com>
* Release summaries: Remove previous versions
2016-09-23 12:34 +0000 [97d18e8649] Kevin Harwell <kharwell@digium.com>
* .version: Update for 14.0.0
2016-09-23 12:34 +0000 [0f4f2c6884] Kevin Harwell <kharwell@digium.com>
* .lastclean: Update for 14.0.0
2016-09-23 12:34 +0000 [67da18293f] Kevin Harwell <kharwell@digium.com>
* realtime: Add database scripts for 14.0.0
2016-09-22 15:26 +0000 Asterisk Development Team <asteriskteam@digium.com>
* asterisk 14.0.0-rc2 Released.

View File

@@ -618,9 +618,10 @@ $(SUBDIRS_INSTALL):
NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
OLDMODS=$(filter-out $(NEWMODS) $(notdir $(DESTDIR)$(ASTMODDIR)),$(notdir $(wildcard $(DESTDIR)$(ASTMODDIR)/*.so)))
BADMODS=$(strip $(filter-out $(shell ./build_tools/list_valid_installed_externals),$(OLDMODS)))
oldmodcheck:
@if [ -n "$(OLDMODS)" ]; then \
@if [ -n "$(BADMODS)" ]; then \
echo " WARNING WARNING WARNING" ;\
echo "" ;\
echo " Your Asterisk modules directory, located at" ;\
@@ -630,7 +631,7 @@ oldmodcheck:
echo " modules are compatible with this version before" ;\
echo " attempting to run Asterisk." ;\
echo "" ;\
for f in $(OLDMODS); do \
for f in $(BADMODS); do \
echo " $$f" ;\
done ;\
echo "" ;\
@@ -980,7 +981,7 @@ menuselect/nmenuselect: menuselect/makeopts .lastclean
menuselect/makeopts: makeopts .lastclean
+$(MAKE_MENUSELECT) makeopts
menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml build_tools/embed_modules.xml utils/utils.xml agi/agi.xml configure makeopts
menuselect-tree: $(foreach dir,$(filter-out main,$(MOD_SUBDIRS)),$(wildcard $(dir)/*.c) $(wildcard $(dir)/*.cc) $(wildcard $(dir)/*.xml)) build_tools/cflags.xml build_tools/cflags-devmode.xml sounds/sounds.xml build_tools/embed_modules.xml utils/utils.xml agi/agi.xml configure makeopts
@echo "Generating input for menuselect ..."
@echo "<?xml version=\"1.0\"?>" > $@
@echo >> $@

View File

@@ -146,6 +146,18 @@ clean::
install:: all
@echo "Installing modules from `basename $(CURDIR)`..."
@for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(ASTMODDIR)" ; done
ifneq ($(findstring :,$(XMLSTARLET)$(BASH)),:)
@if [ -f .moduleinfo ] ; then \
declare -A DISABLED_MODS ;\
for x in $(MENUSELECT_$(MENUSELECT_CATEGORY)) ; do DISABLED_MODS[$${x}]=1 ; done ;\
EXTERNAL_MODS=$$(xmlstarlet sel -t -m "/category/member[support_level = 'external']" -v "@name" -n .moduleinfo) ;\
for x in $${EXTERNAL_MODS} ; do \
if [ -z "$${DISABLED_MODS[$${x}]}" ] ; then \
$(ASTTOPDIR)/build_tools/download_externals $${x} ;\
fi ;\
done ;\
fi
endif
uninstall::

View File

@@ -1,38 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><title>Release Summary - asterisk-14.0.0-rc2</title><h1 align="center"><a name="top">Release Summary</a></h1><h3 align="center">asterisk-14.0.0-rc2</h3><h3 align="center">Date: 2016-09-22</h3><h3 align="center">&lt;asteriskteam@digium.com&gt;</h3><hr><h2 align="center">Table of Contents</h2><ol>
<li><a href="#summary">Summary</a></li>
<li><a href="#contributors">Contributors</a></li>
<li><a href="#closed_issues">Closed Issues</a></li>
<li><a href="#commits">Other Changes</a></li>
<li><a href="#diffstat">Diffstat</a></li>
</ol><hr><a name="summary"><h2 align="center">Summary</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is the first release of a major new version of Asterisk. For a list of new features that have been included with this release, please see the CHANGES file inside the source package. Since this is a new major release, users are encouraged to do extended testing before upgrading to this version in a production environment.</p><p>The data in this summary reflects changes that have been made since the previous release, asterisk-14.0.0-rc1.</p><hr><a name="contributors"><h2 align="center">Contributors</h2></a><center><a href="#top">[Back to Top]</a></center><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were affected by commits that went into this release.</p><table width="100%" border="0">
<tr><th width="33%">Coders</th><th width="33%">Testers</th><th width="33%">Reporters</th></tr>
<tr valign="top"><td width="33%">9 Joshua Colp <jcolp@digium.com><br/>3 Corey Farrell <git@cfware.com><br/></td><td width="33%"><td width="33%">4 Joshua Colp <jcolp@digium.com><br/>1 Andrew Nagy <andrew.nagy@the159.com><br/>1 Marcelo Terres <mhterres@gmail.com><br/>1 Anthony Messina <amessina@messinet.com><br/></td></tr>
</table><hr><a name="closed_issues"><h2 align="center">Closed Issues</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p><h3>Bug</h3><h4>Category: . I did not set the category correctly.</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26391">ASTERISK-26391</a>: Consoles do not display verbose logger messages even when requested.<br/>Reported by: Marcelo Terres<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=cab2e4514ee65cb759eecf5adfec7be4e9f7a38a">[cab2e4514e]</a> Corey Farrell -- logger: Always enable verbose for console channel.</li>
</ul><br><h4>Category: Core/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26273">ASTERISK-26273</a>: core: Won't compile when LOW_MEMORY is enabled<br/>Reported by: Anthony Messina<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=6e78b5c257226bcfad8a0c5e23d191a32d866cd6">[6e78b5c257]</a> Corey Farrell -- core: Fix LOW_MEMORY missing symbol ast_pbx_uuid_get.</li>
</ul><br><h4>Category: Core/ManagerInterface</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26397">ASTERISK-26397</a>: manager: PresenceState action crashes Asterisk 14<br/>Reported by: Andrew Nagy<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=31fa14264b989b37efa47e01b5b59fd1151114b5">[31fa14264b]</a> Joshua Colp -- core: Ensure presencestate subtype and message are NULL.</li>
</ul><br><h4>Category: Core/RTP</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26365">ASTERISK-26365</a>: rtp: Offer with multiple payloads for same codec is incorrectly handled<br/>Reported by: Joshua Colp<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a2b03cf0b4772999f0b0e46d5839ca6f3e1b191c">[a2b03cf0b4]</a> Joshua Colp -- rtp: Only accept the first payload for a format in SDP.</li>
</ul><br><h4>Category: Resources/res_odbc</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26389">ASTERISK-26389</a>: res_odbc: Clean up pooling options<br/>Reported by: Joshua Colp<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=3facd0febb9aa08aabe6ea9f239e4b90970503c3">[3facd0febb]</a> Joshua Colp -- res_odbc: Make pooling option deprecation notice more useful.</li>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=27dcb25612c736c9cdc012cd47e6732e5af38e6a">[27dcb25612]</a> Joshua Colp -- odbc: Remove options that are no longer applicable.</li>
</ul><br><h4>Category: Resources/res_pjsip_multihomed</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26374">ASTERISK-26374</a>: res_pjsip_multihomed: Contact port is rewritten for connectionful protocols<br/>Reported by: Joshua Colp<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=7244ff1ccdafa1f4ad4e347ca7319273a0cff0b4">[7244ff1ccd]</a> Joshua Colp -- res_pjsip_multihomed: Change Contact port to listening port.</li>
</ul><br><hr><a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all changes that went into this release that did not reference a JIRA issue.</p><table width="100%" border="1">
<tr><th>Revision</th><th>Author</th><th>Summary</th></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=fc8ac2fd17bf5bc574190ae070a4a463085f1192">fc8ac2fd17</a></td><td>Joshua Colp</td><td>Release summaries: Remove previous versions</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=75acfb01682118d7d2bc761d75245a10fb01617a">75acfb0168</a></td><td>Joshua Colp</td><td>.version: Update for 14.0.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=169bfc9b55dd0cf1f2368c268aa6ad0719e05e27">169bfc9b55</a></td><td>Joshua Colp</td><td>.lastclean: Update for 14.0.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=d5ea62829888f0004ca870b089f5908156c09464">d5ea628298</a></td><td>Joshua Colp</td><td>realtime: Add database scripts for 14.0.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=c4ef22b5f7a2a877d9ecc19cffe91eb9144b81d5">c4ef22b5f7</a></td><td>Corey Farrell</td><td>logger: Fix default console settings.</td></tr>
</table><hr><a name="diffstat"><h2 align="center">Diffstat Results</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p><pre>asterisk-14.0.0-rc1-summary.html | 34 -------
asterisk-14.0.0-rc1-summary.txt | 145 ---------------------------------
b/.version | 2
b/configs/samples/res_odbc.conf.sample | 13 --
b/main/asterisk.c | 20 ++--
b/main/logger.c | 4
b/main/presencestate.c | 3
b/main/rtp_engine.c | 91 ++++++++++++--------
8 files changed, 74 insertions(+), 238 deletions(-)</pre><br></html>

View File

@@ -1,155 +0,0 @@
Release Summary
asterisk-14.0.0-rc2
Date: 2016-09-22
<asteriskteam@digium.com>
----------------------------------------------------------------------
Table of Contents
1. Summary
2. Contributors
3. Closed Issues
4. Other Changes
5. Diffstat
----------------------------------------------------------------------
Summary
[Back to Top]
This is the first release of a major new version of Asterisk. For a list
of new features that have been included with this release, please see the
CHANGES file inside the source package. Since this is a new major release,
users are encouraged to do extended testing before upgrading to this
version in a production environment.
The data in this summary reflects changes that have been made since the
previous release, asterisk-14.0.0-rc1.
----------------------------------------------------------------------
Contributors
[Back to Top]
This table lists the people who have submitted code, those that have
tested patches, as well as those that reported issues on the issue tracker
that were resolved in this release. For coders, the number is how many of
their patches (of any size) were committed into this release. For testers,
the number is the number of times their name was listed as assisting with
testing a patch. Finally, for reporters, the number is the number of
issues that they reported that were affected by commits that went into
this release.
Coders Testers Reporters
9 Joshua Colp 4 Joshua Colp
3 Corey Farrell 1 Andrew Nagy
1 Marcelo Terres
1 Anthony Messina
----------------------------------------------------------------------
Closed Issues
[Back to Top]
This is a list of all issues from the issue tracker that were closed by
changes that went into this release.
Bug
Category: . I did not set the category correctly.
ASTERISK-26391: Consoles do not display verbose logger messages even when
requested.
Reported by: Marcelo Terres
* [cab2e4514e] Corey Farrell -- logger: Always enable verbose for
console channel.
Category: Core/General
ASTERISK-26273: core: Won't compile when LOW_MEMORY is enabled
Reported by: Anthony Messina
* [6e78b5c257] Corey Farrell -- core: Fix LOW_MEMORY missing symbol
ast_pbx_uuid_get.
Category: Core/ManagerInterface
ASTERISK-26397: manager: PresenceState action crashes Asterisk 14
Reported by: Andrew Nagy
* [31fa14264b] Joshua Colp -- core: Ensure presencestate subtype and
message are NULL.
Category: Core/RTP
ASTERISK-26365: rtp: Offer with multiple payloads for same codec is
incorrectly handled
Reported by: Joshua Colp
* [a2b03cf0b4] Joshua Colp -- rtp: Only accept the first payload for a
format in SDP.
Category: Resources/res_odbc
ASTERISK-26389: res_odbc: Clean up pooling options
Reported by: Joshua Colp
* [3facd0febb] Joshua Colp -- res_odbc: Make pooling option deprecation
notice more useful.
* [27dcb25612] Joshua Colp -- odbc: Remove options that are no longer
applicable.
Category: Resources/res_pjsip_multihomed
ASTERISK-26374: res_pjsip_multihomed: Contact port is rewritten for
connectionful protocols
Reported by: Joshua Colp
* [7244ff1ccd] Joshua Colp -- res_pjsip_multihomed: Change Contact port
to listening port.
----------------------------------------------------------------------
Commits Not Associated with an Issue
[Back to Top]
This is a list of all changes that went into this release that did not
reference a JIRA issue.
+------------------------------------------------------------------------+
| Revision | Author | Summary |
|------------+---------------+-------------------------------------------|
| fc8ac2fd17 | Joshua Colp | Release summaries: Remove previous |
| | | versions |
|------------+---------------+-------------------------------------------|
| 75acfb0168 | Joshua Colp | .version: Update for 14.0.0-rc2 |
|------------+---------------+-------------------------------------------|
| 169bfc9b55 | Joshua Colp | .lastclean: Update for 14.0.0-rc2 |
|------------+---------------+-------------------------------------------|
| d5ea628298 | Joshua Colp | realtime: Add database scripts for |
| | | 14.0.0-rc2 |
|------------+---------------+-------------------------------------------|
| c4ef22b5f7 | Corey Farrell | logger: Fix default console settings. |
+------------------------------------------------------------------------+
----------------------------------------------------------------------
Diffstat Results
[Back to Top]
This is a summary of the changes to the source code that went into this
release that was generated using the diffstat utility.
asterisk-14.0.0-rc1-summary.html | 34 -------
asterisk-14.0.0-rc1-summary.txt | 145 ---------------------------------
b/.version | 2
b/configs/samples/res_odbc.conf.sample | 13 --
b/main/asterisk.c | 20 ++--
b/main/logger.c | 4
b/main/presencestate.c | 3
b/main/rtp_engine.c | 91 ++++++++++++--------
8 files changed, 74 insertions(+), 238 deletions(-)

View File

@@ -0,0 +1,29 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><title>Release Summary - asterisk-14.0.2</title><h1 align="center"><a name="top">Release Summary</a></h1><h3 align="center">asterisk-14.0.2</h3><h3 align="center">Date: 2016-09-30</h3><h3 align="center">&lt;asteriskteam@digium.com&gt;</h3><hr><h2 align="center">Table of Contents</h2><ol>
<li><a href="#summary">Summary</a></li>
<li><a href="#contributors">Contributors</a></li>
<li><a href="#closed_issues">Closed Issues</a></li>
<li><a href="#commits">Other Changes</a></li>
<li><a href="#diffstat">Diffstat</a></li>
</ol><hr><a name="summary"><h2 align="center">Summary</h2></a><center><a href="#top">[Back to Top]</a></center><p>This release is a point release of an existing major version. The changes included were made to address problems that have been identified in this release series, or are minor, backwards compatible new features or improvements. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous version are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p><p>The data in this summary reflects changes that have been made since the previous release, asterisk-14.0.1.</p><hr><a name="contributors"><h2 align="center">Contributors</h2></a><center><a href="#top">[Back to Top]</a></center><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were affected by commits that went into this release.</p><table width="100%" border="0">
<tr><th width="33%">Coders</th><th width="33%">Testers</th><th width="33%">Reporters</th></tr>
<tr valign="top"><td width="33%">5 Kevin Harwell <kharwell@digium.com><br/>1 gtjoseph <gjoseph@digium.com><br/>1 Corey Farrell <git@cfware.com><br/></td><td width="33%"><td width="33%">1 Kevin Harwell <kharwell@digium.com><br/>1 Dan Jenkins <dan@nimbleape.com><br/></td></tr>
</table><hr><a name="closed_issues"><h2 align="center">Closed Issues</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p><h3>Bug</h3><h4>Category: Core/Logging</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26410">ASTERISK-26410</a>: core: Asterisk 14 doesn't show the header in the console or verbose when starting<br/>Reported by: Dan Jenkins<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=6dc61291f552d4154e70b4df62eea4f2e6c7ebd1">[6dc61291f5]</a> Corey Farrell -- logger: Output early verbose messages to console.</li>
</ul><br><h4>Category: Formats/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-26426">ASTERISK-26426</a>: format_ogg_opus: remove from source<br/>Reported by: Kevin Harwell<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=0646e40a1eade4ff21e2e65f56d030a6655f3bd6">[0646e40a1e]</a> Kevin Harwell -- Remove "format_ogg_opus: New format"</li>
</ul><br><hr><a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all changes that went into this release that did not reference a JIRA issue.</p><table width="100%" border="1">
<tr><th>Revision</th><th>Author</th><th>Summary</th></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=f2a0f14d76f3aa5ee1404492da1437c0fb368a69">f2a0f14d76</a></td><td>Kevin Harwell</td><td>Release summaries: Remove previous versions</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=e79517fd2014cb2134986fd230c90316c5c08acf">e79517fd20</a></td><td>Kevin Harwell</td><td>.version: Update for 14.0.2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=57d5d669f63884174e592597256add7a4cb84486">57d5d669f6</a></td><td>Kevin Harwell</td><td>.lastclean: Update for 14.0.2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=c6a6565f245c10ace2dc18b34fdd92f41b7f4e15">c6a6565f24</a></td><td>Kevin Harwell</td><td>realtime: Add database scripts for 14.0.2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=5692ea49fa85e3c5fb6a4e4ff6ebaba9d98bcded">5692ea49fa</a></td><td>gtjoseph</td><td>download_externals: Fix issue with re-install</td></tr>
</table><hr><a name="diffstat"><h2 align="center">Diffstat Results</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p><pre>asterisk-14.0.1-summary.html | 41 ----------
asterisk-14.0.1-summary.txt | 134 -----------------------------------
b/.version | 2
b/build_tools/download_externals | 2
b/build_tools/menuselect-deps.in | 1
b/configure | 148 ---------------------------------------
b/configure.ac | 8 --
formats/format_ogg_opus.c | 143 -------------------------------------
8 files changed, 2 insertions(+), 477 deletions(-)</pre><br></html>

124
asterisk-14.0.2-summary.txt Normal file
View File

@@ -0,0 +1,124 @@
Release Summary
asterisk-14.0.2
Date: 2016-09-30
<asteriskteam@digium.com>
----------------------------------------------------------------------
Table of Contents
1. Summary
2. Contributors
3. Closed Issues
4. Other Changes
5. Diffstat
----------------------------------------------------------------------
Summary
[Back to Top]
This release is a point release of an existing major version. The changes
included were made to address problems that have been identified in this
release series, or are minor, backwards compatible new features or
improvements. Users should be able to safely upgrade to this version if
this release series is already in use. Users considering upgrading from a
previous version are strongly encouraged to review the UPGRADE.txt
document as well as the CHANGES document for information about upgrading
to this release series.
The data in this summary reflects changes that have been made since the
previous release, asterisk-14.0.1.
----------------------------------------------------------------------
Contributors
[Back to Top]
This table lists the people who have submitted code, those that have
tested patches, as well as those that reported issues on the issue tracker
that were resolved in this release. For coders, the number is how many of
their patches (of any size) were committed into this release. For testers,
the number is the number of times their name was listed as assisting with
testing a patch. Finally, for reporters, the number is the number of
issues that they reported that were affected by commits that went into
this release.
Coders Testers Reporters
5 Kevin Harwell 1 Kevin Harwell
1 gtjoseph 1 Dan Jenkins
1 Corey Farrell
----------------------------------------------------------------------
Closed Issues
[Back to Top]
This is a list of all issues from the issue tracker that were closed by
changes that went into this release.
Bug
Category: Core/Logging
ASTERISK-26410: core: Asterisk 14 doesn't show the header in the console
or verbose when starting
Reported by: Dan Jenkins
* [6dc61291f5] Corey Farrell -- logger: Output early verbose messages to
console.
Category: Formats/General
ASTERISK-26426: format_ogg_opus: remove from source
Reported by: Kevin Harwell
* [0646e40a1e] Kevin Harwell -- Remove "format_ogg_opus: New format"
----------------------------------------------------------------------
Commits Not Associated with an Issue
[Back to Top]
This is a list of all changes that went into this release that did not
reference a JIRA issue.
+------------------------------------------------------------------------+
| Revision | Author | Summary |
|------------+---------------+-------------------------------------------|
| f2a0f14d76 | Kevin Harwell | Release summaries: Remove previous |
| | | versions |
|------------+---------------+-------------------------------------------|
| e79517fd20 | Kevin Harwell | .version: Update for 14.0.2 |
|------------+---------------+-------------------------------------------|
| 57d5d669f6 | Kevin Harwell | .lastclean: Update for 14.0.2 |
|------------+---------------+-------------------------------------------|
| c6a6565f24 | Kevin Harwell | realtime: Add database scripts for 14.0.2 |
|------------+---------------+-------------------------------------------|
| 5692ea49fa | gtjoseph | download_externals: Fix issue with |
| | | re-install |
+------------------------------------------------------------------------+
----------------------------------------------------------------------
Diffstat Results
[Back to Top]
This is a summary of the changes to the source code that went into this
release that was generated using the diffstat utility.
asterisk-14.0.1-summary.html | 41 ----------
asterisk-14.0.1-summary.txt | 134 -----------------------------------
b/.version | 2
b/build_tools/download_externals | 2
b/build_tools/menuselect-deps.in | 1
b/configure | 148 ---------------------------------------
b/configure.ac | 8 --
formats/format_ogg_opus.c | 143 -------------------------------------
8 files changed, 2 insertions(+), 477 deletions(-)

224
build_tools/download_externals Executable file
View File

@@ -0,0 +1,224 @@
#!/usr/bin/env bash
if [[ ( ${BASH_VERSINFO[0]} == 4 && ${BASH_VERSINFO[1]} > 1 ) || ${BASH_VERSINFO[0]} > 4 ]] ; then
shopt -s compat41
fi
set -e
ASTTOPDIR=${ASTTOPDIR:-.}
module_name=${1%%-*}
variant=${1##*-}
if [[ "${variant}" = "${module_name}" ]] ; then
unset variant
fi
if [[ -z ${module_name} ]] ; then
echo "You must supply a module name."
exit 64
fi
tmpdir=$(mktemp -d)
if [[ -z "${tmpdir}" ]] ; then
echo "${module_name}: Unable to create temporary directory."
exit 1
fi
trap "rm -rf ${tmpdir}" EXIT
sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts
source ${tmpdir}/makeopts
if [[ -z "${ASTMODDIR}" ]] ; then
echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts."
exit 1
fi
XMLSTARLET=${XMLSTARLET:-xmlstarlet}
if [[ "${XMLSTARLET}" = ":" ]] ; then
echo "${module_name}: The externals downloader requires xmlstarlet to be installed."
exit 1
fi
cache_dir="${EXTERNALS_CACHE_DIR}"
if [[ -z ${cache_dir} ]] ; then
cache_dir=${tmpdir}
fi
version=$(${ASTTOPDIR}/build_tools/make_version ${ASTTOPDIR})
if [[ ! ${version} =~ ^(GIT-)?([^.-]+)[.-].* ]] ; then
echo "${module_name}: Couldn't parse version ${version}"
exit 1
fi
major_version=${BASH_REMATCH[2]}
if [[ "${major_version}" == "master" ]] ; then
echo "${module_name}: External module downloading is not available in the 'master' git branch. Please disable in menuselect and download manually."
exit 1
fi
major_version=${major_version}.0
if [[ "${HOST_CPU}" = "x86_64" ]] ; then
host_bits=64
else
host_bits=32
fi
if [[ -z "${variant}" ]] ; then
variants=$(${XMLSTARLET} sel -t -m "/menu/category/member[@name = '${module_name}']/member_data/downloader/variants/variant" -v "@tag" -n ${ASTTOPDIR}/menuselect-tree || :)
member_name=${module_name}
for tag in ${variants} ; do
condition=$(${XMLSTARLET} sel -t -v "/menu/category/member[@name = '${module_name}']/member_data/downloader/variants/variant[@tag = '${tag}']/@condition" ${ASTTOPDIR}/menuselect-tree || :)
variant=$(eval "if $condition ; then echo $tag ; fi")
if [[ -n "${variant}" ]] ; then
break
fi
done
else
member_name=${module_name}${variant:+-${variant}}
fi
full_name=${module_name}${variant:+-${variant}}
variant_manifest=manifest${variant:+-${variant}}.xml
# Override the remote base for all packages
# useful for testing
remote_url=${REMOTE_BASE:+${REMOTE_BASE}/asterisk-${major_version}/x86-${host_bits}}
if [[ -z "${remote_url}" ]] ; then
remote_url=$(${XMLSTARLET} sel -t -v "/menu/category/member[@name = '${member_name}']/member_data/downloader/@remote_url" ${ASTTOPDIR}/menuselect-tree || :)
if [[ -n "${remote_url}" ]] ; then
remote_url="${remote_url}/asterisk-${major_version}/x86-${host_bits}"
else
directory_name=$(${XMLSTARLET} sel -t -v "/menu/category/member[@name = '${member_name}']/member_data/downloader/@directory_name" ${ASTTOPDIR}/menuselect-tree || :)
remote_url="http://downloads.digium.com/pub/telephony/${directory_name:-${module_name}}/asterisk-${major_version}/x86-${host_bits}"
fi
fi
version_convert() {
local v=${1##*_}
if [[ ${v} =~ ([0-9]+)[.]([0-9]+)[.]([0-9]+) ]] ; then
v=$(( ${BASH_REMATCH[1]}<<18 | ${BASH_REMATCH[2]}<<9 | ${BASH_REMATCH[3]} ))
fi
echo ${v}
}
${WGET} -q -O ${tmpdir}/${variant_manifest} ${remote_url}/${variant_manifest} || {
echo "${full_name}: Unable to fetch ${remote_url}/${variant_manifest}"
exit 1
}
rpv=$(${XMLSTARLET} sel -t -v "/package/@version" ${tmpdir}/${variant_manifest})
rpvi=$(version_convert ${rpv})
echo "${full_name}: Remote package version ${rpv} (${rpvi})"
module_dir=${full_name}-${rpv}-x86_${host_bits}
tarball=${module_dir}.tar.gz
export need_install=0
if [[ -f ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml ]] ; then
package_arch=$(${XMLSTARLET} sel -t -v "/package/@arch" ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml)
ipv=$(${XMLSTARLET} sel -t -v "/package/@version" ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml)
package_variant=$(${XMLSTARLET} sel -t -v "/package/@variant" ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml || :)
ipvi=$(version_convert ${ipv})
ip_major=${ipv%_*}
echo "${full_name}: Installed package version ${ipv} (${ipvi})"
if [[ "${ip_major}" != "${major_version}" || "${package_arch}" != "x86_${host_bits}" || "${package_variant}" != "${variant}" ]] ; then
echo "${full_name}: The installed package is not for this version of Asterisk. Reinstalling."
need_install=1
elif [[ ${rpvi} > ${ipvi} ]] ; then
echo "${full_name}: A newer package is available"
need_install=1
else
sums=$(${XMLSTARLET} sel -t -m "//file" -v "@md5sum" -n ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml)
for sum in ${sums} ; do
install_path=$(${XMLSTARLET} sel -t -v "//file[@md5sum = '${sum}']/@install_path" ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml )
executable=$(${XMLSTARLET} sel -t -v "//file[@md5sum = '${sum}']/@executable" ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml || : )
f=${DESTDIR}$(eval echo ${install_path})
if [[ ! -f ${f} ]] ; then
echo Not found: ${f}
need_install=1
break
else
if [[ "$executable" = "yes" ]] ; then
# There are easier ways of doing this (objcopy --dump-section) but not in older bunutils
length_offset=$(objdump -h $f | sed -n -r -e "s/^\s+[0-9]+\s+.ast_manifest\s+([0-9a-fA-F]+)\s+[0-9a-fA-F]+\s+[0-9a-fA-F]+\s+([0-9a-fA-F]+)\s+.*$/0x\1 0x\2/p")
tags=$($(eval 'printf "dd if=$f bs=1 count=%d skip=%d\n" $length_offset') 2>/dev/null)
if [[ -n "${tags}" && "${tags}" != "${module_name},${variant},${rpv}" ]] ; then
echo Tag mismatch: ${f} File: "${tags}" Manifest: "${module_name},${variant},${rpv}"
need_install=1
break
fi
fi
cs=$(md5sum ${f} | cut -b1-32)
if [[ "${cs}" != "${sum}" ]] ; then
echo Checksum mismatch: ${f}
need_install=1
break
fi
fi
done
fi
else
need_install=1
fi
if [[ ${need_install} == 1 ]] ; then
if [[ ( -n "${ipvi}" ) && ${ipvi} > ${rpvi} ]] ; then
echo "${full_name}: Installed package is newer than that available for download."
exit 0
fi
else
echo "${full_name} is up to date."
exit 0;
fi
need_download=1
if [[ -f ${cache_dir}/${full_name}.manifest.xml ]] ; then
cpv=$(${XMLSTARLET} sel -t -v "/package/@version" ${cache_dir}/${full_name}.manifest.xml)
cpvi=$(version_convert ${cpv})
echo "${full_name}: Cached package version ${cpv} (${cpvi})"
if [[ ${cpvi} == ${rpvi} && ( -f ${cache_dir}/${tarball} ) ]] ; then
echo "${full_name}: Cached version is available."
need_download=0
fi
fi
if [[ ${need_download} = 1 ]] ; then
echo "${full_name}: Downloading ${remote_url}/${tarball}"
${WGET} -q -O ${cache_dir}/${tarball} ${remote_url}/${tarball} || {
echo "${full_name}: Unable to fetch ${remote_url}/${tarball}"
exit 1
}
cp ${tmpdir}/${variant_manifest} ${cache_dir}/${full_name}.manifest.xml
fi
tar -xzf ${cache_dir}/${tarball} -C ${cache_dir}
trap "rm -rf ${cache_dir}/${module_dir} ; rm -rf ${tmpdir}" EXIT
echo "${full_name}: Installing."
if [[ $EUID == 0 ]] ; then
install_params="--group=0 --owner=0"
fi
names=$(${XMLSTARLET} sel -t -m "//file" -v "@name" -n ${cache_dir}/${module_dir}/manifest.xml)
for name in ${names} ; do
source_path=${cache_dir}/${module_dir}/${name}
install_path=$(${XMLSTARLET} sel -t -v "//file[@name = '${name}']/@install_path" ${cache_dir}/${module_dir}/manifest.xml)
install_path=${DESTDIR}$(eval echo ${install_path})
executable=$(${XMLSTARLET} sel -t -v "//file[@name = '${name}']/@executable" ${cache_dir}/${module_dir}/manifest.xml || :)
if [[ "${executable}" = "yes" ]] ; then
mode=0755
else
mode=0644
fi
${INSTALL} -Dp ${install_params} --mode=${mode} ${source_path} ${install_path}
done
${INSTALL} -Dp ${install_params} --mode=0644 ${cache_dir}/${module_dir}/manifest.xml ${DESTDIR}${ASTMODDIR}/${module_name}.manifest.xml
echo "${full_name}: Installed."

View File

@@ -0,0 +1,55 @@
#!/usr/bin/env bash
if [[ ( ${BASH_VERSINFO[0]} == 4 && ${BASH_VERSINFO[1]} > 1 ) || ${BASH_VERSINFO[0]} > 4 ]] ; then
shopt -s compat41
fi
set -e
ASTTOPDIR=${ASTTOPDIR:-.}
tmpdir=$(mktemp -d)
if [[ -z "${tmpdir}" ]] ; then
echo "${module_name}: Unable to create temporary directory."
exit 1
fi
trap "rm -rf ${tmpdir}" EXIT
sed -r -e "s/^([^ =]+)\s*=\s*(.*)$/\1=\"\2\"/g" ${ASTTOPDIR}/makeopts >${tmpdir}/makeopts
source ${tmpdir}/makeopts
if [[ -z "${ASTMODDIR}" ]] ; then
echo "${module_name}: Unable to parse ${ASTTOPDIR}/makeopts."
exit 1
fi
XMLSTARLET=${XMLSTARLET:-xmlstarlet}
if [[ "${XMLSTARLET}" = ":" ]] ; then
echo "${module_name}: The externals downloader requires xmlstarlet to be installed."
exit 1
fi
version=$(${ASTTOPDIR}/build_tools/make_version ${ASTTOPDIR})
if [[ ! ${version} =~ ^(GIT-)?([^.-]+)[.-].* ]] ; then
echo "${module_name}: Couldn't parse version ${version}"
exit 1
fi
major_version=${BASH_REMATCH[2]}.0
if [[ "${HOST_CPU}" = "x86_64" ]] ; then
host_bits=64
else
host_bits=32
fi
names=""
for manifest in ${DESTDIR}${ASTMODDIR}/*.manifest.xml ; do
if [ ! -f "$manifest" ] ; then
break
fi
package_version=$(${XMLSTARLET} sel -t -v "/package/@version" ${manifest})
package_major_version=${package_version%_*}
package_arch=$(${XMLSTARLET} sel -t -v "/package/@arch" ${manifest})
if [[ "$package_major_version" = "$major_version" && "${package_arch}" = "x86_${host_bits}" ]] ; then
names+=$(${XMLSTARLET} sel -t -m "//file[@executable = 'yes']" -v "concat(@name, ' ')" ${manifest})
fi
done
echo $names

View File

@@ -11,11 +11,13 @@ elif [ -d ${1}/.git ]; then
if [ -z ${GIT} ]; then
GIT="git"
fi
if ! command -v ${GIT} >/dev/null 2>&1; then
echo "UNKNOWN__and_probably_unsupported"
exit 1
fi
cd ${1}
# If the first log commit messages indicates that this is checked into
# subversion, we'll just use the SVN- form of the revision.
MODIFIED=""

View File

@@ -30,6 +30,8 @@ KQUEUE=@PBX_KQUEUE@
LDAP=@PBX_LDAP@
LIBEDIT=@PBX_LIBEDIT@
LIBXML2=@PBX_LIBXML2@
XMLSTARLET=@PBX_XMLSTARLET@
BASH=@PBX_BASH@
LTDL=@PBX_LTDL@
LUA=@PBX_LUA@
MISDN=@PBX_MISDN@

32
codecs/codecs.xml Normal file
View File

@@ -0,0 +1,32 @@
<member name="codec_opus" displayname="Download the Opus codec from Digium. See http://downloads.digium.com/pub/telephony/codec_opus/README.">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<depend>res_format_attr_opus</depend>
<defaultenabled>no</defaultenabled>
</member>
<member name="codec_silk" displayname="Download the SILK codec from Digium. See http://downloads.digium.com/pub/telephony/codec_silk/README.">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
</member>
<member name="codec_siren7" displayname="Download the Siren7 codec from Digium. See http://downloads.digium.com/pub/telephony/codec_siren7/README.">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
</member>
<member name="codec_siren14" displayname="Download the Siren14 codec from Digium. See http://downloads.digium.com/pub/telephony/codec_siren14/README.">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
</member>
<member name="codec_g729a" displayname="Download the g729a codec from Digium. A license must be purchased for this codec. See http://downloads.digium.com/pub/telephony/codec_g729/README.">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
<member_data><downloader directory_name="codec_g729"/></member_data>
</member>

86
configure vendored
View File

@@ -822,6 +822,7 @@ PBX_SPANDSP
SPANDSP_DIR
SPANDSP_INCLUDE
SPANDSP_LIB
EXTERNALS_CACHE_DIR
SOUNDS_CACHE_DIR
PBX_SDL_IMAGE
SDL_IMAGE_DIR
@@ -1198,6 +1199,8 @@ PTHREAD_CC
ax_pthread_config
MD5
SOXMIX
PBX_BASH
PBX_XMLSTARLET
PBX_FLEX
PBX_BISON
OPENSSL
@@ -1207,6 +1210,7 @@ DOWNLOAD
FETCH
ALEMBIC
GIT
BASH
XMLSTARLET
XMLLINT
KPATHSEA
@@ -1393,6 +1397,7 @@ with_resample
with_sdl
with_SDL_image
with_sounds_cache
with_externals_cache
with_spandsp
with_ss7
with_speex
@@ -2138,6 +2143,8 @@ Optional Packages:
--with-SDL_image=PATH use Sdl Image files in PATH
--with-sounds-cache=PATH
use cached sound tarfiles in PATH
--with-externals-cache=PATH
use cached external module tarfiles in PATH
--with-spandsp=PATH use SPANDSP files in PATH
--with-ss7=PATH use ISDN SS7 files in PATH
--with-speex=PATH use Speex files in PATH
@@ -7483,6 +7490,47 @@ $as_echo "no" >&6; }
fi
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_BASH+:} false; then :
$as_echo_n "(cached) " >&6
else
case $BASH in
[\\/]* | ?:[\\/]*)
ac_cv_path_BASH="$BASH" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_BASH" && ac_cv_path_BASH=":"
;;
esac
fi
BASH=$ac_cv_path_BASH
if test -n "$BASH"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5
$as_echo "$BASH" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
# Extract the first word of "git", so it can be a program name with args.
set dummy git; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -7790,6 +7838,20 @@ else
fi
if test "x${XMLSTARLET}" = "x:" ; then
PBX_XMLSTARLET=0
else
PBX_XMLSTARLET=1
fi
if test "x${BASH}" = "x:" ; then
PBX_BASH=0
else
PBX_BASH=1
fi
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}soxmix", so it can be a program name with args.
set dummy ${ac_tool_prefix}soxmix; ac_word=$2
@@ -11488,6 +11550,30 @@ fi
# Check whether --with-externals-cache was given.
if test "${with_externals_cache+set}" = set; then :
withval=$with_externals_cache;
case ${withval} in
n|no)
unset EXTERNALS_CACHE_DIR
;;
*)
if test "x${withval}" = "x"; then
:
else
EXTERNALS_CACHE_DIR="${withval}"
fi
;;
esac
else
:
fi
SPANDSP_DESCRIP="SPANDSP"
SPANDSP_OPTION="spandsp"
PBX_SPANDSP=0

View File

@@ -281,6 +281,7 @@ AC_PATH_PROG([CATDVI], [catdvi], :)
AC_PATH_PROG([KPATHSEA], [kpsewhich], :)
AC_PATH_PROG([XMLLINT], [xmllint], :)
AC_PATH_PROG([XMLSTARLET], [xmlstarlet], :)
AC_PATH_PROG([BASH], [bash], :)
AC_PATH_PROG([GIT], [git], :)
AC_PATH_PROG([ALEMBIC], [alembic], :)
if test "${WGET}" != ":" ; then
@@ -340,6 +341,20 @@ else
fi
AC_SUBST(PBX_FLEX)
if test "x${XMLSTARLET}" = "x:" ; then
PBX_XMLSTARLET=0
else
PBX_XMLSTARLET=1
fi
AC_SUBST(PBX_XMLSTARLET)
if test "x${BASH}" = "x:" ; then
PBX_BASH=0
else
PBX_BASH=1
fi
AC_SUBST(PBX_BASH)
AC_CHECK_TOOL([SOXMIX], [soxmix], [:])
if test "${SOXMIX}" != ":" ; then
AC_DEFINE([HAVE_SOXMIX], 1, [Define to 1 if your system has soxmix application.])
@@ -520,6 +535,7 @@ AST_EXT_LIB_SETUP([RESAMPLE], [LIBRESAMPLE], [resample])
AST_EXT_LIB_SETUP([SDL], [Sdl], [sdl])
AST_EXT_LIB_SETUP([SDL_IMAGE], [Sdl Image], [SDL_image])
AST_OPTION_ONLY([sounds-cache], [SOUNDS_CACHE_DIR], [cached sound tarfiles], [])
AST_OPTION_ONLY([externals-cache], [EXTERNALS_CACHE_DIR], [cached external module tarfiles], [])
AST_EXT_LIB_SETUP([SPANDSP], [SPANDSP], [spandsp])
AST_EXT_LIB_SETUP([SS7], [ISDN SS7], [ss7])
AST_EXT_LIB_SETUP([SPEEX], [Speex], [speex])

View File

@@ -18,24 +18,47 @@
/*!
* \file
* \brief Opus Format Attributes (http://tools.ietf.org/html/draft-ietf-payload-rtp-opus)
* \brief Codec opus externals and format attributes
*
* \author Lorenzo Miniero <lorenzo@meetecho.com>
* RFC - https://tools.ietf.org/rfc/rfc7587.txt
*/
#ifndef _AST_FORMAT_OPUS_H_
#define _AST_FORMAT_OPUS_H_
/*! Opus format attribute key value pairs, all are accessible through ast_format_get_value()*/
enum opus_attr_keys {
OPUS_ATTR_KEY_MAX_BITRATE, /*! value is an int (6000-510000 in spec). */
OPUS_ATTR_KEY_MAX_PLAYRATE, /*! value is an int (8000-48000), maximum output rate the receiver can render. */
OPUS_ATTR_KEY_MINPTIME, /*! value is an int (3-120 in spec, 10-60 in format.c), decoder's minimum length of time in milliseconds. */
OPUS_ATTR_KEY_STEREO, /*! value is an int, 1 prefer receiving stereo, 0 prefer mono. */
OPUS_ATTR_KEY_CBR, /*! value is an int, 1 use constant bitrate, 0 use variable bitrate. */
OPUS_ATTR_KEY_FEC, /*! value is an int, 1 encode with FEC, 0 do not use FEC. */
OPUS_ATTR_KEY_DTX, /*! value is an int, 1 dtx is enabled, 0 dtx not enabled. */
OPUS_ATTR_KEY_SPROP_CAPTURE_RATE, /*! value is an int (8000-48000), likely input rate we're going to produce. */
OPUS_ATTR_KEY_SPROP_STEREO, /*! value is an int, 1 likely to send stereo, 0 likely to send mono. */
};
/*! \brief Maximum sampling rate an endpoint is capable of receiving */
#define CODEC_OPUS_ATTR_MAX_PLAYBACK_RATE "maxplaybackrate"
/*! \brief An alias for maxplaybackrate (used in older versions) */
#define CODEC_OPUS_ATTR_MAX_CODED_AUDIO_BANDWIDTH "maxcodedaudiobandwidth"
/*! \brief Maximum sampling rate an endpoint is capable of sending */
#define CODEC_OPUS_ATTR_SPROP_MAX_CAPTURE_RATE "sprop-maxcapturerate"
/*! \brief Maximum duration of packet (in milliseconds) */
#define CODEC_OPUS_ATTR_MAX_PTIME "maxptime"
/*! \brief Duration of packet (in milliseconds) */
#define CODEC_OPUS_ATTR_PTIME "ptime"
/*! \brief Maximum average received bit rate (in bits per second) */
#define CODEC_OPUS_ATTR_MAX_AVERAGE_BITRATE "maxaveragebitrate"
/*! \brief Decode stereo (1) vs mono (0) */
#define CODEC_OPUS_ATTR_STEREO "stereo"
/*! \brief Likeliness of sender producing stereo (1) vs mono (0) */
#define CODEC_OPUS_ATTR_SPROP_STEREO "sprop-stereo"
/*! \brief Decoder prefers a constant (1) vs variable (0) bitrate */
#define CODEC_OPUS_ATTR_CBR "cbr"
/*! \brief Use forward error correction (1) or not (0) */
#define CODEC_OPUS_ATTR_FEC "useinbandfec"
/*! \brief Use discontinuous transmission (1) or not (0) */
#define CODEC_OPUS_ATTR_DTX "usedtx"
/*! \brief Custom data object */
#define CODEC_OPUS_ATTR_DATA "data"
/*! \brief Default attribute values */
#define CODEC_OPUS_DEFAULT_SAMPLE_RATE 48000
#define CODEC_OPUS_DEFAULT_MAX_PLAYBACK_RATE 48000
#define CODEC_OPUS_DEFAULT_MAX_PTIME 120
#define CODEC_OPUS_DEFAULT_PTIME 20
#define CODEC_OPUS_DEFAULT_BITRATE -1000 /* OPUS_AUTO */
#define CODEC_OPUS_DEFAULT_CBR 0
#define CODEC_OPUS_DEFAULT_FEC 0
#define CODEC_OPUS_DEFAULT_DTX 0
#define CODEC_OPUS_DEFAULT_STEREO 0
#endif /* _AST_FORMAT_OPUS_H */

View File

@@ -1572,7 +1572,7 @@ static void logger_print_normal(struct logmsg *logmsg)
break;
}
}
} else if (logmsg->level != __LOG_VERBOSE) {
} else if (logmsg->level != __LOG_VERBOSE || option_verbose >= logmsg->sublevel) {
fputs(logmsg->message, stdout);
}

View File

@@ -28,11 +28,13 @@ WGET=@WGET@
FETCH=@FETCH@
DOWNLOAD=@DOWNLOAD@
SOUNDS_CACHE_DIR=@SOUNDS_CACHE_DIR@
EXTERNALS_CACHE_DIR=@EXTERNALS_CACHE_DIR@
RUBBER=@RUBBER@
CATDVI=@CATDVI@
KPATHSEA=@KPATHSEA@
XMLLINT=@XMLLINT@
XMLSTARLET=@XMLSTARLET@
BASH=@BASH@
MD5=@MD5@
SHA1SUM=@SHA1SUM@
OPENSSL=@OPENSSL@

13
res/res.xml Normal file
View File

@@ -0,0 +1,13 @@
<member name="res_digium_phone" displayname="Download the Digium Phone Module for Asterisk. See http://downloads.digium.com/pub/telephony/res_digium_phone/README.">
<support_level>external</support_level>
<depend>xmlstarlet</depend>
<depend>bash</depend>
<defaultenabled>no</defaultenabled>
<member_data>
<downloader>
<variants>
<variant tag="bundled" condition='[[ "$PJPROJECT_BUNDLED" = "yes" ]]'/>
</variants>
</downloader>
</member_data>
</member>

View File

@@ -33,9 +33,10 @@ ASTERISK_REGISTER_FILE()
#include "asterisk/module.h"
#include "asterisk/format.h"
#include "asterisk/logger.h" /* for ast_log, LOG_WARNING */
#include "asterisk/strings.h" /* for ast_str_append */
#include "asterisk/utils.h" /* for MIN, ast_malloc, ast_free */
#include "asterisk/logger.h"
#include "asterisk/strings.h"
#include "asterisk/utils.h"
#include "asterisk/opus.h"
/*!
* \brief Opus attribute structure.
@@ -43,32 +44,42 @@ ASTERISK_REGISTER_FILE()
* \note http://tools.ietf.org/html/rfc7587#section-6
*/
struct opus_attr {
unsigned int maxbitrate;
unsigned int maxplayrate;
unsigned int unused; /* was minptime, kept for binary compatibility */
unsigned int stereo;
unsigned int cbr;
unsigned int fec;
unsigned int dtx;
unsigned int spropmaxcapturerate;
unsigned int spropstereo;
int maxbitrate;
int maxplayrate;
int ptime;
int stereo;
int cbr;
int fec;
int dtx;
int spropmaxcapturerate;
int spropstereo;
int maxptime;
/* Note data is expected to be an ao2_object type */
void *data;
};
static struct opus_attr default_opus_attr = {
.maxplayrate = 48000,
.spropmaxcapturerate = 48000,
.maxbitrate = 510000,
.stereo = 0,
.spropstereo = 0,
.cbr = 0,
.fec = 1,
.dtx = 0,
.maxbitrate = CODEC_OPUS_DEFAULT_BITRATE,
.maxplayrate = CODEC_OPUS_DEFAULT_SAMPLE_RATE,
.ptime = CODEC_OPUS_DEFAULT_PTIME,
.stereo = CODEC_OPUS_DEFAULT_STEREO,
.cbr = CODEC_OPUS_DEFAULT_CBR,
.fec = CODEC_OPUS_DEFAULT_FEC,
.dtx = CODEC_OPUS_DEFAULT_DTX,
.spropmaxcapturerate = CODEC_OPUS_DEFAULT_SAMPLE_RATE,
.spropstereo = CODEC_OPUS_DEFAULT_STEREO,
.maxptime = CODEC_OPUS_DEFAULT_MAX_PTIME
};
static void opus_destroy(struct ast_format *format)
{
struct opus_attr *attr = ast_format_get_attribute_data(format);
if (!attr) {
return;
}
ao2_cleanup(attr->data);
ast_free(attr);
}
@@ -81,81 +92,65 @@ static int opus_clone(const struct ast_format *src, struct ast_format *dst)
return -1;
}
if (original) {
*attr = *original;
} else {
*attr = default_opus_attr;
}
*attr = original ? *original : default_opus_attr;
ao2_bump(attr->data);
ast_format_set_attribute_data(dst, attr);
return 0;
}
static void sdp_fmtp_get(const char *attributes, const char *name, int *attr)
{
const char *kvp = "";
int val;
if (attributes && !(kvp = strstr(attributes, name))) {
return;
}
/*
* If the named attribute is not at the start of the given attributes, and
* the preceding character is not a space or semicolon then it's not the
* attribute we are looking for. It's an attribute with the name embedded
* within it (e.g. ptime in maxptime, stereo in sprop-stereo).
*/
if (kvp != attributes && *(kvp - 1) != ' ' && *(kvp - 1) != ';') {
/* Keep searching as it might still be in the attributes string */
sdp_fmtp_get(strchr(kvp, ';'), name, attr);
/*
* Otherwise it's a match, so retrieve the value and set the attribute.
*/
} else if (sscanf(kvp, "%*[^=]=%30d", &val) == 1) {
*attr = val;
}
}
static struct ast_format *opus_parse_sdp_fmtp(const struct ast_format *format, const char *attributes)
{
struct ast_format *cloned;
struct opus_attr *attr;
const char *kvp;
unsigned int val;
cloned = ast_format_clone(format);
if (!cloned) {
return NULL;
}
attr = ast_format_get_attribute_data(cloned);
if ((kvp = strstr(attributes, "maxplaybackrate")) && sscanf(kvp, "maxplaybackrate=%30u", &val) == 1) {
attr->maxplayrate = val;
} else {
attr->maxplayrate = 48000;
}
if ((kvp = strstr(attributes, "sprop-maxcapturerate")) && sscanf(kvp, "sprop-maxcapturerate=%30u", &val) == 1) {
attr->spropmaxcapturerate = val;
} else {
attr->spropmaxcapturerate = 48000;
}
if ((kvp = strstr(attributes, "maxaveragebitrate")) && sscanf(kvp, "maxaveragebitrate=%30u", &val) == 1) {
attr->maxbitrate = val;
} else {
attr->maxbitrate = 510000;
}
if (!strncmp(attributes, "stereo=1", 8)) {
attr->stereo = 1;
} else if (strstr(attributes, " stereo=1")) {
attr->stereo = 1;
} else if (strstr(attributes, ";stereo=1")) {
attr->stereo = 1;
} else {
attr->stereo = 0;
}
if (strstr(attributes, "sprop-stereo=1")) {
attr->spropstereo = 1;
} else {
attr->spropstereo = 0;
}
if (strstr(attributes, "cbr=1")) {
attr->cbr = 1;
} else {
attr->cbr = 0;
}
if (strstr(attributes, "useinbandfec=1")) {
attr->fec = 1;
} else {
attr->fec = 0;
}
if (strstr(attributes, "usedtx=1")) {
attr->dtx = 1;
} else {
attr->dtx = 0;
}
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_MAX_PLAYBACK_RATE, &attr->maxplayrate);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_MAX_CODED_AUDIO_BANDWIDTH,
&attr->maxplayrate);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_SPROP_MAX_CAPTURE_RATE,
&attr->spropmaxcapturerate);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_MAX_PTIME, &attr->maxptime);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_PTIME, &attr->ptime);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_MAX_AVERAGE_BITRATE, &attr->maxbitrate);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_STEREO, &attr->stereo);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_SPROP_STEREO, &attr->spropstereo);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_CBR, &attr->cbr);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_FEC, &attr->fec);
sdp_fmtp_get(attributes, CODEC_OPUS_ATTR_DTX, &attr->dtx);
return cloned;
}
@@ -163,7 +158,7 @@ static struct ast_format *opus_parse_sdp_fmtp(const struct ast_format *format, c
static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int payload, struct ast_str **str)
{
struct opus_attr *attr = ast_format_get_attribute_data(format);
int added = 0;
int size;
if (!attr) {
/*
@@ -174,79 +169,52 @@ static void opus_generate_sdp_fmtp(const struct ast_format *format, unsigned int
attr = &default_opus_attr;
}
if (48000 != attr->maxplayrate) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "maxplaybackrate=%u", attr->maxplayrate);
size = ast_str_append(str, 0, "a=fmtp:%u ", payload);
if (CODEC_OPUS_DEFAULT_SAMPLE_RATE != attr->maxplayrate) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_MAX_PLAYBACK_RATE, attr->maxplayrate);
}
if (48000 != attr->spropmaxcapturerate) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "sprop-maxcapturerate=%u", attr->spropmaxcapturerate);
if (CODEC_OPUS_DEFAULT_SAMPLE_RATE != attr->spropmaxcapturerate) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_SPROP_MAX_CAPTURE_RATE, attr->spropmaxcapturerate);
}
if (510000 != attr->maxbitrate) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "maxaveragebitrate=%u", attr->maxbitrate);
if (CODEC_OPUS_DEFAULT_BITRATE != attr->maxbitrate || attr->maxbitrate > 0) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_MAX_AVERAGE_BITRATE, attr->maxbitrate);
}
if (0 != attr->stereo) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "stereo=%u", attr->stereo);
if (CODEC_OPUS_DEFAULT_STEREO != attr->stereo) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_STEREO, attr->stereo);
}
if (0 != attr->spropstereo) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "sprop-stereo=%u", attr->spropstereo);
if (CODEC_OPUS_DEFAULT_STEREO != attr->spropstereo) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_SPROP_STEREO, attr->spropstereo);
}
if (0 != attr->cbr) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "cbr=%u", attr->cbr);
if (CODEC_OPUS_DEFAULT_CBR != attr->cbr) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_CBR, attr->cbr);
}
if (0 != attr->fec) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "useinbandfec=%u", attr->fec);
if (CODEC_OPUS_DEFAULT_FEC!= attr->fec) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_FEC, attr->fec);
}
if (0 != attr->dtx) {
if (added) {
ast_str_append(str, 0, ";");
} else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
added = 1;
}
ast_str_append(str, 0, "usedtx=%u", attr->dtx);
if (CODEC_OPUS_DEFAULT_DTX != attr->dtx) {
ast_str_append(str, 0, "%s=%d;",
CODEC_OPUS_ATTR_DTX, attr->dtx);
}
if (added) {
if (size == ast_str_strlen(*str)) {
ast_str_reset(*str);
} else {
ast_str_truncate(*str, -1);
ast_str_append(str, 0, "\r\n");
}
}
@@ -285,49 +253,68 @@ static struct ast_format *opus_getjoint(const struct ast_format *format1, const
* to receive stereo signals, it may be a waste of bandwidth. */
attr_res->stereo = attr1->stereo && attr2->stereo ? 1 : 0;
attr_res->maxbitrate = MIN(attr1->maxbitrate, attr2->maxbitrate);
if (attr1->maxbitrate < 0) {
attr_res->maxbitrate = attr2->maxbitrate;
} else if (attr2->maxbitrate < 0) {
attr_res->maxbitrate = attr1->maxbitrate;
} else {
attr_res->maxbitrate = MIN(attr1->maxbitrate, attr2->maxbitrate);
}
attr_res->spropmaxcapturerate = MIN(attr1->spropmaxcapturerate, attr2->spropmaxcapturerate);
attr_res->maxplayrate = MIN(attr1->maxplayrate, attr2->maxplayrate);
return jointformat;
}
static struct ast_format *opus_set(const struct ast_format *format, const char *name, const char *value)
static struct ast_format *opus_set(const struct ast_format *format,
const char *name, const char *value)
{
struct ast_format *cloned;
struct opus_attr *attr;
unsigned int val;
int val;
if (sscanf(value, "%30u", &val) != 1) {
ast_log(LOG_WARNING, "Unknown value '%s' for attribute type '%s'\n",
value, name);
if (!(cloned = ast_format_clone(format))) {
return NULL;
}
cloned = ast_format_clone(format);
if (!cloned) {
return NULL;
}
attr = ast_format_get_attribute_data(cloned);
if (!strcasecmp(name, "max_bitrate")) {
attr->maxbitrate = val;
} else if (!strcasecmp(name, "max_playrate")) {
if (!strcmp(name, CODEC_OPUS_ATTR_DATA)) {
ao2_cleanup(attr->data);
attr->data = ao2_bump((void*)value);
return cloned;
}
if (sscanf(value, "%30d", &val) != 1) {
ast_log(LOG_WARNING, "Unknown value '%s' for attribute type '%s'\n",
value, name);
ao2_ref(cloned, -1);
return NULL;
}
if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_PLAYBACK_RATE)) {
attr->maxplayrate = val;
} else if (!strcasecmp(name, "minptime")) {
attr->unused = val;
} else if (!strcasecmp(name, "stereo")) {
attr->stereo = val;
} else if (!strcasecmp(name, "cbr")) {
attr->cbr = val;
} else if (!strcasecmp(name, "fec")) {
attr->fec = val;
} else if (!strcasecmp(name, "dtx")) {
attr->dtx = val;
} else if (!strcasecmp(name, "sprop_capture_rate")) {
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_CODED_AUDIO_BANDWIDTH)) {
attr->maxplayrate = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_SPROP_MAX_CAPTURE_RATE)) {
attr->spropmaxcapturerate = val;
} else if (!strcasecmp(name, "sprop_stereo")) {
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_PTIME)) {
attr->maxptime = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_PTIME)) {
attr->ptime = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_AVERAGE_BITRATE)) {
attr->maxbitrate = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_STEREO)) {
attr->stereo = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_SPROP_STEREO)) {
attr->spropstereo = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_CBR)) {
attr->cbr = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_FEC)) {
attr->fec = val;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_DTX)) {
attr->dtx = val;
} else {
ast_log(LOG_WARNING, "unknown attribute type %s\n", name);
}
@@ -335,6 +322,44 @@ static struct ast_format *opus_set(const struct ast_format *format, const char *
return cloned;
}
static const void *opus_get(const struct ast_format *format, const char *name)
{
struct opus_attr *attr = ast_format_get_attribute_data(format);
int *val = NULL;
if (!attr) {
return NULL;
}
if (!strcasecmp(name, CODEC_OPUS_ATTR_DATA)) {
return ao2_bump(attr->data);
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_PLAYBACK_RATE)) {
val = &attr->maxplayrate;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_SPROP_MAX_CAPTURE_RATE)) {
val = &attr->spropmaxcapturerate;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_PTIME)) {
val = &attr->maxptime;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_PTIME)) {
val = &attr->ptime;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_MAX_AVERAGE_BITRATE)) {
val = &attr->maxbitrate;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_STEREO)) {
val = &attr->stereo;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_SPROP_STEREO)) {
val = &attr->spropstereo;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_CBR)) {
val = &attr->cbr;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_FEC)) {
val = &attr->fec;
} else if (!strcasecmp(name, CODEC_OPUS_ATTR_DTX)) {
val = &attr->dtx;
} else {
ast_log(LOG_WARNING, "unknown attribute type %s\n", name);
}
return val;
}
static struct ast_format_interface opus_interface = {
.format_destroy = opus_destroy,
.format_clone = opus_clone,
@@ -342,11 +367,12 @@ static struct ast_format_interface opus_interface = {
.format_attribute_set = opus_set,
.format_parse_sdp_fmtp = opus_parse_sdp_fmtp,
.format_generate_sdp_fmtp = opus_generate_sdp_fmtp,
.format_attribute_get = opus_get
};
static int load_module(void)
{
if (ast_format_interface_register("opus", &opus_interface)) {
if (__ast_format_interface_register("opus", &opus_interface, ast_module_info->self)) {
return AST_MODULE_LOAD_DECLINE;
}
@@ -358,9 +384,9 @@ static int unload_module(void)
return 0;
}
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Opus Format Attribute Module",
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Opus Format Attribute Module",
.support_level = AST_MODULE_SUPPORT_CORE,
.load = load_module,
.unload = unload_module,
.load_pri = AST_MODPRI_CHANNEL_DEPEND,
.load_pri = AST_MODPRI_REALTIME_DRIVER /* Needs to load before codec_opus */
);