[Spice-devel] [RFC/POC PATCH vd_agent 15/16] Use VDAgentMonitorsConfigV2 instead of VDAgentMonitorsConfig

Lukáš Hrázký lhrazky at redhat.com
Tue Jun 5 15:30:41 UTC 2018


VDAgentMonitorsConfigV2 contains the output_id field.

TODO: Add a capability and check for the version of the message to use.
---
 src/vdagent/vdagent.c    |  2 +-
 src/vdagent/x11-priv.h   |  2 +-
 src/vdagent/x11-randr.c  | 32 ++++++++++++++++----------------
 src/vdagent/x11.h        |  2 +-
 src/vdagentd-proto.h     |  4 ++--
 src/vdagentd/vdagentd.c  | 18 +++++++++---------
 src/vdagentd/xorg-conf.c |  2 +-
 src/vdagentd/xorg-conf.h |  2 +-
 8 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c
index c5e5952..281805b 100644
--- a/src/vdagent/vdagent.c
+++ b/src/vdagent/vdagent.c
@@ -178,7 +178,7 @@ static void daemon_read_complete(struct udscs_connection **connp,
 
     switch (header->type) {
     case VDAGENTD_MONITORS_CONFIG:
-        vdagent_x11_set_monitor_config(agent->x11, (VDAgentMonitorsConfig *)data, 0);
+        vdagent_x11_set_monitor_config(agent->x11, (VDAgentMonitorsConfigV2 *)data, 0);
         break;
     case VDAGENTD_CLIPBOARD_REQUEST:
         vdagent_clipboard_request(agent->clipboards, header->arg1, header->arg2);
diff --git a/src/vdagent/x11-priv.h b/src/vdagent/x11-priv.h
index e7c64bd..26d8960 100644
--- a/src/vdagent/x11-priv.h
+++ b/src/vdagent/x11-priv.h
@@ -132,7 +132,7 @@ struct vdagent_x11 {
         int max_height;
         int num_monitors;
         struct monitor_size monitor_sizes[MONITOR_SIZE_COUNT];
-        VDAgentMonitorsConfig *failed_conf;
+        VDAgentMonitorsConfigV2 *failed_conf;
     } randr;
 
     /* NB: we cache this assuming the driver isn't changed under our feet */
diff --git a/src/vdagent/x11-randr.c b/src/vdagent/x11-randr.c
index abcb91b..39d3f1e 100644
--- a/src/vdagent/x11-randr.c
+++ b/src/vdagent/x11-randr.c
@@ -566,7 +566,7 @@ static void constrain_to_screen(struct vdagent_x11 *x11, int *w, int *h)
     }
 }
 
-static int monitor_enabled(VDAgentMonConfig *mon)
+static int monitor_enabled(VDAgentMonConfigV2 *mon)
 {
     return mon->width != 0 && mon->height != 0;
 }
