diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-02-01 01:53:25 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-02-01 01:53:25 +0000 |
commit | d2d81ca374445d48290038fb3e15c42689115ec9 (patch) | |
tree | 8ba40ca8d9138e7c86afc4ac13996c33ee5cdb63 /pbx.c | |
parent | bd8ff1abcbd05f49bcb0f015d3034ce3eff26b72 (diff) |
Allow hints to have names (bug #3471)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4938 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx.c')
-rwxr-xr-x | pbx.c | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -900,7 +900,12 @@ void pbx_retrieve_variable(struct ast_channel *c, const char *var, char **ret, c } else *ret = NULL; } else if (c && !strcmp(var, "HINT")) { - if (!ast_get_hint(workspace, workspacelen, c, c->context, c->exten)) + if (!ast_get_hint(workspace, workspacelen, NULL, 0, c, c->context, c->exten)) + *ret = NULL; + else + *ret = workspace; + } else if (c && !strcmp(var, "HINTNAME")) { + if (!ast_get_hint(NULL, 0, workspace, workspacelen, c, c->context, c->exten)) *ret = NULL; else *ret = workspace; @@ -1787,19 +1792,26 @@ static int ast_remove_hint(struct ast_exten *e) prev = list; list = list->next; } - } + } ast_mutex_unlock(&hintlock); return -1; } -int ast_get_hint(char *hint, int hintsize, struct ast_channel *c, const char *context, const char *exten) +int ast_get_hint(char *hint, int hintsize, char *name, int namesize, struct ast_channel *c, const char *context, const char *exten) { struct ast_exten *e; + void *tmp; e = ast_hint_extension(c, context, exten); - if (e) { - strncpy(hint, ast_get_extension_app(e), hintsize - 1); + if (e) { + if (hint) + strncpy(hint, ast_get_extension_app(e), hintsize - 1); + if (name) { + tmp = ast_get_extension_app_data(e); + if (tmp) + strncpy(name, (char *)tmp, namesize - 1); + } return -1; } return 0; |