Merged revisions 134980 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

................
r134980 | tilghman | 2008-07-31 16:55:42 -0500 (Thu, 31 Jul 2008) | 16 lines

Blocked revisions 134976 via svnmerge

........
r134976 | tilghman | 2008-07-31 16:53:19 -0500 (Thu, 31 Jul 2008) | 9 lines

Specify codecs in callfiles and manager, to allow video calls to be set up
from callfiles and AMI.
(closes issue #9531)
 Reported by: Geisj
 Patches: 
       20080715__bug9531__1.4.diff.txt uploaded by Corydon76 (license 14)
       20080715__bug9531__1.6.0.diff.txt uploaded by Corydon76 (license 14)
 Tested by: Corydon76

........

................


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@134981 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Tilghman Lesher 17 years ago
parent 2ea9a77dc1
commit 6d0cdb3f22

@ -2037,11 +2037,12 @@ static int action_command(struct mansession *s, const struct message *m)
return 0; return 0;
} }
/* helper function for originate */ /*! \brief helper function for originate */
struct fast_originate_helper { struct fast_originate_helper {
char tech[AST_MAX_EXTENSION]; char tech[AST_MAX_EXTENSION];
char data[AST_MAX_EXTENSION]; char data[AST_MAX_EXTENSION];
int timeout; int timeout;
int format; /*!< Codecs used for a call */
char app[AST_MAX_APP]; char app[AST_MAX_APP];
char appdata[AST_MAX_EXTENSION]; char appdata[AST_MAX_EXTENSION];
char cid_name[AST_MAX_EXTENSION]; char cid_name[AST_MAX_EXTENSION];
@ -2063,12 +2064,12 @@ static void *fast_originate(void *data)
char requested_channel[AST_CHANNEL_NAME]; char requested_channel[AST_CHANNEL_NAME];
if (!ast_strlen_zero(in->app)) { if (!ast_strlen_zero(in->app)) {
res = ast_pbx_outgoing_app(in->tech, AST_FORMAT_SLINEAR, in->data, in->timeout, in->app, in->appdata, &reason, 1, res = ast_pbx_outgoing_app(in->tech, in->format, in->data, in->timeout, in->app, in->appdata, &reason, 1,
S_OR(in->cid_num, NULL), S_OR(in->cid_num, NULL),
S_OR(in->cid_name, NULL), S_OR(in->cid_name, NULL),
in->vars, in->account, &chan); in->vars, in->account, &chan);
} else { } else {
res = ast_pbx_outgoing_exten(in->tech, AST_FORMAT_SLINEAR, in->data, in->timeout, in->context, in->exten, in->priority, &reason, 1, res = ast_pbx_outgoing_exten(in->tech, in->format, in->data, in->timeout, in->context, in->exten, in->priority, &reason, 1,
S_OR(in->cid_num, NULL), S_OR(in->cid_num, NULL),
S_OR(in->cid_name, NULL), S_OR(in->cid_name, NULL),
in->vars, in->account, &chan); in->vars, in->account, &chan);
@ -2129,6 +2130,7 @@ static int action_originate(struct mansession *s, const struct message *m)
const char *appdata = astman_get_header(m, "Data"); const char *appdata = astman_get_header(m, "Data");
const char *async = astman_get_header(m, "Async"); const char *async = astman_get_header(m, "Async");
const char *id = astman_get_header(m, "ActionID"); const char *id = astman_get_header(m, "ActionID");
const char *codecs = astman_get_header(m, "Codecs");
struct ast_variable *vars = astman_get_variables(m); struct ast_variable *vars = astman_get_variables(m);
char *tech, *data; char *tech, *data;
char *l = NULL, *n = NULL; char *l = NULL, *n = NULL;
@ -2138,6 +2140,7 @@ static int action_originate(struct mansession *s, const struct message *m)
int reason = 0; int reason = 0;
char tmp[256]; char tmp[256];
char tmp2[256]; char tmp2[256];
int format = AST_FORMAT_SLINEAR;
pthread_t th; pthread_t th;
if (!name) { if (!name) {
@ -2173,6 +2176,10 @@ static int action_originate(struct mansession *s, const struct message *m)
if (ast_strlen_zero(l)) if (ast_strlen_zero(l))
l = NULL; l = NULL;
} }
if (!ast_strlen_zero(codecs)) {
format = 0;
ast_parse_allow_disallow(NULL, &format, codecs, 1);
}
if (ast_true(async)) { if (ast_true(async)) {
struct fast_originate_helper *fast = ast_calloc(1, sizeof(*fast)); struct fast_originate_helper *fast = ast_calloc(1, sizeof(*fast));
if (!fast) { if (!fast) {
@ -2192,6 +2199,7 @@ static int action_originate(struct mansession *s, const struct message *m)
ast_copy_string(fast->context, context, sizeof(fast->context)); ast_copy_string(fast->context, context, sizeof(fast->context));
ast_copy_string(fast->exten, exten, sizeof(fast->exten)); ast_copy_string(fast->exten, exten, sizeof(fast->exten));
ast_copy_string(fast->account, account, sizeof(fast->account)); ast_copy_string(fast->account, account, sizeof(fast->account));
fast->format = format;
fast->timeout = to; fast->timeout = to;
fast->priority = pi; fast->priority = pi;
if (ast_pthread_create_detached(&th, NULL, fast_originate, fast)) { if (ast_pthread_create_detached(&th, NULL, fast_originate, fast)) {
@ -2217,10 +2225,10 @@ static int action_originate(struct mansession *s, const struct message *m)
astman_send_error(s, m, "Originate with certain 'Application' arguments requires the additional System privilege, which you do not have."); astman_send_error(s, m, "Originate with certain 'Application' arguments requires the additional System privilege, which you do not have.");
return 0; return 0;
} }
res = ast_pbx_outgoing_app(tech, AST_FORMAT_SLINEAR, data, to, app, appdata, &reason, 1, l, n, vars, account, NULL); res = ast_pbx_outgoing_app(tech, format, data, to, app, appdata, &reason, 1, l, n, vars, account, NULL);
} else { } else {
if (exten && context && pi) if (exten && context && pi)
res = ast_pbx_outgoing_exten(tech, AST_FORMAT_SLINEAR, data, to, context, exten, pi, &reason, 1, l, n, vars, account, NULL); res = ast_pbx_outgoing_exten(tech, format, data, to, context, exten, pi, &reason, 1, l, n, vars, account, NULL);
else { else {
astman_send_error(s, m, "Originate with 'Exten' requires 'Context' and 'Priority'"); astman_send_error(s, m, "Originate with 'Exten' requires 'Context' and 'Priority'");
return 0; return 0;

@ -71,6 +71,8 @@ struct outgoing {
int waittime; int waittime;
/*! PID which is currently calling */ /*! PID which is currently calling */
long callingpid; long callingpid;
/*! Formats (codecs) for this call */
int format;
/*! What to connect to outgoing */ /*! What to connect to outgoing */
char tech[256]; char tech[256];
@ -107,6 +109,7 @@ static void init_outgoing(struct outgoing *o)
o->priority = 1; o->priority = 1;
o->retrytime = 300; o->retrytime = 300;
o->waittime = 45; o->waittime = 45;
o->format = AST_FORMAT_SLINEAR;
ast_set_flag(&o->options, SPOOL_FLAG_ALWAYS_DELETE); ast_set_flag(&o->options, SPOOL_FLAG_ALWAYS_DELETE);
} }
@ -182,6 +185,8 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f)
ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, fn); ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, fn);
o->maxretries = 0; o->maxretries = 0;
} }
} else if (!strcasecmp(buf, "codecs")) {
ast_parse_allow_disallow(NULL, &o->format, c, 1);
} else if (!strcasecmp(buf, "context")) { } else if (!strcasecmp(buf, "context")) {
ast_copy_string(o->context, c, sizeof(o->context)); ast_copy_string(o->context, c, sizeof(o->context));
} else if (!strcasecmp(buf, "extension")) { } else if (!strcasecmp(buf, "extension")) {
@ -332,10 +337,10 @@ static void *attempt_thread(void *data)
int res, reason; int res, reason;
if (!ast_strlen_zero(o->app)) { if (!ast_strlen_zero(o->app)) {
ast_verb(3, "Attempting call on %s/%s for application %s(%s) (Retry %d)\n", o->tech, o->dest, o->app, o->data, o->retries); ast_verb(3, "Attempting call on %s/%s for application %s(%s) (Retry %d)\n", o->tech, o->dest, o->app, o->data, o->retries);
res = ast_pbx_outgoing_app(o->tech, AST_FORMAT_SLINEAR, o->dest, o->waittime * 1000, o->app, o->data, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, o->vars, o->account, NULL); res = ast_pbx_outgoing_app(o->tech, o->format, o->dest, o->waittime * 1000, o->app, o->data, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, o->vars, o->account, NULL);
} else { } else {
ast_verb(3, "Attempting call on %s/%s for %s@%s:%d (Retry %d)\n", o->tech, o->dest, o->exten, o->context,o->priority, o->retries); ast_verb(3, "Attempting call on %s/%s for %s@%s:%d (Retry %d)\n", o->tech, o->dest, o->exten, o->context,o->priority, o->retries);
res = ast_pbx_outgoing_exten(o->tech, AST_FORMAT_SLINEAR, o->dest, o->waittime * 1000, o->context, o->exten, o->priority, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, o->vars, o->account, NULL); res = ast_pbx_outgoing_exten(o->tech, o->format, o->dest, o->waittime * 1000, o->context, o->exten, o->priority, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, o->vars, o->account, NULL);
} }
if (res) { if (res) {
ast_log(LOG_NOTICE, "Call failed to go through, reason (%d) %s\n", reason, ast_channel_reason2str(reason)); ast_log(LOG_NOTICE, "Call failed to go through, reason (%d) %s\n", reason, ast_channel_reason2str(reason));

@ -15,6 +15,9 @@
# #
Channel: DAHDI/1 Channel: DAHDI/1
# #
# You can specify codecs for the call
Codecs: alaw, speex, h264
#
# You may also specify a wait time (default is 45 seconds) for how long to # You may also specify a wait time (default is 45 seconds) for how long to
# wait for the channel to be answered, a retry time (default is 5 mins) # wait for the channel to be answered, a retry time (default is 5 mins)
# for how soon to retry this call, and a maximum number of retries (default # for how soon to retry this call, and a maximum number of retries (default

Loading…
Cancel
Save