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