summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/channel-cursor.c6
-rw-r--r--gtk/channel-display.c6
-rw-r--r--gtk/channel-inputs.c6
-rw-r--r--gtk/channel-main.c5
-rw-r--r--gtk/channel-playback.c6
-rw-r--r--gtk/spice-channel-priv.h1
-rw-r--r--gtk/spice-channel.c74
-rw-r--r--gtk/spice-session.c20
-rw-r--r--gtk/spice-widget.c6
9 files changed, 61 insertions, 69 deletions
diff --git a/gtk/channel-cursor.c b/gtk/channel-cursor.c
index 4009faa..11d20ff 100644
--- a/gtk/channel-cursor.c
+++ b/gtk/channel-cursor.c
@@ -37,8 +37,6 @@ static void spice_cursor_channel_init(SpiceCursorChannel *channel)
{
spice_cursor_channel *c;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
c = channel->priv = SPICE_CURSOR_CHANNEL_GET_PRIVATE(channel);
memset(c, 0, sizeof(*c));
@@ -47,8 +45,6 @@ static void spice_cursor_channel_init(SpiceCursorChannel *channel)
static void spice_cursor_channel_finalize(GObject *obj)
{
- fprintf(stderr, "%s\n", __FUNCTION__);
-
if (G_OBJECT_CLASS(spice_cursor_channel_parent_class)->finalize)
G_OBJECT_CLASS(spice_cursor_channel_parent_class)->finalize(obj);
}
@@ -58,8 +54,6 @@ static void spice_cursor_channel_class_init(SpiceCursorChannelClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
SpiceChannelClass *channel_class = SPICE_CHANNEL_CLASS(klass);
- fprintf(stderr, "%s\n", __FUNCTION__);
-
gobject_class->finalize = spice_cursor_channel_finalize;
channel_class->handle_msg = spice_cursor_handle_msg;
diff --git a/gtk/channel-display.c b/gtk/channel-display.c
index 8fcaa11..9718779 100644
--- a/gtk/channel-display.c
+++ b/gtk/channel-display.c
@@ -50,8 +50,6 @@ static void spice_display_channel_finalize(GObject *obj)
{
spice_display_channel *c = SPICE_DISPLAY_CHANNEL(obj)->priv;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
palette_clear(&c->palette_cache);
image_clear(&c->image_cache);
clear_surfaces(SPICE_CHANNEL(obj));
@@ -67,8 +65,6 @@ static void spice_display_channel_class_init(SpiceDisplayChannelClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
SpiceChannelClass *channel_class = SPICE_CHANNEL_CLASS(klass);
- fprintf(stderr, "%s\n", __FUNCTION__);
-
gobject_class->finalize = spice_display_channel_finalize;
channel_class->handle_msg = spice_display_handle_msg;
channel_class->channel_up = spice_display_channel_up;
@@ -248,8 +244,6 @@ static void spice_display_channel_init(SpiceDisplayChannel *channel)
{
spice_display_channel *c;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
c = channel->priv = SPICE_DISPLAY_CHANNEL_GET_PRIVATE(channel);
memset(c, 0, sizeof(*c));
diff --git a/gtk/channel-inputs.c b/gtk/channel-inputs.c
index 871373f..1148003 100644
--- a/gtk/channel-inputs.c
+++ b/gtk/channel-inputs.c
@@ -37,8 +37,6 @@ static void spice_inputs_channel_init(SpiceInputsChannel *channel)
{
spice_inputs_channel *c;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
c = channel->priv = SPICE_INPUTS_CHANNEL_GET_PRIVATE(channel);
memset(c, 0, sizeof(*c));
}
@@ -62,8 +60,6 @@ static void spice_inputs_get_property(GObject *object,
static void spice_inputs_channel_finalize(GObject *obj)
{
- fprintf(stderr, "%s\n", __FUNCTION__);
-
if (G_OBJECT_CLASS(spice_inputs_channel_parent_class)->finalize)
G_OBJECT_CLASS(spice_inputs_channel_parent_class)->finalize(obj);
}
@@ -73,8 +69,6 @@ static void spice_inputs_channel_class_init(SpiceInputsChannelClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
SpiceChannelClass *channel_class = SPICE_CHANNEL_CLASS(klass);
- fprintf(stderr, "%s\n", __FUNCTION__);
-
gobject_class->finalize = spice_inputs_channel_finalize;
gobject_class->get_property = spice_inputs_get_property;
channel_class->handle_msg = spice_inputs_handle_msg;
diff --git a/gtk/channel-main.c b/gtk/channel-main.c
index 0006ab9..7d934ed 100644
--- a/gtk/channel-main.c
+++ b/gtk/channel-main.c
@@ -82,8 +82,6 @@ static void spice_main_channel_init(SpiceMainChannel *channel)
{
spice_main_channel *c;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
c = channel->priv = SPICE_MAIN_CHANNEL_GET_PRIVATE(channel);
memset(c, 0, sizeof(*c));
}
@@ -115,7 +113,6 @@ static void spice_main_channel_finalize(GObject *obj)
{
spice_main_channel *c = SPICE_MAIN_CHANNEL(obj)->priv;
- fprintf(stderr, "%s\n", __FUNCTION__);
if (c->timer_id) {
g_source_remove(c->timer_id);
}
@@ -129,8 +126,6 @@ static void spice_main_channel_class_init(SpiceMainChannelClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
SpiceChannelClass *channel_class = SPICE_CHANNEL_CLASS(klass);
- fprintf(stderr, "%s\n", __FUNCTION__);
-
gobject_class->finalize = spice_main_channel_finalize;
gobject_class->get_property = spice_main_get_property;
channel_class->handle_msg = spice_main_handle_msg;
diff --git a/gtk/channel-playback.c b/gtk/channel-playback.c
index 20b86d7..29fe800 100644
--- a/gtk/channel-playback.c
+++ b/gtk/channel-playback.c
@@ -30,16 +30,12 @@ static void spice_playback_channel_init(SpicePlaybackChannel *channel)
{
spice_playback_channel *c;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
c = channel->priv = SPICE_PLAYBACK_CHANNEL_GET_PRIVATE(channel);
memset(c, 0, sizeof(*c));
}
static void spice_playback_channel_finalize(GObject *obj)
{
- fprintf(stderr, "%s\n", __FUNCTION__);
-
if (G_OBJECT_CLASS(spice_playback_channel_parent_class)->finalize)
G_OBJECT_CLASS(spice_playback_channel_parent_class)->finalize(obj);
}
@@ -49,8 +45,6 @@ static void spice_playback_channel_class_init(SpicePlaybackChannelClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
SpiceChannelClass *channel_class = SPICE_CHANNEL_CLASS(klass);
- fprintf(stderr, "%s\n", __FUNCTION__);
-
gobject_class->finalize = spice_playback_channel_finalize;
channel_class->handle_msg = spice_playback_handle_msg;
diff --git a/gtk/spice-channel-priv.h b/gtk/spice-channel-priv.h
index 734ac2a..4ad1897 100644
--- a/gtk/spice-channel-priv.h
+++ b/gtk/spice-channel-priv.h
@@ -35,7 +35,6 @@ struct spice_channel {
SSL_CTX *ctx;
SSL *ssl;
- int protocol;
int tls;
int connection_id;
diff --git a/gtk/spice-channel.c b/gtk/spice-channel.c
index 0343b3f..4f9f831 100644
--- a/gtk/spice-channel.c
+++ b/gtk/spice-channel.c
@@ -41,17 +41,24 @@ enum {
static guint signals[SPICE_CHANNEL_LAST_SIGNAL];
+static const char *channel_desc[] = {
+ [ SPICE_CHANNEL_MAIN ] = "main",
+ [ SPICE_CHANNEL_DISPLAY ] = "display",
+ [ SPICE_CHANNEL_CURSOR ] = "cursor",
+ [ SPICE_CHANNEL_INPUTS ] = "inputs",
+ [ SPICE_CHANNEL_RECORD ] = "record",
+ [ SPICE_CHANNEL_PLAYBACK ] = "playback",
+ [ SPICE_CHANNEL_TUNNEL ] = "tunnel",
+};
+
static void spice_channel_init(SpiceChannel *channel)
{
spice_channel *c;
- fprintf(stderr, "%s\n", __FUNCTION__);
-
c = channel->priv = SPICE_CHANNEL_GET_PRIVATE(channel);
c->serial = 1;
c->socket = -1;
- c->protocol = SPICE_VERSION_MAJOR;
strcpy(c->name, "?");
}
@@ -59,10 +66,14 @@ static void spice_channel_constructed(GObject *gobject)
{
SpiceChannel *channel = SPICE_CHANNEL(gobject);
spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel);
+ const char *desc = NULL;
- snprintf(c->name, sizeof(c->name), "%d:%d",
- c->channel_type, c->channel_id);
- fprintf(stderr, "%s %s\n", __FUNCTION__, c->name);
+ if (c->channel_type < SPICE_N_ELEMENTS(channel_desc))
+ desc = channel_desc[c->channel_type];
+
+ snprintf(c->name, sizeof(c->name), "%s-%d:%d",
+ desc ? desc : "unknown", c->channel_type, c->channel_id);
+ fprintf(stderr, "%s: %s\n", c->name, __FUNCTION__);
c->connection_id = spice_session_get_connection_id(c->session);
spice_session_channel_new(c->session, channel);
@@ -77,7 +88,6 @@ static void spice_channel_dispose(GObject *gobject)
SpiceChannel *channel = SPICE_CHANNEL(gobject);
spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel);
- fprintf(stderr, "%s %s\n", __FUNCTION__, c->name);
spice_channel_disconnect(channel, SPICE_CHANNEL_CLOSED);
spice_session_channel_destroy(c->session, channel);
@@ -91,7 +101,7 @@ static void spice_channel_finalize(GObject *gobject)
SpiceChannel *channel = SPICE_CHANNEL(gobject);
spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel);
- fprintf(stderr, "%s %s\n", __FUNCTION__, c->name);
+ fprintf(stderr, "%s: %s\n", c->name, __FUNCTION__);
/* Chain up to the parent class */
if (G_OBJECT_CLASS(spice_channel_parent_class)->finalize)
@@ -150,8 +160,6 @@ static void spice_channel_class_init(SpiceChannelClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- fprintf(stderr, "%s\n", __FUNCTION__);
-
gobject_class->constructed = spice_channel_constructed;
gobject_class->dispose = spice_channel_dispose;
gobject_class->finalize = spice_channel_finalize;
@@ -370,7 +378,8 @@ static int spice_channel_send(SpiceChannel *channel, void *buf, int len)
if (c->tls) {
rc = SSL_write(c->ssl, buf, len);
if (rc != len) {
- fprintf(stderr, "%s: SSL_write: %d / %d\n", __FUNCTION__, rc, len);
+ fprintf(stderr, "%s: %s: SSL_write: %d / %d\n",
+ c->name, __FUNCTION__, rc, len);
}
} else {
rc = send(c->socket, buf, len, 0);
@@ -389,7 +398,7 @@ static int spice_channel_recv(SpiceChannel *channel, void *buf, int len)
return rc;
}
if (rc == 0) {
- fprintf(stderr, "channel/tls eof: %s\n", c->name);
+ fprintf(stderr, "%s: channel/tls eof\n", c->name);
spice_channel_disconnect(channel, SPICE_CHANNEL_CLOSED);
return 0;
}
@@ -397,7 +406,7 @@ static int spice_channel_recv(SpiceChannel *channel, void *buf, int len)
if (err == SSL_ERROR_WANT_READ) {
return 0;
}
- fprintf(stderr, "channel/tls error: %s: %s\n",
+ fprintf(stderr, "%s: channel/tls error: %s\n",
c->name, ERR_error_string(err, NULL));
spice_channel_disconnect(channel, SPICE_CHANNEL_ERROR_IO);
return 0;
@@ -407,12 +416,12 @@ static int spice_channel_recv(SpiceChannel *channel, void *buf, int len)
case -1:
if (errno == EAGAIN)
return 0;
- fprintf(stderr, "channel error: %s: %s\n",
+ fprintf(stderr, "%s: channel error: %s\n",
c->name, strerror(errno));
spice_channel_disconnect(channel, SPICE_CHANNEL_ERROR_IO);
return 0;
case 0:
- fprintf(stderr, "channel eof: %s\n", c->name);
+ fprintf(stderr, "%s: channel eof\n", c->name);
spice_channel_disconnect(channel, SPICE_CHANNEL_CLOSED);
return 0;
default:
@@ -432,7 +441,8 @@ static void spice_channel_tls_connect(SpiceChannel *channel)
if (err == SSL_ERROR_WANT_READ) {
return;
}
- fprintf(stderr, "SSL_connect: %s", ERR_error_string(err, NULL));
+ fprintf(stderr, "%s: SSL_connect: %s",
+ c->name, ERR_error_string(err, NULL));
spice_channel_emit_event(channel, SPICE_CHANNEL_ERROR_TLS);
}
c->state = SPICE_CHANNEL_STATE_LINK_HDR;
@@ -491,7 +501,7 @@ static void spice_channel_recv_auth(SpiceChannel *channel)
return;
}
- fprintf(stderr, "channel up: %s\n", c->name);
+ fprintf(stderr, "%s: channel up\n", c->name);
c->state = SPICE_CHANNEL_STATE_READY;
spice_channel_emit_event(channel, SPICE_CHANNEL_OPENED);
@@ -503,11 +513,13 @@ static void spice_channel_send_link(SpiceChannel *channel)
{
spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel);
uint8_t *buffer, *p;
+ int protocol;
c->link_hdr.magic = SPICE_MAGIC;
c->link_hdr.size = sizeof(c->link_msg);
- switch (c->protocol) {
+ g_object_get(c->session, "protocol", &protocol, NULL);
+ switch (protocol) {
case 1: /* protocol 1 == major 1, old 0.4 protocol, last active minor */
c->link_hdr.major_version = 1;
c->link_hdr.minor_version = 3;
@@ -521,7 +533,7 @@ static void spice_channel_send_link(SpiceChannel *channel)
c->marshallers = spice_message_marshallers_get();
break;
default:
- PANIC("unknown major %d", c->protocol);
+ PANIC("unknown major %d", protocol);
}
c->link_msg.connection_id = c->connection_id;
@@ -568,8 +580,8 @@ static void spice_channel_recv_link_hdr(SpiceChannel *channel)
if (c->peer_hdr.major_version != c->link_hdr.major_version) {
if (c->peer_hdr.major_version == 1) {
/* enter spice 0.4 mode */
- c->protocol = 1;
- fprintf(stderr, "switching to protocol 1 (spice 0.4)\n");
+ g_object_set(c->session, "protocol", 1, NULL);
+ fprintf(stderr, "%s: switching to protocol 1 (spice 0.4)\n", c->name);
spice_channel_disconnect(channel, SPICE_CHANNEL_NONE);
spice_channel_connect(channel);
return;
@@ -591,8 +603,8 @@ static void spice_channel_recv_link_msg(SpiceChannel *channel)
c->peer_hdr.size - c->peer_pos);
c->peer_pos += rc;
if (c->peer_pos != c->peer_hdr.size) {
- fprintf(stderr, "%s: incomplete link reply (%d/%d)\n", __FUNCTION__,
- rc, c->peer_hdr.size);
+ fprintf(stderr, "%s: %s: incomplete link reply (%d/%d)\n",
+ c->name, __FUNCTION__, rc, c->peer_hdr.size);
return;
}
switch (c->peer_msg->error) {
@@ -601,20 +613,20 @@ static void spice_channel_recv_link_msg(SpiceChannel *channel)
break;
case SPICE_LINK_ERR_NEED_SECURED:
c->tls = true;
- fprintf(stderr, "switching to tls\n");
+ fprintf(stderr, "%s: switching to tls\n", c->name);
spice_channel_disconnect(channel, SPICE_CHANNEL_NONE);
spice_channel_connect(channel);
return;
default:
- fprintf(stderr, "%s: unhandled error %d\n", __FUNCTION__,
- c->peer_msg->error);
+ fprintf(stderr, "%s: %s: unhandled error %d\n",
+ c->name, __FUNCTION__, c->peer_msg->error);
spice_channel_disconnect(channel, SPICE_CHANNEL_ERROR_LINK);
return;
}
num_caps = c->peer_msg->num_channel_caps + c->peer_msg->num_common_caps;
if (num_caps) {
- fprintf(stderr, "%s: %d caps\n", __FUNCTION__, num_caps);
+ fprintf(stderr, "%s: %s: %d caps\n", c->name, __FUNCTION__, num_caps);
}
#if 0
@@ -775,8 +787,6 @@ SpiceChannel *spice_channel_new(SpiceSession *s, int type, int id)
SpiceChannel *channel;
GType gtype = 0;
- fprintf(stderr, "%s: %d:%d\n", __FUNCTION__, type, id);
-
switch (type) {
case SPICE_CHANNEL_MAIN:
gtype = SPICE_TYPE_MAIN_CHANNEL;
@@ -806,9 +816,6 @@ SpiceChannel *spice_channel_new(SpiceSession *s, int type, int id)
void spice_channel_destroy(SpiceChannel *channel)
{
- spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel);
-
- fprintf(stderr, "%s %s\n", __FUNCTION__, c->name);
g_object_unref(channel);
}
@@ -895,7 +902,8 @@ reconnect:
c->state = SPICE_CHANNEL_STATE_TLS;
return 0;
}
- fprintf(stderr, "SSL_connect: %s", ERR_error_string(err, NULL));
+ fprintf(stderr, "%s: SSL_connect: %s",
+ c->name, ERR_error_string(err, NULL));
spice_channel_emit_event(channel, SPICE_CHANNEL_ERROR_TLS);
}
}
diff --git a/gtk/spice-session.c b/gtk/spice-session.c
index ffb59e2..bcc44bf 100644
--- a/gtk/spice-session.c
+++ b/gtk/spice-session.c
@@ -20,6 +20,7 @@ struct spice_session {
char *ca_file;
struct addrinfo ai;
int connection_id;
+ int protocol;
SpiceChannel *cmain;
Ring channels;
};
@@ -42,6 +43,7 @@ enum {
PROP_CA_FILE,
PROP_IPV4,
PROP_IPV6,
+ PROP_PROTOCOL,
};
/* signals */
@@ -121,6 +123,9 @@ static void spice_session_get_property(GObject *gobject,
case PROP_CA_FILE:
g_value_set_string(value, s->ca_file);
break;
+ case PROP_PROTOCOL:
+ g_value_set_int(value, s->protocol);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
break;
@@ -162,6 +167,9 @@ static void spice_session_set_property(GObject *gobject,
str = g_value_get_string(value);
s->ca_file = str ? strdup(str) : NULL;
break;
+ case PROP_PROTOCOL:
+ s->protocol = g_value_get_int(value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
break;
@@ -237,6 +245,18 @@ static void spice_session_class_init(SpiceSessionClass *klass)
G_PARAM_STATIC_NICK |
G_PARAM_STATIC_BLURB));
+ g_object_class_install_property
+ (gobject_class, PROP_PROTOCOL,
+ g_param_spec_int("protocol",
+ "Protocol",
+ "Spice protocol major version",
+ 1, 2, 2,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
signals[SPICE_SESSION_CHANNEL_NEW] =
g_signal_new("spice-session-channel-new",
G_OBJECT_CLASS_TYPE(gobject_class),
diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
index 81696b4..a79ac23 100644
--- a/gtk/spice-widget.c
+++ b/gtk/spice-widget.c
@@ -1204,7 +1204,6 @@ static void channel_new(SpiceSession *s, SpiceChannel *channel, gpointer data)
int id = spice_channel_id(channel);
if (SPICE_IS_MAIN_CHANNEL(channel)) {
- fprintf(stderr, "%s: main channel\n", __FUNCTION__);
d->main = channel;
g_signal_connect(channel, "spice-main-mouse-update",
G_CALLBACK(mouse_update), display);
@@ -1213,7 +1212,6 @@ static void channel_new(SpiceSession *s, SpiceChannel *channel, gpointer data)
}
if (SPICE_IS_DISPLAY_CHANNEL(channel)) {
- fprintf(stderr, "%s: display channel\n", __FUNCTION__);
if (id != d->channel_id)
return;
d->display = channel;
@@ -1228,7 +1226,6 @@ static void channel_new(SpiceSession *s, SpiceChannel *channel, gpointer data)
}
if (SPICE_IS_CURSOR_CHANNEL(channel)) {
- fprintf(stderr, "%s: cursor channel\n", __FUNCTION__);
if (id != d->channel_id)
return;
d->cursor = SPICE_CURSOR_CHANNEL(channel);
@@ -1245,13 +1242,11 @@ static void channel_new(SpiceSession *s, SpiceChannel *channel, gpointer data)
}
if (SPICE_IS_INPUTS_CHANNEL(channel)) {
- fprintf(stderr, "%s: inputs channel\n", __FUNCTION__);
d->inputs = SPICE_INPUTS_CHANNEL(channel);
spice_channel_connect(channel);
return;
}
- fprintf(stderr, "%s: unknown channel object\n", __FUNCTION__);
return;
}
@@ -1285,7 +1280,6 @@ static void channel_destroy(SpiceSession *s, SpiceChannel *channel, gpointer dat
return;
}
- fprintf(stderr, "%s: unknown channel object\n", __FUNCTION__);
return;
}