Commit Graph

376 Commits

Author SHA1 Message Date
Yonit Halperin
524fcb3aa4 server: fall back to switch host scheme in case semi-seamless connection to target fails 2011-09-26 12:17:56 +03:00
Yonit Halperin
b821316771 server: turn spice_server_migrate_start into a valid call
We will add a qemu call to spice_server_migrate_start when migration starts.
For now, it does nothing, but we may need this notification in the future.
2011-09-25 15:04:08 +03:00
Yonit Halperin
ddf1188b30 server: call migrate_connect_complete callback when no client is connected 2011-09-25 15:04:08 +03:00
Yonit Halperin
4568f2dbbe server: handling semi-seamless migration in the target side
(1) not sending anything to the client till we recieve SPICE_MSGC_MIGRATE_END
(2) start a new migration (handle client_migrate_info) only after SPICE_MSGC_MIGRATE_END
    from the previous migration has been received
(3) use the correct ticket

Note: we assume the same channles are linked before and ater migration. i.e.,
SPICE_MSGC_MAIN_ATTACH_CHANNELS is not sent from the client.
2011-09-25 15:04:08 +03:00
Yonit Halperin
0e57df1dd1 server: move the linking of channels to a separate routine 2011-09-25 15:04:08 +03:00
Yonit Halperin
1081d8ccf0 server: move SPICE_MSG_MAIN_INIT sending code to a separate routine 2011-09-25 15:04:07 +03:00
Yonit Halperin
4b82580fc3 server: send SPICE_MSG_MAIN_MIGRATE_END on spice_server_migrate_end 2011-09-25 15:04:07 +03:00
Yonit Halperin
5560c56ef0 server,proto: tell the client to connect to the migration target before migraton starts
(1) send SPICE_MSG_MAIN_MIGRATE_BEGIN upon spice_server_migrate_connect
(2) wait for SPICE_MSGC_MAIN_MIGRATE_(CONNECTED|CONNECT_ERROR), or a timeout, in order
    to complete client_migrate_info monitor command
2011-09-25 15:04:05 +03:00
Yonit Halperin
3ac0075cda server: handle migration interface addition 2011-09-25 15:04:05 +03:00
Yonit Halperin
6e56bea67c server/spice.h: semi-seamless migration interface, RHBZ #738266
semi-seamless migration details:

migration source side
---------------------
(1) spice_server_migrate_connect (*): tell client to link
    to the target side - send SPICE_MSG_MAIN_MIGRATE_BEGIN.
    This should be called upon client_migrate_info cmd.
    client_migrate_info is asynchronous.
(2) Complete spice_server_migrate_connect only when the client has been connected
    to the target - wait for SPICE_MSGC_MAIN_MIGRATE_(CONNECTED|CONNECT_ERROR) or a timeout.
(3) spice_server_migrate_end: tell client migration it can switch to the target - send
    SPICE_MSG_MAIN_MIGRATE_END.
(4) client cleans up all data related to the connection to the source and switches to the target.
    It sends SPICE_MSGC_MAIN_MIGRATE_END.

migration target side
---------------------
(1) the server identifies itself as a migraiton target since the client is linked with (connection_id != 0)
(2) server doesn't start the channels' logic (channel->link) till it receives SPICE_MSGC_MAIN_MIGRATE_END
    from the client.

*   After migration starts, the target qemu is blocked and cannot accept new spice client
    connections. Thus, we trigger the connection to the target upon client_migrate_info
    command.
2011-09-25 15:04:04 +03:00
Alon Levy
506f035682 server/smartcard: fix smartcard_channel_send_error
It was sending the wrong data, the memory right after the VCSMsgHeader
which was actually not where the data was.

Fixed by having the header and data (VSCError, 4 bytes of the error code)
embedded in the ErrorItem pipe item.
2011-09-20 16:08:30 +02:00
Alon Levy
13e38cdba6 server/red_dispatcher: fix wrong resolution set for tablet
when changing resolutions due to the new async code paths the surface
creation command was kept by reference, and later, when the red_worker
signaled completion by calling async_complete the mouse mode was updated
using the reference. This caused the wrong values to be read resulting in wrong
resolutions set and a non working mouse pointer. Fix this by keeping a copy of
the surface creation command instead of a reference.

