Merge branch 'master' of 192.168.0.100:/repos/git/asterisk
This commit is contained in:
commit
2b9be10b17
2
BUGS
2
BUGS
|
@ -4,7 +4,7 @@ Asterisk Bug Tracking Information
|
||||||
To learn about and report Asterisk bugs, please visit
|
To learn about and report Asterisk bugs, please visit
|
||||||
the official Asterisk Bug Tracker at:
|
the official Asterisk Bug Tracker at:
|
||||||
|
|
||||||
https://issues.asterisk.org
|
https://issues.asterisk.org/jira
|
||||||
|
|
||||||
For more information on using the bug tracker, or to
|
For more information on using the bug tracker, or to
|
||||||
learn how you can contribute by acting as a bug marshal
|
learn how you can contribute by acting as a bug marshal
|
||||||
|
|
27
CHANGES
27
CHANGES
|
@ -9,7 +9,7 @@
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
--- Functionality changes from Asterisk 1.8 to Asterisk 1.10 -----------------
|
--- Functionality changes from Asterisk 1.8 to Asterisk 10 -------------------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
Text Messaging
|
Text Messaging
|
||||||
|
@ -75,6 +75,11 @@ CODECS
|
||||||
--------------------------
|
--------------------------
|
||||||
* Ability to define custom SILK formats in codecs.conf.
|
* Ability to define custom SILK formats in codecs.conf.
|
||||||
* Addition of speex32 audio format with translation.
|
* Addition of speex32 audio format with translation.
|
||||||
|
* CELT codec pass-through support and ability to define
|
||||||
|
custom CELT formats in codecs.conf.
|
||||||
|
* Ability to read raw signed linear files with sample rates
|
||||||
|
ranging from 8khz - 192khz. The new file extensions introduced
|
||||||
|
are .sln12, .sln24, .sln32, .sln44, .sln48, .sln96, .sln192.
|
||||||
|
|
||||||
ConfBridge
|
ConfBridge
|
||||||
--------------------------
|
--------------------------
|
||||||
|
@ -82,11 +87,14 @@ ConfBridge
|
||||||
mixing audio at sample rates ranging from 8khz-96khz.
|
mixing audio at sample rates ranging from 8khz-96khz.
|
||||||
* CONFBRIDGE dialplan function capable of creating dynamic ConfBridge user
|
* CONFBRIDGE dialplan function capable of creating dynamic ConfBridge user
|
||||||
and bridge profiles on a channel.
|
and bridge profiles on a channel.
|
||||||
* CONFBRIDGE_INFO dialplan function capable of retreiving information
|
* CONFBRIDGE_INFO dialplan function capable of retrieving information
|
||||||
about a conference such as locked status and number of parties, admins,
|
about a conference such as locked status and number of parties, admins,
|
||||||
and marked users.
|
and marked users.
|
||||||
* Addition of video_mode option in confbridge.conf for adding video support
|
* Addition of video_mode option in confbridge.conf for adding video support
|
||||||
into a bridge profile.
|
into a bridge profile.
|
||||||
|
* Addition of the follow_talker video_mode in confbridge.conf. This video
|
||||||
|
mode dynamically switches the video feed to always display the loudest talker
|
||||||
|
supplying video in the conference.
|
||||||
|
|
||||||
Dialplan Variables
|
Dialplan Variables
|
||||||
------------------
|
------------------
|
||||||
|
@ -148,7 +156,7 @@ pbx_lua
|
||||||
in the sample extensions.lua file for syntax details.
|
in the sample extensions.lua file for syntax details.
|
||||||
* Applications that perform jumps in the dialplan such as Goto will now
|
* Applications that perform jumps in the dialplan such as Goto will now
|
||||||
execute properly. When pbx_lua detects that the context, extension, or
|
execute properly. When pbx_lua detects that the context, extension, or
|
||||||
priority we are executing on has changed it will immediatly return control
|
priority we are executing on has changed it will immediately return control
|
||||||
to the asterisk PBX engine. Currently the engine cannot detect a Goto to
|
to the asterisk PBX engine. Currently the engine cannot detect a Goto to
|
||||||
the priority after the currently executing priority.
|
the priority after the currently executing priority.
|
||||||
* An autoservice is now started by default for pbx_lua channels. It can be
|
* An autoservice is now started by default for pbx_lua channels. It can be
|
||||||
|
@ -188,6 +196,19 @@ Applications
|
||||||
* Added ability to include '@parkinglot' to ParkedCall extension in order to specify
|
* Added ability to include '@parkinglot' to ParkedCall extension in order to specify
|
||||||
a specific parkinglot on which to search the extension.
|
a specific parkinglot on which to search the extension.
|
||||||
|
|
||||||
|
Asterisk Database
|
||||||
|
-----------------
|
||||||
|
* The internal Asterisk database has been switched from Berkeley DB 1.86 to
|
||||||
|
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
|
||||||
|
utility in the UTILS section of menuselect. If an existing astdb is found and no
|
||||||
|
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
|
||||||
|
convert an existing astdb to the SQLite3 version automatically at runtime.
|
||||||
|
|
||||||
|
Asterisk Modules
|
||||||
|
----------------
|
||||||
|
* Modules marked as deprecated are no longer marked as building by default. Enabling
|
||||||
|
these modules is still available via menuselect.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
--- Functionality changes from Asterisk 1.6.2 to Asterisk 1.8 ----------------
|
--- Functionality changes from Asterisk 1.6.2 to Asterisk 1.8 ----------------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
53
Makefile
53
Makefile
|
@ -467,9 +467,9 @@ datafiles: _all doc/core-en_US.xml
|
||||||
# improved a lot. I'll put it here for now.
|
# improved a lot. I'll put it here for now.
|
||||||
|
|
||||||
for x in static-http/*; do \
|
for x in static-http/*; do \
|
||||||
$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/static-http" ; \
|
$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/static-http ; \
|
||||||
done
|
done
|
||||||
$(INSTALL) -m 644 doc/core-en_US.xml "$(DESTDIR)$(ASTDATADIR)/static-http";
|
$(INSTALL) -m 644 doc/core-en_US.xml $(DESTDIR)$(ASTDATADIR)/static-http;
|
||||||
if [ -d doc/tex/asterisk ] ; then \
|
if [ -d doc/tex/asterisk ] ; then \
|
||||||
$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
|
$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
|
||||||
for n in doc/tex/asterisk/* ; do \
|
for n in doc/tex/asterisk/* ; do \
|
||||||
|
@ -477,7 +477,7 @@ datafiles: _all doc/core-en_US.xml
|
||||||
done \
|
done \
|
||||||
fi
|
fi
|
||||||
for x in images/*.jpg; do \
|
for x in images/*.jpg; do \
|
||||||
$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/images" ; \
|
$(INSTALL) -m 644 $$x $(DESTDIR)$(ASTDATADIR)/images ; \
|
||||||
done
|
done
|
||||||
$(MAKE) -C sounds install
|
$(MAKE) -C sounds install
|
||||||
|
|
||||||
|
@ -576,21 +576,21 @@ bininstall: _all installdirs $(SUBDIRS_INSTALL)
|
||||||
rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
|
rm -f $(addprefix $(DESTDIR)$(ASTHEADERDIR)/,$(OLDHEADERS)) ;\
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$(INSTALL) -m 644 doc/core-*.xml "$(DESTDIR)$(ASTDATADIR)/documentation"
|
$(INSTALL) -m 644 doc/core-*.xml $(DESTDIR)$(ASTDATADIR)/documentation
|
||||||
$(INSTALL) -m 644 doc/appdocsxml.dtd "$(DESTDIR)$(ASTDATADIR)/documentation"
|
$(INSTALL) -m 644 doc/appdocsxml.dtd $(DESTDIR)$(ASTDATADIR)/documentation
|
||||||
$(INSTALL) -m 644 doc/asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
$(INSTALL) -m 644 doc/asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
|
||||||
$(INSTALL) -m 644 contrib/scripts/astgenkey.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
$(INSTALL) -m 644 contrib/scripts/astgenkey.8 $(DESTDIR)$(ASTMANDIR)/man8
|
||||||
$(INSTALL) -m 644 contrib/scripts/autosupport.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
$(INSTALL) -m 644 contrib/scripts/autosupport.8 $(DESTDIR)$(ASTMANDIR)/man8
|
||||||
$(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
|
$(INSTALL) -m 644 contrib/scripts/safe_asterisk.8 $(DESTDIR)$(ASTMANDIR)/man8
|
||||||
if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
|
if [ -f contrib/firmware/iax/iaxy.bin ] ; then \
|
||||||
$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin "$(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin"; \
|
$(INSTALL) -m 644 contrib/firmware/iax/iaxy.bin $(DESTDIR)$(ASTDATADIR)/firmware/iax/iaxy.bin; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$(SUBDIRS_INSTALL):
|
$(SUBDIRS_INSTALL):
|
||||||
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install
|
+@DESTDIR="$(DESTDIR)" ASTSBINDIR="$(ASTSBINDIR)" $(SUBMAKE) -C $(@:-install=) install
|
||||||
|
|
||||||
NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
|
NEWMODS:=$(foreach d,$(MOD_SUBDIRS),$(notdir $(wildcard $(d)/*.so)))
|
||||||
OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard "$(DESTDIR)$(MODULES_DIR)/*.so")))
|
OLDMODS=$(filter-out $(NEWMODS),$(notdir $(wildcard $(DESTDIR)$(MODULES_DIR)/*.so)))
|
||||||
|
|
||||||
oldmodcheck:
|
oldmodcheck:
|
||||||
@if [ -n "$(OLDMODS)" ]; then \
|
@if [ -n "$(OLDMODS)" ]; then \
|
||||||
|
@ -698,33 +698,33 @@ samples: adsi
|
||||||
rm -f $(DESTDIR)$(ASTCONFPATH).tmp ; \
|
rm -f $(DESTDIR)$(ASTCONFPATH).tmp ; \
|
||||||
fi ; \
|
fi ; \
|
||||||
$(INSTALL) -d $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
|
$(INSTALL) -d $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
|
||||||
build_tools/make_sample_voicemail "$(DESTDIR)$(ASTDATADIR)" "$(DESTDIR)$(ASTSPOOLDIR)"
|
build_tools/make_sample_voicemail $(DESTDIR)/$(ASTDATADIR) $(DESTDIR)/$(ASTSPOOLDIR)
|
||||||
|
|
||||||
@for x in phoneprov/*; do \
|
@for x in phoneprov/*; do \
|
||||||
dst="$(DESTDIR)$(ASTDATADIR)/$$x" ; \
|
dst="$(DESTDIR)$(ASTDATADIR)/$$x" ; \
|
||||||
if [ -f "$${dst}" ]; then \
|
if [ -f $${dst} ]; then \
|
||||||
if [ "$(OVERWRITE)" = "y" ]; then \
|
if [ "$(OVERWRITE)" = "y" ]; then \
|
||||||
if cmp -s "$${dst}" $$x ; then \
|
if cmp -s $${dst} $$x ; then \
|
||||||
echo "Config file $$x is unchanged"; \
|
echo "Config file $$x is unchanged"; \
|
||||||
continue; \
|
continue; \
|
||||||
fi ; \
|
fi ; \
|
||||||
mv -f "$${dst}" "$${dst}.old" ; \
|
mv -f $${dst} $${dst}.old ; \
|
||||||
else \
|
else \
|
||||||
echo "Skipping config file $$x"; \
|
echo "Skipping config file $$x"; \
|
||||||
continue; \
|
continue; \
|
||||||
fi ;\
|
fi ;\
|
||||||
fi ; \
|
fi ; \
|
||||||
echo "Installing file $$x"; \
|
echo "Installing file $$x"; \
|
||||||
$(INSTALL) -m 644 $$x "$${dst}" ;\
|
$(INSTALL) -m 644 $$x $${dst} ;\
|
||||||
done
|
done
|
||||||
|
|
||||||
webvmail:
|
webvmail:
|
||||||
@[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
|
@[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
|
||||||
@[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
|
@[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
|
||||||
$(INSTALL) -m 4755 contrib/scripts/vmail.cgi "$(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi"
|
$(INSTALL) -m 4755 contrib/scripts/vmail.cgi $(DESTDIR)$(HTTP_CGIDIR)/vmail.cgi
|
||||||
$(INSTALL) -d $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
|
$(INSTALL) -d $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
|
||||||
for x in images/*.gif; do \
|
for x in images/*.gif; do \
|
||||||
$(INSTALL) -m 644 $$x "$(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/"; \
|
$(INSTALL) -m 644 $$x $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/; \
|
||||||
done
|
done
|
||||||
@echo " +--------- Asterisk Web Voicemail ----------+"
|
@echo " +--------- Asterisk Web Voicemail ----------+"
|
||||||
@echo " + +"
|
@echo " + +"
|
||||||
|
@ -838,17 +838,18 @@ sounds:
|
||||||
|
|
||||||
cleantest:
|
cleantest:
|
||||||
@cmp -s .cleancount .lastclean || $(MAKE) clean
|
@cmp -s .cleancount .lastclean || $(MAKE) clean
|
||||||
|
@[ -f "$(DESTDIR)$(ASTDBDIR)/astdb.sqlite3" ] || [ ! -f "$(DESTDIR)$(ASTDBDIR)/astdb" ] || [ ! -f menuselect.makeopts ] || grep -q MENUSELECT_UTILS=.*astdb2sqlite3 menuselect.makeopts || (sed -i.orig -e's/MENUSELECT_UTILS=\(.*\)/MENUSELECT_UTILS=\1 astdb2sqlite3/' menuselect.makeopts && echo "Updating menuselect.makeopts to include astdb2sqlite3" && echo "Original version backed up to menuselect.makeopts.orig")
|
||||||
|
|
||||||
$(SUBDIRS_UNINSTALL):
|
$(SUBDIRS_UNINSTALL):
|
||||||
+@$(SUBMAKE) -C $(@:-uninstall=) uninstall
|
+@$(SUBMAKE) -C $(@:-uninstall=) uninstall
|
||||||
|
|
||||||
_uninstall: $(SUBDIRS_UNINSTALL)
|
_uninstall: $(SUBDIRS_UNINSTALL)
|
||||||
rm -f "$(DESTDIR)$(MODULES_DIR)/*"
|
rm -f $(DESTDIR)$(MODULES_DIR)/*
|
||||||
rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
|
rm -f $(DESTDIR)$(ASTSBINDIR)/*asterisk*
|
||||||
rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
|
rm -f $(DESTDIR)$(ASTSBINDIR)/astgenkey
|
||||||
rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
|
rm -f $(DESTDIR)$(ASTSBINDIR)/autosupport
|
||||||
rm -rf $(DESTDIR)$(ASTHEADERDIR)
|
rm -rf $(DESTDIR)$(ASTHEADERDIR)
|
||||||
rm -rf "$(DESTDIR)$(ASTDATADIR)/firmware"
|
rm -rf $(DESTDIR)$(ASTDATADIR)/firmware
|
||||||
rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
|
rm -f $(DESTDIR)$(ASTMANDIR)/man8/asterisk.8
|
||||||
rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
|
rm -f $(DESTDIR)$(ASTMANDIR)/man8/astgenkey.8
|
||||||
rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
|
rm -f $(DESTDIR)$(ASTMANDIR)/man8/autosupport.8
|
||||||
|
@ -870,12 +871,12 @@ uninstall: _uninstall
|
||||||
@echo " +-------------------------------------------+"
|
@echo " +-------------------------------------------+"
|
||||||
|
|
||||||
uninstall-all: _uninstall
|
uninstall-all: _uninstall
|
||||||
rm -rf "$(DESTDIR)$(ASTLIBDIR)"
|
rm -rf $(DESTDIR)$(ASTLIBDIR)
|
||||||
rm -rf "$(DESTDIR)$(ASTVARLIBDIR)"
|
rm -rf $(DESTDIR)$(ASTVARLIBDIR)
|
||||||
rm -rf "$(DESTDIR)$(ASTDATADIR)"
|
rm -rf $(DESTDIR)$(ASTDATADIR)
|
||||||
rm -rf "$(DESTDIR)$(ASTSPOOLDIR)"
|
rm -rf $(DESTDIR)$(ASTSPOOLDIR)
|
||||||
rm -rf "$(DESTDIR)$(ASTETCDIR)"
|
rm -rf $(DESTDIR)$(ASTETCDIR)
|
||||||
rm -rf "$(DESTDIR)$(ASTLOGDIR)"
|
rm -rf $(DESTDIR)$(ASTLOGDIR)
|
||||||
|
|
||||||
menuconfig: menuselect
|
menuconfig: menuselect
|
||||||
|
|
||||||
|
|
|
@ -122,7 +122,7 @@ clean::
|
||||||
|
|
||||||
install:: all
|
install:: all
|
||||||
@echo "Installing modules from `basename $(CURDIR)`..."
|
@echo "Installing modules from `basename $(CURDIR)`..."
|
||||||
@for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x "$(DESTDIR)$(MODULES_DIR)" ; done
|
@for x in $(LOADABLE_MODS:%=%.so); do $(INSTALL) -m 755 $$x $(DESTDIR)$(MODULES_DIR) ; done
|
||||||
|
|
||||||
uninstall::
|
uninstall::
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
From 1.6.2 to 1.8:
|
From 1.6.2 to 1.8:
|
||||||
|
|
||||||
|
* Asterisk now requires libpri 1.4.11+ for PRI support.
|
||||||
|
|
||||||
* A couple of CLI commands in res_ais were changed back to their original form:
|
* A couple of CLI commands in res_ais were changed back to their original form:
|
||||||
"ais show clm members" --> "ais clm show members"
|
"ais show clm members" --> "ais clm show members"
|
||||||
"ais show evt event channels" --> "ais evt show event channels"
|
"ais show evt event channels" --> "ais evt show event channels"
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
===========================================================
|
||||||
|
===
|
||||||
|
=== Information for upgrading between Asterisk versions
|
||||||
|
===
|
||||||
|
=== These files document all the changes that MUST be taken
|
||||||
|
=== into account when upgrading between the Asterisk
|
||||||
|
=== versions listed below. These changes may require that
|
||||||
|
=== you modify your configuration files, dialplan or (in
|
||||||
|
=== some cases) source code if you have your own Asterisk
|
||||||
|
=== modules or patches. These files also include advance
|
||||||
|
=== notice of any functionality that has been marked as
|
||||||
|
=== 'deprecated' and may be removed in a future release,
|
||||||
|
=== along with the suggested replacement functionality.
|
||||||
|
===
|
||||||
|
=== UPGRADE-1.2.txt -- Upgrade info for 1.0 to 1.2
|
||||||
|
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||||
|
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
||||||
|
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
|
||||||
|
===
|
||||||
|
===========================================================
|
||||||
|
|
||||||
|
From 1.8 to 10:
|
||||||
|
|
||||||
|
cel_pgsql:
|
||||||
|
- This module now expects an 'extra' column in the database for data added
|
||||||
|
using the CELGenUserEvent() application.
|
||||||
|
|
||||||
|
ConfBridge
|
||||||
|
- ConfBridge's dialplan arguments have changed and are not
|
||||||
|
backwards compatible.
|
||||||
|
|
||||||
|
File Interpreters
|
||||||
|
- The format interpreter formats/format_sln16.c for the file extension
|
||||||
|
'.sln16' has been removed. The '.sln16' file interpreter now exists
|
||||||
|
in the formats/format_sln.c module along with new support for sln12,
|
||||||
|
sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
|
||||||
|
|
||||||
|
HTTP:
|
||||||
|
- A bindaddr must be specified in order for the HTTP server
|
||||||
|
to run. Previous versions would default to 0.0.0.0 if no
|
||||||
|
bindaddr was specified.
|
||||||
|
|
||||||
|
Gtalk:
|
||||||
|
- The default value for 'context' and 'parkinglots' in gtalk.conf has
|
||||||
|
been changed to 'default', previously they were empty.
|
||||||
|
|
||||||
|
chan_dahdi:
|
||||||
|
- The mohinterpret=passthrough setting is deprecated in favor of
|
||||||
|
moh_signaling=notify.
|
||||||
|
|
||||||
|
pbx_lua:
|
||||||
|
- Execution no longer continues after applications that do dialplan jumps
|
||||||
|
(such as app.goto). Now when an application such as app.goto() is called,
|
||||||
|
control is returned back to the pbx engine and the current extension
|
||||||
|
function stops executing.
|
||||||
|
- the autoservice now defaults to being on by default
|
||||||
|
- autoservice_start() and autoservice_start() no longer return a value.
|
||||||
|
|
||||||
|
Queue:
|
||||||
|
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
|
||||||
|
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
|
||||||
|
|
||||||
|
Asterisk Database:
|
||||||
|
- The internal Asterisk database has been switched from Berkeley DB 1.86 to
|
||||||
|
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
|
||||||
|
utility in the UTILS section of menuselect. If an existing astdb is found and no
|
||||||
|
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
|
||||||
|
convert an existing astdb to the SQLite3 version automatically at runtime.
|
||||||
|
|
||||||
|
Module Support Level
|
||||||
|
- All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
|
||||||
|
formats, funcs, pbx, and res have been updated to include MODULEINFO data
|
||||||
|
that includes <support_level> tags with a value of core, extended, or deprecated.
|
||||||
|
More information is available on the Asterisk wiki at
|
||||||
|
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
|
||||||
|
|
||||||
|
Deprecated modules are now marked to not build by default and must be explicitly
|
||||||
|
enabled in menuselect.
|
||||||
|
|
||||||
|
===========================================================
|
||||||
|
===========================================================
|
30
UPGRADE.txt
30
UPGRADE.txt
|
@ -16,10 +16,15 @@
|
||||||
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
=== UPGRADE-1.4.txt -- Upgrade info for 1.2 to 1.4
|
||||||
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
=== UPGRADE-1.6.txt -- Upgrade info for 1.4 to 1.6
|
||||||
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
|
=== UPGRADE-1.8.txt -- Upgrade info for 1.6 to 1.8
|
||||||
|
=== UPGRADE-10.txt -- Upgrade info for 1.8 to 10
|
||||||
===
|
===
|
||||||
===========================================================
|
===========================================================
|
||||||
|
|
||||||
From 1.8 to 1.10:
|
From 10 to 12:
|
||||||
|
|
||||||
|
* No significant changes as of yet.
|
||||||
|
|
||||||
|
From 1.8 to 10:
|
||||||
|
|
||||||
cel_pgsql:
|
cel_pgsql:
|
||||||
- This module now expects an 'extra' column in the database for data added
|
- This module now expects an 'extra' column in the database for data added
|
||||||
|
@ -29,6 +34,12 @@ ConfBridge
|
||||||
- ConfBridge's dialplan arguments have changed and are not
|
- ConfBridge's dialplan arguments have changed and are not
|
||||||
backwards compatible.
|
backwards compatible.
|
||||||
|
|
||||||
|
File Interpreters
|
||||||
|
- The format interpreter formats/format_sln16.c for the file extension
|
||||||
|
'.sln16' has been removed. The '.sln16' file interpreter now exists
|
||||||
|
in the formats/format_sln.c module along with new support for sln12,
|
||||||
|
sln24, sln32, sln44, sln48, sln96, and sln192 file extensions.
|
||||||
|
|
||||||
HTTP:
|
HTTP:
|
||||||
- A bindaddr must be specified in order for the HTTP server
|
- A bindaddr must be specified in order for the HTTP server
|
||||||
to run. Previous versions would default to 0.0.0.0 if no
|
to run. Previous versions would default to 0.0.0.0 if no
|
||||||
|
@ -54,5 +65,22 @@ Queue:
|
||||||
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
|
- Mark QUEUE_MEMBER_PENALTY Deprecated it never worked for realtime members
|
||||||
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
|
- QUEUE_MEMBER is now R/W supporting setting paused, ignorebusy and penalty.
|
||||||
|
|
||||||
|
Asterisk Database:
|
||||||
|
- The internal Asterisk database has been switched from Berkeley DB 1.86 to
|
||||||
|
SQLite 3. An existing Berkeley astdb file can be converted with the astdb2sqlite3
|
||||||
|
utility in the UTILS section of menuselect. If an existing astdb is found and no
|
||||||
|
astdb.sqlite3 exists, astdb2sqlite3 will be compiled automatically. Asterisk will
|
||||||
|
convert an existing astdb to the SQLite3 version automatically at runtime.
|
||||||
|
|
||||||
|
Module Support Level
|
||||||
|
- All modules in the addons, apps, bridge, cdr, cel, channels, codecs,
|
||||||
|
formats, funcs, pbx, and res have been updated to include MODULEINFO data
|
||||||
|
that includes <support_level> tags with a value of core, extended, or deprecated.
|
||||||
|
More information is available on the Asterisk wiki at
|
||||||
|
https://wiki.asterisk.org/wiki/display/AST/Asterisk+Module+Support+States
|
||||||
|
|
||||||
|
Deprecated modules are now marked to not build by default and must be explicitly
|
||||||
|
enabled in menuselect.
|
||||||
|
|
||||||
===========================================================
|
===========================================================
|
||||||
===========================================================
|
===========================================================
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>mysqlclient</depend>
|
<depend>mysqlclient</depend>
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>func_odbc</replacement>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>say.conf</replacement>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>mysqlclient</depend>
|
<depend>mysqlclient</depend>
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>cdr_adaptive_odbc</replacement>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>bluetooth</depend>
|
<depend>bluetooth</depend>
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -1211,8 +1211,11 @@ int ooGkClientHandleRegistrationConfirm
|
||||||
|
|
||||||
if(pGkClient->regTimeout > DEFAULT_TTL_OFFSET)
|
if(pGkClient->regTimeout > DEFAULT_TTL_OFFSET)
|
||||||
regTTL = pGkClient->regTimeout - DEFAULT_TTL_OFFSET;
|
regTTL = pGkClient->regTimeout - DEFAULT_TTL_OFFSET;
|
||||||
else
|
else {
|
||||||
regTTL = pGkClient->regTimeout;
|
regTTL = pGkClient->regTimeout - 1; /* -1 due to some ops expire us few earlier */
|
||||||
|
if (regTTL <= 0)
|
||||||
|
regTTL = 1;
|
||||||
|
}
|
||||||
|
|
||||||
cbData = (ooGkClientTimerCb*) memAlloc
|
cbData = (ooGkClientTimerCb*) memAlloc
|
||||||
(&pGkClient->ctxt, sizeof(ooGkClientTimerCb));
|
(&pGkClient->ctxt, sizeof(ooGkClientTimerCb));
|
||||||
|
@ -1260,7 +1263,6 @@ int ooGkClientHandleRegistrationConfirm
|
||||||
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
||||||
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
||||||
OOTRACEDBGA1("Deleted RRQ Timer.\n");
|
OOTRACEDBGA1("Deleted RRQ Timer.\n");
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pGkClient->state = GkClientRegistered;
|
pGkClient->state = GkClientRegistered;
|
||||||
|
@ -1505,8 +1507,10 @@ int ooGkClientSendURQ(ooGkClient *pGkClient, ooAliases *aliases)
|
||||||
int ooGkClientHandleUnregistrationRequest
|
int ooGkClientHandleUnregistrationRequest
|
||||||
(ooGkClient *pGkClient, H225UnregistrationRequest * punregistrationRequest)
|
(ooGkClient *pGkClient, H225UnregistrationRequest * punregistrationRequest)
|
||||||
{
|
{
|
||||||
int iRet=0;
|
int iRet=0, x;
|
||||||
|
OOTimer *pTimer = NULL;
|
||||||
|
DListNode *pNode = NULL;
|
||||||
|
|
||||||
/* Lets first send unregistration confirm message back to gatekeeper*/
|
/* Lets first send unregistration confirm message back to gatekeeper*/
|
||||||
ooGkClientSendUnregistrationConfirm(pGkClient,
|
ooGkClientSendUnregistrationConfirm(pGkClient,
|
||||||
punregistrationRequest->requestSeqNum);
|
punregistrationRequest->requestSeqNum);
|
||||||
|
@ -1528,6 +1532,24 @@ int ooGkClientHandleUnregistrationRequest
|
||||||
pGkClient->rrqRetries = 0;
|
pGkClient->rrqRetries = 0;
|
||||||
pGkClient->state = GkClientDiscovered;
|
pGkClient->state = GkClientDiscovered;
|
||||||
|
|
||||||
|
|
||||||
|
/* delete the corresponding RRQ & REG timers */
|
||||||
|
pNode = NULL;
|
||||||
|
for(x=0; x<pGkClient->timerList.count; x++) {
|
||||||
|
pNode = dListFindByIndex(&pGkClient->timerList, x);
|
||||||
|
pTimer = (OOTimer*)pNode->data;
|
||||||
|
if(((ooGkClientTimerCb*)pTimer->cbData)->timerType & OO_RRQ_TIMER) {
|
||||||
|
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
||||||
|
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
||||||
|
OOTRACEDBGA1("Deleted RRQ Timer.\n");
|
||||||
|
}
|
||||||
|
if(((ooGkClientTimerCb*)pTimer->cbData)->timerType & OO_REG_TIMER) {
|
||||||
|
memFreePtr(&pGkClient->ctxt, pTimer->cbData);
|
||||||
|
ooTimerDelete(&pGkClient->ctxt, &pGkClient->timerList, pTimer);
|
||||||
|
OOTRACEDBGA1("Deleted REG Timer.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
iRet = ooGkClientSendRRQ(pGkClient, 0);
|
iRet = ooGkClientSendRRQ(pGkClient, 0);
|
||||||
if(iRet != OO_OK)
|
if(iRet != OO_OK)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>mysqlclient</depend>
|
<depend>mysqlclient</depend>
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
* with no warranty of any kind
|
* with no warranty of any kind
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
#define AUDIO_FILENO (STDERR_FILENO + 1)
|
#define AUDIO_FILENO (STDERR_FILENO + 1)
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>res_adsi</depend>
|
<depend>res_adsi</depend>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
* \author Claude Klimos (claude.klimos@aheeva.com)
|
* \author Claude Klimos (claude.klimos@aheeva.com)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
@ -632,10 +636,10 @@ static int play_prompt_to_channel(struct conference_bridge *conference_bridge, s
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_video_on_join(struct conference_bridge *conference_bridge, struct conference_bridge_user *conference_bridge_user)
|
static void handle_video_on_join(struct conference_bridge *conference_bridge, struct ast_channel *chan, int marked)
|
||||||
{
|
{
|
||||||
/* only automatically set video source for marked users */
|
/* Right now, only marked users are automatically set as the single src of video.*/
|
||||||
if (!ast_test_flag(&conference_bridge_user->u_profile, USER_OPT_MARKEDUSER)) {
|
if (!marked) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -645,7 +649,7 @@ static void handle_video_on_join(struct conference_bridge *conference_bridge, st
|
||||||
ao2_lock(conference_bridge);
|
ao2_lock(conference_bridge);
|
||||||
/* see if anyone is already the video src */
|
/* see if anyone is already the video src */
|
||||||
AST_LIST_TRAVERSE(&conference_bridge->users_list, tmp_user, list) {
|
AST_LIST_TRAVERSE(&conference_bridge->users_list, tmp_user, list) {
|
||||||
if (tmp_user == conference_bridge_user) {
|
if (tmp_user->chan == chan) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ast_bridge_is_video_src(conference_bridge->bridge, tmp_user->chan)) {
|
if (ast_bridge_is_video_src(conference_bridge->bridge, tmp_user->chan)) {
|
||||||
|
@ -655,24 +659,31 @@ static void handle_video_on_join(struct conference_bridge *conference_bridge, st
|
||||||
}
|
}
|
||||||
ao2_unlock(conference_bridge);
|
ao2_unlock(conference_bridge);
|
||||||
if (set) {
|
if (set) {
|
||||||
ast_bridge_set_single_src_video_mode(conference_bridge->bridge, conference_bridge_user->chan);
|
ast_bridge_set_single_src_video_mode(conference_bridge->bridge, chan);
|
||||||
}
|
}
|
||||||
} else if (ast_test_flag(&conference_bridge->b_profile, BRIDGE_OPT_VIDEO_SRC_LAST_MARKED)) {
|
} else if (ast_test_flag(&conference_bridge->b_profile, BRIDGE_OPT_VIDEO_SRC_LAST_MARKED)) {
|
||||||
/* we joined and are video capable, we override anyone else that may have already been the video feed */
|
/* we joined and are video capable, we override anyone else that may have already been the video feed */
|
||||||
ast_bridge_set_single_src_video_mode(conference_bridge->bridge, conference_bridge_user->chan);
|
ast_bridge_set_single_src_video_mode(conference_bridge->bridge, chan);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_video_on_exit(struct conference_bridge *conference_bridge, struct conference_bridge_user *conference_bridge_user)
|
static void handle_video_on_exit(struct conference_bridge *conference_bridge, struct ast_channel *chan)
|
||||||
{
|
{
|
||||||
struct conference_bridge_user *tmp_user = NULL;
|
struct conference_bridge_user *tmp_user = NULL;
|
||||||
|
|
||||||
/* if this isn't a video source, nothing to update */
|
/* if this isn't a video source, nothing to update */
|
||||||
if (!ast_bridge_is_video_src(conference_bridge->bridge, conference_bridge_user->chan)) {
|
if (!ast_bridge_is_video_src(conference_bridge->bridge, chan)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_bridge_remove_video_src(conference_bridge->bridge, conference_bridge_user->chan);
|
ast_bridge_remove_video_src(conference_bridge->bridge, chan);
|
||||||
|
|
||||||
|
/* If in follow talker mode, make sure to restore this mode on the
|
||||||
|
* bridge when a source is removed. It is possible this channel was
|
||||||
|
* only set temporarily as a video source by an AMI or DTMF action. */
|
||||||
|
if (ast_test_flag(&conference_bridge->b_profile, BRIDGE_OPT_VIDEO_SRC_FOLLOW_TALKER)) {
|
||||||
|
ast_bridge_set_talker_src_video_mode(conference_bridge->bridge);
|
||||||
|
}
|
||||||
|
|
||||||
/* if the video_mode isn't set to automatically pick the video source, do nothing on exit. */
|
/* if the video_mode isn't set to automatically pick the video source, do nothing on exit. */
|
||||||
if (!ast_test_flag(&conference_bridge->b_profile, BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED) &&
|
if (!ast_test_flag(&conference_bridge->b_profile, BRIDGE_OPT_VIDEO_SRC_FIRST_MARKED) &&
|
||||||
|
@ -680,10 +691,10 @@ static void handle_video_on_exit(struct conference_bridge *conference_bridge, st
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make the next avaliable marked user the video src. */
|
/* Make the next available marked user the video src. */
|
||||||
ao2_lock(conference_bridge);
|
ao2_lock(conference_bridge);
|
||||||
AST_LIST_TRAVERSE(&conference_bridge->users_list, tmp_user, list) {
|
AST_LIST_TRAVERSE(&conference_bridge->users_list, tmp_user, list) {
|
||||||
if (tmp_user == conference_bridge_user) {
|
if (tmp_user->chan == chan) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ast_test_flag(&tmp_user->u_profile, USER_OPT_MARKEDUSER)) {
|
if (ast_test_flag(&tmp_user->u_profile, USER_OPT_MARKEDUSER)) {
|
||||||
|
@ -1454,7 +1465,8 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_video_on_join(conference_bridge, &conference_bridge_user);
|
/* See if we need to automatically set this user as a video source or not */
|
||||||
|
handle_video_on_join(conference_bridge, conference_bridge_user.chan, ast_test_flag(&conference_bridge_user.u_profile, USER_OPT_MARKEDUSER));
|
||||||
|
|
||||||
/* Join our conference bridge for real */
|
/* Join our conference bridge for real */
|
||||||
send_join_event(conference_bridge_user.chan, conference_bridge->name);
|
send_join_event(conference_bridge_user.chan, conference_bridge->name);
|
||||||
|
@ -1465,8 +1477,15 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
|
||||||
&conference_bridge_user.tech_args);
|
&conference_bridge_user.tech_args);
|
||||||
send_leave_event(conference_bridge_user.chan, conference_bridge->name);
|
send_leave_event(conference_bridge_user.chan, conference_bridge->name);
|
||||||
|
|
||||||
|
/* if we're shutting down, don't attempt to do further processing */
|
||||||
|
if (ast_shutting_down()) {
|
||||||
|
leave_conference_bridge(conference_bridge, &conference_bridge_user);
|
||||||
|
conference_bridge = NULL;
|
||||||
|
goto confbridge_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
handle_video_on_exit(conference_bridge, &conference_bridge_user);
|
/* If this user was a video source, we need to clean up and possibly pick a new source. */
|
||||||
|
handle_video_on_exit(conference_bridge, conference_bridge_user.chan);
|
||||||
|
|
||||||
/* if this user has a intro, play it when leaving */
|
/* if this user has a intro, play it when leaving */
|
||||||
if (!quiet && !ast_strlen_zero(conference_bridge_user.name_rec_location)) {
|
if (!quiet && !ast_strlen_zero(conference_bridge_user.name_rec_location)) {
|
||||||
|
@ -1775,6 +1794,9 @@ static int execute_menu_entry(struct conference_bridge *conference_bridge,
|
||||||
ast_bridge_set_single_src_video_mode(conference_bridge->bridge, bridge_channel->chan);
|
ast_bridge_set_single_src_video_mode(conference_bridge->bridge, bridge_channel->chan);
|
||||||
ao2_unlock(conference_bridge);
|
ao2_unlock(conference_bridge);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
|
||||||
|
handle_video_on_exit(conference_bridge, bridge_channel->chan);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -33,6 +33,9 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>dahdi</depend>
|
<depend>dahdi</depend>
|
||||||
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>app_chanspy</replacement>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>dahdi</depend>
|
<depend>dahdi</depend>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>chan_local</depend>
|
<depend>chan_local</depend>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
|
|
||||||
|
@ -2408,7 +2409,8 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
|
||||||
* datastore again, causing a crash
|
* datastore again, causing a crash
|
||||||
*/
|
*/
|
||||||
ast_channel_lock(chan);
|
ast_channel_lock(chan);
|
||||||
if (!ast_channel_datastore_remove(chan, datastore)) {
|
datastore = ast_channel_datastore_find(chan, &dialed_interface_info, NULL); /* make sure we weren't cleaned up already */
|
||||||
|
if (datastore && !ast_channel_datastore_remove(chan, datastore)) {
|
||||||
ast_datastore_free(datastore);
|
ast_datastore_free(datastore);
|
||||||
}
|
}
|
||||||
ast_channel_unlock(chan);
|
ast_channel_unlock(chan);
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
@ -76,9 +80,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
<synopsis>
|
<synopsis>
|
||||||
Pickup a ringing channel.
|
Pickup a ringing channel.
|
||||||
</synopsis>
|
</synopsis>
|
||||||
<syntax>
|
<syntax >
|
||||||
<parameter name="channel" required="true" />
|
<parameter name="Technology/Resource" argsep="&" required="true">
|
||||||
<parameter name="channel2" multiple="true" />
|
<argument name="Technology/Resource" required="true" />
|
||||||
|
<argument name="Technology2/Resource2" required="false" multiple="true" />
|
||||||
|
</parameter>
|
||||||
<parameter name="options" required="false">
|
<parameter name="options" required="false">
|
||||||
<optionlist>
|
<optionlist>
|
||||||
<option name="p">
|
<option name="p">
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>app_voicemail</depend>
|
<depend>app_voicemail</depend>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
@ -57,7 +58,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
<parameter name="dial-context" required="false">
|
<parameter name="dial-context" required="false">
|
||||||
<para>This is the dialplan context to use when looking for an
|
<para>This is the dialplan context to use when looking for an
|
||||||
extension that the user has selected, or when jumping to the
|
extension that the user has selected, or when jumping to the
|
||||||
<literal>o</literal> or <literal>a</literal> extension.</para>
|
<literal>o</literal> or <literal>a</literal> extension. If not
|
||||||
|
specified, the current context will be used.</para>
|
||||||
</parameter>
|
</parameter>
|
||||||
<parameter name="options" required="false">
|
<parameter name="options" required="false">
|
||||||
<optionlist>
|
<optionlist>
|
||||||
|
@ -246,7 +248,7 @@ static int compare(const char *text, const char *template)
|
||||||
|
|
||||||
static int goto_exten(struct ast_channel *chan, const char *dialcontext, char *ext)
|
static int goto_exten(struct ast_channel *chan, const char *dialcontext, char *ext)
|
||||||
{
|
{
|
||||||
if (!ast_goto_if_exists(chan, dialcontext, ext, 1) ||
|
if (!ast_goto_if_exists(chan, S_OR(dialcontext, chan->context), ext, 1) ||
|
||||||
(!ast_strlen_zero(chan->macrocontext) &&
|
(!ast_strlen_zero(chan->macrocontext) &&
|
||||||
!ast_goto_if_exists(chan, chan->macrocontext, ext, 1))) {
|
!ast_goto_if_exists(chan, chan->macrocontext, ext, 1))) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -685,11 +687,11 @@ static int do_directory(struct ast_channel *chan, struct ast_config *vmcfg, stru
|
||||||
int count, i;
|
int count, i;
|
||||||
char ext[10] = "";
|
char ext[10] = "";
|
||||||
|
|
||||||
if (digit == '0' && !goto_exten(chan, S_OR(dialcontext, "default"), "o")) {
|
if (digit == '0' && !goto_exten(chan, dialcontext, "o")) {
|
||||||
return digit;
|
return digit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (digit == '*' && !goto_exten(chan, S_OR(dialcontext, "default"), "a")) {
|
if (digit == '*' && !goto_exten(chan, dialcontext, "a")) {
|
||||||
return digit;
|
return digit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -31,6 +31,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
<depend>spandsp</depend>
|
<depend>spandsp</depend>
|
||||||
<conflict>res_fax</conflict>
|
<conflict>res_fax</conflict>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>dahdi</depend>
|
<depend>dahdi</depend>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>chan_local</depend>
|
<depend>chan_local</depend>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>jack</depend>
|
<depend>jack</depend>
|
||||||
<depend>resample</depend>
|
<depend>resample</depend>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -25,6 +25,11 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>app_stack (GoSub)</replacement>
|
||||||
|
*/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -31,6 +31,9 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>dahdi</depend>
|
<depend>dahdi</depend>
|
||||||
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>app_confbridge</replacement>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
@ -4416,15 +4419,13 @@ static int conf_exec(struct ast_channel *chan, const char *data)
|
||||||
res = -1;
|
res = -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (((!ast_strlen_zero(cnf->pin) &&
|
/* Check to see if the conference requires a pin
|
||||||
!ast_test_flag64(&confflags, CONFFLAG_ADMIN)) ||
|
* and we ALWAYS prompt or no pin was provided */
|
||||||
(!ast_strlen_zero(cnf->pinadmin) &&
|
if ((!ast_strlen_zero(cnf->pin) ||
|
||||||
ast_test_flag64(&confflags, CONFFLAG_ADMIN)) ||
|
(!ast_strlen_zero(cnf->pinadmin) &&
|
||||||
(!ast_strlen_zero(cnf->pin) &&
|
ast_test_flag64(&confflags, CONFFLAG_ADMIN))) &&
|
||||||
ast_strlen_zero(cnf->pinadmin) &&
|
(ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT) ||
|
||||||
ast_test_flag64(&confflags, CONFFLAG_ADMIN))) &&
|
ast_strlen_zero(args.pin))) {
|
||||||
((!(cnf->users == 0 && cnf->isdynamic)) ||
|
|
||||||
ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT))) {
|
|
||||||
char pin[MAX_PIN] = "";
|
char pin[MAX_PIN] = "";
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -141,6 +141,10 @@
|
||||||
* Back: \ref App_minivm
|
* Back: \ref App_minivm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -33,6 +33,10 @@
|
||||||
* Anthony Minessale II <anthmct@yahoo.com>
|
* Anthony Minessale II <anthmct@yahoo.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
@ -47,6 +51,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
#include "asterisk/channel.h"
|
#include "asterisk/channel.h"
|
||||||
#include "asterisk/autochan.h"
|
#include "asterisk/autochan.h"
|
||||||
#include "asterisk/manager.h"
|
#include "asterisk/manager.h"
|
||||||
|
#include "asterisk/mod_format.h"
|
||||||
|
|
||||||
/*** DOCUMENTATION
|
/*** DOCUMENTATION
|
||||||
<application name="MixMonitor" language="en_US">
|
<application name="MixMonitor" language="en_US">
|
||||||
|
@ -225,6 +230,8 @@ struct mixmonitor_ds {
|
||||||
struct ast_filestream *fs_write;
|
struct ast_filestream *fs_write;
|
||||||
|
|
||||||
struct ast_audiohook *audiohook;
|
struct ast_audiohook *audiohook;
|
||||||
|
|
||||||
|
unsigned int samp_rate;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -334,7 +341,7 @@ static void mixmonitor_save_prep(struct mixmonitor *mixmonitor, char *filename,
|
||||||
if (!*fs && !*errflag && !mixmonitor->mixmonitor_ds->fs_quit) {
|
if (!*fs && !*errflag && !mixmonitor->mixmonitor_ds->fs_quit) {
|
||||||
*oflags = O_CREAT | O_WRONLY;
|
*oflags = O_CREAT | O_WRONLY;
|
||||||
*oflags |= ast_test_flag(mixmonitor, MUXFLAG_APPEND) ? O_APPEND : O_TRUNC;
|
*oflags |= ast_test_flag(mixmonitor, MUXFLAG_APPEND) ? O_APPEND : O_TRUNC;
|
||||||
|
|
||||||
last_slash = strrchr(filename, '/');
|
last_slash = strrchr(filename, '/');
|
||||||
|
|
||||||
if ((ext = strrchr(filename, '.')) && (ext > last_slash)) {
|
if ((ext = strrchr(filename, '.')) && (ext > last_slash)) {
|
||||||
|
@ -346,6 +353,9 @@ static void mixmonitor_save_prep(struct mixmonitor *mixmonitor, char *filename,
|
||||||
if (!(*fs = ast_writefile(filename, ext, NULL, *oflags, 0, 0666))) {
|
if (!(*fs = ast_writefile(filename, ext, NULL, *oflags, 0, 0666))) {
|
||||||
ast_log(LOG_ERROR, "Cannot open %s.%s\n", filename, ext);
|
ast_log(LOG_ERROR, "Cannot open %s.%s\n", filename, ext);
|
||||||
*errflag = 1;
|
*errflag = 1;
|
||||||
|
} else {
|
||||||
|
struct ast_filestream *tmp = *fs;
|
||||||
|
mixmonitor->mixmonitor_ds->samp_rate = MAX(mixmonitor->mixmonitor_ds->samp_rate, ast_format_rate(&tmp->fmt->format));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,13 +373,22 @@ static void *mixmonitor_thread(void *obj)
|
||||||
int errflag = 0;
|
int errflag = 0;
|
||||||
struct ast_format format_slin;
|
struct ast_format format_slin;
|
||||||
|
|
||||||
ast_format_set(&format_slin, AST_FORMAT_SLINEAR, 0);
|
|
||||||
ast_verb(2, "Begin MixMonitor Recording %s\n", mixmonitor->name);
|
ast_verb(2, "Begin MixMonitor Recording %s\n", mixmonitor->name);
|
||||||
|
|
||||||
fs = &mixmonitor->mixmonitor_ds->fs;
|
fs = &mixmonitor->mixmonitor_ds->fs;
|
||||||
fs_read = &mixmonitor->mixmonitor_ds->fs_read;
|
fs_read = &mixmonitor->mixmonitor_ds->fs_read;
|
||||||
fs_write = &mixmonitor->mixmonitor_ds->fs_write;
|
fs_write = &mixmonitor->mixmonitor_ds->fs_write;
|
||||||
|
|
||||||
|
ast_mutex_lock(&mixmonitor->mixmonitor_ds->lock);
|
||||||
|
mixmonitor_save_prep(mixmonitor, mixmonitor->filename, fs, &oflags, &errflag);
|
||||||
|
mixmonitor_save_prep(mixmonitor, mixmonitor->filename_read, fs_read, &oflags, &errflag);
|
||||||
|
mixmonitor_save_prep(mixmonitor, mixmonitor->filename_write, fs_write, &oflags, &errflag);
|
||||||
|
|
||||||
|
ast_format_set(&format_slin, ast_format_slin_by_rate(mixmonitor->mixmonitor_ds->samp_rate), 0);
|
||||||
|
|
||||||
|
ast_mutex_unlock(&mixmonitor->mixmonitor_ds->lock);
|
||||||
|
|
||||||
|
|
||||||
/* The audiohook must enter and exit the loop locked */
|
/* The audiohook must enter and exit the loop locked */
|
||||||
ast_audiohook_lock(&mixmonitor->audiohook);
|
ast_audiohook_lock(&mixmonitor->audiohook);
|
||||||
while (mixmonitor->audiohook.status == AST_AUDIOHOOK_STATUS_RUNNING && !mixmonitor->mixmonitor_ds->fs_quit) {
|
while (mixmonitor->audiohook.status == AST_AUDIOHOOK_STATUS_RUNNING && !mixmonitor->mixmonitor_ds->fs_quit) {
|
||||||
|
@ -393,9 +412,6 @@ static void *mixmonitor_thread(void *obj)
|
||||||
|
|
||||||
if (!ast_test_flag(mixmonitor, MUXFLAG_BRIDGED) || (mixmonitor->autochan->chan && ast_bridged_channel(mixmonitor->autochan->chan))) {
|
if (!ast_test_flag(mixmonitor, MUXFLAG_BRIDGED) || (mixmonitor->autochan->chan && ast_bridged_channel(mixmonitor->autochan->chan))) {
|
||||||
ast_mutex_lock(&mixmonitor->mixmonitor_ds->lock);
|
ast_mutex_lock(&mixmonitor->mixmonitor_ds->lock);
|
||||||
mixmonitor_save_prep(mixmonitor, mixmonitor->filename, fs, &oflags, &errflag);
|
|
||||||
mixmonitor_save_prep(mixmonitor, mixmonitor->filename_read, fs_read, &oflags, &errflag);
|
|
||||||
mixmonitor_save_prep(mixmonitor, mixmonitor->filename_write, fs_write, &oflags, &errflag);
|
|
||||||
|
|
||||||
/* Write out the frame(s) */
|
/* Write out the frame(s) */
|
||||||
if ((*fs_read) && (fr_read)) {
|
if ((*fs_read) && (fr_read)) {
|
||||||
|
@ -484,6 +500,8 @@ static int setup_mixmonitor_ds(struct mixmonitor *mixmonitor, struct ast_channel
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mixmonitor_ds->samp_rate = 8000;
|
||||||
mixmonitor_ds->audiohook = &mixmonitor->audiohook;
|
mixmonitor_ds->audiohook = &mixmonitor->audiohook;
|
||||||
datastore->data = mixmonitor_ds;
|
datastore->data = mixmonitor_ds;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,10 @@
|
||||||
* Set options for call files.
|
* Set options for call files.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>osptk</depend>
|
<depend>osptk</depend>
|
||||||
<depend>openssl</depend>
|
<depend>openssl</depend>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>dahdi</depend>
|
<depend>dahdi</depend>
|
||||||
<depend>app_meetme</depend>
|
<depend>app_meetme</depend>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -24,7 +24,11 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<use type="module">res_monitor</use>
|
<use type="module">res_monitor</use>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
@ -1572,7 +1573,7 @@ static int extensionstate2devicestate(int state)
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int extension_state_cb(char *context, char *exten, enum ast_extension_states state, void *data)
|
static int extension_state_cb(const char *context, const char *exten, enum ast_extension_states state, void *data)
|
||||||
{
|
{
|
||||||
struct ao2_iterator miter, qiter;
|
struct ao2_iterator miter, qiter;
|
||||||
struct member *m;
|
struct member *m;
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,12 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>func_env (FILE())</replacement>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,7 @@
|
||||||
<depend>dahdi</depend>
|
<depend>dahdi</depend>
|
||||||
<depend>tonezone</depend>
|
<depend>tonezone</depend>
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
/* Un-comment the following to include support for MDC-1200 digital tone
|
/* Un-comment the following to include support for MDC-1200 digital tone
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>extended</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
/*** DOCUMENTATION
|
/*** DOCUMENTATION
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,13 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>deprecated</support_level>
|
||||||
|
<replacement>func_callerid</replacement>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<defaultenabled>no</defaultenabled>
|
<defaultenabled>no</defaultenabled>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
* Not fully tested, under development
|
* Not fully tested, under development
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<use type="module">res_agi</use>
|
<use type="module">res_agi</use>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -24,7 +24,11 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<use type="module">res_adsi</use>
|
<use type="module">res_adsi</use>
|
||||||
<use type="module">res_smdi</use>
|
<use type="module">res_smdi</use>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
/*** MAKEOPTS
|
/*** MAKEOPTS
|
||||||
|
@ -1215,6 +1216,9 @@ static int check_password(struct ast_vm_user *vmu, char *password)
|
||||||
/* check minimum length */
|
/* check minimum length */
|
||||||
if (strlen(password) < minpassword)
|
if (strlen(password) < minpassword)
|
||||||
return 1;
|
return 1;
|
||||||
|
/* check that password does not contain '*' character */
|
||||||
|
if (!ast_strlen_zero(password) && password[0] == '*')
|
||||||
|
return 1;
|
||||||
if (!ast_strlen_zero(ext_pass_check_cmd)) {
|
if (!ast_strlen_zero(ext_pass_check_cmd)) {
|
||||||
char cmd[255], buf[255];
|
char cmd[255], buf[255];
|
||||||
|
|
||||||
|
@ -1294,8 +1298,14 @@ static void apply_options_full(struct ast_vm_user *retval, struct ast_variable *
|
||||||
if (!strcasecmp(var->name, "vmsecret")) {
|
if (!strcasecmp(var->name, "vmsecret")) {
|
||||||
ast_copy_string(retval->password, var->value, sizeof(retval->password));
|
ast_copy_string(retval->password, var->value, sizeof(retval->password));
|
||||||
} else if (!strcasecmp(var->name, "secret") || !strcasecmp(var->name, "password")) { /* don't overwrite vmsecret if it exists */
|
} else if (!strcasecmp(var->name, "secret") || !strcasecmp(var->name, "password")) { /* don't overwrite vmsecret if it exists */
|
||||||
if (ast_strlen_zero(retval->password))
|
if (ast_strlen_zero(retval->password)) {
|
||||||
ast_copy_string(retval->password, var->value, sizeof(retval->password));
|
if (!ast_strlen_zero(var->value) && var->value[0] == '*') {
|
||||||
|
ast_log(LOG_WARNING, "Invalid password detected for mailbox %s. The password"
|
||||||
|
"\n\tmust be reset in voicemail.conf.\n", retval->mailbox);
|
||||||
|
} else {
|
||||||
|
ast_copy_string(retval->password, var->value, sizeof(retval->password));
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (!strcasecmp(var->name, "uniqueid")) {
|
} else if (!strcasecmp(var->name, "uniqueid")) {
|
||||||
ast_copy_string(retval->uniqueid, var->value, sizeof(retval->uniqueid));
|
ast_copy_string(retval->uniqueid, var->value, sizeof(retval->uniqueid));
|
||||||
} else if (!strcasecmp(var->name, "pager")) {
|
} else if (!strcasecmp(var->name, "pager")) {
|
||||||
|
@ -9662,10 +9672,12 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
|
||||||
}
|
}
|
||||||
} else if (mailbox[0] == '*') {
|
} else if (mailbox[0] == '*') {
|
||||||
/* user entered '*' */
|
/* user entered '*' */
|
||||||
|
ast_verb(4, "Mailbox begins with '*', attempting jump to extension 'a'\n");
|
||||||
if (ast_exists_extension(chan, chan->context, "a", 1,
|
if (ast_exists_extension(chan, chan->context, "a", 1,
|
||||||
S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
|
S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
ast_verb(4, "Jump to extension 'a' failed; setting mailbox to NULL\n");
|
||||||
mailbox[0] = '\0';
|
mailbox[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9694,12 +9706,16 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
|
||||||
return -1;
|
return -1;
|
||||||
} else if (password[0] == '*') {
|
} else if (password[0] == '*') {
|
||||||
/* user entered '*' */
|
/* user entered '*' */
|
||||||
|
ast_verb(4, "Password begins with '*', attempting jump to extension 'a'\n");
|
||||||
if (ast_exists_extension(chan, chan->context, "a", 1,
|
if (ast_exists_extension(chan, chan->context, "a", 1,
|
||||||
S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
|
S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
|
||||||
mailbox[0] = '*';
|
mailbox[0] = '*';
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
ast_verb(4, "Jump to extension 'a' failed; setting mailbox and user to NULL\n");
|
||||||
mailbox[0] = '\0';
|
mailbox[0] = '\0';
|
||||||
|
/* if the password entered was '*', do not let a user mailbox be created if the extension 'a' is not defined */
|
||||||
|
vmu = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10546,6 +10562,14 @@ static struct ast_vm_user *find_or_create(const char *context, const char *box)
|
||||||
{
|
{
|
||||||
struct ast_vm_user *vmu;
|
struct ast_vm_user *vmu;
|
||||||
|
|
||||||
|
if (!ast_strlen_zero(box) && box[0] == '*') {
|
||||||
|
ast_log(LOG_WARNING, "Mailbox %s in context %s begins with '*' character. The '*' character,"
|
||||||
|
"\n\twhen it is the first character in a mailbox or password, is used to jump to a"
|
||||||
|
"\n\tpredefined extension 'a'. A mailbox or password beginning with '*' is not valid"
|
||||||
|
"\n\tand will be ignored.\n", box, context);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
AST_LIST_TRAVERSE(&users, vmu, list) {
|
AST_LIST_TRAVERSE(&users, vmu, list) {
|
||||||
if (ast_test_flag((&globalflags), VM_SEARCH) && !strcasecmp(box, vmu->mailbox)) {
|
if (ast_test_flag((&globalflags), VM_SEARCH) && !strcasecmp(box, vmu->mailbox)) {
|
||||||
if (strcasecmp(vmu->context, context)) {
|
if (strcasecmp(vmu->context, context)) {
|
||||||
|
@ -10594,6 +10618,11 @@ static int append_mailbox(const char *context, const char *box, const char *data
|
||||||
|
|
||||||
stringp = tmp;
|
stringp = tmp;
|
||||||
if ((s = strsep(&stringp, ","))) {
|
if ((s = strsep(&stringp, ","))) {
|
||||||
|
if (!ast_strlen_zero(s) && s[0] == '*') {
|
||||||
|
ast_log(LOG_WARNING, "Invalid password detected for mailbox %s. The password"
|
||||||
|
"\n\tmust be reset in voicemail.conf.\n", box);
|
||||||
|
}
|
||||||
|
/* assign password regardless of validity to prevent NULL password from being assigned */
|
||||||
ast_copy_string(vmu->password, s, sizeof(vmu->password));
|
ast_copy_string(vmu->password, s, sizeof(vmu->password));
|
||||||
}
|
}
|
||||||
if (stringp && (s = strsep(&stringp, ","))) {
|
if (stringp && (s = strsep(&stringp, ","))) {
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -38,6 +38,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
*
|
*
|
||||||
* \ingroup applications
|
* \ingroup applications
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
|
|
|
@ -543,6 +543,7 @@ static int add_action_to_menu_entry(struct conf_menu_entry *menu_entry, enum con
|
||||||
case MENU_ACTION_ADMIN_KICK_LAST:
|
case MENU_ACTION_ADMIN_KICK_LAST:
|
||||||
case MENU_ACTION_LEAVE:
|
case MENU_ACTION_LEAVE:
|
||||||
case MENU_ACTION_SET_SINGLE_VIDEO_SRC:
|
case MENU_ACTION_SET_SINGLE_VIDEO_SRC:
|
||||||
|
case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
|
||||||
break;
|
break;
|
||||||
case MENU_ACTION_PLAYBACK:
|
case MENU_ACTION_PLAYBACK:
|
||||||
case MENU_ACTION_PLAYBACK_AND_CONTINUE:
|
case MENU_ACTION_PLAYBACK_AND_CONTINUE:
|
||||||
|
@ -660,6 +661,8 @@ static int add_menu_entry(struct conf_menu *menu, const char *dtmf, const char *
|
||||||
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_LEAVE, NULL);
|
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_LEAVE, NULL);
|
||||||
} else if (!strcasecmp(action, "set_as_single_video_src")) {
|
} else if (!strcasecmp(action, "set_as_single_video_src")) {
|
||||||
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_SET_SINGLE_VIDEO_SRC, NULL);
|
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_SET_SINGLE_VIDEO_SRC, NULL);
|
||||||
|
} else if (!strcasecmp(action, "release_as_single_video_src")) {
|
||||||
|
res |= add_action_to_menu_entry(menu_entry, MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC, NULL);
|
||||||
} else if (!strncasecmp(action, "dialplan_exec(", 14)) {
|
} else if (!strncasecmp(action, "dialplan_exec(", 14)) {
|
||||||
ast_copy_string(buf, action, sizeof(buf));
|
ast_copy_string(buf, action, sizeof(buf));
|
||||||
action_args = buf;
|
action_args = buf;
|
||||||
|
@ -1166,6 +1169,9 @@ static char *handle_cli_confbridge_show_menu(struct ast_cli_entry *e, int cmd, s
|
||||||
case MENU_ACTION_SET_SINGLE_VIDEO_SRC:
|
case MENU_ACTION_SET_SINGLE_VIDEO_SRC:
|
||||||
ast_cli(a->fd, "set_as_single_video_src");
|
ast_cli(a->fd, "set_as_single_video_src");
|
||||||
break;
|
break;
|
||||||
|
case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
|
||||||
|
ast_cli(a->fd, "release_as_single_video_src");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
action_num++;
|
action_num++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,7 @@ enum conf_menu_action_id {
|
||||||
MENU_ACTION_LEAVE,
|
MENU_ACTION_LEAVE,
|
||||||
MENU_ACTION_NOOP,
|
MENU_ACTION_NOOP,
|
||||||
MENU_ACTION_SET_SINGLE_VIDEO_SRC,
|
MENU_ACTION_SET_SINGLE_VIDEO_SRC,
|
||||||
|
MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! The conference menu action contains both
|
/*! The conference menu action contains both
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup bridges
|
* \ingroup bridges
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup bridges
|
* \ingroup bridges
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -25,6 +25,10 @@
|
||||||
* \ingroup bridges
|
* \ingroup bridges
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* \ingroup bridges
|
* \ingroup bridges
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
@ -435,13 +439,30 @@ static void softmix_pass_dtmf(struct ast_bridge *bridge, struct ast_bridge_chann
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void softmix_pass_video(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame)
|
static void softmix_pass_video_top_priority(struct ast_bridge *bridge, struct ast_frame *frame)
|
||||||
{
|
{
|
||||||
struct ast_bridge_channel *tmp;
|
struct ast_bridge_channel *tmp;
|
||||||
AST_LIST_TRAVERSE(&bridge->channels, tmp, entry) {
|
AST_LIST_TRAVERSE(&bridge->channels, tmp, entry) {
|
||||||
if (tmp->suspended) {
|
if (tmp->suspended) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (ast_bridge_is_video_src(bridge, tmp->chan) == 1) {
|
||||||
|
ast_write(tmp->chan, frame);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void softmix_pass_video_all(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame, int echo)
|
||||||
|
{
|
||||||
|
struct ast_bridge_channel *tmp;
|
||||||
|
AST_LIST_TRAVERSE(&bridge->channels, tmp, entry) {
|
||||||
|
if (tmp->suspended) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((tmp->chan == bridge_channel->chan) && !echo) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ast_write(tmp->chan, frame);
|
ast_write(tmp->chan, frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -472,20 +493,26 @@ static enum ast_bridge_write_result softmix_bridge_write(struct ast_bridge *brid
|
||||||
|
|
||||||
/* Determine if this video frame should be distributed or not */
|
/* Determine if this video frame should be distributed or not */
|
||||||
if (frame->frametype == AST_FRAME_VIDEO) {
|
if (frame->frametype == AST_FRAME_VIDEO) {
|
||||||
|
int num_src = ast_bridge_number_video_src(bridge);
|
||||||
|
int video_src_priority = ast_bridge_is_video_src(bridge, bridge_channel->chan);
|
||||||
|
|
||||||
switch (bridge->video_mode.mode) {
|
switch (bridge->video_mode.mode) {
|
||||||
case AST_BRIDGE_VIDEO_MODE_NONE:
|
case AST_BRIDGE_VIDEO_MODE_NONE:
|
||||||
break;
|
break;
|
||||||
case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
|
case AST_BRIDGE_VIDEO_MODE_SINGLE_SRC:
|
||||||
if (ast_bridge_is_video_src(bridge, bridge_channel->chan)) {
|
if (video_src_priority == 1) {
|
||||||
softmix_pass_video(bridge, bridge_channel, frame);
|
softmix_pass_video_all(bridge, bridge_channel, frame, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AST_BRIDGE_VIDEO_MODE_TALKER_SRC:
|
case AST_BRIDGE_VIDEO_MODE_TALKER_SRC:
|
||||||
ast_mutex_lock(&sc->lock);
|
ast_mutex_lock(&sc->lock);
|
||||||
ast_bridge_update_talker_src_video_mode(bridge, bridge_channel->chan, sc->video_talker.energy_average, ast_format_get_video_mark(&frame->subclass.format));
|
ast_bridge_update_talker_src_video_mode(bridge, bridge_channel->chan, sc->video_talker.energy_average, ast_format_get_video_mark(&frame->subclass.format));
|
||||||
ast_mutex_unlock(&sc->lock);
|
ast_mutex_unlock(&sc->lock);
|
||||||
if (ast_bridge_is_video_src(bridge, bridge_channel->chan)) {
|
if (video_src_priority == 1) {
|
||||||
softmix_pass_video(bridge, bridge_channel, frame);
|
int echo = num_src > 1 ? 0 : 1;
|
||||||
|
softmix_pass_video_all(bridge, bridge_channel, frame, echo);
|
||||||
|
} else if (video_src_priority == 2) {
|
||||||
|
softmix_pass_video_top_priority(bridge, frame);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
/*** MODULEINFO
|
/*** MODULEINFO
|
||||||
<depend>res_odbc</depend>
|
<depend>res_odbc</depend>
|
||||||
|
<support_level>core</support_level>
|
||||||
***/
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
* \ingroup cdr_drivers
|
* \ingroup cdr_drivers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>extended</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
|
@ -30,6 +30,10 @@
|
||||||
* \ingroup cdr_drivers
|
* \ingroup cdr_drivers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*** MODULEINFO
|
||||||
|
<support_level>core</support_level>
|
||||||
|
***/
|
||||||
|
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
||||||
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue