diff options
Diffstat (limited to 'apps/app_userevent.c')
-rwxr-xr-x | apps/app_userevent.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/apps/app_userevent.c b/apps/app_userevent.c index 681231ab0..4facd489d 100755 --- a/apps/app_userevent.c +++ b/apps/app_userevent.c @@ -62,24 +62,31 @@ LOCAL_USER_DECL; static int userevent_exec(struct ast_channel *chan, void *data) { struct localuser *u; - char info[512]; - char eventname[512]; + char *info; + char eventname[512]; char *eventbody; - if (!data || !strlen(data)) { + if (!data || ast_strlen_zero(data)) { ast_log(LOG_WARNING, "UserEvent requires an argument (eventname|optional event body)\n"); return -1; } - strncpy(info, (char *)data, strlen((char *)data) + AST_MAX_EXTENSION-1); + LOCAL_USER_ADD(u); + + info = ast_strdupa(data); + if (!info) { + ast_log(LOG_ERROR, "Out of memory\n"); + LOCAL_USER_REMOVE(u); + return -1; + } + snprintf(eventname, sizeof(eventname), "UserEvent%s", info); eventbody = strchr(eventname, '|'); if (eventbody) { *eventbody = '\0'; eventbody++; } - LOCAL_USER_ADD(u); - + if(eventbody) { ast_log(LOG_DEBUG, "Sending user event: %s, %s\n", eventname, eventbody); manager_event(EVENT_FLAG_USER, eventname, |