On 03/25/11 20:47, Michael Roth wrote: > This is the actual guest daemon, it listens for requests over a > virtio-serial/isa-serial/unix socket channel and routes them through > to dispatch routines, and writes the results back to the channel in > a manner similar to Qmp. > > This is currently horribly broken, only the unix-listen channel method > is working at the moment (likely due to mis-use of gio channel > interfaces), and the code is in overall rough shape. > > Signed-off-by: Michael Roth <mdr...@linux.vnet.ibm.com> > --- > qemu-ga.c | 522 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 522 insertions(+), 0 deletions(-) > create mode 100644 qemu-ga.c > > diff --git a/qemu-ga.c b/qemu-ga.c > new file mode 100644 > index 0000000..435a1fc > --- /dev/null > +++ b/qemu-ga.c > @@ -0,0 +1,522 @@ > +/* > + * QEMU Guest Agent > + * > + * Copyright IBM Corp. 2011 > + * > + * Authors: > + * Adam Litke <agli...@linux.vnet.ibm.com> > + * Michael Roth <mdr...@linux.vnet.ibm.com> > + * > + * This work is licensed under the terms of the GNU GPL, version 2 or later. > + * See the COPYING file in the top-level directory. > + */ > +#include <stdlib.h> > +#include <stdio.h> > +#include <stdbool.h> > +#include <glib.h> > +#include <gio/gio.h> > +#include <getopt.h> > +#include <termios.h> > +#include "qemu_socket.h" > +#include "json-streamer.h" > +#include "json-parser.h" > +#include "guest-agent.h" > + > +#define QGA_VERSION "1.0" > +#define QGA_GUEST_PATH_VIRTIO_DEFAULT "/dev/virtio-ports/va" > +#define QGA_PIDFILE_DEFAULT "/var/run/qemu-va.pid" > +#define QGA_BAUDRATE_DEFAULT B38400 /* for isa-serial channels */ > + > +bool verbose_enabled = false; > + > +typedef struct GAState { > + bool active; > + int session_id; > + const char *proxy_path; > + JSONMessageParser parser; > + GMainLoop *main_loop; > + guint conn_id; > + GSocket *conn_sock; > + GIOChannel *conn_channel; > + guint listen_id; > + GSocket *listen_sock; > + GIOChannel *listen_channel; > + const char *path; > + const char *method; > +} GAState; > + > +static void usage(const char *cmd) > +{ > + printf( > +"Usage: %s -c <channel_opts>\n" > +"QEMU virtagent guest agent %s\n" > +"\n" > +" -c, --channel channel method: one of unix-connect, virtio-serial, > or\n" > +" isa-serial\n" > +" -p, --path channel path\n" > +" -v, --verbose display extra debugging information\n" > +" -d, --daemonize become a daemon\n" > +" -h, --help display this help and exit\n" > +"\n" > +"Report bugs to <mdr...@linux.vnet.ibm.com>\n" > + , cmd, QGA_VERSION); > +} > + > +static void conn_channel_close(GAState *s); > + > +static void become_daemon(void) > +{ > + pid_t pid, sid; > + int pidfd; > + char *pidstr; > + > + pid = fork(); > + if (pid < 0) > + exit(EXIT_FAILURE);
There's a pile of missing braces in this file - please go through it and fix them before the next version. Cheers, Jes