diff --git a/examples/object-events/event-test.c b/examples/object-events/event-test.c index f2316d79f570c2ec151cccbfd378e644a1179741..cf8c1bca27954d038fd43495a7e8ff3e74d8e499 100644 --- a/examples/object-events/event-test.c +++ b/examples/object-events/event-test.c @@ -370,6 +370,24 @@ nodeDeviceEventToString(int event) } +static const char * +secretEventToString(int event) +{ + switch ((virSecretEventLifecycleType) event) { + case VIR_SECRET_EVENT_DEFINED: + return "Defined"; + + case VIR_SECRET_EVENT_UNDEFINED: + return "Undefined"; + + case VIR_SECRET_EVENT_LAST: + break; + } + + return "unknown"; +} + + static int myDomainEventCallback1(virConnectPtr conn ATTRIBUTE_UNUSED, virDomainPtr dom, @@ -728,6 +746,23 @@ myNodeDeviceEventUpdateCallback(virConnectPtr conn ATTRIBUTE_UNUSED, } +static int +mySecretEventCallback(virConnectPtr conn ATTRIBUTE_UNUSED, + virSecretPtr secret, + int event, + int detail, + void *opaque ATTRIBUTE_UNUSED) +{ + char uuid[VIR_UUID_STRING_BUFLEN]; + virSecretGetUUIDString(secret, uuid); + printf("%s EVENT: Secret %s %s %d\n", __func__, + uuid, + secretEventToString(event), + detail); + return 0; +} + + static void eventTypedParamsPrint(virTypedParameterPtr params, int nparams) @@ -1038,10 +1073,25 @@ struct nodeDeviceEventData nodeDeviceEvents[] = { NODE_DEVICE_EVENT(VIR_NODE_DEVICE_EVENT_ID_UPDATE, myNodeDeviceEventUpdateCallback), }; +struct secretEventData { + int event; + int id; + virConnectSecretEventGenericCallback cb; + const char *name; +}; + +#define SECRET_EVENT(event, callback) \ + {event, -1, VIR_SECRET_EVENT_CALLBACK(callback), #event} + +struct secretEventData secretEvents[] = { + SECRET_EVENT(VIR_SECRET_EVENT_ID_LIFECYCLE, mySecretEventCallback), +}; + /* make sure that the events are kept in sync */ verify(ARRAY_CARDINALITY(domainEvents) == VIR_DOMAIN_EVENT_ID_LAST); verify(ARRAY_CARDINALITY(storagePoolEvents) == VIR_STORAGE_POOL_EVENT_ID_LAST); verify(ARRAY_CARDINALITY(nodeDeviceEvents) == VIR_NODE_DEVICE_EVENT_ID_LAST); +verify(ARRAY_CARDINALITY(secretEvents) == VIR_SECRET_EVENT_ID_LAST); int main(int argc, char **argv) @@ -1149,6 +1199,22 @@ main(int argc, char **argv) } } + /* register common secret callbacks */ + for (i = 0; i < ARRAY_CARDINALITY(secretEvents); i++) { + struct secretEventData *event = secretEvents + i; + + event->id = virConnectSecretEventRegisterAny(dconn, NULL, + event->event, + event->cb, + strdup(event->name), + myFreeFunc); + + if (event->id < 0) { + fprintf(stderr, "Failed to register event '%s'\n", event->name); + goto cleanup; + } + } + if ((callback1ret == -1) || (callback16ret == -1)) goto cleanup; @@ -1191,6 +1257,12 @@ main(int argc, char **argv) virConnectNodeDeviceEventDeregisterAny(dconn, nodeDeviceEvents[i].id); } + printf("Deregistering secret event callbacks\n"); + for (i = 0; i < ARRAY_CARDINALITY(secretEvents); i++) { + if (secretEvents[i].id > 0) + virConnectSecretEventDeregisterAny(dconn, secretEvents[i].id); + } + virConnectUnregisterCloseCallback(dconn, connectClose); ret = EXIT_SUCCESS;