vnc.c (e1b3d47751a420835cb0560fd029c39fea961a79) vnc.c (6bf21f3d83e95bcc4ba35a7a07cc6655e8b010b0)
1/*
2 * QEMU VNC display driver
3 *
4 * Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
5 * Copyright (C) 2006 Fabrice Bellard
6 * Copyright (C) 2009 Red Hat, Inc
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy

--- 1293 unchanged lines hidden (view full) ---

1302 }
1303 g_free(vs->lossy_rect);
1304
1305 object_unref(OBJECT(vs->ioc));
1306 vs->ioc = NULL;
1307 object_unref(OBJECT(vs->sioc));
1308 vs->sioc = NULL;
1309 vs->magic = 0;
1/*
2 * QEMU VNC display driver
3 *
4 * Copyright (C) 2006 Anthony Liguori <anthony@codemonkey.ws>
5 * Copyright (C) 2006 Fabrice Bellard
6 * Copyright (C) 2009 Red Hat, Inc
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy

--- 1293 unchanged lines hidden (view full) ---

1302 }
1303 g_free(vs->lossy_rect);
1304
1305 object_unref(OBJECT(vs->ioc));
1306 vs->ioc = NULL;
1307 object_unref(OBJECT(vs->sioc));
1308 vs->sioc = NULL;
1309 vs->magic = 0;
1310 g_free(vs->zrle);
1311 g_free(vs->tight);
1310 g_free(vs);
1311}
1312
1313size_t vnc_client_io_error(VncState *vs, ssize_t ret, Error **errp)
1314{
1315 if (ret <= 0) {
1316 if (ret == 0) {
1317 trace_vnc_client_eof(vs, vs->ioc);

--- 735 unchanged lines hidden (view full) ---

2053
2054static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
2055{
2056 int i;
2057 unsigned int enc = 0;
2058
2059 vs->features = 0;
2060 vs->vnc_encoding = 0;
1312 g_free(vs);
1313}
1314
1315size_t vnc_client_io_error(VncState *vs, ssize_t ret, Error **errp)
1316{
1317 if (ret <= 0) {
1318 if (ret == 0) {
1319 trace_vnc_client_eof(vs, vs->ioc);

--- 735 unchanged lines hidden (view full) ---

2055
2056static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings)
2057{
2058 int i;
2059 unsigned int enc = 0;
2060
2061 vs->features = 0;
2062 vs->vnc_encoding = 0;
2061 vs->tight.compression = 9;
2062 vs->tight.quality = -1; /* Lossless by default */
2063 vs->tight->compression = 9;
2064 vs->tight->quality = -1; /* Lossless by default */
2063 vs->absolute = -1;
2064
2065 /*
2066 * Start from the end because the encodings are sent in order of preference.
2067 * This way the preferred encoding (first encoding defined in the array)
2068 * will be set at the end of the loop.
2069 */
2070 for (i = n_encodings - 1; i >= 0; i--) {

--- 51 unchanged lines hidden (view full) ---

2122 break;
2123 case VNC_ENCODING_WMVi:
2124 vs->features |= VNC_FEATURE_WMVI_MASK;
2125 break;
2126 case VNC_ENCODING_LED_STATE:
2127 vs->features |= VNC_FEATURE_LED_STATE_MASK;
2128 break;
2129 case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9:
2065 vs->absolute = -1;
2066
2067 /*
2068 * Start from the end because the encodings are sent in order of preference.
2069 * This way the preferred encoding (first encoding defined in the array)
2070 * will be set at the end of the loop.
2071 */
2072 for (i = n_encodings - 1; i >= 0; i--) {

--- 51 unchanged lines hidden (view full) ---

2124 break;
2125 case VNC_ENCODING_WMVi:
2126 vs->features |= VNC_FEATURE_WMVI_MASK;
2127 break;
2128 case VNC_ENCODING_LED_STATE:
2129 vs->features |= VNC_FEATURE_LED_STATE_MASK;
2130 break;
2131 case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9:
2130 vs->tight.compression = (enc & 0x0F);
2132 vs->tight->compression = (enc & 0x0F);
2131 break;
2132 case VNC_ENCODING_QUALITYLEVEL0 ... VNC_ENCODING_QUALITYLEVEL0 + 9:
2133 if (vs->vd->lossy) {
2133 break;
2134 case VNC_ENCODING_QUALITYLEVEL0 ... VNC_ENCODING_QUALITYLEVEL0 + 9:
2135 if (vs->vd->lossy) {
2134 vs->tight.quality = (enc & 0x0F);
2136 vs->tight->quality = (enc & 0x0F);
2135 }
2136 break;
2137 default:
2138 VNC_DEBUG("Unknown encoding: %d (0x%.8x): %d\n", i, enc, enc);
2139 break;
2140 }
2141 }
2142 vnc_desktop_resize(vs);

--- 886 unchanged lines hidden (view full) ---

3029static void vnc_connect(VncDisplay *vd, QIOChannelSocket *sioc,
3030 bool skipauth, bool websocket)
3031{
3032 VncState *vs = g_new0(VncState, 1);
3033 bool first_client = QTAILQ_EMPTY(&vd->clients);
3034 int i;
3035
3036 trace_vnc_client_connect(vs, sioc);
2137 }
2138 break;
2139 default:
2140 VNC_DEBUG("Unknown encoding: %d (0x%.8x): %d\n", i, enc, enc);
2141 break;
2142 }
2143 }
2144 vnc_desktop_resize(vs);

