domain_event.h 4.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/*
 * domain_event.h: domain event queue processing helpers
 *
 * Copyright (C) 2008 VirtualIron
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
 *
 * Author: Ben Guthro
 */

#include "internal.h"

#ifndef __DOMAIN_EVENT_H__
#define __DOMAIN_EVENT_H__

28 29
#include "domain_conf.h"

30 31 32 33
struct _virDomainEventCallback {
    virConnectPtr conn;
    virConnectDomainEventCallback cb;
    void *opaque;
34
    virFreeCallback freecb;
35
    int deleted;
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
};
typedef struct _virDomainEventCallback virDomainEventCallback;
typedef virDomainEventCallback *virDomainEventCallbackPtr;

struct _virDomainEventCallbackList {
    unsigned int count;
    virDomainEventCallbackPtr *callbacks;
};
typedef struct _virDomainEventCallbackList virDomainEventCallbackList;
typedef virDomainEventCallbackList *virDomainEventCallbackListPtr;

void virDomainEventCallbackListFree(virDomainEventCallbackListPtr list);

int virDomainEventCallbackListAdd(virConnectPtr conn,
                                  virDomainEventCallbackListPtr cbList,
                                  virConnectDomainEventCallback callback,
52
                                  void *opaque,
53 54
                                  virFreeCallback freecb)
    ATTRIBUTE_NONNULL(1);
55 56 57

int virDomainEventCallbackListRemove(virConnectPtr conn,
                                     virDomainEventCallbackListPtr cbList,
58 59
                                     virConnectDomainEventCallback callback)
    ATTRIBUTE_NONNULL(1);
60

61
int virDomainEventCallbackListRemoveConn(virConnectPtr conn,
62 63
                                         virDomainEventCallbackListPtr cbList)
    ATTRIBUTE_NONNULL(1);
64

65 66
int virDomainEventCallbackListMarkDelete(virConnectPtr conn,
                                         virDomainEventCallbackListPtr cbList,
67 68 69
                                         virConnectDomainEventCallback callback)
    ATTRIBUTE_NONNULL(1);

70 71
int virDomainEventCallbackListPurgeMarked(virDomainEventCallbackListPtr cbList);

72 73 74 75 76
/**
 * Dispatching domain events that come in while
 * in a call / response rpc
 */
struct _virDomainEvent {
77 78 79 80
    int id;
    char *name;
    unsigned char uuid[VIR_UUID_BUFLEN];
    int type;
81
    int detail;
82 83 84 85 86 87 88 89 90 91 92
};
typedef struct _virDomainEvent virDomainEvent;
typedef virDomainEvent *virDomainEventPtr;

struct _virDomainEventQueue {
    unsigned int count;
    virDomainEventPtr *events;
};
typedef struct _virDomainEventQueue virDomainEventQueue;
typedef virDomainEventQueue *virDomainEventQueuePtr;

93 94 95 96 97 98 99 100 101
virDomainEventQueuePtr virDomainEventQueueNew(void);

virDomainEventPtr virDomainEventNew(int id, const char *name, const unsigned char *uuid, int type, int detail);
virDomainEventPtr virDomainEventNewFromDom(virDomainPtr dom, int type, int detail);
virDomainEventPtr virDomainEventNewFromObj(virDomainObjPtr obj, int type, int detail);
virDomainEventPtr virDomainEventNewFromDef(virDomainDefPtr def, int type, int detail);

int virDomainEventQueuePush(virDomainEventQueuePtr evtQueue,
                            virDomainEventPtr event);
102 103

virDomainEventPtr
104
virDomainEventQueuePop(virDomainEventQueuePtr evtQueue);
105

106
void virDomainEventFree(virDomainEventPtr event);
107 108
void virDomainEventQueueFree(virDomainEventQueuePtr queue);

109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
typedef void (*virDomainEventDispatchFunc)(virConnectPtr conn,
                                           virDomainEventPtr event,
                                           virConnectDomainEventCallback cb,
                                           void *cbopaque,
                                           void *opaque);
void virDomainEventDispatchDefaultFunc(virConnectPtr conn,
                                       virDomainEventPtr event,
                                       virConnectDomainEventCallback cb,
                                       void *cbopaque,
                                       void *opaque);

void virDomainEventDispatch(virDomainEventPtr event,
                            virDomainEventCallbackListPtr cbs,
                            virDomainEventDispatchFunc dispatch,
                            void *opaque);
void virDomainEventQueueDispatch(virDomainEventQueuePtr queue,
                                 virDomainEventCallbackListPtr cbs,
                                 virDomainEventDispatchFunc dispatch,
                                 void *opaque);
128 129

#endif