From nobody Mon Dec 15 03:29:00 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1500903640006709.5872277028355; Mon, 24 Jul 2017 06:40:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0C688796E4; Mon, 24 Jul 2017 13:40:37 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B489D89F03; Mon, 24 Jul 2017 13:40:36 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6C72514B2D; Mon, 24 Jul 2017 13:40:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v6ODdBJZ001774 for ; Mon, 24 Jul 2017 09:39:11 -0400 Received: by smtp.corp.redhat.com (Postfix) id 07BC667CF1; Mon, 24 Jul 2017 13:39:11 +0000 (UTC) Received: from antique-work.brq.redhat.com (unknown [10.43.2.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8231117AF7 for ; Mon, 24 Jul 2017 13:39:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0C688796E4 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0C688796E4 From: Pavel Hrdina To: libvir-list@redhat.com Date: Mon, 24 Jul 2017 15:38:57 +0200 Message-Id: <9761db768279df441a260675e7ec8259fb7420e8.1500647204.git.phrdina@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH 4/9] events: split event code into separate file X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Mon, 24 Jul 2017 13:40:37 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Similarly to the previous patch, split the code into its separate file. Signed-off-by: Pavel Hrdina --- src/Makefile.am | 3 +- src/events.c | 252 ++++++++++++++++++++++++++++++++++++++++++++++++++++= ++++ src/events.h | 9 ++ src/manager.c | 243 +---------------------------------------------------= -- 4 files changed, 265 insertions(+), 242 deletions(-) create mode 100644 src/events.c create mode 100644 src/events.h diff --git a/src/Makefile.am b/src/Makefile.am index f066ed3..30e7a35 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,7 +5,8 @@ DAEMON_SOURCES =3D \ main.c \ manager.c manager.h \ util.c util.h \ - domain.c domain.h + domain.c domain.h \ + events.c events.h =20 EXTRA_DIST =3D \ $(DAEMON_SOURCES) diff --git a/src/events.c b/src/events.c new file mode 100644 index 0000000..4572e39 --- /dev/null +++ b/src/events.c @@ -0,0 +1,252 @@ +#include "domain.h" +#include "events.h" +#include "util.h" + +#include +#include + +static int +handle_domain_lifecycle_event(virConnectPtr connection, + virDomainPtr domain, + int event, + int detail, + void *opaque) +{ + VirtManager *manager =3D opaque; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + const char *signal =3D NULL; + const char *name; + _cleanup_(freep) char *path =3D NULL; + int r; + + switch (event) { + case VIR_DOMAIN_EVENT_DEFINED: + signal =3D "DomainDefined"; + break; + case VIR_DOMAIN_EVENT_UNDEFINED: + signal =3D "DomainUndefined"; + break; + case VIR_DOMAIN_EVENT_STARTED: + signal =3D "DomainStarted"; + break; + case VIR_DOMAIN_EVENT_SUSPENDED: + signal =3D "DomainSuspended"; + break; + case VIR_DOMAIN_EVENT_RESUMED: + signal =3D "DomainResumed"; + break; + case VIR_DOMAIN_EVENT_STOPPED: + signal =3D "DomainStopped"; + break; + case VIR_DOMAIN_EVENT_SHUTDOWN: + signal =3D "DomainShutdown"; + break; + case VIR_DOMAIN_EVENT_PMSUSPENDED: + signal =3D "DomainPMSuspended"; + break; + case VIR_DOMAIN_EVENT_CRASHED: + signal =3D "DomainCrashed"; + break; + default: + return 0; + } + + r =3D sd_bus_message_new_signal(manager->bus, + &message, + "/org/libvirt/Manager", + "org.libvirt.Manager", + signal); + if (r < 0) + return r; + + name =3D virDomainGetName(domain); + path =3D bus_path_for_domain(domain); + + r =3D sd_bus_message_append(message, "so", name ? : "", path); + if (r < 0) + return r; + + return sd_bus_send(manager->bus, message, NULL); +} + +static int +handle_domain_device_added_event(virConnectPtr connection, + virDomainPtr domain, + const char *device, + void *opaque) +{ + VirtManager *manager =3D opaque; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(freep) char *path =3D NULL; + int r; + + path =3D bus_path_for_domain(domain); + + r =3D sd_bus_message_new_signal(manager->bus, + &message, + path, + "org.libvirt.Domain", + "DeviceAdded"); + if (r < 0) + return r; + + r =3D sd_bus_message_append(message, "s", device); + if (r < 0) + return r; + + return sd_bus_send(manager->bus, message, NULL); +} + +static int +handle_domain_device_removed_event(virConnectPtr connection, + virDomainPtr domain, + const char *device, + void *opaque) +{ + VirtManager *manager =3D opaque; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(freep) char *path =3D NULL; + int r; + + path =3D bus_path_for_domain(domain); + + r =3D sd_bus_message_new_signal(manager->bus, + &message, + path, + "org.libvirt.Domain", + "DeviceRemoved"); + if (r < 0) + return r; + + r =3D sd_bus_message_append(message, "s", device); + if (r < 0) + return r; + + return sd_bus_send(manager->bus, message, NULL); +} + +static int +handle_domain_disk_change_event(virConnectPtr connection, + virDomainPtr domain, + const char *device, + int reason, + void *opaque) +{ + VirtManager *manager =3D opaque; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(freep) char *path =3D NULL; + const char *reasonstr; + int r; + + path =3D bus_path_for_domain(domain); + + r =3D sd_bus_message_new_signal(manager->bus, + &message, + path, + "org.libvirt.Domain", + "TrayChange"); + if (r < 0) + return r; + + switch (reason) { + case VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN: + reasonstr =3D "open"; + break; + case VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE: + reasonstr =3D "close"; + break; + default: + reasonstr =3D ""; + break; + } + + r =3D sd_bus_message_append(message, "ssss", device, reasonstr); + if (r < 0) + return r; + + return sd_bus_send(manager->bus, message, NULL); +} + +static int +handle_domain_tray_change_event(virConnectPtr connection, + virDomainPtr domain, + const char *old_src_path, + const char *new_src_path, + const char *device, + int reason, + void *opaque) +{ + VirtManager *manager =3D opaque; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; + _cleanup_(freep) char *path =3D NULL; + const char *reasonstr; + int r; + + path =3D bus_path_for_domain(domain); + + r =3D sd_bus_message_new_signal(manager->bus, + &message, + path, + "org.libvirt.Domain", + "DiskChange"); + if (r < 0) + return r; + + switch (reason) { + case VIR_DOMAIN_EVENT_DISK_CHANGE_MISSING_ON_START: + reasonstr =3D "missing-on-start"; + break; + case VIR_DOMAIN_EVENT_DISK_DROP_MISSING_ON_START: + reasonstr =3D "missing-on-start"; + break; + default: + reasonstr =3D ""; + break; + } + + r =3D sd_bus_message_append(message, "ssss", old_src_path, new_src_pat= h, device, reasonstr); + if (r < 0) + return r; + + return sd_bus_send(manager->bus, message, NULL); +} + +static void +virt_manager_register_event(VirtManager *manager, + int id, + virConnectDomainEventGenericCallback callback) +{ + assert(manager->callback_ids[id] =3D=3D -1); + + manager->callback_ids[id] =3D virConnectDomainEventRegisterAny(manager= ->connection, + NULL, + id, + VIR_DOMAI= N_EVENT_CALLBACK(callback), + manager, + NULL); +} + +void +virt_manager_register_events(VirtManager *manager) +{ + virt_manager_register_event(manager, + VIR_DOMAIN_EVENT_ID_LIFECYCLE, + VIR_DOMAIN_EVENT_CALLBACK(handle_domain_li= fecycle_event)); + + virt_manager_register_event(manager, + VIR_DOMAIN_EVENT_ID_DEVICE_ADDED, + VIR_DOMAIN_EVENT_CALLBACK(handle_domain_de= vice_added_event)); + + virt_manager_register_event(manager, + VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, + VIR_DOMAIN_EVENT_CALLBACK(handle_domain_de= vice_removed_event)); + + virt_manager_register_event(manager, + VIR_DOMAIN_EVENT_ID_DISK_CHANGE, + VIR_DOMAIN_EVENT_CALLBACK(handle_domain_tr= ay_change_event)); + + virt_manager_register_event(manager, + VIR_DOMAIN_EVENT_ID_TRAY_CHANGE, + VIR_DOMAIN_EVENT_CALLBACK(handle_domain_di= sk_change_event)); + +} diff --git a/src/events.h b/src/events.h new file mode 100644 index 0000000..7f1dfca --- /dev/null +++ b/src/events.h @@ -0,0 +1,9 @@ +#pragma once + +#include "manager.h" + +#include + + +void +virt_manager_register_events(VirtManager *manager); diff --git a/src/manager.c b/src/manager.c index a2709b4..32f38bb 100644 --- a/src/manager.c +++ b/src/manager.c @@ -1,8 +1,8 @@ #include "domain.h" +#include "events.h" #include "manager.h" #include "util.h" =20 -#include #include #include =20 @@ -126,227 +126,6 @@ virt_manager_define_xml(sd_bus_message *message, return sd_bus_reply_method_return(message, "o", path); } =20 -static int -handle_domain_lifecycle_event(virConnectPtr connection, - virDomainPtr domain, - int event, - int detail, - void *opaque) -{ - VirtManager *manager =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; - const char *signal =3D NULL; - const char *name; - _cleanup_(freep) char *path =3D NULL; - int r; - - switch (event) { - case VIR_DOMAIN_EVENT_DEFINED: - signal =3D "DomainDefined"; - break; - case VIR_DOMAIN_EVENT_UNDEFINED: - signal =3D "DomainUndefined"; - break; - case VIR_DOMAIN_EVENT_STARTED: - signal =3D "DomainStarted"; - break; - case VIR_DOMAIN_EVENT_SUSPENDED: - signal =3D "DomainSuspended"; - break; - case VIR_DOMAIN_EVENT_RESUMED: - signal =3D "DomainResumed"; - break; - case VIR_DOMAIN_EVENT_STOPPED: - signal =3D "DomainStopped"; - break; - case VIR_DOMAIN_EVENT_SHUTDOWN: - signal =3D "DomainShutdown"; - break; - case VIR_DOMAIN_EVENT_PMSUSPENDED: - signal =3D "DomainPMSuspended"; - break; - case VIR_DOMAIN_EVENT_CRASHED: - signal =3D "DomainCrashed"; - break; - default: - return 0; - } - - r =3D sd_bus_message_new_signal(manager->bus, - &message, - "/org/libvirt/Manager", - "org.libvirt.Manager", - signal); - if (r < 0) - return r; - - name =3D virDomainGetName(domain); - path =3D bus_path_for_domain(domain); - - r =3D sd_bus_message_append(message, "so", name ? : "", path); - if (r < 0) - return r; - - return sd_bus_send(manager->bus, message, NULL); -} - -static int -handle_domain_device_added_event(virConnectPtr connection, - virDomainPtr domain, - const char *device, - void *opaque) -{ - VirtManager *manager =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; - _cleanup_(freep) char *path =3D NULL; - int r; - - path =3D bus_path_for_domain(domain); - - r =3D sd_bus_message_new_signal(manager->bus, - &message, - path, - "org.libvirt.Domain", - "DeviceAdded"); - if (r < 0) - return r; - - r =3D sd_bus_message_append(message, "s", device); - if (r < 0) - return r; - - return sd_bus_send(manager->bus, message, NULL); -} - -static int -handle_domain_device_removed_event(virConnectPtr connection, - virDomainPtr domain, - const char *device, - void *opaque) -{ - VirtManager *manager =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; - _cleanup_(freep) char *path =3D NULL; - int r; - - path =3D bus_path_for_domain(domain); - - r =3D sd_bus_message_new_signal(manager->bus, - &message, - path, - "org.libvirt.Domain", - "DeviceRemoved"); - if (r < 0) - return r; - - r =3D sd_bus_message_append(message, "s", device); - if (r < 0) - return r; - - return sd_bus_send(manager->bus, message, NULL); -} - -static int -handle_domain_disk_change_event(virConnectPtr connection, - virDomainPtr domain, - const char *device, - int reason, - void *opaque) -{ - VirtManager *manager =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; - _cleanup_(freep) char *path =3D NULL; - const char *reasonstr; - int r; - - path =3D bus_path_for_domain(domain); - - r =3D sd_bus_message_new_signal(manager->bus, - &message, - path, - "org.libvirt.Domain", - "TrayChange"); - if (r < 0) - return r; - - switch (reason) { - case VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN: - reasonstr =3D "open"; - break; - case VIR_DOMAIN_EVENT_TRAY_CHANGE_CLOSE: - reasonstr =3D "close"; - break; - default: - reasonstr =3D ""; - break; - } - - r =3D sd_bus_message_append(message, "ssss", device, reasonstr); - if (r < 0) - return r; - - return sd_bus_send(manager->bus, message, NULL); -} - -static int -handle_domain_tray_change_event(virConnectPtr connection, - virDomainPtr domain, - const char *old_src_path, - const char *new_src_path, - const char *device, - int reason, - void *opaque) -{ - VirtManager *manager =3D opaque; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *message =3D NULL; - _cleanup_(freep) char *path =3D NULL; - const char *reasonstr; - int r; - - path =3D bus_path_for_domain(domain); - - r =3D sd_bus_message_new_signal(manager->bus, - &message, - path, - "org.libvirt.Domain", - "DiskChange"); - if (r < 0) - return r; - - switch (reason) { - case VIR_DOMAIN_EVENT_DISK_CHANGE_MISSING_ON_START: - reasonstr =3D "missing-on-start"; - break; - case VIR_DOMAIN_EVENT_DISK_DROP_MISSING_ON_START: - reasonstr =3D "missing-on-start"; - break; - default: - reasonstr =3D ""; - break; - } - - r =3D sd_bus_message_append(message, "ssss", old_src_path, new_src_pat= h, device, reasonstr); - if (r < 0) - return r; - - return sd_bus_send(manager->bus, message, NULL); -} - -static void -virt_manager_register_event(VirtManager *manager, - int id, - virConnectDomainEventGenericCallback callback) -{ - assert(manager->callback_ids[id] =3D=3D -1); - - manager->callback_ids[id] =3D virConnectDomainEventRegisterAny(manager= ->connection, - NULL, - id, - VIR_DOMAI= N_EVENT_CALLBACK(callback), - manager, - NULL); -} - static const sd_bus_vtable virt_manager_vtable[] =3D { SD_BUS_VTABLE_START(0), =20 @@ -385,25 +164,7 @@ virt_manager_new(VirtManager **managerp, if (!manager->connection) return -EINVAL; =20 - virt_manager_register_event(manager, - VIR_DOMAIN_EVENT_ID_LIFECYCLE, - VIR_DOMAIN_EVENT_CALLBACK(handle_domain_li= fecycle_event)); - - virt_manager_register_event(manager, - VIR_DOMAIN_EVENT_ID_DEVICE_ADDED, - VIR_DOMAIN_EVENT_CALLBACK(handle_domain_de= vice_added_event)); - - virt_manager_register_event(manager, - VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, - VIR_DOMAIN_EVENT_CALLBACK(handle_domain_de= vice_removed_event)); - - virt_manager_register_event(manager, - VIR_DOMAIN_EVENT_ID_DISK_CHANGE, - VIR_DOMAIN_EVENT_CALLBACK(handle_domain_tr= ay_change_event)); - - virt_manager_register_event(manager, - VIR_DOMAIN_EVENT_ID_TRAY_CHANGE, - VIR_DOMAIN_EVENT_CALLBACK(handle_domain_di= sk_change_event)); + virt_manager_register_events(manager); =20 r =3D sd_bus_add_object_vtable(manager->bus, NULL, --=20 2.13.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list