From: Anthony Liguori <anthony@codemonkey.ws>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] spice: connection events.
Date: Tue, 16 Nov 2010 08:06:03 -0600 [thread overview]
Message-ID: <4CE28FCB.80603@codemonkey.ws> (raw)
In-Reply-To: <1288704542-29864-1-git-send-email-kraxel@redhat.com>
On 11/02/2010 08:29 AM, Gerd Hoffmann wrote:
> This patch adds support for connection events to spice. The events are
> quite simliar to the vnc events. Unlike vnc spice uses multiple tcp
> channels though. qemu will report every single tcp connection (aka
> spice channel). If you want track spice sessions only you can filter
> for the main channel (channel-type == 1).
>
> Signed-off-by: Gerd Hoffmann<kraxel@redhat.com>
> ---
> monitor.c | 9 +++++++
> monitor.h | 3 ++
> ui/spice-core.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 75 insertions(+), 0 deletions(-)
>
> diff --git a/monitor.c b/monitor.c
> index 61607c5..23f3b73 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -458,6 +458,15 @@ void monitor_protocol_event(MonitorEvent event, QObject *data)
> case QEVENT_WATCHDOG:
> event_name = "WATCHDOG";
> break;
> + case QEVENT_SPICE_CONNECTED:
> + event_name = "SPICE_CONNECTED";
> + break;
> + case QEVENT_SPICE_INITIALIZED:
> + event_name = "SPICE_INITIALIZED";
> + break;
> + case QEVENT_SPICE_DISCONNECTED:
> + event_name = "SPICE_DISCONNECTED";
> + break;
> default:
> abort();
> break;
> diff --git a/monitor.h b/monitor.h
> index 2d36bba..4f2d328 100644
> --- a/monitor.h
> +++ b/monitor.h
> @@ -32,6 +32,9 @@ typedef enum MonitorEvent {
> QEVENT_BLOCK_IO_ERROR,
> QEVENT_RTC_CHANGE,
> QEVENT_WATCHDOG,
> + QEVENT_SPICE_CONNECTED,
> + QEVENT_SPICE_INITIALIZED,
> + QEVENT_SPICE_DISCONNECTED,
> QEVENT_MAX,
> } MonitorEvent;
>
> diff --git a/ui/spice-core.c b/ui/spice-core.c
> index b7fa031..a9f6d8f 100644
> --- a/ui/spice-core.c
> +++ b/ui/spice-core.c
> @@ -18,16 +18,24 @@
> #include<spice.h>
> #include<spice-experimental.h>
>
> +#include<netdb.h>
> +
> #include "qemu-common.h"
> #include "qemu-spice.h"
> #include "qemu-timer.h"
> #include "qemu-queue.h"
> #include "qemu-x509.h"
> +#include "qemu_socket.h"
> +#include "qint.h"
> +#include "qbool.h"
> +#include "qstring.h"
> +#include "qjson.h"
> #include "monitor.h"
>
> /* core bits */
>
> static SpiceServer *spice_server;
> +static const char *auth = "spice";
> int using_spice = 0;
>
> struct SpiceTimer {
> @@ -121,6 +129,56 @@ static void watch_remove(SpiceWatch *watch)
> qemu_free(watch);
> }
>
> +#if SPICE_INTERFACE_CORE_MINOR>= 3
> +static void channel_event(int event, SpiceChannelEventInfo *info)
> +{
> + static const int qevent[] = {
> + [ SPICE_CHANNEL_EVENT_CONNECTED ] = QEVENT_SPICE_CONNECTED,
> + [ SPICE_CHANNEL_EVENT_INITIALIZED ] = QEVENT_SPICE_INITIALIZED,
> + [ SPICE_CHANNEL_EVENT_DISCONNECTED ] = QEVENT_SPICE_DISCONNECTED,
> + };
> + char lhost[NI_MAXHOST], lport[NI_MAXSERV];
> + char phost[NI_MAXHOST], pport[NI_MAXSERV];
> + QDict *server, *client;
> + QObject *data;
> +
> + getnameinfo(&info->laddr, info->llen,
> + lhost, sizeof(lhost), lport, sizeof(lport),
> + NI_NUMERICHOST | NI_NUMERICSERV);
> + getnameinfo(&info->paddr, info->plen,
> + phost, sizeof(phost), pport, sizeof(pport),
> + NI_NUMERICHOST | NI_NUMERICSERV);
> +#if 0
> + fprintf(stderr, "%s: ev %d, flg %d, id %x, %d:%d, %s:%s<-> %s:%s\n",
> + __FUNCTION__, event, info->flags, info->connection_id,
> + info->type, info->id, lhost, lport, phost, pport);
> +#endif
>
A DPRINTF would be nicer but otherwise, Reviewed-by: Anthony Liguori
<aliguori@us.ibm.com>
Regards,
Anthony Liguori
> +
> + server = qdict_new();
> + qdict_put(server, "host", qstring_from_str(lhost));
> + qdict_put(server, "port", qstring_from_str(lport));
> + qdict_put(server, "family", qstring_from_str(inet_strfamily(info->laddr.sa_family)));
> + if (event != SPICE_CHANNEL_EVENT_CONNECTED) {
> + int tls = info->flags& SPICE_CHANNEL_EVENT_FLAG_TLS;
> + qdict_put(server, "auth", qstring_from_str(auth));
> + qdict_put(server, "connection-id", qint_from_int(info->connection_id));
> + qdict_put(server, "channel-type", qint_from_int(info->type));
> + qdict_put(server, "channel-id", qint_from_int(info->id));
> + qdict_put(server, "tls", qbool_from_int(tls));
> + }
> +
> + client = qdict_new();
> + qdict_put(client, "host", qstring_from_str(phost));
> + qdict_put(client, "port", qstring_from_str(pport));
> + qdict_put(client, "family", qstring_from_str(inet_strfamily(info->paddr.sa_family)));
> +
> + data = qobject_from_jsonf("{ 'client': %p, 'server': %p }",
> + QOBJECT(client), QOBJECT(server));
> + monitor_protocol_event(qevent[event], data);
> + qobject_decref(data);
> +}
> +#endif
> +
> static SpiceCoreInterface core_interface = {
> .base.type = SPICE_INTERFACE_CORE,
> .base.description = "qemu core services",
> @@ -135,6 +193,10 @@ static SpiceCoreInterface core_interface = {
> .watch_add = watch_add,
> .watch_update_mask = watch_update_mask,
> .watch_remove = watch_remove,
> +
> +#if SPICE_INTERFACE_CORE_MINOR>= 3
> + .channel_event = channel_event,
> +#endif
> };
>
> /* config string parsing */
> @@ -316,6 +378,7 @@ void qemu_spice_init(void)
> spice_server_set_ticket(spice_server, password, 0, 0, 0);
> }
> if (qemu_opt_get_bool(opts, "disable-ticketing", 0)) {
> + auth = "none";
> spice_server_set_noauth(spice_server);
> }
>
>
prev parent reply other threads:[~2010-11-16 14:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-02 13:29 [Qemu-devel] [PATCH] spice: connection events Gerd Hoffmann
2010-11-16 14:06 ` Anthony Liguori [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CE28FCB.80603@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).