--- 886 unchanged lines hidden (view full) ---

3031static void vnc_connect(VncDisplay *vd, QIOChannelSocket *sioc,
3032 bool skipauth, bool websocket)
3033{
3034 VncState *vs = g_new0(VncState, 1);
3035 bool first_client = QTAILQ_EMPTY(&vd->clients);
3036 int i;
3037
3038 trace_vnc_client_connect(vs, sioc);
3039 vs->zrle = g_new0(VncZrle, 1);
3040 vs->tight = g_new0(VncTight, 1);
3037 vs->magic = VNC_MAGIC;
3038 vs->sioc = sioc;
3039 object_ref(OBJECT(vs->sioc));
3040 vs->ioc = QIO_CHANNEL(sioc);
3041 object_ref(OBJECT(vs->ioc));
3042 vs->vd = vd;
3043
3044 buffer_init(&vs->input, "vnc-input/%p", sioc);
3045 buffer_init(&vs->output, "vnc-output/%p", sioc);
3046 buffer_init(&vs->jobs_buffer, "vnc-jobs_buffer/%p", sioc);
3047
3041 vs->magic = VNC_MAGIC;
3042 vs->sioc = sioc;
3043 object_ref(OBJECT(vs->sioc));
3044 vs->ioc = QIO_CHANNEL(sioc);
3045 object_ref(OBJECT(vs->ioc));
3046 vs->vd = vd;
3047
3048 buffer_init(&vs->input, "vnc-input/%p", sioc);
3049 buffer_init(&vs->output, "vnc-output/%p", sioc);
3050 buffer_init(&vs->jobs_buffer, "vnc-jobs_buffer/%p", sioc);
3051
3048 buffer_init(&vs->tight.tight, "vnc-tight/%p", sioc);
3049 buffer_init(&vs->tight.zlib, "vnc-tight-zlib/%p", sioc);
3050 buffer_init(&vs->tight.gradient, "vnc-tight-gradient/%p", sioc);
3052 buffer_init(&vs->tight->tight, "vnc-tight/%p", sioc);
3053 buffer_init(&vs->tight->zlib, "vnc-tight-zlib/%p", sioc);
3054 buffer_init(&vs->tight->gradient, "vnc-tight-gradient/%p", sioc);
3051#ifdef CONFIG_VNC_JPEG
3055#ifdef CONFIG_VNC_JPEG
3052 buffer_init(&vs->tight.jpeg, "vnc-tight-jpeg/%p", sioc);
3056 buffer_init(&vs->tight->jpeg, "vnc-tight-jpeg/%p", sioc);
3053#endif
3054#ifdef CONFIG_VNC_PNG
3057#endif
3058#ifdef CONFIG_VNC_PNG
3055 buffer_init(&vs->tight.png, "vnc-tight-png/%p", sioc);
3059 buffer_init(&vs->tight->png, "vnc-tight-png/%p", sioc);
3056#endif
3057 buffer_init(&vs->zlib.zlib, "vnc-zlib/%p", sioc);
3060#endif
3061 buffer_init(&vs->zlib.zlib, "vnc-zlib/%p", sioc);
3058 buffer_init(&vs->zrle.zrle, "vnc-zrle/%p", sioc);
3059 buffer_init(&vs->zrle.fb, "vnc-zrle-fb/%p", sioc);
3060 buffer_init(&vs->zrle.zlib, "vnc-zrle-zlib/%p", sioc);
3062 buffer_init(&vs->zrle->zrle, "vnc-zrle/%p", sioc);
3063 buffer_init(&vs->zrle->fb, "vnc-zrle-fb/%p", sioc);
3064 buffer_init(&vs->zrle->zlib, "vnc-zrle-zlib/%p", sioc);
3061
3062 if (skipauth) {
3063 vs->auth = VNC_AUTH_NONE;
3064 vs->subauth = VNC_AUTH_INVALID;
3065 } else {
3066 if (websocket) {
3067 vs->auth = vd->ws_auth;
3068 vs->subauth = VNC_AUTH_INVALID;

--- 1064 unchanged lines hidden ---
3065
3066 if (skipauth) {
3067 vs->auth = VNC_AUTH_NONE;
3068 vs->subauth = VNC_AUTH_INVALID;
3069 } else {
3070 if (websocket) {
3071 vs->auth = vd->ws_auth;
3072 vs->subauth = VNC_AUTH_INVALID;

--- 1064 unchanged lines hidden ---