diff options
Diffstat (limited to 'apps')
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="&" 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 |