[libvirt] [PATCH go 0/3] Add bindings for new (and missing!) events

Daniel P. Berrange (3): Add support for domain metadata change event Add missing binding for storage pool refresh event Add binding for secret event APIs api_test.go | 6 ++ domain_compat.h | 3 + domain_events.go | 46 +++++++++++++ domain_events_cfuncs.go | 10 +++ domain_events_cfuncs.h | 5 ++ secret.go | 14 ++++ secret_compat.go | 47 +++++++++++++ secret_compat.h | 30 ++++++++ secret_events.go | 157 ++++++++++++++++++++++++++++++++++++++++++ secret_events_cfuncs.go | 65 +++++++++++++++++ secret_events_cfuncs.h | 40 +++++++++++ storage_pool_events.go | 40 +++++++++++ storage_pool_events_cfuncs.go | 7 ++ storage_pool_events_cfuncs.h | 2 + 14 files changed, 472 insertions(+) create mode 100644 secret_compat.go create mode 100644 secret_events.go create mode 100644 secret_events_cfuncs.go create mode 100644 secret_events_cfuncs.h -- 2.9.3

Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- api_test.go | 1 + domain_compat.h | 3 +++ domain_events.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ domain_events_cfuncs.go | 10 ++++++++++ domain_events_cfuncs.h | 5 +++++ 5 files changed, 65 insertions(+) diff --git a/api_test.go b/api_test.go index 93adf7f..fafd35e 100644 --- a/api_test.go +++ b/api_test.go @@ -107,6 +107,7 @@ var ( "virConnectDomainEventTrayChangeCallback", "virConnectDomainEventTunableCallback", "virConnectDomainEventWatchdogCallback", + "virConnectDomainEventMetadataChangeCallback", /* Network event callback typedefs */ "virConnectNetworkEventGenericCallback", diff --git a/domain_compat.h b/domain_compat.h index cb806b9..14072d0 100644 --- a/domain_compat.h +++ b/domain_compat.h @@ -45,6 +45,9 @@ #define VIR_PERF_PARAM_REF_CPU_CYCLES "ref_cpu_cycles" #endif +#ifndef VIR_DOMAIN_EVENT_ID_METADATA_CHANGE +#define VIR_DOMAIN_EVENT_ID_METADATA_CHANGE 23 +#endif /* 1.2.2 */ diff --git a/domain_events.go b/domain_events.go index c65ce3b..8b34960 100644 --- a/domain_events.go +++ b/domain_events.go @@ -203,6 +203,13 @@ type DomainEventDeviceRemovalFailed struct { type DomainEventDeviceRemovalFailedCallback func(c *Connect, d *Domain, event *DomainEventDeviceRemovalFailed) +type DomainEventMetadataChange struct { + Type int + NSURI string +} + +type DomainEventMetadataChangeCallback func(c *Connect, d *Domain, event *DomainEventMetadataChange) + //export domainEventLifecycleCallback func domainEventLifecycleCallback(c C.virConnectPtr, d C.virDomainPtr, event int, detail int, @@ -540,6 +547,26 @@ func domainEventDeviceRemovedCallback(c C.virConnectPtr, d C.virDomainPtr, } +//export domainEventMetadataChangeCallback +func domainEventMetadataChangeCallback(c C.virConnectPtr, d C.virDomainPtr, + mtype int, nsuri *C.char, goCallbackId int) { + + domain := &Domain{ptr: d} + connection := &Connect{ptr: c} + + eventDetails := &DomainEventMetadataChange{ + Type: (int)(mtype), + NSURI: C.GoString(nsuri), + } + callbackFunc := getCallbackId(goCallbackId) + callback, ok := callbackFunc.(DomainEventMetadataChangeCallback) + if !ok { + panic("Inappropriate callback type called") + } + callback(connection, domain, eventDetails) + +} + func getDomainTuneSchedulerParametersFieldInfo(params *DomainSchedulerParameters) map[string]typedParamsFieldInfo { return map[string]typedParamsFieldInfo{ C.VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES: typedParamsFieldInfo{ @@ -1341,6 +1368,25 @@ func (c *Connect) DomainEventDeviceRemovalFailedRegister(dom *Domain, callback D return int(ret), nil } +func (c *Connect) DomainEventMetadataChangeRegister(dom *Domain, callback DomainEventMetadataChangeCallback) (int, error) { + goCallBackId := registerCallbackId(callback) + + callbackPtr := unsafe.Pointer(C.domainEventMetadataChangeCallback_cgo) + var cdom C.virDomainPtr + if dom != nil { + cdom = dom.ptr + } + ret := C.virConnectDomainEventRegisterAny_cgo(c.ptr, cdom, + C.VIR_DOMAIN_EVENT_ID_METADATA_CHANGE, + C.virConnectDomainEventGenericCallback(callbackPtr), + C.long(goCallBackId)) + if ret == -1 { + freeCallbackId(goCallBackId) + return 0, GetLastError() + } + return int(ret), nil +} + func (c *Connect) DomainEventDeregister(callbackId int) error { // Deregister the callback if i := int(C.virConnectDomainEventDeregisterAny(c.ptr, C.int(callbackId))); i != 0 { diff --git a/domain_events_cfuncs.go b/domain_events_cfuncs.go index 8bdfb98..c23fac6 100644 --- a/domain_events_cfuncs.go +++ b/domain_events_cfuncs.go @@ -205,6 +205,16 @@ void domainEventDeviceRemovalFailedCallback_cgo(virConnectPtr conn, domainEventDeviceRemovalFailedCallback(conn, dom, devAlias, (int)(intptr_t)opaque); } +extern void domainEventMetadataChangeCallback(virConnectPtr, virDomainPtr, int, const char *, int); +void domainEventMetadataChangeCallback_cgo(virConnectPtr conn, + virDomainPtr dom, + int type, + const char *nsuri, + void *opaque) +{ + domainEventMetadataChangeCallback(conn, dom, type, nsuri, (int)(intptr_t)opaque); +} + int virConnectDomainEventRegisterAny_cgo(virConnectPtr c, virDomainPtr d, int eventID, virConnectDomainEventGenericCallback cb, long goCallbackId) { diff --git a/domain_events_cfuncs.h b/domain_events_cfuncs.h index ba427aa..039da8e 100644 --- a/domain_events_cfuncs.h +++ b/domain_events_cfuncs.h @@ -103,6 +103,11 @@ void domainEventDeviceRemovalFailedCallback_cgo(virConnectPtr conn, virDomainPtr dom, const char *devAlias, void *opaque); +void domainEventMetadataChangeCallback_cgo(virConnectPtr conn, + virDomainPtr dom, + int type, + const char *nsuri, + void *opaque); int virConnectDomainEventRegisterAny_cgo(virConnectPtr c, virDomainPtr d, int eventID, virConnectDomainEventGenericCallback cb, -- 2.9.3

Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- storage_pool_events.go | 40 ++++++++++++++++++++++++++++++++++++++++ storage_pool_events_cfuncs.go | 7 +++++++ storage_pool_events_cfuncs.h | 2 ++ 3 files changed, 49 insertions(+) diff --git a/storage_pool_events.go b/storage_pool_events.go index 14f36cd..d9112d4 100644 --- a/storage_pool_events.go +++ b/storage_pool_events.go @@ -47,6 +47,8 @@ type StoragePoolEventLifecycle struct { type StoragePoolEventLifecycleCallback func(c *Connect, n *StoragePool, event *StoragePoolEventLifecycle) +type StoragePoolEventGenericCallback func(c *Connect, n *StoragePool) + //export storagePoolEventLifecycleCallback func storagePoolEventLifecycleCallback(c C.virConnectPtr, s C.virStoragePoolPtr, event int, detail int, @@ -68,6 +70,21 @@ func storagePoolEventLifecycleCallback(c C.virConnectPtr, s C.virStoragePoolPtr, callback(connection, storage_pool, eventDetails) } +//export storagePoolEventGenericCallback +func storagePoolEventGenericCallback(c C.virConnectPtr, s C.virStoragePoolPtr, + goCallbackId int) { + + storage_pool := &StoragePool{ptr: s} + connection := &Connect{ptr: c} + + callbackFunc := getCallbackId(goCallbackId) + callback, ok := callbackFunc.(StoragePoolEventGenericCallback) + if !ok { + panic("Inappropriate callback type called") + } + callback(connection, storage_pool) +} + func (c *Connect) StoragePoolEventLifecycleRegister(pool *StoragePool, callback StoragePoolEventLifecycleCallback) (int, error) { if C.LIBVIR_VERSION_NUMBER < 2000000 { return 0, GetNotImplementedError() @@ -91,6 +108,29 @@ func (c *Connect) StoragePoolEventLifecycleRegister(pool *StoragePool, callback return int(ret), nil } +func (c *Connect) StoragePoolEventRefreshRegister(pool *StoragePool, callback StoragePoolEventGenericCallback) (int, error) { + if C.LIBVIR_VERSION_NUMBER < 2000000 { + return 0, GetNotImplementedError() + } + + goCallBackId := registerCallbackId(callback) + + callbackPtr := unsafe.Pointer(C.storagePoolEventGenericCallback_cgo) + var cpool C.virStoragePoolPtr + if pool != nil { + cpool = pool.ptr + } + ret := C.virConnectStoragePoolEventRegisterAny_cgo(c.ptr, cpool, + C.VIR_STORAGE_POOL_EVENT_ID_REFRESH, + C.virConnectStoragePoolEventGenericCallback(callbackPtr), + C.long(goCallBackId)) + if ret == -1 { + freeCallbackId(goCallBackId) + return 0, GetLastError() + } + return int(ret), nil +} + func (c *Connect) StoragePoolEventDeregister(callbackId int) error { if C.LIBVIR_VERSION_NUMBER < 2000000 { return GetNotImplementedError() diff --git a/storage_pool_events_cfuncs.go b/storage_pool_events_cfuncs.go index 8b1ab10..52ec553 100644 --- a/storage_pool_events_cfuncs.go +++ b/storage_pool_events_cfuncs.go @@ -43,6 +43,13 @@ void storagePoolEventLifecycleCallback_cgo(virConnectPtr c, virStoragePoolPtr d, storagePoolEventLifecycleCallback(c, d, event, detail, (int)(intptr_t)data); } +extern void storagePoolEventGenericCallback(virConnectPtr, virStoragePoolPtr, int); +void storagePoolEventGenericCallback_cgo(virConnectPtr c, virStoragePoolPtr d, + void *data) +{ + storagePoolEventGenericCallback(c, d, (int)(intptr_t)data); +} + int virConnectStoragePoolEventRegisterAny_cgo(virConnectPtr c, virStoragePoolPtr d, int eventID, virConnectStoragePoolEventGenericCallback cb, long goCallbackId) { diff --git a/storage_pool_events_cfuncs.h b/storage_pool_events_cfuncs.h index faa209d..0087d6f 100644 --- a/storage_pool_events_cfuncs.h +++ b/storage_pool_events_cfuncs.h @@ -29,6 +29,8 @@ void storagePoolEventLifecycleCallback_cgo(virConnectPtr c, virStoragePoolPtr d, int event, int detail, void* data); +void storagePoolEventGenericCallback_cgo(virConnectPtr c, virStoragePoolPtr d, + void* data); int virConnectStoragePoolEventRegisterAny_cgo(virConnectPtr c, virStoragePoolPtr d, int eventID, virConnectStoragePoolEventGenericCallback cb, -- 2.9.3

Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- api_test.go | 5 ++ secret.go | 14 +++++ secret_compat.go | 47 +++++++++++++++ secret_compat.h | 30 +++++++++ secret_events.go | 157 ++++++++++++++++++++++++++++++++++++++++++++++++ secret_events_cfuncs.go | 65 ++++++++++++++++++++ secret_events_cfuncs.h | 40 ++++++++++++ 7 files changed, 358 insertions(+) create mode 100644 secret_compat.go create mode 100644 secret_events.go create mode 100644 secret_events_cfuncs.go create mode 100644 secret_events_cfuncs.h diff --git a/api_test.go b/api_test.go index fafd35e..8c5cffb 100644 --- a/api_test.go +++ b/api_test.go @@ -117,6 +117,10 @@ var ( "virConnectNodeDeviceEventGenericCallback", "virConnectNodeDeviceEventLifecycleCallback", + /* Secret event callback typedefs */ + "virConnectSecretEventGenericCallback", + "virConnectSecretEventLifecycleCallback", + /* Storage pool event callback typedefs */ "virConnectStoragePoolEventGenericCallback", "virConnectStoragePoolEventLifecycleCallback", @@ -214,6 +218,7 @@ var ( "VIR_GET_CPUMAP", "VIR_NETWORK_EVENT_CALLBACK", "VIR_NODE_DEVICE_EVENT_CALLBACK", + "VIR_SECRET_EVENT_CALLBACK", "VIR_SECURITY_DOI_BUFLEN", "VIR_SECURITY_LABEL_BUFLEN", "VIR_SECURITY_MODEL_BUFLEN", diff --git a/secret.go b/secret.go index 3245f28..5cf6e13 100644 --- a/secret.go +++ b/secret.go @@ -49,6 +49,20 @@ const ( SECRET_USAGE_TYPE_TLS = SecretUsageType(C.VIR_SECRET_USAGE_TYPE_TLS) ) +type SecretEventLifecycleType int + +const ( + SECRET_EVENT_DEFINED = SecretEventLifecycleType(C.VIR_SECRET_EVENT_DEFINED) + SECRET_EVENT_UNDEFINED = SecretEventLifecycleType(C.VIR_SECRET_EVENT_UNDEFINED) +) + +type SecretEventID int + +const ( + SECRET_EVENT_ID_LIFECYCLE = SecretEventID(C.VIR_SECRET_EVENT_ID_LIFECYCLE) + SECRET_EVENT_ID_VALUE_CHANGED = SecretEventID(C.VIR_SECRET_EVENT_ID_VALUE_CHANGED) +) + type Secret struct { ptr C.virSecretPtr } diff --git a/secret_compat.go b/secret_compat.go new file mode 100644 index 0000000..88cd3c1 --- /dev/null +++ b/secret_compat.go @@ -0,0 +1,47 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Copyright (c) 2013 Alex Zorin + * Copyright (C) 2016 Red Hat, Inc. + * + */ + +package libvirt + +/* +#cgo pkg-config: libvirt +#include <libvirt/libvirt.h> +#include <assert.h> +#include "secret_compat.h" + +int virConnectSecretEventDeregisterAnyCompat(virConnectPtr conn, + int callbackID) +{ +#if LIBVIR_VERSION_NUMBER < 1002001 + assert(0); // Caller should have checked version +#else + return virConnectSecretEventDeregisterAny(conn, callbackID); +#endif +} + + +*/ +import "C" diff --git a/secret_compat.h b/secret_compat.h index 41cc2c8..745e672 100644 --- a/secret_compat.h +++ b/secret_compat.h @@ -27,6 +27,36 @@ #ifndef LIBVIRT_GO_SECRET_COMPAT_H__ #define LIBVIRT_GO_SECRET_COMPAT_H__ +/* 3.0.0 */ + +#ifndef VIR_SECRET_EVENT_DEFINED +#define VIR_SECRET_EVENT_DEFINED 0 +#endif + +#ifndef VIR_SECRET_EVENT_UNDEFINED +#define VIR_SECRET_EVENT_UNDEFINED 1 +#endif + +#ifndef VIR_SECRET_EVENT_ID_LIFECYCLE +#define VIR_SECRET_EVENT_ID_LIFECYCLE 0 +#endif + +#ifndef VIR_SECRET_EVENT_ID_VALUE_CHANGED +#define VIR_SECRET_EVENT_ID_VALUE_CHANGED 1 +#endif + + +#if LIBVIR_VERSION_NUMBER < 3000000 +typedef void (*virConnectSecretEventGenericCallback)(virConnectPtr conn, + virSecretPtr secret, + void *opaque); +#endif + +int virConnectSecretEventDeregisterAnyCompat(virConnectPtr conn, + int callbackID); + +/* 2.2.1 */ + #ifndef VIR_SECRET_USAGE_TYPE_TLS #define VIR_SECRET_USAGE_TYPE_TLS 4 #endif diff --git a/secret_events.go b/secret_events.go new file mode 100644 index 0000000..5d4d299 --- /dev/null +++ b/secret_events.go @@ -0,0 +1,157 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Copyright (c) 2013 Alex Zorin + * Copyright (C) 2016 Red Hat, Inc. + * + */ + +package libvirt + +import ( + "fmt" + "unsafe" +) + +/* +#cgo pkg-config: libvirt +#include <libvirt/libvirt.h> +#include "secret_compat.h" +#include "secret_events_cfuncs.h" +*/ +import "C" + +type SecretEventLifecycle struct { + Event SecretEventLifecycleType + // TODO: we can make Detail typesafe somehow ? + Detail int +} + +type SecretEventLifecycleCallback func(c *Connect, n *Secret, event *SecretEventLifecycle) + +type SecretEventGenericCallback func(c *Connect, n *Secret) + +//export secretEventLifecycleCallback +func secretEventLifecycleCallback(c C.virConnectPtr, n C.virSecretPtr, + event int, detail int, + goCallbackId int) { + + secret := &Secret{ptr: n} + connection := &Connect{ptr: c} + + eventDetails := &SecretEventLifecycle{ + Event: SecretEventLifecycleType(event), + Detail: detail, + } + + callbackFunc := getCallbackId(goCallbackId) + callback, ok := callbackFunc.(SecretEventLifecycleCallback) + if !ok { + panic("Inappropriate callback type called") + } + callback(connection, secret, eventDetails) +} + +//export secretEventGenericCallback +func secretEventGenericCallback(c C.virConnectPtr, n C.virSecretPtr, + goCallbackId int) { + + secret := &Secret{ptr: n} + connection := &Connect{ptr: c} + + callbackFunc := getCallbackId(goCallbackId) + callback, ok := callbackFunc.(SecretEventGenericCallback) + if !ok { + panic("Inappropriate callback type called") + } + callback(connection, secret) +} + +func (c *Connect) SecretEventLifecycleRegister(secret *Secret, callback SecretEventLifecycleCallback) (int, error) { + goCallBackId := registerCallbackId(callback) + if C.LIBVIR_VERSION_NUMBER < 3000000 { + return 0, GetNotImplementedError() + } + + callbackPtr := unsafe.Pointer(C.secretEventLifecycleCallback_cgo) + var csecret C.virSecretPtr + if secret != nil { + csecret = secret.ptr + } + ret := C.virConnectSecretEventRegisterAny_cgo(c.ptr, csecret, + C.VIR_SECRET_EVENT_ID_LIFECYCLE, + C.virConnectSecretEventGenericCallback(callbackPtr), + C.long(goCallBackId)) + if ret == -1 { + freeCallbackId(goCallBackId) + return 0, GetLastError() + } + return int(ret), nil +} + +func (c *Connect) SecretEventValueChangedRegister(secret *Secret, callback SecretEventGenericCallback) (int, error) { + goCallBackId := registerCallbackId(callback) + if C.LIBVIR_VERSION_NUMBER < 3000000 { + return 0, GetNotImplementedError() + } + + callbackPtr := unsafe.Pointer(C.secretEventGenericCallback_cgo) + var csecret C.virSecretPtr + if secret != nil { + csecret = secret.ptr + } + ret := C.virConnectSecretEventRegisterAny_cgo(c.ptr, csecret, + C.VIR_SECRET_EVENT_ID_VALUE_CHANGED, + C.virConnectSecretEventGenericCallback(callbackPtr), + C.long(goCallBackId)) + if ret == -1 { + freeCallbackId(goCallBackId) + return 0, GetLastError() + } + return int(ret), nil +} + +func (c *Connect) SecretEventDeregister(callbackId int) error { + if C.LIBVIR_VERSION_NUMBER < 3000000 { + return GetNotImplementedError() + } + // Deregister the callback + if i := int(C.virConnectSecretEventDeregisterAnyCompat(c.ptr, C.int(callbackId))); i != 0 { + return GetLastError() + } + return nil +} + +func (e SecretEventLifecycle) String() string { + var event string + switch e.Event { + case SECRET_EVENT_DEFINED: + event = "defined" + + case SECRET_EVENT_UNDEFINED: + event = "undefined" + + default: + event = "unknown" + } + + return fmt.Sprintf("Secret event=%q", event) +} diff --git a/secret_events_cfuncs.go b/secret_events_cfuncs.go new file mode 100644 index 0000000..158008b --- /dev/null +++ b/secret_events_cfuncs.go @@ -0,0 +1,65 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Copyright (c) 2013 Alex Zorin + * Copyright (C) 2016 Red Hat, Inc. + * + */ + +package libvirt + +/* +#cgo pkg-config: libvirt +#include <libvirt/libvirt.h> +#include <libvirt/virterror.h> +#include <assert.h> +#include "secret_compat.h" +#include "secret_events_cfuncs.h" +#include "callbacks_cfuncs.h" +#include <stdint.h> + +extern void secretEventLifecycleCallback(virConnectPtr, virSecretPtr, int, int, int); +void secretEventLifecycleCallback_cgo(virConnectPtr c, virSecretPtr d, + int event, int detail, void *data) +{ + secretEventLifecycleCallback(c, d, event, detail, (int)(intptr_t)data); +} + +extern void secretEventGenericCallback(virConnectPtr, virSecretPtr, int); +void secretEventGenericCallback_cgo(virConnectPtr c, virSecretPtr d, + void *data) +{ + secretEventGenericCallback(c, d, (int)(intptr_t)data); +} + +int virConnectSecretEventRegisterAny_cgo(virConnectPtr c, virSecretPtr d, + int eventID, virConnectSecretEventGenericCallback cb, + long goCallbackId) { + void* id = (void*)goCallbackId; +#if LIBVIR_VERSION_NUMBER < 3000000 + assert(0); // Caller should have checked version +#else + return virConnectSecretEventRegisterAny(c, d, eventID, cb, id, freeGoCallback_cgo); +#endif +} + +*/ +import "C" diff --git a/secret_events_cfuncs.h b/secret_events_cfuncs.h new file mode 100644 index 0000000..96401d5 --- /dev/null +++ b/secret_events_cfuncs.h @@ -0,0 +1,40 @@ +/* + * This file is part of the libvirt-go project + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Copyright (c) 2013 Alex Zorin + * Copyright (C) 2016 Red Hat, Inc. + * + */ + +#ifndef LIBVIRT_GO_SECRET_EVENTS_CFUNCS_H__ +#define LIBVIRT_GO_SECRET_EVENTS_CFUNCS_H__ + +void secretEventLifecycleCallback_cgo(virConnectPtr c, virSecretPtr d, + int event, int detail, void* data); +void secretEventGenericCallback_cgo(virConnectPtr c, virSecretPtr d, + void* data); + +int virConnectSecretEventRegisterAny_cgo(virConnectPtr c, virSecretPtr d, + int eventID, virConnectSecretEventGenericCallback cb, + long goCallbackId); + + +#endif /* LIBVIRT_GO_SECRET_EVENTS_CFUNCS_H__ */ -- 2.9.3
participants (1)
-
Daniel P. Berrange