@@ -584,7 +584,7 @@ static int monitor_enabled(VDAgentMonConfig *mon)
  *  max_height >= height >= min_height for all monitors in mon_config
  */
 static void zero_base_monitors(struct vdagent_x11 *x11,
-                               VDAgentMonitorsConfig *mon_config,
+                               VDAgentMonitorsConfigV2 *mon_config,
                                int *width, int *height)
 {
     int i, min_x = INT_MAX, min_y = INT_MAX, max_x = INT_MIN, max_y = INT_MIN;
@@ -619,7 +619,7 @@ static void zero_base_monitors(struct vdagent_x11 *x11,
     *height = max_y;
 }
 
-static int enabled_monitors(VDAgentMonitorsConfig *mon)
+static int enabled_monitors(VDAgentMonitorsConfigV2 *mon)
 {
     int i, enabled = 0;
 
@@ -630,8 +630,8 @@ static int enabled_monitors(VDAgentMonitorsConfig *mon)
     return enabled;
 }
 
-static int same_monitor_configs(VDAgentMonitorsConfig *conf1,
-                                VDAgentMonitorsConfig *conf2)
+static int same_monitor_configs(VDAgentMonitorsConfigV2 *conf1,
+                                VDAgentMonitorsConfigV2 *conf2)
 {
     int i;
 
@@ -640,8 +640,8 @@ static int same_monitor_configs(VDAgentMonitorsConfig *conf1,
         return 0;
 
     for (i = 0; i < conf1->num_of_monitors; i++) {
-        VDAgentMonConfig *mon1 = &conf1->monitors[i];
-        VDAgentMonConfig *mon2 = &conf2->monitors[i];
+        VDAgentMonConfigV2 *mon1 = &conf1->monitors[i];
+        VDAgentMonConfigV2 *mon2 = &conf2->monitors[i];
         /* NOTE: we don't compare depth. */
         if (mon1->x != mon2->x || mon1->y != mon2->y ||
                mon1->width != mon2->width || mon1->height != mon2->height)
@@ -652,16 +652,16 @@ static int same_monitor_configs(VDAgentMonitorsConfig *conf1,
 
 static int config_size(int num_of_monitors)
 {
-    return sizeof(VDAgentMonitorsConfig) +
-                           num_of_monitors * sizeof(VDAgentMonConfig);
+    return sizeof(VDAgentMonitorsConfigV2) +
+                           num_of_monitors * sizeof(VDAgentMonConfigV2);
 }
 
-static VDAgentMonitorsConfig *get_current_mon_config(struct vdagent_x11 *x11)
+static VDAgentMonitorsConfigV2 *get_current_mon_config(struct vdagent_x11 *x11)
 {
     int i, num_of_monitors = 0;
     XRRModeInfo *mode;
     XRRScreenResources *res = x11->randr.res;
-    VDAgentMonitorsConfig *mon_config;
+    VDAgentMonitorsConfigV2 *mon_config;
 
     mon_config = calloc(1, config_size(res->noutput));
     if (!mon_config) {
@@ -705,11 +705,11 @@ error:
 }
 
 static void dump_monitors_config(struct vdagent_x11 *x11,
-                                 VDAgentMonitorsConfig *mon_config,
+                                 VDAgentMonitorsConfigV2 *mon_config,
                                  const char *prefix)
 {
     int i;
-    VDAgentMonConfig *m;
+    VDAgentMonConfigV2 *m;
 
     syslog(LOG_DEBUG, "Monitors config %s: %d, %x", prefix, mon_config->num_of_monitors,
            mon_config->flags);
@@ -733,12 +733,12 @@ static void dump_monitors_config(struct vdagent_x11 *x11,
  *  invalid configuration request from client.
  */
 void vdagent_x11_set_monitor_config(struct vdagent_x11 *x11,
-                                    VDAgentMonitorsConfig *mon_config,
+                                    VDAgentMonitorsConfigV2 *mon_config,
                                     int fallback)
 {
     int primary_w, primary_h;
     int i, real_num_of_monitors = 0;
-    VDAgentMonitorsConfig *curr = NULL;
+    VDAgentMonitorsConfigV2 *curr = NULL;
 
     if (!x11->has_xrandr)
         goto exit;
@@ -913,7 +913,7 @@ void vdagent_x11_send_daemon_guest_xorg_res(struct vdagent_x11 *x11, int update)
     int i, width = 0, height = 0, screen_count = 0;
 
     if (x11->has_xrandr) {
-        VDAgentMonitorsConfig *curr;
+        VDAgentMonitorsConfigV2 *curr;
 
         if (update)
             update_randr_res(x11, 0);
diff --git a/src/vdagent/x11.h b/src/vdagent/x11.h
index 1505f58..ad619eb 100644
--- a/src/vdagent/x11.h
+++ b/src/vdagent/x11.h
@@ -40,7 +40,7 @@ int  vdagent_x11_get_fd(struct vdagent_x11 *x11);
 void vdagent_x11_do_read(struct vdagent_x11 *x11);
 
 void vdagent_x11_set_monitor_config(struct vdagent_x11 *x11,
-    VDAgentMonitorsConfig *mon_config, int fallback);
+    VDAgentMonitorsConfigV2 *mon_config, int fallback);
 
 #ifndef WITH_GTK
 void vdagent_x11_clipboard_grab(struct vdagent_x11 *x11, uint8_t selection,
diff --git a/src/vdagentd-proto.h b/src/vdagentd-proto.h
index f72a890..2d663ec 100644
--- a/src/vdagentd-proto.h
+++ b/src/vdagentd-proto.h
@@ -31,8 +31,8 @@ enum {
     VDAGENTD_GUEST_XORG_RESOLUTION, /* client -> daemon, arg1: overall width,
                                        arg2: overall height, data: array of
                                        vdagentd_guest_xorg_resolution */
-    VDAGENTD_MONITORS_CONFIG, /* daemon -> client, VDAgentMonitorsConfig
-                                 followed by num_monitors VDAgentMonConfig-s */
+    VDAGENTD_MONITORS_CONFIG, /* daemon -> client, VDAgentMonitorsConfigV2
+                                 followed by num_monitors VDAgentMonConfigV2-s */
     VDAGENTD_CLIPBOARD_GRAB,    /* arg1: sel, data: array of supported types */
     VDAGENTD_CLIPBOARD_REQUEST, /* arg1: selection, arg 2 = type */
     VDAGENTD_CLIPBOARD_DATA,    /* arg1: sel, arg 2: type, data: data */
diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
index 682761a..2589549 100644
--- a/src/vdagentd/vdagentd.c
+++ b/src/vdagentd/vdagentd.c
@@ -69,7 +69,7 @@ static struct vdagent_virtio_port *virtio_port = NULL;
 static GHashTable *active_xfers = NULL;
 static struct session_info *session_info = NULL;
 static struct vdagentd_uinput *uinput = NULL;
-static VDAgentMonitorsConfig *mon_config = NULL;
+static VDAgentMonitorsConfigV2 *mon_config = NULL;
 static uint32_t *capabilities = NULL;
 static int capabilities_size = 0;
 static const char *active_session = NULL;
@@ -175,16 +175,16 @@ void do_client_mouse(struct vdagentd_uinput **uinputp, VDAgentMouseState *mouse)
 }
 
 static void do_client_monitors(struct vdagent_virtio_port *vport, int port_nr,
-    VDAgentMessage *message_header, VDAgentMonitorsConfig *new_monitors)
+    VDAgentMessage *message_header, VDAgentMonitorsConfigV2 *new_monitors)
 {
     VDAgentReply reply;
     uint32_t size;
 
     /* Store monitor config to send to agents when they connect */
-    size = sizeof(VDAgentMonitorsConfig) +
-           new_monitors->num_of_monitors * sizeof(VDAgentMonConfig);
+    size = sizeof(VDAgentMonitorsConfigV2) +
+           new_monitors->num_of_monitors * sizeof(VDAgentMonConfigV2);
     if (message_header->size != size) {
-        syslog(LOG_ERR, "invalid message size for VDAgentMonitorsConfig");
+        syslog(LOG_ERR, "invalid message size for VDAgentMonitorsConfigV2");
         return;
     }
 
@@ -396,7 +396,7 @@ static gsize vdagent_message_min_size[] =
 {
     -1, /* Does not exist */
     sizeof(VDAgentMouseState), /* VD_AGENT_MOUSE_STATE */
-    sizeof(VDAgentMonitorsConfig), /* VD_AGENT_MONITORS_CONFIG */
+    sizeof(VDAgentMonitorsConfigV2), /* VD_AGENT_MONITORS_CONFIG */
     sizeof(VDAgentReply), /* VD_AGENT_REPLY */
     sizeof(VDAgentClipboard), /* VD_AGENT_CLIPBOARD */
     sizeof(VDAgentDisplayConfig), /* VD_AGENT_DISPLAY_CONFIG */
@@ -538,7 +538,7 @@ static int virtio_port_read_complete(
     case VD_AGENT_MONITORS_CONFIG:
         virtio_msg_uint32_from_le(data, message_header->size, 0);
         do_client_monitors(vport, port_nr, message_header,
-                    (VDAgentMonitorsConfig *)data);
+                    (VDAgentMonitorsConfigV2 *)data);
         break;
     case VD_AGENT_ANNOUNCE_CAPABILITIES:
         virtio_msg_uint32_from_le(data, message_header->size, 0);
@@ -820,8 +820,8 @@ static void update_active_session_connection(struct udscs_connection *new_conn)
 
     if (active_session_conn && mon_config)
         udscs_write(active_session_conn, VDAGENTD_MONITORS_CONFIG, 0, 0,
-                    (uint8_t *)mon_config, sizeof(VDAgentMonitorsConfig) +
-                    mon_config->num_of_monitors * sizeof(VDAgentMonConfig));
+                    (uint8_t *)mon_config, sizeof(VDAgentMonitorsConfigV2) +
+                    mon_config->num_of_monitors * sizeof(VDAgentMonConfigV2));
 
     release_clipboards();
 
diff --git a/src/vdagentd/xorg-conf.c b/src/vdagentd/xorg-conf.c
index 9f3dac5..a50e67c 100644
--- a/src/vdagentd/xorg-conf.c
+++ b/src/vdagentd/xorg-conf.c
@@ -43,7 +43,7 @@
         } \
     } while(0)
 
-void vdagentd_write_xorg_conf(VDAgentMonitorsConfig *monitor_conf)
+void vdagentd_write_xorg_conf(VDAgentMonitorsConfigV2 *monitor_conf)
 {
 #ifdef HAVE_PCIACCESS
     int i, r, count, min_x = INT_MAX, min_y = INT_MAX;
diff --git a/src/vdagentd/xorg-conf.h b/src/vdagentd/xorg-conf.h
index 9934359..124d986 100644
--- a/src/vdagentd/xorg-conf.h
+++ b/src/vdagentd/xorg-conf.h
@@ -24,6 +24,6 @@
 #include <stdio.h>
 #include <spice/vd_agent.h>
 
-void vdagentd_write_xorg_conf(VDAgentMonitorsConfig *monitor_conf);
+void vdagentd_write_xorg_conf(VDAgentMonitorsConfigV2 *monitor_conf);
 
 #endif
-- 
2.17.1



More information about the Spice-devel mailing list