--- app_userevent.c.orig 2007-10-04 13:29:46.000000000 -0700 +++ app_userevent.c 2007-10-04 13:43:26.000000000 -0700 @@ -38,6 +38,7 @@ #include "asterisk/pbx.h" #include "asterisk/module.h" #include "asterisk/manager.h" +#include "asterisk/app.h" static char *tdesc = "Custom User Event Application"; @@ -63,9 +64,12 @@ static int userevent_exec(struct ast_channel *chan, void *data) { struct localuser *u; - char *info; - char eventname[512]; - char *eventbody; + char *parse, buf[2048] = ""; + int x, buflen = 0; + AST_DECLARE_APP_ARGS(args, + AST_APP_ARG(eventname); + AST_APP_ARG(extra)[100]; + ); if (ast_strlen_zero(data)) { ast_log(LOG_WARNING, "UserEvent requires an argument (eventname|optional event body)\n"); @@ -74,31 +78,19 @@ LOCAL_USER_ADD(u); - info = ast_strdupa(data); - if (!info) { - ast_log(LOG_ERROR, "Out of memory\n"); - LOCAL_USER_REMOVE(u); - return -1; - } + parse = ast_strdupa(data); - snprintf(eventname, sizeof(eventname), "UserEvent%s", info); - eventbody = strchr(eventname, '|'); - if (eventbody) { - *eventbody = '\0'; - eventbody++; - } - - if(eventbody) { - ast_log(LOG_DEBUG, "Sending user event: %s, %s\n", eventname, eventbody); - manager_event(EVENT_FLAG_USER, eventname, - "Channel: %s\r\nUniqueid: %s\r\n%s\r\n", - chan->name, chan->uniqueid, eventbody); - } else { - ast_log(LOG_DEBUG, "Sending user event: %s\n", eventname); - manager_event(EVENT_FLAG_USER, eventname, - "Channel: %s\r\nUniqueid: %s\r\n", chan->name, chan->uniqueid); + AST_STANDARD_APP_ARGS(args, parse); + + for (x = 0; x < args.argc - 1; x++) { + ast_copy_string(buf + buflen, args.extra[x], sizeof(buf) - buflen - 2); + buflen += strlen(args.extra[x]); + ast_copy_string(buf + buflen, "\r\n", 3); + buflen += 2; } + manager_event(EVENT_FLAG_USER, "UserEvent", "UserEvent: %s\r\n%s", args.eventname, buf); + LOCAL_USER_REMOVE(u); return 0; }