1 /* vdagent.c xorg-client to vdagentd (daemon).
3 Copyright 2010 Red Hat, Inc.
6 Hans de Goede <hdegoede@redhat.com>
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
13 This program 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
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
27 #include <sys/select.h>
28 #include <spice/vd_agent.h>
31 #include "vdagentd-proto.h"
32 #include "vdagent-x11.h"
34 int daemon_read_complete(struct udscs_connection
*conn
,
35 struct udscs_message_header
*header
, const uint8_t *data
)
37 switch (header
->type
) {
38 case VDAGENTD_MONITORS_CONFIG
: {
39 VDAgentMonitorsConfig
*mon_config
= (VDAgentMonitorsConfig
*)data
;
40 VDAgentMonConfig
*monitors
= mon_config
->monitors
;
42 printf("monitors config, mon0: %dx%d\n", monitors
[0].width
, monitors
[0].height
);
46 fprintf(stderr
, "Unknown message from vdagentd type: %d\n",
52 static void usage(FILE *fp
)
55 "vdagent -- spice agent xorg client\n"
57 " -h print this text\n"
58 " -d print debug messages\n");
61 int main(int argc
, char *argv
[])
63 struct udscs_connection
*client
;
64 struct vdagent_x11
*x11
;
65 fd_set readfds
, writefds
;
66 int c
, n
, nfds
, x11_fd
;
70 if (-1 == (c
= getopt(argc
, argv
, "dh")))
85 client
= udscs_connect(VDAGENTD_SOCKET
, daemon_read_complete
, NULL
);
89 x11
= vdagent_x11_create(client
, verbose
);
91 udscs_destroy_connection(&client
);
99 nfds
= udscs_client_fill_fds(client
, &readfds
, &writefds
);
100 x11_fd
= vdagent_x11_get_fd(x11
);
101 FD_SET(x11_fd
, &readfds
);
105 n
= select(nfds
, &readfds
, &writefds
, NULL
, NULL
);
113 if (FD_SET(x11_fd
, &readfds
))
114 vdagent_x11_do_read(x11
);
115 udscs_client_handle_fds(&client
, &readfds
, &writefds
);
118 vdagent_x11_destroy(x11
);