Merged revisions 335653 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/10

................
  r335653 | mnicholson | 2011-09-13 13:47:57 -0500 (Tue, 13 Sep 2011) | 12 lines
  
  Merged revisions 335618 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.8
  
  ........
    r335618 | mnicholson | 2011-09-13 13:20:52 -0500 (Tue, 13 Sep 2011) | 5 lines
    
    Don't limit the size of appdata for manager originate actions.
    
    ASTERISK-17709
    Patch by: tilghman (with modifications)
  ........
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@335654 65c4cc65-6c06-0410-ace0-fbb531ad65f3
certified/11.2
Matthew Nicholson 15 years ago
parent 2e2381341e
commit b292ff3b32

@ -81,6 +81,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#include "asterisk/features.h"
#include "asterisk/security_events.h"
#include "asterisk/aoc.h"
#include "asterisk/stringfields.h"
/*** DOCUMENTATION
<manager name="Ping" language="en_US">
@ -3604,14 +3605,16 @@ struct fast_originate_helper {
char data[512];
int timeout;
struct ast_format_cap *cap; /*!< Codecs used for a call */
char app[AST_MAX_APP];
char appdata[AST_MAX_EXTENSION];
char cid_name[AST_MAX_EXTENSION];
char cid_num[AST_MAX_EXTENSION];
char context[AST_MAX_CONTEXT];
char exten[AST_MAX_EXTENSION];
char idtext[AST_MAX_EXTENSION];
char account[AST_MAX_ACCOUNT_CODE];
AST_DECLARE_STRING_FIELDS (
AST_STRING_FIELD(app);
AST_STRING_FIELD(appdata);
AST_STRING_FIELD(cid_name);
AST_STRING_FIELD(cid_num);
AST_STRING_FIELD(context);
AST_STRING_FIELD(exten);
AST_STRING_FIELD(idtext);
AST_STRING_FIELD(account);
);
int priority;
struct ast_variable *vars;
};
@ -3663,6 +3666,7 @@ static void *fast_originate(void *data)
ast_channel_unlock(chan);
}
in->cap = ast_format_cap_destroy(in->cap);
ast_string_field_free_memory(in);
ast_free(in);
return NULL;
}
@ -3998,31 +4002,32 @@ static int action_originate(struct mansession *s, const struct message *m)
if (ast_true(async)) {
struct fast_originate_helper *fast = ast_calloc(1, sizeof(*fast));
if (!fast) {
if (!fast || ast_string_field_init(fast, 252)) {
if (fast) {
ast_free(fast);
}
res = -1;
} else {
if (!ast_strlen_zero(id))
snprintf(fast->idtext, sizeof(fast->idtext), "ActionID: %s", id);
ast_copy_string(fast->tech, tech, sizeof(fast->tech));
ast_copy_string(fast->data, data, sizeof(fast->data));
ast_copy_string(fast->app, app, sizeof(fast->app));
ast_copy_string(fast->appdata, appdata, sizeof(fast->appdata));
if (l) {
ast_copy_string(fast->cid_num, l, sizeof(fast->cid_num));
}
if (n) {
ast_copy_string(fast->cid_name, n, sizeof(fast->cid_name));
if (!ast_strlen_zero(id)) {
ast_string_field_build(fast, idtext, "ActionID: %s", id);
}
ast_string_field_set(fast, tech, tech);
ast_string_field_set(fast, data, data);
ast_string_field_set(fast, app, app);
ast_string_field_set(fast, appdata, appdata);
ast_string_field_set(fast, cid_num, l);
ast_string_field_set(fast, cid_name, n);
ast_string_field_set(fast, context, context);
ast_string_field_set(fast, exten, exten);
ast_string_field_set(fast, account, account);
fast->vars = vars;
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->cap = cap;
cap = NULL; /* transfered originate helper the capabilities structure. It is now responsible for freeing it. */
fast->timeout = to;
fast->priority = pi;
if (ast_pthread_create_detached(&th, NULL, fast_originate, fast)) {
ast_format_cap_destroy(fast->cap);
ast_string_field_free_memory(fast);
ast_free(fast);
res = -1;
} else {

@ -8905,10 +8905,12 @@ outgoing_exten_cleanup:
}
struct app_tmp {
char app[256];
char data[256];
struct ast_channel *chan;
pthread_t t;
AST_DECLARE_STRING_FIELDS (
AST_STRING_FIELD(app);
AST_STRING_FIELD(data);
);
};
/*! \brief run the application and free the descriptor once done */
@ -8923,6 +8925,7 @@ static void *ast_pbx_run_app(void *data)
} else
ast_log(LOG_WARNING, "No such application '%s'\n", tmp->app);
ast_hangup(tmp->chan);
ast_string_field_free_memory(tmp);
ast_free(tmp);
return NULL;
}
@ -8954,12 +8957,14 @@ int ast_pbx_outgoing_app(const char *type, struct ast_format_cap *cap, void *dat
res = 0;
ast_verb(4, "Channel %s was answered.\n", chan->name);
tmp = ast_calloc(1, sizeof(*tmp));
if (!tmp)
if (!tmp || ast_string_field_init(tmp, 252)) {
if (tmp) {
ast_free(tmp);
}
res = -1;
else {
ast_copy_string(tmp->app, app, sizeof(tmp->app));
if (appdata)
ast_copy_string(tmp->data, appdata, sizeof(tmp->data));
} else {
ast_string_field_set(tmp, app, app);
ast_string_field_set(tmp, data, appdata);
tmp->chan = chan;
if (synchronous > 1) {
if (locked_channel)
@ -8970,6 +8975,7 @@ int ast_pbx_outgoing_app(const char *type, struct ast_format_cap *cap, void *dat
ast_channel_lock(chan);
if (ast_pthread_create_detached(&tmp->t, NULL, ast_pbx_run_app, tmp)) {
ast_log(LOG_WARNING, "Unable to spawn execute thread on %s: %s\n", chan->name, strerror(errno));
ast_string_field_free_memory(tmp);
ast_free(tmp);
if (locked_channel)
ast_channel_unlock(chan);

Loading…
Cancel
Save