aboutsummaryrefslogtreecommitdiffstats
path: root/pbx.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-02-01 01:53:25 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-02-01 01:53:25 +0000
commitd2d81ca374445d48290038fb3e15c42689115ec9 (patch)
tree8ba40ca8d9138e7c86afc4ac13996c33ee5cdb63 /pbx.c
parentbd8ff1abcbd05f49bcb0f015d3034ce3eff26b72 (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-xpbx.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/pbx.c b/pbx.c
index bbc61d7f2..0e4d8eeb1 100755
--- a/pbx.c
+++ b/pbx.c
@@ -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;