mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 02:26:23 +00:00
automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42787 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -96,7 +96,8 @@ static const char *descrip =
|
|||||||
" 's' -- Present menu (user or admin) when '*' is received ('send' to menu)\n"
|
" 's' -- Present menu (user or admin) when '*' is received ('send' to menu)\n"
|
||||||
" 't' -- set talk only mode. (Talk only, no listening)\n"
|
" 't' -- set talk only mode. (Talk only, no listening)\n"
|
||||||
" 'T' -- set talker detection (sent to manager interface and meetme list)\n"
|
" 'T' -- set talker detection (sent to manager interface and meetme list)\n"
|
||||||
" 'w' -- wait until the marked user enters the conference\n"
|
" 'w[(<secs>)]'\n"
|
||||||
|
" -- wait until the marked user enters the conference\n"
|
||||||
" 'x' -- close the conference when last marked user exits\n"
|
" 'x' -- close the conference when last marked user exits\n"
|
||||||
" 'X' -- allow user to exit the conference by entering a valid single\n"
|
" 'X' -- allow user to exit the conference by entering a valid single\n"
|
||||||
" digit extension ${MEETME_EXIT_CONTEXT} or the current context\n"
|
" digit extension ${MEETME_EXIT_CONTEXT} or the current context\n"
|
||||||
@@ -227,6 +228,10 @@ static void *recordthread(void *args);
|
|||||||
#define CONFFLAG_EMPTYNOPIN (1 << 20)
|
#define CONFFLAG_EMPTYNOPIN (1 << 20)
|
||||||
#define CONFFLAG_ALWAYSPROMPT (1 << 21)
|
#define CONFFLAG_ALWAYSPROMPT (1 << 21)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
OPT_ARG_WAITMARKED = 0,
|
||||||
|
OPT_ARG_ARRAY_SIZE = 1,
|
||||||
|
} meetme_option_args;
|
||||||
|
|
||||||
AST_APP_OPTIONS(meetme_opts, {
|
AST_APP_OPTIONS(meetme_opts, {
|
||||||
AST_APP_OPTION('a', CONFFLAG_ADMIN ),
|
AST_APP_OPTION('a', CONFFLAG_ADMIN ),
|
||||||
@@ -243,7 +248,7 @@ AST_APP_OPTIONS(meetme_opts, {
|
|||||||
AST_APP_OPTION('X', CONFFLAG_EXIT_CONTEXT ),
|
AST_APP_OPTION('X', CONFFLAG_EXIT_CONTEXT ),
|
||||||
AST_APP_OPTION('A', CONFFLAG_MARKEDUSER ),
|
AST_APP_OPTION('A', CONFFLAG_MARKEDUSER ),
|
||||||
AST_APP_OPTION('b', CONFFLAG_AGI ),
|
AST_APP_OPTION('b', CONFFLAG_AGI ),
|
||||||
AST_APP_OPTION('w', CONFFLAG_WAITMARKED ),
|
AST_APP_OPTION_ARG('w', CONFFLAG_WAITMARKED, OPT_ARG_WAITMARKED ),
|
||||||
AST_APP_OPTION('r', CONFFLAG_RECORDCONF ),
|
AST_APP_OPTION('r', CONFFLAG_RECORDCONF ),
|
||||||
AST_APP_OPTION('d', CONFFLAG_DYNAMIC ),
|
AST_APP_OPTION('d', CONFFLAG_DYNAMIC ),
|
||||||
AST_APP_OPTION('D', CONFFLAG_DYNAMICPIN ),
|
AST_APP_OPTION('D', CONFFLAG_DYNAMICPIN ),
|
||||||
@@ -790,7 +795,7 @@ static int conf_free(struct ast_conference *conf)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags)
|
static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int confflags, char *optargs[])
|
||||||
{
|
{
|
||||||
struct ast_conf_user *user = calloc(1, sizeof(*user));
|
struct ast_conf_user *user = calloc(1, sizeof(*user));
|
||||||
struct ast_conf_user *usr = NULL;
|
struct ast_conf_user *usr = NULL;
|
||||||
@@ -822,7 +827,8 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|||||||
char meetmesecs[30] = "";
|
char meetmesecs[30] = "";
|
||||||
char exitcontext[AST_MAX_CONTEXT] = "";
|
char exitcontext[AST_MAX_CONTEXT] = "";
|
||||||
char recordingtmp[AST_MAX_EXTENSION] = "";
|
char recordingtmp[AST_MAX_EXTENSION] = "";
|
||||||
int dtmf;
|
int dtmf, opt_waitmarked_timeout = 0;
|
||||||
|
time_t timeout = 0;
|
||||||
ZT_BUFFERINFO bi;
|
ZT_BUFFERINFO bi;
|
||||||
char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
|
char __buf[CONF_SIZE + AST_FRIENDLY_OFFSET];
|
||||||
char *buf = __buf + AST_FRIENDLY_OFFSET;
|
char *buf = __buf + AST_FRIENDLY_OFFSET;
|
||||||
@@ -832,6 +838,14 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Possible timeout waiting for marked user */
|
||||||
|
if ((confflags & CONFFLAG_WAITMARKED) &&
|
||||||
|
!ast_strlen_zero(optargs[OPT_ARG_WAITMARKED]) &&
|
||||||
|
(sscanf(optargs[OPT_ARG_WAITMARKED], "%d", &opt_waitmarked_timeout) == 1) &&
|
||||||
|
(opt_waitmarked_timeout > 0)) {
|
||||||
|
timeout = time(NULL) + opt_waitmarked_timeout;
|
||||||
|
}
|
||||||
|
|
||||||
if (confflags & CONFFLAG_RECORDCONF && conf->recording !=MEETME_RECORD_ACTIVE) {
|
if (confflags & CONFFLAG_RECORDCONF && conf->recording !=MEETME_RECORD_ACTIVE) {
|
||||||
conf->recordingfilename = pbx_builtin_getvar_helper(chan, "MEETME_RECORDINGFILE");
|
conf->recordingfilename = pbx_builtin_getvar_helper(chan, "MEETME_RECORDINGFILE");
|
||||||
if (!conf->recordingfilename) {
|
if (!conf->recordingfilename) {
|
||||||
@@ -1118,7 +1132,10 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
|||||||
|
|
||||||
outfd = -1;
|
outfd = -1;
|
||||||
ms = -1;
|
ms = -1;
|
||||||
|
|
||||||
|
if (timeout && time(NULL) >= timeout)
|
||||||
|
break;
|
||||||
|
|
||||||
/* if we have just exited from the menu, and the user had a channel-driver
|
/* if we have just exited from the menu, and the user had a channel-driver
|
||||||
volume adjustment, restore it
|
volume adjustment, restore it
|
||||||
*/
|
*/
|
||||||
@@ -1775,6 +1792,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
|
|||||||
int empty = 0, empty_no_pin = 0;
|
int empty = 0, empty_no_pin = 0;
|
||||||
int always_prompt = 0;
|
int always_prompt = 0;
|
||||||
char *notdata, *info, *inflags = NULL, *inpin = NULL, the_pin[AST_MAX_EXTENSION] = "";
|
char *notdata, *info, *inflags = NULL, *inpin = NULL, the_pin[AST_MAX_EXTENSION] = "";
|
||||||
|
char *optargs[OPT_ARG_ARRAY_SIZE] = { NULL, };
|
||||||
|
|
||||||
LOCAL_USER_ADD(u);
|
LOCAL_USER_ADD(u);
|
||||||
|
|
||||||
@@ -1805,7 +1823,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
|
|||||||
ast_copy_string(the_pin, inpin, sizeof(the_pin));
|
ast_copy_string(the_pin, inpin, sizeof(the_pin));
|
||||||
|
|
||||||
if (inflags) {
|
if (inflags) {
|
||||||
ast_app_parse_options(meetme_opts, &confflags, NULL, inflags);
|
ast_app_parse_options(meetme_opts, &confflags, optargs, inflags);
|
||||||
dynamic = ast_test_flag(&confflags, CONFFLAG_DYNAMIC | CONFFLAG_DYNAMICPIN);
|
dynamic = ast_test_flag(&confflags, CONFFLAG_DYNAMIC | CONFFLAG_DYNAMICPIN);
|
||||||
if (ast_test_flag(&confflags, CONFFLAG_DYNAMICPIN) && !inpin)
|
if (ast_test_flag(&confflags, CONFFLAG_DYNAMICPIN) && !inpin)
|
||||||
strcpy(the_pin, "q");
|
strcpy(the_pin, "q");
|
||||||
@@ -1962,7 +1980,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
|
|||||||
if (!ast_strlen_zero(cnf->pinadmin) && !strcasecmp(pin, cnf->pinadmin))
|
if (!ast_strlen_zero(cnf->pinadmin) && !strcasecmp(pin, cnf->pinadmin))
|
||||||
ast_set_flag(&confflags, CONFFLAG_ADMIN);
|
ast_set_flag(&confflags, CONFFLAG_ADMIN);
|
||||||
/* Run the conference */
|
/* Run the conference */
|
||||||
res = conf_run(chan, cnf, confflags.flags);
|
res = conf_run(chan, cnf, confflags.flags, optargs);
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
/* Pin invalid */
|
/* Pin invalid */
|
||||||
@@ -2003,7 +2021,7 @@ static int conf_exec(struct ast_channel *chan, void *data)
|
|||||||
allowretry = 0;
|
allowretry = 0;
|
||||||
|
|
||||||
/* Run the conference */
|
/* Run the conference */
|
||||||
res = conf_run(chan, cnf, confflags.flags);
|
res = conf_run(chan, cnf, confflags.flags, optargs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -179,7 +179,7 @@ static int page_exec(struct ast_channel *chan, void *data)
|
|||||||
if (options)
|
if (options)
|
||||||
ast_app_parse_options(page_opts, &flags, NULL, options);
|
ast_app_parse_options(page_opts, &flags, NULL, options);
|
||||||
|
|
||||||
snprintf(meetmeopts, sizeof(meetmeopts), "%ud|%sqxdw", confid, ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m");
|
snprintf(meetmeopts, sizeof(meetmeopts), "%ud|%sqxdw(5)", confid, ast_test_flag(&flags, PAGE_DUPLEX) ? "" : "m");
|
||||||
|
|
||||||
while ((tech = strsep(&tmp, "&"))) {
|
while ((tech = strsep(&tmp, "&"))) {
|
||||||
/* don't call the originating device */
|
/* don't call the originating device */
|
||||||
|
Reference in New Issue
Block a user