diff options
author | Automerge script <automerge@asterisk.org> | 2012-12-17 22:17:57 +0000 |
---|---|---|
committer | Automerge script <automerge@asterisk.org> | 2012-12-17 22:17:57 +0000 |
commit | f1e6eefdbab426cef2eec91e8b86bb4a42f52d39 (patch) | |
tree | 87d74f151f10c5b0521b1cf6042dd25b1c01a387 | |
parent | be4cc7b20bba0a34e2e179a91456f22ea24b9eca (diff) |
Merged revisions 378081 via svnmerge from
file:///srv/subversion/repos/asterisk/trunk
........
r378081 | rmudgett | 2012-12-17 15:22:21 -0600 (Mon, 17 Dec 2012) | 7 lines
chan_local: Parse dial string consistently.
* Fix local_alloc() unexpected limitation of exten and context length from
a combined length of 80 characters to a normal 80 characters each.
* Made local_alloc() and local_devicestate() parse the same way.
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@378083 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | channels/chan_local.c | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/channels/chan_local.c b/channels/chan_local.c index f51a0405b..30d5186d3 100644 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -282,27 +282,31 @@ setoption_cleanup: static int local_devicestate(const char *data) { char *exten = ast_strdupa(data); - char *context = NULL, *opts = NULL; + char *context; + char *opts; int res; struct local_pvt *lp; struct ao2_iterator it; - if (!(context = strchr(exten, '@'))) { - ast_log(LOG_WARNING, "Someone used Local/%s somewhere without a @context. This is bad.\n", exten); - return AST_DEVICE_INVALID; + /* Strip options if they exist */ + opts = strchr(exten, '/'); + if (opts) { + *opts = '\0'; } + context = strchr(exten, '@'); + if (!context) { + ast_log(LOG_WARNING, + "Someone used Local/%s somewhere without a @context. This is bad.\n", data); + return AST_DEVICE_INVALID; + } *context++ = '\0'; - /* Strip options if they exist */ - if ((opts = strchr(context, '/'))) - *opts = '\0'; - ast_debug(3, "Checking if extension %s@%s exists (devicestate)\n", exten, context); - res = ast_exists_extension(NULL, context, exten, 1, NULL); - if (!res) + if (!res) { return AST_DEVICE_INVALID; + } res = AST_DEVICE_NOT_INUSE; @@ -1147,7 +1151,9 @@ static void local_destroy(void *obj) static struct local_pvt *local_alloc(const char *data, struct ast_format_cap *cap) { struct local_pvt *tmp = NULL; - char *c = NULL, *opts = NULL; + char *parse; + char *c = NULL; + char *opts = NULL; if (!(tmp = ao2_alloc(sizeof(*tmp), local_destroy))) { return NULL; @@ -1158,12 +1164,12 @@ static struct local_pvt *local_alloc(const char *data, struct ast_format_cap *ca } /* Initialize private structure information */ - ast_copy_string(tmp->exten, data, sizeof(tmp->exten)); + parse = ast_strdupa(data); memcpy(&tmp->jb_conf, &g_jb_conf, sizeof(tmp->jb_conf)); /* Look for options */ - if ((opts = strchr(tmp->exten, '/'))) { + if ((opts = strchr(parse, '/'))) { *opts++ = '\0'; if (strchr(opts, 'n')) ast_set_flag(tmp, LOCAL_NO_OPTIMIZATION); @@ -1184,24 +1190,16 @@ static struct local_pvt *local_alloc(const char *data, struct ast_format_cap *ca } /* Look for a context */ - if ((c = strchr(tmp->exten, '@'))) + if ((c = strchr(parse, '@'))) { *c++ = '\0'; + } ast_copy_string(tmp->context, c ? c : "default", sizeof(tmp->context)); -#if 0 - /* We can't do this check here, because we don't know the CallerID yet, and - * the CallerID could potentially affect what step is actually taken (or - * even if that step exists). */ - if (!ast_exists_extension(NULL, tmp->context, tmp->exten, 1, NULL)) { - ast_log(LOG_NOTICE, "No such extension/context %s@%s creating local channel\n", tmp->exten, tmp->context); - tmp = local_pvt_destroy(tmp); - } else { -#endif - /* Add to list */ - ao2_link(locals, tmp); -#if 0 - } -#endif + ast_copy_string(tmp->exten, parse, sizeof(tmp->exten)); + + /* Add to list */ + ao2_link(locals, tmp); + return tmp; /* this is returned with a ref */ } |