No bz. Found in testing.
2011-07-31 17:49:47 +03:00
Yonit Halperin
c8d63ceb2f server: not reading command rings before RED_WORKER_MESSAGE_START, RHBZ #718713
On migration, destroy_surfaces is called from qxl (qxl_hard_reset), before the device was loaded (on destination).
handle_dev_destroy_surfaces led to red_process_commands, which read the qxl command ring
(which appeared to be not empty), and then when processing the command
it accessed unmapped memory.
2011-07-24 12:25:58 +03:00
Alon Levy
f0e5a3cb77 Release 0.8.2 2011-07-22 16:37:02 +03:00
Christophe Fergeau
aab6aa419c fix make distcheck 2011-07-22 16:24:04 +03:00
Yonit Halperin
3bc4fd4621 server/red_worker: send surface images to client on-demand after S3/4 wakeup
When surfaces are being reloaded to the worker, we
will send them to the client only if and when it needs them.
(cherry picked from commit 51628f5124)
2011-07-21 15:09:30 +03:00
Alon Levy
1024d3ec3d server/spice.h: bump QXL_MINOR because of QXLWorker and QXLInterface changes
(cherry picked from commit 3be08d68c0)
2011-07-21 15:09:30 +03:00
Alon Levy
32d2817ef0 server: add QXLWorker.flush_surfaces_async for S3/S4 support
This does the following, all to remove any referenced memory on the pci bars:
    flush_all_qxl_commands(worker);
    flush_all_surfaces(worker);
    red_wait_outgoing_item((RedChannel *)worker->display_channel);
    red_wait_outgoing_item((RedChannel *)worker->cursor_channel);

The added api is specifically async, i.e. it calls async_complete
when done.
(cherry picked from commit 2a4d97fb78)
2011-07-21 15:09:29 +03:00
Alon Levy
c72dc24756 server: add QXLInterface::update_area_complete callback
when update_area_async is called update_area_complete will be called with
the surfaces dirty rectangle list.
(cherry picked from commit b26f0532c1)
2011-07-21 15:09:29 +03:00
Alon Levy
deea6ac96b server/red_worker: handle_dev_input: reuse write_ready introduced for async
(cherry picked from commit f300de20d9)
2011-07-21 15:09:29 +03:00
Alon Levy
b233761b91 server: add async io support
The new _ASYNC io's in qxl_dev listed at the end get six new api
functions, and an additional callback function "async_complete". When
the async version of a specific io is used, completion is notified by
calling async_complete, and no READY message is written or expected by
the dispatcher.

update_area has been changed to push QXLRects to the worker thread, where
the conversion to SpiceRect takes place.

A cookie has been added to each async call to QXLWorker, and is passed back via
async_complete.

Added api:

QXLWorker:
    update_area_async
    add_memslot_async
    destroy_surfaces_async
    destroy_primary_surface_async
    create_primary_surface_async
    destroy_surface_wait_async

QXLInterface:
    async_complete

(cherry picked from commit 096f49afbf)
2011-07-21 15:09:29 +03:00
Yonit Halperin
84ff23cd2b server: replace redundant code with red_cursor_reset
In addition (1) make handle_dev_destroy_surfaces call red_release_cursor
(2) call red_wait_outgoing_item(cursor_channel) only after adding msgs to pipe

[3d3066b175 cherry-pick with modifications]
2011-07-21 15:09:29 +03:00
Christophe Fergeau
7db7212c3a use foo(void) instead of foo() in prototypes
In C, the latter isn't a prototype for a function with no arg,
but declares a function with an undefined number of args.

