summaryrefslogtreecommitdiffstats
path: root/server
Commit message (Collapse)AuthorAgeFilesLines
* [0.8 branch] server: add main_dispatcherAlon Levy2011-10-254-1/+159
| | | | | | | | | | | | | | | | | add main_dispatcher, a message passing mechanism for sending messages to the main thread. The main thread is the thread that implements SpiceCoreInterface, which is assumed to be a single thread. Similar to the async operation of red_worker, a socket pair is created and used to pass messages. The messages are a fixed size to ease parsing. A single message is defined to pass a channel_event. RHBZ: 746950 FDBZ: 41858 This patch is 0.8 branch only, for the master branch there should be a better approach to share code with red_dispatcher and ready the way for later adding more threads.
* server/tests: print pthread id on channel_eventAlon Levy2011-10-252-2/+5
|
* server/smartcard: error packet sending. RHBZ 741259Alon Levy2011-09-271-2/+0
| | | | | | fix wrongly applied master patch. With this it is identical to the change in master commit b37182426923124470bf3701f4cff2a6bb345b8d
* Release 0.8.30.8.3Yonit Halperin2011-09-262-1/+5
|
* server: fix not calling migrate_connect completion callbackYonit Halperin2011-09-261-10/+8
| | | | | | | | | When the server is a migration target and spice_server_migrate_connect is called before SPICE_MSGC_MIGRATE_END has been received, we start the mig_timer. We handle the migrate_connect only when receiving SPICE_MSGC_MIGRATE_END. If the mig_timer expires before that, we dismiss the request, and should call the migrate_connect completion callback. Since reds->mig_inprogress wasn't set appropriately, it wasn't called.
* server: fall back to switch host scheme in case semi-seamless connection to ↵Yonit Halperin2011-09-261-9/+17
| | | | target fails
* server: turn spice_server_migrate_start into a valid callYonit Halperin2011-09-251-7/+1
| | | | | 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.
* server: call migrate_connect_complete callback when no client is connectedYonit Halperin2011-09-251-29/+43
|
* server: handling semi-seamless migration in the target sideYonit Halperin2011-09-251-20/+116
| | | | | | | | | | (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.
* server: move the linking of channels to a separate routineYonit Halperin2011-09-251-26/+41
|
* server: move SPICE_MSG_MAIN_INIT sending code to a separate routineYonit Halperin2011-09-251-23/+33
|
* server: send SPICE_MSG_MAIN_MIGRATE_END on spice_server_migrate_endYonit Halperin2011-09-251-18/+67
|
* server,proto: tell the client to connect to the migration target before ↵Yonit Halperin2011-09-251-37/+111
| | | | | | | | 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
* server: handle migration interface additionYonit Halperin2011-09-252-0/+33
|
* server/spice.h: semi-seamless migration interface, RHBZ #738266Yonit Halperin2011-09-253-4/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* server/smartcard: fix smartcard_channel_send_errorAlon Levy2011-09-201-23/+7
| | | | | | | | 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.
* server/red_dispatcher: fix wrong resolution set for tabletAlon Levy2011-07-311-4/+4
| | | | | | | | | | | 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.
* server: not reading command rings before RED_WORKER_MESSAGE_START, RHBZ #718713Yonit Halperin2011-07-241-1/+11
| | | | | | | 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.
* Release 0.8.20.8.2Alon Levy2011-07-221-1/+1
|
* fix make distcheckChristophe Fergeau2011-07-226-10/+11
|
* server/red_worker: send surface images to client on-demand after S3/4 wakeupYonit Halperin2011-07-211-9/+22
| | | | | | 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 51628f512456cd26c8c6b417be6b34f3889b33d2)
* server/spice.h: bump QXL_MINOR because of QXLWorker and QXLInterface changesAlon Levy2011-07-211-1/+1
| | | | (cherry picked from commit 3be08d68c01618c81e0dff6caab125a53b4c047e)
* server: add QXLWorker.flush_surfaces_async for S3/S4 supportAlon Levy2011-07-215-4/+46
| | | | | | | | | | | | 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 2a4d97fb780cf3ce2d9060751d0bec2fdc9800a9)
* server: add QXLInterface::update_area_complete callbackAlon Levy2011-07-212-16/+47
| | | | | | when update_area_async is called update_area_complete will be called with the surfaces dirty rectangle list. (cherry picked from commit b26f0532c170068e91e4946592eab2fd9d6cbae5)
* server/red_worker: handle_dev_input: reuse write_ready introduced for asyncAlon Levy2011-07-211-8/+4
| | | | (cherry picked from commit f300de20d9fd7731881ab99c87226fa44a80695b)
* server: add async io supportAlon Levy2011-07-218-91/+360
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 096f49afbf4e83ccee80f58479b3ff05bd355660)
* server: replace redundant code with red_cursor_resetYonit Halperin2011-07-211-47/+24
| | | | | | | 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 [3d3066b175ee2dec8e73c8c56f418a6ae98b1c26 cherry-pick with modifications]
* use foo(void) instead of foo() in prototypesChristophe Fergeau2011-07-217-21/+21
| | | | | | | | 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]
* server: api: add spice_qxl_* calls based on QXLWorker contentsAlon Levy2011-07-213-31/+226
| | | | | | | | | | | 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]
* s/__visible__/SPICE_GNUC_VISIBLEChristophe Fergeau2011-07-214-55/+55
| | | | | | | The C specification reserves use of identifiers starting with __ to the compiler so we shouldn't use one such symbol. [cherry-pick from master]
* server: spice-server.syms: move sasl symbols to 0.8.2Alon Levy2011-07-211-0/+6
| | | | [0.8: there are no 0.10.0 symbols]
* Fix spice-server/qemu channel version checksChristophe Fergeau2011-07-211-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* server: fix access to a released drawable. RHBZ #713474Yonit Halperin2011-07-211-2/+9
| | | | | | | | | 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.
* server: add missing calls to red_handle_drawable_surfaces_client_syncedYonit Halperin2011-07-211-0/+2
| | | | | | 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.
* server: removing local cursor, this solves RHBZ #714801Yonit Halperin2011-07-211-112/+14
| | | | | | | | | | | | | | | 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
* server/smartcard: register channel only when hardware is availableAlon Levy2011-07-212-6/+9
|
* server/smartcard: handle BaseChannel messagesAlon Levy2011-07-211-0/+5
| | | | | | 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.
* server: Unset executable bit of red_tunnel_worker.hZeeshan Ali (Khattak)2011-07-211-0/+0
|
* add missing "LGPLv2.1 or later" header to source filesChristophe Fergeau2011-07-213-0/+51
|
* server/tests remove useless assignmentChristophe Fergeau2011-07-211-1/+0
| | | | This was detected by clang-static-analyzer.
* server: add SASL supportMarc-André Lureau2011-07-213-7/+751
| | | | | | | | | | | | | | | | | 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
* server: add auth mechanism selectionMarc-André Lureau2011-07-211-4/+64
| | | | https://bugs.freedesktop.org/show_bug.cgi?id=34795
* server: add reds_channel_dispose()Marc-André Lureau2011-07-213-2/+14
| | | | | | | | | | 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
* server: simplify and constify sync_write()Marc-André Lureau2011-07-211-17/+25
| | | | | | + symplify, improving style of code using it. https://bugs.freedesktop.org/show_bug.cgi?id=34795
* server: pull out reds_handle_link(), for future reuseMarc-André Lureau2011-07-211-9/+16
| | | | | | + a couple of indent, style change https://bugs.freedesktop.org/show_bug.cgi?id=34795
* build: add --with-saslMarc-André Lureau2011-07-211-0/+2
| | | | | | | | | | Using cyrus SASL library (same as gtk-vnc/qemu). https://bugs.freedesktop.org/show_bug.cgi?id=34795 Conflicts: configure.ac
* server/reds: make writev fallback more genericMarc-André Lureau2011-07-211-26/+17
| | | | | | We are going to reuse it for SASL/SSF encode write(). https://bugs.freedesktop.org/show_bug.cgi?id=34795
* server: rename s/peer/streamMarc-André Lureau2011-07-218-217/+216
| | | | | | | | 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
* server/reds: remove the void* ctx fieldMarc-André Lureau2011-07-212-4/+0
| | | | https://bugs.freedesktop.org/show_bug.cgi?id=34795
* server: use the new reds_stream_{read,write}Marc-André Lureau2011-07-215-61/+53
| | | | https://bugs.freedesktop.org/show_bug.cgi?id=34795