qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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);
>       }
>
>    

      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).