[picked from master with changes since no main_channel, spice_common,
 and a bunch of functions aren't there yet]
2011-07-21 15:09:29 +03:00
Alon Levy
c9c84c9f8d server: api: add spice_qxl_* calls based on QXLWorker contents
For each callback in QXLWorker, for example QXLWorker::update_area, add
a direct call named spice_qxl_update_area.

This will (a) remove the pointless indirection and (b) make shared
library versioning alot easier as we'll get new linker symbols which
we can tag with the version they appeared in the shared library.

[cherry-picked from master]
2011-07-21 15:09:29 +03:00
Christophe Fergeau
66ad3e84f3 s/__visible__/SPICE_GNUC_VISIBLE
The C specification reserves use of identifiers starting with __
to the compiler so we shouldn't use one such symbol.

[cherry-pick from master]
2011-07-21 15:09:29 +03:00
Alon Levy
f3ee396dfe server: spice-server.syms: move sasl symbols to 0.8.2
[0.8: there are no 0.10.0 symbols]
2011-07-21 15:09:29 +03:00
Christophe Fergeau
edce17a574 Fix spice-server/qemu channel version checks
When qemu creates a channel, reds.c contains code to check the
minor/major channel versions known to QEMU (ie the ones that were
current in spice-server when QEMU was compiled) and to compare these
versions against the current ones the currently installed spice-server
version.

According to kraxel [1], the rules for these interface numbers are:

"The purpose of the versions is exactly to avoid the need for a new
soname.  The rules are basically:

   (1) You add stuff to the interface, strictly append-only to not break
       binary compatibility.
   (2) You bump the minor version of the interface.
   (3) You check the minor version at runtime to figure whenever the
       added fields contain valid stuff or not.

An example is here (core interface, minor goes from 2 to 3, new
channel_event callback):

http://cgit.freedesktop.org/spice/spice/commit/?id=97f33fa86aa6edd25111b173dc0d9599ac29f879
"

The code currently refuses to create a channel if QEMU minor version is
less than the current spice-server version. This does not correspond
to the intended behaviour, this patch changes to fail is qemu was compiled
with a spice-server that is *newer* than the one currently installed. This
case is something we cannot support nicely.

[1] http://lists.freedesktop.org/archives/spice-devel/2011-July/004440.html
2011-07-21 15:09:29 +03:00
Yonit Halperin
4c44be35b0 server: fix access to a released drawable. RHBZ #713474
red_pipe_add_drawable can lead to removal of drawables from current tree
(since it calls red_handle_drawable_surfaces_client_synced), which can
also lead to releasing these drawables.
Before the fix, red_current_add_equal, called red_pipe_add_drawable,
without assuring afterwards that the drawables it refers to are still alive or
still in the current tree.
2011-07-21 15:09:28 +03:00
Yonit Halperin
e22354141e server: add missing calls to red_handle_drawable_surfaces_client_synced
red_handle_drawable_surfaces_client_synced was called only from red_pipe_add_drawable, while it
should also be called from red_pipe_add_drawable_after. Otherwise, the client
might receive a command with a reference to a surface it doesn't hold and crash.
2011-07-21 15:09:28 +03:00
Yonit Halperin
ec6198218a server: removing local cursor, this solves RHBZ #714801
When the worker was stoped, the cursor was copied from guest ram to the host ram,
and its corresponding qxl command was released.
This is unecessary, since the qxl ram still exists (we keep references
to the surfaces in the same manner).
It also led to BSOD on guest upon migration: the device tracks cursor set commands and it stores
a reference to the last one. Then, it replays it to the destination server when migrating to it.
However, the command the qxl replayed has already been released from the pci by the original
worker, upon STOP.

Conflicts:

	server/red_worker.c
2011-07-21 15:09:28 +03:00
Alon Levy
a3a6224820 server/smartcard: register channel only when hardware is available 2011-07-21 15:09:28 +03:00
Alon Levy
d830cf0553 server/smartcard: handle BaseChannel messages
According to spice.proto the smartcard channel can receive acks and any
other message defined in BaseChannel. While the spicec implementation didn't
send an ACK spice-gtk does, so handle it.
2011-07-21 15:09:28 +03:00
Zeeshan Ali (Khattak)
51bc547921 server: Unset executable bit of red_tunnel_worker.h 2011-07-21 15:09:28 +03:00
Christophe Fergeau
551ad336c1 add missing "LGPLv2.1 or later" header to source files 2011-07-21 15:09:28 +03:00
Christophe Fergeau
fdfc940f59 server/tests remove useless assignment
This was detected by clang-static-analyzer.
2011-07-21 15:09:27 +03:00
Marc-André Lureau
f42e261aa6 server: add SASL support
We introduce 2 public functions to integrate with the library user.

spice_server_set_sasl() - turn on SASL
spice_server_set_sasl_appname() - specify the name of the app (It is
used for where to find the default configuration file)

The patch for QEMU is on its way.

https://bugs.freedesktop.org/show_bug.cgi?id=34795

Conflicts:

	server/reds.c
	server/reds.h
2011-07-21 15:09:27 +03:00
Marc-André Lureau
6101cb805a server: add auth mechanism selection
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:27 +03:00
Marc-André Lureau
bb6747b3d5 server: add reds_channel_dispose()
Try to have a common base dispose() method for channels. For now, it
just free the caps.

Make use of it in snd_worker, and in sync_write() - sync_write() is
going to have default caps later on.

https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
159fee00c2 server: simplify and constify sync_write()
+ symplify, improving style of code using it.

https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
8186db28c2 server: pull out reds_handle_link(), for future reuse
+ a couple of indent, style change

https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
b1df04b9c5 build: add --with-sasl
Using cyrus SASL library (same as gtk-vnc/qemu).

https://bugs.freedesktop.org/show_bug.cgi?id=34795

Conflicts:

	configure.ac
2011-07-21 15:09:26 +03:00
Marc-André Lureau
a3732afda3 server/reds: make writev fallback more generic
We are going to reuse it for SASL/SSF encode write().

https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
26ded5e395 server: rename s/peer/stream
This is stylish change again. We are talking about a RedStream object,
so let's just name the variable "stream" everywhere, to avoid
confusion with a non existent RedPeer object.

https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
5f27f8f522 server/reds: remove the void* ctx field
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
36ab16d6c5 server: use the new reds_stream_{read,write}
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
584cc5a3d1 server: remove cb_free, not needed anymore
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
a5946a54dd server: use reds_{link,stream}_free()
Be carefull removing the watch before, like __release_link

https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
6d8cbc2349 server: use reds_stream_remove_watch() helper
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:26 +03:00
Marc-André Lureau
eeb95c5b84 server: add reds_stream_{read,write,free,remove_watch}()
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:25 +03:00
Marc-André Lureau
881971fbca server: s/RedsStreamContext/RedsStream
https://bugs.freedesktop.org/show_bug.cgi?id=34795
2011-07-21 15:09:25 +03:00