[svn-commits] russell: branch russell/events r59296 - in /team/russell/events: apps/ includ...

svn-commits at lists.digium.com svn-commits at lists.digium.com
Wed Mar 28 15:01:12 MST 2007


Author: russell
Date: Wed Mar 28 17:01:11 2007
New Revision: 59296

URL: http://svn.digium.com/view/asterisk?view=rev&rev=59296
Log:
Allow information elements to be passed to ast_event_new

Modified:
    team/russell/events/apps/app_voicemail.c
    team/russell/events/include/asterisk/event.h
    team/russell/events/main/event.c
    team/russell/events/res/res_eventtest.c

Modified: team/russell/events/apps/app_voicemail.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/apps/app_voicemail.c?view=diff&rev=59296&r1=59295&r2=59296
==============================================================================
--- team/russell/events/apps/app_voicemail.c (original)
+++ team/russell/events/apps/app_voicemail.c Wed Mar 28 17:01:11 2007
@@ -3954,14 +3954,13 @@
 		return;
 	}
 
-	if (!(event = ast_event_new(AST_EVENT_MWI)))
+	if (!(event = ast_event_new(AST_EVENT_MWI,
+			AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, mailbox,
+			AST_EVENT_IE_NEWMSGS, AST_EVENT_IE_PLTYPE_UINT, new,
+			AST_EVENT_IE_OLDMSGS, AST_EVENT_IE_PLTYPE_UINT, old,
+			AST_EVENT_IE_END))) {
 		return;
-	if (ast_event_append_ie_str(&event, AST_EVENT_IE_MAILBOX, mailbox))
-		return;
-	if (ast_event_append_ie_uint(&event, AST_EVENT_IE_NEWMSGS, new))
-		return;
-	if (ast_event_append_ie_uint(&event, AST_EVENT_IE_OLDMSGS, old))
-		return;
+	}
 
 	ast_event_queue_and_cache(event,
 		AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR,

Modified: team/russell/events/include/asterisk/event.h
URL: http://svn.digium.com/view/asterisk/team/russell/events/include/asterisk/event.h?view=diff&rev=59296&r1=59295&r2=59296
==============================================================================
--- team/russell/events/include/asterisk/event.h (original)
+++ team/russell/events/include/asterisk/event.h Wed Mar 28 17:01:11 2007
@@ -125,7 +125,7 @@
  */
 enum ast_event_subscriber_res ast_event_check_subscriber(enum ast_event_type event_type, ...);
 
-struct ast_event *ast_event_new(enum ast_event_type);
+struct ast_event *ast_event_new(enum ast_event_type, ...);
 
 void ast_event_destroy(struct ast_event *);
 

Modified: team/russell/events/main/event.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/main/event.c?view=diff&rev=59296&r1=59295&r2=59296
==============================================================================
--- team/russell/events/main/event.c (original)
+++ team/russell/events/main/event.c Wed Mar 28 17:01:11 2007
@@ -312,9 +312,13 @@
 	return 0;
 }
 
-struct ast_event *ast_event_new(enum ast_event_type type)
-{
+struct ast_event *ast_event_new(enum ast_event_type type, ...)
+{
+	va_list ap;
 	struct ast_event *event;
+	enum ast_event_type ie_type;
+	struct ast_event_ie_val *ie_val;
+	AST_LIST_HEAD_NOLOCK_STATIC(ie_vals, ast_event_ie_val);
 
 	/* Invalid type */
 	if (type >= AST_EVENT_TOTAL) {
@@ -323,11 +327,38 @@
 		return NULL;
 	}
 
+	va_start(ap, type);
+	for (ie_type = va_arg(ap, enum ast_event_type);
+		ie_type != AST_EVENT_IE_END;
+		ie_type = va_arg(ap, enum ast_event_type))
+	{
+		struct ast_event_ie_val *ie_val = alloca(sizeof(*ie_val));
+		memset(ie_val, 0, sizeof(*ie_val));
+		ie_val->ie_type = ie_type;
+		ie_val->ie_pltype = va_arg(ap, enum ast_event_ie_pltype);
+		if (ie_val->ie_pltype == AST_EVENT_IE_PLTYPE_UINT)
+			ie_val->payload.uint = va_arg(ap, uint32_t);
+		else if (ie_val->ie_pltype == AST_EVENT_IE_PLTYPE_STR)
+			ie_val->payload.str = ast_strdupa(va_arg(ap, const char *));
+		AST_LIST_INSERT_TAIL(&ie_vals, ie_val, entry);
+	}
+	va_end(ap);
+
 	if (!(event = ast_calloc(1, sizeof(*event))))
 		return NULL;
 
 	event->type = htons(type);
 	event->event_len = htons(sizeof(*event));
+
+	AST_LIST_TRAVERSE(&ie_vals, ie_val, entry) {
+		if (ie_val->ie_pltype == AST_EVENT_IE_PLTYPE_STR)
+			ast_event_append_ie_str(&event, ie_val->ie_type, ie_val->payload.str);
+		else if (ie_val->ie_pltype == AST_EVENT_IE_PLTYPE_UINT)
+			ast_event_append_ie_uint(&event, ie_val->ie_type, ie_val->payload.uint);
+
+		if (!event)
+			break;
+	}
 
 	return event;
 }

Modified: team/russell/events/res/res_eventtest.c
URL: http://svn.digium.com/view/asterisk/team/russell/events/res/res_eventtest.c?view=diff&rev=59296&r1=59295&r2=59296
==============================================================================
--- team/russell/events/res/res_eventtest.c (original)
+++ team/russell/events/res/res_eventtest.c Wed Mar 28 17:01:11 2007
@@ -98,14 +98,13 @@
 		return CLI_FAILURE;
 	}
 
-	if (!(event = ast_event_new(AST_EVENT_MWI)))
+	if (!(event = ast_event_new(AST_EVENT_MWI, 
+			AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR, mailbox,
+			AST_EVENT_IE_NEWMSGS, AST_EVENT_IE_PLTYPE_UINT, new,
+			AST_EVENT_IE_OLDMSGS, AST_EVENT_IE_PLTYPE_UINT, old,
+			AST_EVENT_IE_END))) {
 		return CLI_FAILURE;
-	if (ast_event_append_ie_str(&event, AST_EVENT_IE_MAILBOX, mailbox))
-		return CLI_FAILURE;
-	if (ast_event_append_ie_uint(&event, AST_EVENT_IE_NEWMSGS, new))
-		return CLI_FAILURE;
-	if (ast_event_append_ie_uint(&event, AST_EVENT_IE_OLDMSGS, old))
-		return CLI_FAILURE;
+	}
 
 	ast_event_queue_and_cache(event,
 		AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_STR,



More information about the svn-commits mailing list