diff options
author | citats <citats@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-03-26 06:28:56 +0000 |
---|---|---|
committer | citats <citats@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-03-26 06:28:56 +0000 |
commit | e9b3c82d5173c5c78e6bffd02a2ea9f41f210989 (patch) | |
tree | 4864041648d3b4a067056c0f36548acf45c5e202 /apps/app_setcdruserfield.c | |
parent | e61a2437e93467635a2b53e449be071009a02971 (diff) |
Add manager action 'SetCDRUserField' (bug #1298)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2566 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_setcdruserfield.c')
-rwxr-xr-x | apps/app_setcdruserfield.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/apps/app_setcdruserfield.c b/apps/app_setcdruserfield.c index db6c4f3f1..7d2a5bb08 100755 --- a/apps/app_setcdruserfield.c +++ b/apps/app_setcdruserfield.c @@ -17,6 +17,8 @@ #include <asterisk/module.h> #include <asterisk/pbx.h> #include <asterisk/logger.h> +#include <asterisk/config.h> +#include <asterisk/manager.h> #include <stdlib.h> #include <string.h> @@ -59,6 +61,39 @@ STANDARD_LOCAL_USER; LOCAL_USER_DECL; +static int action_setcdruserfield(struct mansession *s, struct message *m) +{ + struct ast_channel *c = NULL; + char *userfield = astman_get_header(m, "UserField"); + char *channel = astman_get_header(m, "Channel"); + char *append = astman_get_header(m, "Append"); + + if (!strlen(channel)) { + astman_send_error(s, m, "No Channel specified"); + return 0; + } + if (!strlen(userfield)) { + astman_send_error(s, m, "No UserField specified"); + return 0; + } + c = ast_channel_walk(NULL); + while (c) { + if (!strcasecmp(c->name, channel)) + break; + c = ast_channel_walk(c); + } + if (!c) { + astman_send_error(s, m, "No such channel"); + return 0; + } + if (ast_true(append)) + ast_cdr_appenduserfield(c, userfield); + else + ast_cdr_setuserfield(c, userfield); + astman_send_ack(s, m, "CDR Userfield Set"); + return 0; +} + static int setcdruserfield_exec(struct ast_channel *chan, void *data) { struct localuser *u; @@ -97,6 +132,7 @@ int unload_module(void) STANDARD_HANGUP_LOCALUSERS; res = ast_unregister_application(setcdruserfield_app); res |= ast_unregister_application(appendcdruserfield_app); + ast_manager_unregister("SetCDRUserField"); return res; } @@ -105,7 +141,7 @@ int load_module(void) int res; res = ast_register_application(setcdruserfield_app, setcdruserfield_exec, setcdruserfield_synopsis, setcdruserfield_descrip); res |= ast_register_application(appendcdruserfield_app, appendcdruserfield_exec, appendcdruserfield_synopsis, appendcdruserfield_descrip); - + ast_manager_register("SetCDRUserField", EVENT_FLAG_CALL, action_setcdruserfield, "Set the CDR UserField"); return res; } |