aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/app_adsiprog.c1
-rw-r--r--apps/app_alarmreceiver.c4
-rw-r--r--apps/app_amd.c3
-rw-r--r--apps/app_authenticate.c4
-rw-r--r--apps/app_cdr.c4
-rw-r--r--apps/app_chanisavail.c4
-rw-r--r--apps/app_channelredirect.c4
-rw-r--r--apps/app_chanspy.c4
-rw-r--r--apps/app_confbridge.c48
-rw-r--r--apps/app_controlplayback.c4
-rw-r--r--apps/app_dahdibarge.c3
-rw-r--r--apps/app_dahdiras.c1
-rw-r--r--apps/app_db.c4
-rw-r--r--apps/app_dial.c4
-rw-r--r--apps/app_dictate.c4
-rw-r--r--apps/app_directed_pickup.c12
-rw-r--r--apps/app_directory.c10
-rw-r--r--apps/app_disa.c4
-rw-r--r--apps/app_dumpchan.c4
-rw-r--r--apps/app_echo.c4
-rw-r--r--apps/app_exec.c3
-rw-r--r--apps/app_externalivr.c4
-rw-r--r--apps/app_fax.c1
-rw-r--r--apps/app_festival.c4
-rw-r--r--apps/app_flash.c1
-rw-r--r--apps/app_followme.c1
-rw-r--r--apps/app_forkcdr.c4
-rw-r--r--apps/app_getcpeid.c4
-rw-r--r--apps/app_ices.c4
-rw-r--r--apps/app_image.c4
-rw-r--r--apps/app_ivrdemo.c1
-rw-r--r--apps/app_jack.c1
-rw-r--r--apps/app_macro.c5
-rw-r--r--apps/app_meetme.c19
-rw-r--r--apps/app_milliwatt.c4
-rw-r--r--apps/app_minivm.c4
-rw-r--r--apps/app_mixmonitor.c28
-rw-r--r--apps/app_morsecode.c4
-rw-r--r--apps/app_mp3.c4
-rw-r--r--apps/app_nbscat.c4
-rw-r--r--apps/app_originate.c4
-rw-r--r--apps/app_osplookup.c1
-rw-r--r--apps/app_page.c1
-rw-r--r--apps/app_parkandannounce.c4
-rw-r--r--apps/app_playback.c6
-rw-r--r--apps/app_playtones.c4
-rw-r--r--apps/app_privacy.c4
-rw-r--r--apps/app_queue.c3
-rw-r--r--apps/app_read.c4
-rw-r--r--apps/app_readexten.c4
-rw-r--r--apps/app_readfile.c6
-rw-r--r--apps/app_record.c4
-rw-r--r--apps/app_rpt.c1
-rw-r--r--apps/app_saycounted.c1
-rw-r--r--apps/app_sayunixtime.c4
-rw-r--r--apps/app_senddtmf.c4
-rw-r--r--apps/app_sendtext.c4
-rw-r--r--apps/app_setcallerid.c8
-rw-r--r--apps/app_skel.c1
-rw-r--r--apps/app_sms.c4
-rw-r--r--apps/app_softhangup.c4
-rw-r--r--apps/app_speech_utils.c4
-rw-r--r--apps/app_stack.c1
-rw-r--r--apps/app_talkdetect.c6
-rw-r--r--apps/app_test.c4
-rw-r--r--apps/app_transfer.c4
-rw-r--r--apps/app_url.c4
-rw-r--r--apps/app_userevent.c4
-rw-r--r--apps/app_verbose.c4
-rw-r--r--apps/app_voicemail.c33
-rw-r--r--apps/app_waitforring.c4
-rw-r--r--apps/app_waitforsilence.c4
-rw-r--r--apps/app_waituntil.c4
-rw-r--r--apps/app_while.c4
-rw-r--r--apps/app_zapateller.c4
-rw-r--r--apps/confbridge/conf_config_parser.c6
-rw-r--r--apps/confbridge/include/confbridge.h1
77 files changed, 360 insertions, 41 deletions
diff --git a/apps/app_adsiprog.c b/apps/app_adsiprog.c
index c138f0429..430d8258d 100644
--- a/apps/app_adsiprog.c
+++ b/apps/app_adsiprog.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<depend>res_adsi</depend>
+ <support_level>extended</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_alarmreceiver.c b/apps/app_alarmreceiver.c
index 6936cb5a0..1a4f9220f 100644
--- a/apps/app_alarmreceiver.c
+++ b/apps/app_alarmreceiver.c
@@ -29,6 +29,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_amd.c b/apps/app_amd.c
index 7c4e2a47a..35c5005f7 100644
--- a/apps/app_amd.c
+++ b/apps/app_amd.c
@@ -26,6 +26,9 @@
* \author Claude Klimos (claude.klimos@aheeva.com)
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_authenticate.c b/apps/app_authenticate.c
index 416ea432d..8b5fa11a6 100644
--- a/apps/app_authenticate.c
+++ b/apps/app_authenticate.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_cdr.c b/apps/app_cdr.c
index 70036ad82..2f227b049 100644
--- a/apps/app_cdr.c
+++ b/apps/app_cdr.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_chanisavail.c b/apps/app_chanisavail.c
index 5dd4a1f60..86ce34177 100644
--- a/apps/app_chanisavail.c
+++ b/apps/app_chanisavail.c
@@ -27,6 +27,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_channelredirect.c b/apps/app_channelredirect.c
index 57c9234ef..8fe543dab 100644
--- a/apps/app_channelredirect.c
+++ b/apps/app_channelredirect.c
@@ -23,6 +23,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c
index c90a7907a..92e0ba513 100644
--- a/apps/app_chanspy.c
+++ b/apps/app_chanspy.c
@@ -29,6 +29,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index d046c489f..4897d065e 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -28,6 +28,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
@@ -632,10 +636,10 @@ static int play_prompt_to_channel(struct conference_bridge *conference_bridge, s
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 */
- if (!ast_test_flag(&conference_bridge_user->u_profile, USER_OPT_MARKEDUSER)) {
+ /* Right now, only marked users are automatically set as the single src of video.*/
+ if (!marked) {
return;
}
@@ -645,7 +649,7 @@ static void handle_video_on_join(struct conference_bridge *conference_bridge, st
ao2_lock(conference_bridge);
/* see if anyone is already the video src */
AST_LIST_TRAVERSE(&conference_bridge->users_list, tmp_user, list) {
- if (tmp_user == conference_bridge_user) {
+ if (tmp_user->chan == chan) {
continue;
}
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);
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)) {
/* 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;
/* 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;
}
- 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 (!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;
}
- /* Make the next avaliable marked user the video src. */
+ /* Make the next available marked user the video src. */
ao2_lock(conference_bridge);
AST_LIST_TRAVERSE(&conference_bridge->users_list, tmp_user, list) {
- if (tmp_user == conference_bridge_user) {
+ if (tmp_user->chan == chan) {
continue;
}
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 */
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);
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 (!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);
ao2_unlock(conference_bridge);
break;
+ case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
+ handle_video_on_exit(conference_bridge, bridge_channel->chan);
+ break;
}
}
return res;
diff --git a/apps/app_controlplayback.c b/apps/app_controlplayback.c
index bbeea3037..1e2e6fbc2 100644
--- a/apps/app_controlplayback.c
+++ b/apps/app_controlplayback.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_dahdibarge.c b/apps/app_dahdibarge.c
index 082405e80..bb0120cbc 100644
--- a/apps/app_dahdibarge.c
+++ b/apps/app_dahdibarge.c
@@ -33,6 +33,9 @@
/*** MODULEINFO
<depend>dahdi</depend>
+ <defaultenabled>no</defaultenabled>
+ <support_level>deprecated</support_level>
+ <replacement>app_chanspy</replacement>
***/
#include "asterisk.h"
diff --git a/apps/app_dahdiras.c b/apps/app_dahdiras.c
index b467b16b8..fbaf98450 100644
--- a/apps/app_dahdiras.c
+++ b/apps/app_dahdiras.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<depend>dahdi</depend>
+ <support_level>extended</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_db.c b/apps/app_db.c
index 99679e71b..1fa24088e 100644
--- a/apps/app_db.c
+++ b/apps/app_db.c
@@ -28,6 +28,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_dial.c b/apps/app_dial.c
index d3b8009de..65f5666f2 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<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
*/
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_channel_unlock(chan);
diff --git a/apps/app_dictate.c b/apps/app_dictate.c
index 5bf439d16..b50fbb044 100644
--- a/apps/app_dictate.c
+++ b/apps/app_dictate.c
@@ -27,6 +27,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_directed_pickup.c b/apps/app_directed_pickup.c
index 63a7621ff..1b47d011a 100644
--- a/apps/app_directed_pickup.c
+++ b/apps/app_directed_pickup.c
@@ -29,6 +29,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
@@ -76,9 +80,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<synopsis>
Pickup a ringing channel.
</synopsis>
- <syntax>
- <parameter name="channel" required="true" />
- <parameter name="channel2" multiple="true" />
+ <syntax >
+ <parameter name="Technology/Resource" argsep="&amp;" required="true">
+ <argument name="Technology/Resource" required="true" />
+ <argument name="Technology2/Resource2" required="false" multiple="true" />
+ </parameter>
<parameter name="options" required="false">
<optionlist>
<option name="p">
diff --git a/apps/app_directory.c b/apps/app_directory.c
index 305bcdd7b..dccae948b 100644
--- a/apps/app_directory.c
+++ b/apps/app_directory.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<depend>app_voicemail</depend>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
@@ -57,7 +58,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<parameter name="dial-context" required="false">
<para>This is the dialplan context to use when looking for an
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 name="options" required="false">
<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)
{
- 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_goto_if_exists(chan, chan->macrocontext, ext, 1))) {
return 0;
@@ -685,11 +687,11 @@ static int do_directory(struct ast_channel *chan, struct ast_config *vmcfg, stru
int count, i;
char ext[10] = "";
- if (digit == '0' && !goto_exten(chan, S_OR(dialcontext, "default"), "o")) {
+ if (digit == '0' && !goto_exten(chan, dialcontext, "o")) {
return digit;
}
- if (digit == '*' && !goto_exten(chan, S_OR(dialcontext, "default"), "a")) {
+ if (digit == '*' && !goto_exten(chan, dialcontext, "a")) {
return digit;
}
diff --git a/apps/app_disa.c b/apps/app_disa.c
index 20c9ce48c..3ca080009 100644
--- a/apps/app_disa.c
+++ b/apps/app_disa.c
@@ -26,6 +26,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_dumpchan.c b/apps/app_dumpchan.c
index f9e657201..0a9fa6888 100644
--- a/apps/app_dumpchan.c
+++ b/apps/app_dumpchan.c
@@ -28,6 +28,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_echo.c b/apps/app_echo.c
index ab991427d..48e6714e2 100644
--- a/apps/app_echo.c
+++ b/apps/app_echo.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_exec.c b/apps/app_exec.c
index 2a4da1e2f..ab9a9aece 100644
--- a/apps/app_exec.c
+++ b/apps/app_exec.c
@@ -26,6 +26,9 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_externalivr.c b/apps/app_externalivr.c
index 258a1e5c7..4eb99c1bb 100644
--- a/apps/app_externalivr.c
+++ b/apps/app_externalivr.c
@@ -31,6 +31,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_fax.c b/apps/app_fax.c
index 0d59dfa3a..e2085cbbb 100644
--- a/apps/app_fax.c
+++ b/apps/app_fax.c
@@ -16,6 +16,7 @@
<defaultenabled>no</defaultenabled>
<depend>spandsp</depend>
<conflict>res_fax</conflict>
+ <support_level>extended</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_festival.c b/apps/app_festival.c
index a30302fa7..d609b3fe4 100644
--- a/apps/app_festival.c
+++ b/apps/app_festival.c
@@ -27,6 +27,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_flash.c b/apps/app_flash.c
index dedadfeab..3273b5b0a 100644
--- a/apps/app_flash.c
+++ b/apps/app_flash.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<depend>dahdi</depend>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_followme.c b/apps/app_followme.c
index 7ed874928..a72ef307a 100644
--- a/apps/app_followme.c
+++ b/apps/app_followme.c
@@ -30,6 +30,7 @@
/*** MODULEINFO
<depend>chan_local</depend>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_forkcdr.c b/apps/app_forkcdr.c
index 12d504914..ffeeca8ec 100644
--- a/apps/app_forkcdr.c
+++ b/apps/app_forkcdr.c
@@ -26,6 +26,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_getcpeid.c b/apps/app_getcpeid.c
index 220708156..7f59976eb 100644
--- a/apps/app_getcpeid.c
+++ b/apps/app_getcpeid.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_ices.c b/apps/app_ices.c
index 729375313..52c03ae09 100644
--- a/apps/app_ices.c
+++ b/apps/app_ices.c
@@ -26,6 +26,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_image.c b/apps/app_image.c
index af4abd7e9..160a28569 100644
--- a/apps/app_image.c
+++ b/apps/app_image.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_ivrdemo.c b/apps/app_ivrdemo.c
index a9c61209a..d035df91f 100644
--- a/apps/app_ivrdemo.c
+++ b/apps/app_ivrdemo.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<defaultenabled>no</defaultenabled>
+ <support_level>extended</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_jack.c b/apps/app_jack.c
index 07ab8da79..893a5dec0 100644
--- a/apps/app_jack.c
+++ b/apps/app_jack.c
@@ -37,6 +37,7 @@
/*** MODULEINFO
<depend>jack</depend>
<depend>resample</depend>
+ <support_level>extended</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_macro.c b/apps/app_macro.c
index aecc0327e..651fac50d 100644
--- a/apps/app_macro.c
+++ b/apps/app_macro.c
@@ -25,6 +25,11 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>deprecated</support_level>
+ <replacement>app_stack (GoSub)</replacement>
+ */
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 40f5b0ee4..f0ab25903 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -31,6 +31,9 @@
/*** MODULEINFO
<depend>dahdi</depend>
+ <defaultenabled>no</defaultenabled>
+ <support_level>deprecated</support_level>
+ <replacement>app_confbridge</replacement>
***/
#include "asterisk.h"
@@ -4416,15 +4419,13 @@ static int conf_exec(struct ast_channel *chan, const char *data)
res = -1;
}
} else {
- if (((!ast_strlen_zero(cnf->pin) &&
- !ast_test_flag64(&confflags, CONFFLAG_ADMIN)) ||
- (!ast_strlen_zero(cnf->pinadmin) &&
- ast_test_flag64(&confflags, CONFFLAG_ADMIN)) ||
- (!ast_strlen_zero(cnf->pin) &&
- ast_strlen_zero(cnf->pinadmin) &&
- ast_test_flag64(&confflags, CONFFLAG_ADMIN))) &&
- ((!(cnf->users == 0 && cnf->isdynamic)) ||
- ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT))) {
+ /* Check to see if the conference requires a pin
+ * and we ALWAYS prompt or no pin was provided */
+ if ((!ast_strlen_zero(cnf->pin) ||
+ (!ast_strlen_zero(cnf->pinadmin) &&
+ ast_test_flag64(&confflags, CONFFLAG_ADMIN))) &&
+ (ast_test_flag64(&confflags, CONFFLAG_ALWAYSPROMPT) ||
+ ast_strlen_zero(args.pin))) {
char pin[MAX_PIN] = "";
int j;
diff --git a/apps/app_milliwatt.c b/apps/app_milliwatt.c
index 26cba3c40..dc37e7e89 100644
--- a/apps/app_milliwatt.c
+++ b/apps/app_milliwatt.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_minivm.c b/apps/app_minivm.c
index 124a04d4f..3445b7ec6 100644
--- a/apps/app_minivm.c
+++ b/apps/app_minivm.c
@@ -141,6 +141,10 @@
* Back: \ref App_minivm
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c
index 29463e253..c263b1445 100644
--- a/apps/app_mixmonitor.c
+++ b/apps/app_mixmonitor.c
@@ -33,6 +33,10 @@
* Anthony Minessale II <anthmct@yahoo.com>
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
@@ -47,6 +51,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/channel.h"
#include "asterisk/autochan.h"
#include "asterisk/manager.h"
+#include "asterisk/mod_format.h"
/*** DOCUMENTATION
<application name="MixMonitor" language="en_US">
@@ -225,6 +230,8 @@ struct mixmonitor_ds {
struct ast_filestream *fs_write;
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) {
*oflags = O_CREAT | O_WRONLY;
*oflags |= ast_test_flag(mixmonitor, MUXFLAG_APPEND) ? O_APPEND : O_TRUNC;
-
+
last_slash = strrchr(filename, '/');
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))) {
ast_log(LOG_ERROR, "Cannot open %s.%s\n", filename, ext);
*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;
struct ast_format format_slin;
- ast_format_set(&format_slin, AST_FORMAT_SLINEAR, 0);
ast_verb(2, "Begin MixMonitor Recording %s\n", mixmonitor->name);
fs = &mixmonitor->mixmonitor_ds->fs;
fs_read = &mixmonitor->mixmonitor_ds->fs_read;
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 */
ast_audiohook_lock(&mixmonitor->audiohook);
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))) {
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) */
if ((*fs_read) && (fr_read)) {
@@ -484,6 +500,8 @@ static int setup_mixmonitor_ds(struct mixmonitor *mixmonitor, struct ast_channel
return -1;
}
+
+ mixmonitor_ds->samp_rate = 8000;
mixmonitor_ds->audiohook = &mixmonitor->audiohook;
datastore->data = mixmonitor_ds;
diff --git a/apps/app_morsecode.c b/apps/app_morsecode.c
index a234cd431..67e242f7b 100644
--- a/apps/app_morsecode.c
+++ b/apps/app_morsecode.c
@@ -24,6 +24,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_mp3.c b/apps/app_mp3.c
index f8c5a0578..922d42a5b 100644
--- a/apps/app_mp3.c
+++ b/apps/app_mp3.c
@@ -27,6 +27,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_nbscat.c b/apps/app_nbscat.c
index 2bbde630e..093653495 100644
--- a/apps/app_nbscat.c
+++ b/apps/app_nbscat.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_originate.c b/apps/app_originate.c
index bc811d958..5cfd41386 100644
--- a/apps/app_originate.c
+++ b/apps/app_originate.c
@@ -32,6 +32,10 @@
* Set options for call files.
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_osplookup.c b/apps/app_osplookup.c
index 239d6d501..9dbf39752 100644
--- a/apps/app_osplookup.c
+++ b/apps/app_osplookup.c
@@ -31,6 +31,7 @@
/*** MODULEINFO
<depend>osptk</depend>
<depend>openssl</depend>
+ <support_level>extended</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_page.c b/apps/app_page.c
index 656dcf571..cf2101446 100644
--- a/apps/app_page.c
+++ b/apps/app_page.c
@@ -28,6 +28,7 @@
/*** MODULEINFO
<depend>dahdi</depend>
<depend>app_meetme</depend>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_parkandannounce.c b/apps/app_parkandannounce.c
index fb3e713e1..70633745b 100644
--- a/apps/app_parkandannounce.c
+++ b/apps/app_parkandannounce.c
@@ -29,6 +29,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_playback.c b/apps/app_playback.c
index 1e198470e..ea4d90b19 100644
--- a/apps/app_playback.c
+++ b/apps/app_playback.c
@@ -24,7 +24,11 @@
*
* \ingroup applications
*/
-
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_playtones.c b/apps/app_playtones.c
index c9c0fbb99..1e142de23 100644
--- a/apps/app_playtones.c
+++ b/apps/app_playtones.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_privacy.c b/apps/app_privacy.c
index 6a6c1a437..6b191771c 100644
--- a/apps/app_privacy.c
+++ b/apps/app_privacy.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 9442ce649..025c84cac 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -58,6 +58,7 @@
/*** MODULEINFO
<use type="module">res_monitor</use>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
@@ -1572,7 +1573,7 @@ static int extensionstate2devicestate(int 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 member *m;
diff --git a/apps/app_read.c b/apps/app_read.c
index a5e4a6434..813d37565 100644
--- a/apps/app_read.c
+++ b/apps/app_read.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_readexten.c b/apps/app_readexten.c
index 5e8159b35..94dc1e1f8 100644
--- a/apps/app_readexten.c
+++ b/apps/app_readexten.c
@@ -23,6 +23,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_readfile.c b/apps/app_readfile.c
index 8c3bcae64..d031406c2 100644
--- a/apps/app_readfile.c
+++ b/apps/app_readfile.c
@@ -25,6 +25,12 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <defaultenabled>no</defaultenabled>
+ <support_level>deprecated</support_level>
+ <replacement>func_env (FILE())</replacement>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_record.c b/apps/app_record.c
index a192b1adc..6098ca729 100644
--- a/apps/app_record.c
+++ b/apps/app_record.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_rpt.c b/apps/app_rpt.c
index 990f05423..f37083695 100644
--- a/apps/app_rpt.c
+++ b/apps/app_rpt.c
@@ -155,6 +155,7 @@
<depend>dahdi</depend>
<depend>tonezone</depend>
<defaultenabled>no</defaultenabled>
+ <support_level>extended</support_level>
***/
/* Un-comment the following to include support for MDC-1200 digital tone
diff --git a/apps/app_saycounted.c b/apps/app_saycounted.c
index c840d8bb0..be3ac65ef 100644
--- a/apps/app_saycounted.c
+++ b/apps/app_saycounted.c
@@ -26,6 +26,7 @@
/*** MODULEINFO
<defaultenabled>no</defaultenabled>
+ <support_level>extended</support_level>
***/
/*** DOCUMENTATION
diff --git a/apps/app_sayunixtime.c b/apps/app_sayunixtime.c
index 55afdf463..fc1b238dd 100644
--- a/apps/app_sayunixtime.c
+++ b/apps/app_sayunixtime.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_senddtmf.c b/apps/app_senddtmf.c
index 2af67a299..5c8425a0f 100644
--- a/apps/app_senddtmf.c
+++ b/apps/app_senddtmf.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_sendtext.c b/apps/app_sendtext.c
index 2624fe505..a723de5b9 100644
--- a/apps/app_sendtext.c
+++ b/apps/app_sendtext.c
@@ -26,6 +26,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_setcallerid.c b/apps/app_setcallerid.c
index 666e46ff4..cfcd2b47d 100644
--- a/apps/app_setcallerid.c
+++ b/apps/app_setcallerid.c
@@ -24,7 +24,13 @@
*
* \ingroup applications
*/
-
+
+/*** MODULEINFO
+ <defaultenabled>no</defaultenabled>
+ <support_level>deprecated</support_level>
+ <replacement>func_callerid</replacement>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_skel.c b/apps/app_skel.c
index c58d451e4..bd3b546e0 100644
--- a/apps/app_skel.c
+++ b/apps/app_skel.c
@@ -31,6 +31,7 @@
/*** MODULEINFO
<defaultenabled>no</defaultenabled>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_sms.c b/apps/app_sms.c
index 07af71d1c..e3f8c5260 100644
--- a/apps/app_sms.c
+++ b/apps/app_sms.c
@@ -34,6 +34,10 @@
* Not fully tested, under development
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_softhangup.c b/apps/app_softhangup.c
index 1c880b4e8..cdfd7c147 100644
--- a/apps/app_softhangup.c
+++ b/apps/app_softhangup.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_speech_utils.c b/apps/app_speech_utils.c
index fe99157e9..637aac613 100644
--- a/apps/app_speech_utils.c
+++ b/apps/app_speech_utils.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
diff --git a/apps/app_stack.c b/apps/app_stack.c
index 10a1af48d..c5f0b6aff 100644
--- a/apps/app_stack.c
+++ b/apps/app_stack.c
@@ -27,6 +27,7 @@
/*** MODULEINFO
<use type="module">res_agi</use>
+ <support_level>core</support_level>
***/
#include "asterisk.h"
diff --git a/apps/app_talkdetect.c b/apps/app_talkdetect.c
index 545261c72..9eb800287 100644
--- a/apps/app_talkdetect.c
+++ b/apps/app_talkdetect.c
@@ -24,7 +24,11 @@
*
* \ingroup applications
*/
-
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_test.c b/apps/app_test.c
index 7d0214a59..32b6fc02b 100644
--- a/apps/app_test.c
+++ b/apps/app_test.c
@@ -27,6 +27,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_transfer.c b/apps/app_transfer.c
index ad6e8011e..f072eb27f 100644
--- a/apps/app_transfer.c
+++ b/apps/app_transfer.c
@@ -27,6 +27,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_url.c b/apps/app_url.c
index 533c11212..f33890c76 100644
--- a/apps/app_url.c
+++ b/apps/app_url.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/app_userevent.c b/apps/app_userevent.c
index 1e1e4a9cd..59bea65df 100644
--- a/apps/app_userevent.c
+++ b/apps/app_userevent.c
@@ -21,6 +21,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_verbose.c b/apps/app_verbose.c
index 85f79f892..ca1a010cc 100644
--- a/apps/app_verbose.c
+++ b/apps/app_verbose.c
@@ -24,6 +24,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 971e1879d..764a44520 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -40,6 +40,7 @@
/*** MODULEINFO
<use type="module">res_adsi</use>
<use type="module">res_smdi</use>
+ <support_level>core</support_level>
***/
/*** MAKEOPTS
@@ -1215,6 +1216,9 @@ static int check_password(struct ast_vm_user *vmu, char *password)
/* check minimum length */
if (strlen(password) < minpassword)
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)) {
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")) {
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 */
- if (ast_strlen_zero(retval->password))
- ast_copy_string(retval->password, var->value, sizeof(retval->password));
+ if (ast_strlen_zero(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")) {
ast_copy_string(retval->uniqueid, var->value, sizeof(retval->uniqueid));
} 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] == '*') {
/* user entered '*' */
+ ast_verb(4, "Mailbox begins with '*', attempting jump to extension 'a'\n");
if (ast_exists_extension(chan, chan->context, "a", 1,
S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
return -1;
}
+ ast_verb(4, "Jump to extension 'a' failed; setting mailbox to NULL\n");
mailbox[0] = '\0';
}
@@ -9694,12 +9706,16 @@ static int vm_authenticate(struct ast_channel *chan, char *mailbox, int mailbox_
return -1;
} else if (password[0] == '*') {
/* user entered '*' */
+ ast_verb(4, "Password begins with '*', attempting jump to extension 'a'\n");
if (ast_exists_extension(chan, chan->context, "a", 1,
S_COR(chan->caller.id.number.valid, chan->caller.id.number.str, NULL))) {
mailbox[0] = '*';
return -1;
}
+ ast_verb(4, "Jump to extension 'a' failed; setting mailbox and user to NULL\n");
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;
+ 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) {
if (ast_test_flag((&globalflags), VM_SEARCH) && !strcasecmp(box, vmu->mailbox)) {
if (strcasecmp(vmu->context, context)) {
@@ -10594,6 +10618,11 @@ static int append_mailbox(const char *context, const char *box, const char *data
stringp = tmp;
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));
}
if (stringp && (s = strsep(&stringp, ","))) {
diff --git a/apps/app_waitforring.c b/apps/app_waitforring.c
index 7ddc9db12..bd0353b07 100644
--- a/apps/app_waitforring.c
+++ b/apps/app_waitforring.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_waitforsilence.c b/apps/app_waitforsilence.c
index fe4b1e14d..a920e11a8 100644
--- a/apps/app_waitforsilence.c
+++ b/apps/app_waitforsilence.c
@@ -38,6 +38,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_waituntil.c b/apps/app_waituntil.c
index 04905edc5..d1f4bb103 100644
--- a/apps/app_waituntil.c
+++ b/apps/app_waituntil.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_while.c b/apps/app_while.c
index 80359359e..45bd65594 100644
--- a/apps/app_while.c
+++ b/apps/app_while.c
@@ -25,6 +25,10 @@
* \ingroup applications
*/
+/*** MODULEINFO
+ <support_level>core</support_level>
+ ***/
+
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
diff --git a/apps/app_zapateller.c b/apps/app_zapateller.c
index 6af9b963c..b102ea426 100644
--- a/apps/app_zapateller.c
+++ b/apps/app_zapateller.c
@@ -24,6 +24,10 @@
*
* \ingroup applications
*/
+
+/*** MODULEINFO
+ <support_level>extended</support_level>
+ ***/
#include "asterisk.h"
diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c
index 8864f52bc..d11b82582 100644
--- a/apps/confbridge/conf_config_parser.c
+++ b/apps/confbridge/conf_config_parser.c
@@ -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_LEAVE:
case MENU_ACTION_SET_SINGLE_VIDEO_SRC:
+ case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
break;
case MENU_ACTION_PLAYBACK:
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);
} else if (!strcasecmp(action, "set_as_single_video_src")) {
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)) {
ast_copy_string(buf, action, sizeof(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:
ast_cli(a->fd, "set_as_single_video_src");
break;
+ case MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC:
+ ast_cli(a->fd, "release_as_single_video_src");
+ break;
}
action_num++;
}
diff --git a/apps/confbridge/include/confbridge.h b/apps/confbridge/include/confbridge.h
index 7a2f6bb07..ab4a8c4b0 100644
--- a/apps/confbridge/include/confbridge.h
+++ b/apps/confbridge/include/confbridge.h
@@ -82,6 +82,7 @@ enum conf_menu_action_id {
MENU_ACTION_LEAVE,
MENU_ACTION_NOOP,
MENU_ACTION_SET_SINGLE_VIDEO_SRC,
+ MENU_ACTION_RELEASE_SINGLE_VIDEO_SRC,
};
/*! The conference menu action contains both