summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* inputs: Fix key_up/key_down mismatchChristophe Fergeau2014-12-151-5/+5
| | | | | | When handling a KEY_UP message, the various variables were called 'key_down', and they were called 'key_up' when handling KEY_DOWN messages. This commit makes the naming consistent.
* Remove unused SPICE_CANVAS_INTERNALChristophe Fergeau2014-12-034-8/+0
|
* client: Remove client codeChristophe Fergeau2014-12-03178-104026/+1
| | | | | | The client has been superseded by virt-viewer ( http://virt-manager.org/download/sources/virt-viewer/ ) and is no longer being maintained.
* Add LZ4 compression support.Javier Celaya2014-12-027-6/+358
| | | | | | | | - Add lz4 encoder to compress an image of type LZ4 (see spice_common). - Add code in red_worker to use LZ4 when it is enabled, and the client supports it through its display capability, or fallback to LZ. - Add enable_lz4 switch in the configure script. Show LZ4 support at the end.
* configure.ac: Never add xinerama to SPICE_REQUIRESChristophe Fergeau2014-12-011-1/+0
| | | | | | SPICE_REQUIRES is only used to generate the Requires.private line of spice-server.pc. The server code is not using xinerama, so we don't need to list xinerama in Requires.private.
* configure.ac: Only check for xinerama for client buildsChristophe Fergeau2014-12-011-18/+18
| | | | | | | Xinerama support is only used for the X11 client, but is currently being checked even for server only builds. This commit ensures Xinerama is not checked for/added to spice-server.pc when not building the client.
* build-sys: fix out-of-tree build of testsMarc-André Lureau2014-11-291-0/+1
| | | | | | | | | | | | Fixes the following build error: In file included from /home/elmarco/src/spice-new/src/spice/server/tests/test_display_base.h:4:0, from /home/elmarco/src/spice-new/src/spice/server/tests/test_display_no_ssl.c:11: /home/elmarco/src/spice-new/src/spice/server/spice.h:23:27: fatal error: spice-version.h: No such file or directory #include "spice-version.h" ^
* Add explicit spice-core.h includeMarc-André Lureau2014-11-271-1/+1
| | | | Several functions use core interfaces, add and explicit include.
* Move spice_server_get_num_clients() declarationMarc-André Lureau2014-11-272-3/+2
| | | | This function is not related to migration.
* Rename mm_timer/mm_timeMarc-André Lureau2014-11-274-13/+13
| | | | As suggested by Christophe on the mailing list.
* Remove guest side video time-stampingMarc-André Lureau2014-11-276-26/+2
| | | | | | | | | | | | | | | | | The multimedia time is defined by the server side monotonic time [1], but the drawing time-stamp is done in guest side, so it requires synchronization between host and guest. This is expensive, when no audio is playing, there is a ~30x/sec wakeup to update the qxl device mmtime, and it requires marking dirty the rom region. Instead, the video timestamping can be done more efficiently on server side, without visible drawbacks. [1] a better timestamp could be the audio time, since audio players are usually sync with audio time) Related to: https://bugzilla.redhat.com/show_bug.cgi?id=912763
* build-sys: generate spice-version.hMarc-André Lureau2014-11-272-1/+12
| | | | | | | Editing the hexadecimal value of spice-version and keeping it in sync with actual release is a bit tedious. Let's generate it automatically (although handling of bumps will need temporarily static versions, when 0.12 -> 1.0 for example)
* Split spice.hMarc-André Lureau2014-11-2710-574/+806
| | | | Make it easier to read the Spice server API.
* spice.h: remove redundant declarationsMarc-André Lureau2014-11-271-5/+1
| | | | Those are already declared in <spice/qxl_dev.h>.
* Validate RedDrawable before allocating drawableMarc-André Lureau2014-11-251-11/+12
| | | | | | | Avoid unnecessary allocation (and possibly leaking) if the RedDrawable is not valid. Related to: rhbz#1135372
* chardev: remove write pollingMarc-André Lureau2014-11-252-11/+34
| | | | | | | | | | | | In an effort to reduce the wakeups per second, get rid of the "write_to_dev" timer when the implementation supports SPICE_CHAR_DEVICE_NOTIFY_WRITABLE. When this flag is set, the frontend instance is responsible for calling spice_char_device_wakeup() when the device is ready to perform IO. Related to: https://bugzilla.redhat.com/show_bug.cgi?id=912763
* Don't set SpiceLinkReply::pub_key if client advertises SASL capChristophe Fergeau2014-11-241-23/+38
| | | | | | | | | | | | | | | | | If the client advertises the SASL cap, it means it guarantees it will be able to use SASL if the server supports, and that it does not need a valid SpiceLinkReply::pub_key field when using SASL. When the client cap is set, we thus don't need to create a RSA public key if SASL is enabled server side. The reason for needing client guarantees about not looking at the pub_key field is that its presence and size is hardcoded in the protocol, but in some hardened setups (using fips mode), generating a RSA 1024 bit key as expected is forbidden and fails. With this new capability, the server knows the client will be able to handle SASL if needed, and can skip the generation of the key altogether. This means that on the setups described above, SASL authentication has to be used.
* Introduce red_link_info_test_capability()Christophe Fergeau2014-11-241-3/+18
| | | | | This just hides a bit of pointer arithmetic away from reds_send_link_ack. This helper will be used in the next commits.
* Add const to test_capability first argumentChristophe Fergeau2014-11-242-2/+2
| | | | We don't modify the capabilities content, so it can be marked as const.
* configure.ac: use portable shellAlexander Tsoy2014-11-211-14/+18
| | | | | | | | | | | | | | | | This fixes the following errors when configure run in dash: ./configure: 17366: ./configure: SPICE_NONPKGCONFIG_LIBS+= -pthread -lm -lrt: not found ./configure: 17974: ./configure: SPICE_REQUIRES+= glib-2.0 >= 2.22: not found ./configure: 18069: ./configure: SPICE_REQUIRES+= pixman-1 >= 0.17.7: not found ./configure: 18165: ./configure: SPICE_REQUIRES+= celt051 >= 0.5.1.1: not found ./configure: 18369: ./configure: SPICE_REQUIRES+= openssl: not found ./configure: 18477: ./configure: SPICE_NONPKGCONFIG_LIBS+= : not found ./configure: 18948: ./configure: SPICE_REQUIRES+= xinerama: not found ./configure: 20377: test: no: unexpected operator ./configure: 20409: test: no: unexpected operator ./configure: 23423: test: xno: unexpected operator ./configure: 23443: test: no: unexpected operator
* manual: Add missing closure of XML tagChristophe Fergeau2014-11-171-3/+3
| | | | | The <model type='qxl'> examples in the reference documentation are missing a closing tag.
* server: fix crash when restarting VM with old clientMarc-André Lureau2014-10-171-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The server will reset the vdagent char device when the client does not implement SPICE_MAIN_CAP_AGENT_CONNECTED_TOKENS. This will nullify dev->sin and the following crash will be reached on restart: #0 0x00007fb05aa264a1 in spice_char_device_write_to_device (dev=dev@entry=0x7fb066ae5d30) at char_device.c:443 #1 0x00007fb05aa27137 in spice_char_device_write_to_device (dev=0x7fb066ae5d30) at char_device.c:436 #2 spice_char_device_start (dev=0x7fb066ae5d30) at char_device.c:798 #3 0x00007fb05aa6a981 in spice_server_vm_start (s=<optimized out>) at reds.c:3795 #4 0x00007fb0644b7f89 in qdev_reset_one (dev=<optimized out>, opaque=<optimized out>) at hw/core/qdev.c:241 #5 0x00007fb0644b7918 in qbus_walk_children (bus=0x7fb06661e870, pre_devfn=0x0, pre_busfn=0x0, post_devfn=0x7fb0644b7f80 <qdev_reset_one>, post_busfn=0x7fb0644b6350 <qbus_reset_one>, opaque=0x0) at hw/core/qdev.c:422 #6 0x00007fb0644b7848 in qdev_walk_children (dev=0x7fb0665f47a0, pre_devfn=0x0, pre_busfn=0x0, post_devfn=0x7fb0644b7f80 <qdev_reset_one>, post_busfn=0x7fb0644b6350 <qbus_reset_one>, opaque=0x0) at hw/core/qdev.c:456 #7 0x00007fb0644b7918 in qbus_walk_children (bus=0x7fb06647cde0, pre_devfn=0x0, pre_busfn=0x0, post_devfn=0x7fb0644b7f80 <qdev_reset_one>, post_busfn=0x7fb0644b6350 <qbus_reset_one>, opaque=0x0) at hw/core/qdev.c:422 #8 0x00007fb0644399fd in qemu_devices_reset () at vl.c:1830 After restart, qemu will reset the device instance (sin) when virtio port is opened: #0 spice_char_device_state_reset_dev_instance (state=0x7fe4873876d0, sin=sin@entry=0x7fe486fb0c68) at char_device.c:667 #1 0x00007fe47b277516 in attach_to_red_agent (sin=0x7fe486fb0c68) at reds.c:2838 #2 spice_server_char_device_add_interface (sin=0x7fe486fb0c68, s=0x7fe486fb2e60) at reds.c:2962 #3 spice_server_add_interface (s=0x7fe486fb2e60, sin=0x7fe486fb0c68) at reds.c:3104 #4 0x00007fe484c69e57 in vmc_register_interface (scd=0x7fe486fb0c60) at spice-qemu-char.c:123 #5 0x00007fe484ce96b4 in set_guest_connected (port=<optimized out>, guest_connected=1) at hw/char/virtio-console.c:89 #6 0x00007fe484ba70ed in handle_control_message (len=8, buf=0x7fe486fbdf70, vser=0x7fe48739ae98) at /usr/src/debug/qemu-2.1.0/hw/char/virtio-serial-bus.c:382 Let's ignore the call to spice_char_device_{write,read}_to_device() when dev->sin is NULL, similary to other conditions, such as dev->running. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1145919
* migration: Don't assert() if MIGRATE_DATA comes before attaching the agentUri Lublin2014-10-141-11/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During seamless migration, after switching host, if a client was connected during the migration, it will have data to send back to the new qemu/spice-server instance. This is handled through MIGRATE_DATA messages. SPICE char devices use such MIGRATE_DATA messages to restore their state. However, the MIGRATE_DATA message can arrive any time after the new qemu instance has started, this can happen before or after the SPICE char devices have been created. In order to handle this, if the migrate data arrives early, it's stored in reds->agent_state.mig_data, and attach_to_red_agent() will restore the agent state as appropriate. Unfortunately this does not work as expected, for main channel (agent messages). If attach_to_red_agent() is called before the MIGRATE_DATA message reaches the server, all goes well, but if MIGRATE_DATA reaches the server before attach_to_red_agent() gets called, then some assert() gets triggered in spice_char_device_state_restore(): ((null):32507): Spice-ERROR **: char_device.c:937:spice_char_device_state_restore: assertion `dev->num_clients == 1 && dev->wait_for_migrate_data' failed Thread 3 (Thread 0x7f406b543700 (LWP 32543)): Thread 2 (Thread 0x7f40697ff700 (LWP 32586)): Thread 1 (Thread 0x7f4079b45a40 (LWP 32507)): When restoring state, a client must already be added to the spice-char-device. What happens is that a client is not being added to the char-device when when MIGRATE_DATA arrives first, which leaves both dev->num_clients and dev->wait_for_migrate_data value at 0. This commit changes the logic in spice_server_char_device_add_interface(), such that if there is migrate data pending in reds->agent_state.mig_data but no client was added to the spice-char-device yet, then first the client is added to the device by calling spice_char_device_client_add(), and only then the state is restored. === How to Reproduce To reproduce, add delays to the migration connection between qmeu-kvm on the source host (SRC) and on the destination (DST). Specifically I added a man in the middle DLY host between migration ports from SRC to DST. +-----+ +-----+ +-----+ | SRC |--> | DLY | --> | DST | +-----+ +-----+ +-----+ DLY listens on port P1 (e.g. 4444) and DST listens on port PINCOMING (e.g. 4444, from qemu-kvm '-incoming' command line option) Precondition: make sure port P1 on DLY is accessible in iptables. Option 1: use ssh tcp port forwarding On DLY host run ssh: ssh DLY:P1:DST:PINCOMING DST Then use the following migration command (on qemu-kvm monitor): client_migrate_info spice DST PSPICE migrate -d tcp:DLY:P1 Option 2: Use a simple proxy program that forwards packets from SRC to DST while adding some delays. The program runs on DLY, listens to port D1, upon accept connects to DST:PINCOMING and forward all packets from DLY:D1 to DST:PINCOMING. Then use the same migrate command as in option 1: client_migrate_info spice DST PSPICE migrate -d tcp:DLY:P1 === How to Reproduce Ends This fixes https://bugzilla.redhat.com/show_bug.cgi?id=1035184 Based-on-a-patch-by: Christophe Fergeau <cfergeau@redhat.com>
* m4: Update manywarnings from gnulibCole Robinson2014-10-101-76/+137
| | | | | | Fixes these noisy errors on Fedora 21: gcc: warning: switch '-Wmudflap' is no longer supported
* Validate surface bounding box before using itChristophe Fergeau2014-09-181-0/+31
| | | | | | | | | It's possible for a buggy guest driver to pass invalid bounding box dimensions in QXL commands, which would then cause spice-server to segfault. This patch checks the size of the bounding box of the QXL command right after it has been parsed. This fixes rhbz#1135372
* Fix 'abberiviations' typo in commentChristophe Fergeau2014-09-181-1/+1
|
* Fix indentation in red_get_opaque_ptrChristophe Fergeau2014-09-181-1/+1
| | | | This removes one extra space
* server/tests/Makefile.am: White-space cleanupChristophe Fergeau2014-09-181-12/+12
| | | | Make sure the \ at the end of lines are nicely aligned
* Fix -Wunused-functionFabiano Fidêncio2014-09-122-73/+0
|
* Fix -Wmissing-field-initializersFabiano Fidêncio2014-09-125-37/+31
|
* Fix -WnonnullFabiano Fidêncio2014-09-121-1/+2
|
* Fix -WformatFabiano Fidêncio2014-09-121-1/+1
|
* Fix -WswitchFabiano Fidêncio2014-09-121-0/+2
|
* Fix -WsignFabiano Fidêncio2014-09-122-3/+3
|
* Fix -Wunused-valueFabiano Fidêncio2014-09-121-1/+1
|
* Fix -Wunused-parameterFabiano Fidêncio2014-09-127-31/+58
|
* server: Don't dump the bitmap when the format is invalidFabiano Fidêncio2014-09-121-0/+1
| | | | | | Caught by covscan: spice/server/spice_bitmap_utils.c:54: var_decl: Declaring variable "n_pixel_bits" without initializer. spice/server/spice_bitmap_utils.c:106: uninit_use: Using uninitialized value "n_pixel_bits".
* clean-up: remove unused functionMarc-André Lureau2014-09-082-6/+0
|
* build-sys: check for spicy-screenshotMarc-André Lureau2014-09-082-7/+7
|
* reds: lookup corresponding channel idMarc-André Lureau2014-09-081-1/+2
| | | | | | | | | | In reds_send_link_ack(), lookup the channel with the same id as the link message. The bug was found during code review a while ago. A reproducer bug was later reported: https://bugzilla.redhat.com/show_bug.cgi?id=1058625
* dispatcher: lower a monitor-config warning to a debug levelMarc-André Lureau2014-09-081-2/+2
| | | | | | | | Some QXLInterface implementations might not have or succeed with client_monitors_config(). Thus, lower warning to debug level. https://bugzilla.redhat.com/show_bug.cgi?id=1119220
* spice.h: Don't use 48kHz for playback/recording ratesChristophe Fergeau2014-08-201-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | When adding Opus support, SPICE_INTERFACE_PLAYBACK_FREQ and SPICE_INTERFACE_RECORD_FREQ in the public header 'spice.h' were changed from 44100 to 48000. However, this was not really useful as these constants are not used in spice-server, but only by users of spice-server (ie QEMU). It turns out changing these values is actually harmful. QEMU uses these constants in 2 situations: 1. when it's a version of QEMU with this commit, but we are compiling against older spice-server headers (before Opus support was added) 2. when it's a version of QEMU without commit 795ca114d35 which added what is needed for Opus support When we are in the second situation, having 48000 in the public header will actually cause issues as spice-server will know QEMU does not support Opus, so internally spice-server will be using a 44100 rate for audio. However, QEMU will be using SPICE_INTERFACE_.*_FREQ and think it should use a 48000 rate, which will cause distorsions as experienced in bug https://bugzilla.redhat.com/show_bug.cgi?id=1129961 Reverting these constants back to 44100 will fix audio in the 'new spice-server/old QEMU' scenario, and won't cause issues either when both support Opus as in this case these constants are not used.
* Fix crash when clearing surface memoryMarc-André Lureau2014-08-071-1/+5
| | | | | | | | The beginning of the surface data needs to be computed correctly if the stride is negative, otherwise, it should point already to the beginning of the surface data. This bug seems to exists since 4a208b (0.5.2) https://bugzilla.redhat.com/show_bug.cgi?id=1029646
* server: don't assert on invalid client messageMarc-André Lureau2014-07-251-1/+1
| | | | | | | | | | | Some users have been reaching this error: snd_receive: ASSERT n failed A misbehaving client could easily hit that condition by sending too big messages. Instead of assert(), replace with a warning. When a message too big to fit is received, it will simply disconnect the channel. https://bugzilla.redhat.com/show_bug.cgi?id=962187
* Fix assert in mjpeg_encoder_adjust_params_to_bit_rate()Jonathon Jongsma2014-05-301-1/+4
| | | | | | | | | If mjpeg_encoder_reset_quality() is called with the same quality as currently set, it will not reset last_enc_size but not reset num_recent_enc_frames, violating some assumptions in _adjust_params_to_bit_rate(). To avoid aborting the server, simply return early from this function. Resolves: rhbz#1086820
* Fix make failed when uncommented COMPRESS_STAT in red_worker.cWang Qiang2014-05-261-2/+2
| | | | | | | | | | | | | | | | | | | | https://bugs.freedesktop.org/show_bug.cgi?id=79246 As a developer, I maybe want to see the detail compress stat of spice, like this: Method count orig_size(MB) enc_size(MB) enc_time(s) QUIC 846 948.02 147.22 7.51 GLZ 2895 594.90 26.60 1.33 ZLIB GLZ 0 0.00 0.00 0.00 LZ 1 3.15 0.01 0.00 JPEG 0 0.00 0.00 0.00 JPEG-RGBA 0 0.00 0.00 0.00 ---------------------------------------------------------------------------- Total 3742 1546.07 173.83 8.84 But when I uncommented the COMPRESS_STAT and COMPRESS_DEBUG in red_worker.c and make. I got some error(in Bugzilla). This error because of some simple syntax errors. Commit this patch to fix this issue. Signed-off-by: Wang Qiang <wangqiang.hunan@gmail.com>
* Update libtool version information for 0.12.5 releasev0.12.5Christophe Fergeau2014-05-191-2/+2
|
* Update 'release' instructions in configure.acChristophe Fergeau2014-05-191-18/+11
| | | | | | The instructions are obsolete, replace them with the explanation about how to handle current/revision/age from libtool manual: https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
* Update NEWSChristophe Fergeau2014-05-191-0/+13
|
* server: use a warning when disconnecting unresponsive clientMarc-André Lureau2014-05-161-2/+2
| | | | | The debug level is not visible by default, since it is an unsolicited server behaviour, make it a warning.