};
const enum ast_event_type event_types[] = { type, AST_EVENT_ALL };
int i;
+ int want_specific_event;/* TRUE if looking for subscribers wanting specific parameters. */
if (type >= AST_EVENT_TOTAL) {
ast_log(LOG_ERROR, "%u is an invalid type!\n", type);
return res;
}
+ want_specific_event = 0;
va_start(ap, type);
for (ie_type = va_arg(ap, enum ast_event_ie_type);
ie_type != AST_EVENT_IE_END;
}
if (insert) {
+ want_specific_event = 1;
AST_LIST_INSERT_TAIL(&check_ie_vals.ie_vals, ie_value, entry);
} else {
ast_log(LOG_WARNING, "Unsupported PLTYPE(%d)\n", ie_value->ie_pltype);
for (i = 0; i < ARRAY_LEN(event_types); i++) {
AST_RWDLLIST_RDLOCK(&ast_event_subs[event_types[i]]);
- AST_RWDLLIST_TRAVERSE(&ast_event_subs[event_types[i]], sub, entry) {
- AST_LIST_TRAVERSE(&sub->ie_vals, ie_val, entry) {
- if (!match_sub_ie_val_to_event(ie_val, &check_ie_vals)) {
- /* The current subscription ie did not match an event ie. */
+ if (want_specific_event) {
+ AST_RWDLLIST_TRAVERSE(&ast_event_subs[event_types[i]], sub, entry) {
+ AST_LIST_TRAVERSE(&sub->ie_vals, ie_val, entry) {
+ if (!match_sub_ie_val_to_event(ie_val, &check_ie_vals)) {
+ /* The current subscription ie did not match an event ie. */
+ break;
+ }
+ }
+ if (!ie_val) {
+ /* Everything matched. A subscriber is looking for this event. */
break;
}
}
- if (!ie_val) {
- /* Everything matched. A subscriber is looking for this event. */
- break;
- }
+ } else {
+ /* Just looking to see if there are ANY subscribers to the event type. */
+ sub = AST_RWLIST_FIRST(&ast_event_subs[event_types[i]]);
}
AST_RWDLLIST_UNLOCK(&ast_event_subs[event_types[i]]);
if (sub) {
.expected_count = 2,
},
[TEST_SUBS_CUSTOM_RAW] = {
- .expected_count = 1,
+ .expected_count = 2,
},
[TEST_SUBS_CUSTOM_UINT] = {
.expected_count = 1,
break;
}
- /*
- * Subscription TEST_SUBS_ALL_STR:
- * - allocate normally
- * - subscribe to ALL events with a DEVICE STR IE check
- */
- ast_test_status_update(test, "Adding TEST_SUBS_ALL_STR subscription\n");
- test_subs[TEST_SUBS_ALL_STR].sub = ast_event_subscribe(AST_EVENT_ALL, event_sub_cb,
- test_subs_class_type_str(TEST_SUBS_ALL_STR), &test_subs[TEST_SUBS_ALL_STR].data,
- AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR, "FOO/bar",
+ ast_test_status_update(test, "Check that NO CUSTOM subscribers exist\n");
+ sub_res = ast_event_check_subscriber(AST_EVENT_CUSTOM,
AST_EVENT_IE_END);
- if (!test_subs[TEST_SUBS_ALL_STR].sub) {
- ast_test_status_update(test, "Failed to create TEST_SUBS_ALL_STR subscription\n");
- res = AST_TEST_FAIL;
- goto return_cleanup;
- }
-
- if (strcmp(ast_event_subscriber_get_description(test_subs[TEST_SUBS_ALL_STR].sub),
- test_subs_class_type_str(TEST_SUBS_ALL_STR))) {
- ast_test_status_update(test,
- "Unexpected subscription description on TEST_SUBS_ALL_STR subscription\n");
+ if (sub_res != AST_EVENT_SUB_NONE) {
+ ast_test_status_update(test, "CUSTOM subscriptions should not exist! (%d)\n",
+ sub_res);
res = AST_TEST_FAIL;
- goto return_cleanup;
}
/*
goto return_cleanup;
}
+ ast_test_status_update(test, "Check that a CUSTOM subscriber exists\n");
+ sub_res = ast_event_check_subscriber(AST_EVENT_CUSTOM,
+ AST_EVENT_IE_END);
+ if (sub_res != AST_EVENT_SUB_EXISTS) {
+ ast_test_status_update(test, "A CUSTOM subscription should exist! (%d)\n",
+ sub_res);
+ res = AST_TEST_FAIL;
+ }
+
+ /*
+ * Subscription TEST_SUBS_ALL_STR:
+ * - allocate normally
+ * - subscribe to ALL events with a DEVICE STR IE check
+ */
+ ast_test_status_update(test, "Adding TEST_SUBS_ALL_STR subscription\n");
+ test_subs[TEST_SUBS_ALL_STR].sub = ast_event_subscribe(AST_EVENT_ALL, event_sub_cb,
+ test_subs_class_type_str(TEST_SUBS_ALL_STR), &test_subs[TEST_SUBS_ALL_STR].data,
+ AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR, "FOO/bar",
+ AST_EVENT_IE_END);
+ if (!test_subs[TEST_SUBS_ALL_STR].sub) {
+ ast_test_status_update(test, "Failed to create TEST_SUBS_ALL_STR subscription\n");
+ res = AST_TEST_FAIL;
+ goto return_cleanup;
+ }
+
+ if (strcmp(ast_event_subscriber_get_description(test_subs[TEST_SUBS_ALL_STR].sub),
+ test_subs_class_type_str(TEST_SUBS_ALL_STR))) {
+ ast_test_status_update(test,
+ "Unexpected subscription description on TEST_SUBS_ALL_STR subscription\n");
+ res = AST_TEST_FAIL;
+ goto return_cleanup;
+ }
+
/*
* Subscription TEST_SUBS_CUSTOM_RAW:
* - allocate normally
/*
* Exercise the API call to check for existing subscriptions.
*/
- ast_test_status_update(test, "Checking for subscribers to events\n");
+ ast_test_status_update(test, "Checking for subscribers to specific events\n");
/* Check STR matching. */
sub_res = ast_event_check_subscriber(AST_EVENT_CUSTOM,
res = AST_TEST_FAIL;
}
+ ast_test_status_update(test, "Special event posting test\n");
+
+ /*
+ * Event to check if event is even posted.
+ *
+ * Matching subscriptions:
+ * TEST_SUBS_CUSTOM_RAW
+ */
+ event = ast_event_new(AST_EVENT_CUSTOM,
+ AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR, "Mula",
+ AST_EVENT_IE_MAILBOX, AST_EVENT_IE_PLTYPE_RAW, "FOO/bar", sizeof("FOO/bar"),
+ AST_EVENT_IE_END);
+ if (!event) {
+ ast_test_status_update(test, "Failed to create event\n");
+ res = AST_TEST_FAIL;
+ goto return_cleanup;
+ }
+ if (ast_event_queue(event)) {
+ ast_event_destroy(event);
+ event = NULL;
+ ast_test_status_update(test, "Failed to queue event\n");
+ res = AST_TEST_FAIL;
+ goto return_cleanup;
+ }
+
/*
* Subscription TEST_SUBS_CUSTOM_ANY:
* - allocate normally