summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorOlle Johansson <oej@edvina.net>2008-05-14 12:32:57 +0000
committerOlle Johansson <oej@edvina.net>2008-05-14 12:32:57 +0000
commit29b1d7356730d4a419d0f66828ef9078f1db3119 (patch)
tree33fa7c9bc63426c37001a6a915951427181aa96e /main
parente4c544cd5ab371cd6a87bf0c22f7c8e8a981ea85 (diff)
Add support for codec settings in originate via call file and manager.
This is to enable video and text in originated calls. Development sponsored by Omnitor AB, Sweden. (http://www.omnitor.se) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@116229 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/manager.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/main/manager.c b/main/manager.c
index 665b3e1fb..2df5e8164 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -2106,11 +2106,12 @@ static int action_command(struct mansession *s, const struct message *m)
return 0;
}
-/* helper function for originate */
+/*! \brief helper function for originate */
struct fast_originate_helper {
char tech[AST_MAX_EXTENSION];
char data[AST_MAX_EXTENSION];
int timeout;
+ int format; /*!< Codecs used for a call */
char app[AST_MAX_APP];
char appdata[AST_MAX_EXTENSION];
char cid_name[AST_MAX_EXTENSION];
@@ -2132,12 +2133,12 @@ static void *fast_originate(void *data)
char requested_channel[AST_CHANNEL_NAME];
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_name, NULL),
in->vars, in->account, &chan);
} 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_name, NULL),
in->vars, in->account, &chan);
@@ -2198,6 +2199,7 @@ static int action_originate(struct mansession *s, const struct message *m)
const char *appdata = astman_get_header(m, "Data");
const char *async = astman_get_header(m, "Async");
const char *id = astman_get_header(m, "ActionID");
+ const char *codecs = astman_get_header(m, "Codecs");
struct ast_variable *vars = astman_get_variables(m);
char *tech, *data;
char *l = NULL, *n = NULL;
@@ -2207,6 +2209,7 @@ static int action_originate(struct mansession *s, const struct message *m)
int reason = 0;
char tmp[256];
char tmp2[256];
+ int format = AST_FORMAT_SLINEAR;
pthread_t th;
if (!name) {
@@ -2242,6 +2245,10 @@ static int action_originate(struct mansession *s, const struct message *m)
if (ast_strlen_zero(l))
l = NULL;
}
+ if (!ast_strlen_zero(codecs)) {
+ format = 0;
+ ast_parse_allow_disallow(NULL, &format, codecs, 1);
+ }
if (ast_true(async)) {
struct fast_originate_helper *fast = ast_calloc(1, sizeof(*fast));
if (!fast) {
@@ -2261,6 +2268,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->exten, exten, sizeof(fast->exten));
ast_copy_string(fast->account, account, sizeof(fast->account));
+ fast->format = format;
fast->timeout = to;
fast->priority = pi;
if (ast_pthread_create_detached(&th, NULL, fast_originate, fast)) {
@@ -2285,10 +2293,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.");
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 {
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 {
astman_send_error(s, m, "Originate with 'Exten' requires 'Context' and 'Priority'");
return 0;