1 /* 2 * object_event_private.h: object event queue processing helpers 3 * 4 * Copyright (C) 2012-2014 Red Hat, Inc. 5 * Copyright (C) 2008 VirtualIron 6 * Copyright (C) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library. If not, see 20 * <http://www.gnu.org/licenses/>. 21 */ 22 23 #pragma once 24 25 #include "datatypes.h" 26 27 struct _virObjectMeta { 28 int id; 29 char *name; 30 unsigned char uuid[VIR_UUID_BUFLEN]; 31 char *key; 32 }; 33 typedef struct _virObjectMeta virObjectMeta; 34 35 typedef struct _virObjectEventCallbackList virObjectEventCallbackList; 36 37 typedef void 38 (*virObjectEventDispatchFunc)(virConnectPtr conn, 39 virObjectEvent *event, 40 virConnectObjectEventGenericCallback cb, 41 void *cbopaque); 42 43 struct __attribute__((aligned(8))) _virObjectEvent { 44 virObject parent; 45 int eventID; 46 virObjectMeta meta; 47 int remoteID; 48 virObjectEventDispatchFunc dispatch; 49 }; 50 51 /** 52 * virObjectEventCallbackFilter: 53 * @conn: the connection pointer 54 * @event: the event about to be dispatched 55 * @opaque: opaque data registered with the filter 56 * 57 * Callback to do final filtering for a reason not tracked directly by 58 * virObjectEventStateRegisterID(). Return false if @event must not 59 * be sent to @conn. 60 */ 61 typedef bool (*virObjectEventCallbackFilter)(virConnectPtr conn, 62 virObjectEvent *event, 63 void *opaque); 64 65 virClass * 66 virClassForObjectEvent(void); 67 68 int 69 virObjectEventStateRegisterID(virConnectPtr conn, 70 virObjectEventState *state, 71 const char *key, 72 virObjectEventCallbackFilter filter, 73 void *filter_opaque, 74 virClass *klass, 75 int eventID, 76 virConnectObjectEventGenericCallback cb, 77 void *opaque, 78 virFreeCallback freecb, 79 bool legacy, 80 int *callbackID, 81 bool remoteFilter) 82 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(6) 83 ATTRIBUTE_NONNULL(8) ATTRIBUTE_NONNULL(12); 84 85 int 86 virObjectEventStateCallbackID(virConnectPtr conn, 87 virObjectEventState *state, 88 virClass *klass, 89 int eventID, 90 virConnectObjectEventGenericCallback callback, 91 int *remoteID) 92 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) 93 ATTRIBUTE_NONNULL(5); 94 95 void * 96 virObjectEventNew(virClass *klass, 97 virObjectEventDispatchFunc dispatcher, 98 int eventID, 99 int id, 100 const char *name, 101 const unsigned char *uuid, 102 const char *key) 103 ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5) 104 ATTRIBUTE_NONNULL(7); 105