summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* configure.ac: fix make distChristophe Fergeau2011-05-021-2/+1
|
* server: use is_primary_surfaceChristophe Fergeau2011-05-021-7/+4
| | | | | red_worker.c has an is_primary_surface helper function, but there were some places in the file not using it. This patch fixes that
* spice.proto: Fill.rop_descriptor type s/uint16/ropd (10x atiti)Alon Levy2011-04-261-1/+1
|
* client: skip spaces in --host-subjectChristophe Fergeau2011-04-181-1/+8
| | | | | | | | | | | | | | | | | | This fixes fdo bug #32896: "Subject in certificates is stored in following format (values separated by comma and space): grep Subject: server-cert.pem | awk -F": " '{print $2}' O=REDHAT, CN=10.34.58.2 While spicec expects that values in host subject are separated only by comma: spicec --host-subject "O=REDHAT,CN=10.34.58.2" " In this case, ignoring spaces make it much easier to directly copy and paste the subject line from certificates.
* draw: remove SPICE_ADDRESSChristophe Fergeau2011-04-181-1/+0
| | | | | | This commit removes the typedef for SPICE_ADDRESS which was no longer used. This is the last thing that was missing to close fdo bug #28984
* client: add --version cmdline option to spicecChristophe Fergeau2011-04-181-1/+9
| | | | This fixes freedesktop bug #33907
* client: s/reqired/required in CmdLineParserChristophe Fergeau2011-04-182-5/+5
|
* client: s/AVAILIBLE/AVAILABLE in CmdLineParserChristophe Fergeau2011-04-184-5/+5
| | | | It was mispelt in a CmdLineParser enum.
* server/tests remove useless assignmentChristophe Fergeau2011-04-081-1/+0
| | | | This was detected by clang-static-analyzer.
* common/pixman: remove dead assignmentsChristophe Fergeau2011-04-081-7/+3
| | | | | | They were detected using clang-static-analyzer. Don't initialize the variable to a value to override it with a different value a few lines after.
* tests: fix compilation with -Wall -WerrorChristophe Fergeau2011-04-083-3/+7
| | | | | | When compiling spice with make CFLAGS="-g3 -ggdb3 -O0 -Wall -Werror", the build broken because of a few unused variables/missing returns. This patch fixes these warnings.
* gl: remove unused variablesChristophe Fergeau2011-04-081-6/+0
| | | | gcc 4.6 warned about these.
* gl: use correct pixman accessor for image dataChristophe Fergeau2011-04-081-1/+1
| | | | | | | | | Commit 774e5bd36f4 changed - dest->source.pixmap.x_image->data + + (uint8_t *)pixman_image_get_stride(dest->source.pixmap.pixman_image) + The correct accessor to use is pixman_image_get_data. Thanks to gcc 4.6 for warning about a "different size" int to pointer conversion.
* client: use silent generation rules in Makefile.amChristophe Fergeau2011-04-081-4/+4
| | | | | | | | The server Makefile.am rules for marshallers generation are prefixed with AM_V_SILENT to integrate nicely with automake silent rules. The same AM_V_SILENT prefix isn't used in client/Makefile.am resulting in verbose output even when automake silent mode is enabled. This commit removes this verbosity.
* configure.ac: remove detection of WARN_UNUSED_RESULTChristophe Fergeau2011-04-041-14/+0
| | | | | | | | | | spice configure.ac has some code to detect if the compiler has a special attribute to tag some functions so that they generate a warning when their return value isn't checked. However, this test is broken (the gcc attribute name is "warn_unused_result", not "__warn_unused_result__" and WARN_UNUSED_RESULT is unused anyway since spice-protocol provides SPICE_GNUC_WARN_UNUSED_RESULT. Thus we can just drop that block of code from configure.ac
* remove duplicated macroChristophe Fergeau2011-04-041-2/+0
| | | | MIN() is already defined in spice-protocol/spice/macros.h
* server: make sure we clear vdagent and update mouse mode on agent disconnectHans de Goede2011-04-041-3/+0
| | | | | | | | The check this patch removes causes us to not set vdagent to NULL, nor update the mouse mode when the guest agent disconnects when no client is attached. Which leads to a non working mouse, and on agent reconnect a "spice_server_char_device_add_interface: vdagent already attached" message instead of a successful re-add of the agent interface .
* server: ignore SPICE_MSGC_MAIN_AGENT_START messages when there is no agentHans de Goede2011-04-041-0/+3
| | | | | This can happen for example when a SPICE_MSGC_MAIN_AGENT_START message from the client and the vdagent disconnecting race.
* server: hookup agent-msg-filter discard-all functionalityHans de Goede2011-04-041-30/+22
| | | | | | | This ensures that if the client or agent connects to the client-agent "tunnel" while the other side is halfway through sending a multi part message, the rest of the message gets discarded, and the connecting party starts getting data at the beginning of the next message.
* server: add discard all option to agent message filterHans de Goede2011-04-043-18/+26
|
* server: filter all data from clientHans de Goede2011-04-041-11/+11
| | | | | Filter all data from client, even when there is no agent connected to keep filter state correct.
* server: reset read/write filter on agent/client disconnectHans de Goede2011-04-041-0/+2
| | | | | | The agent message filter keeps track of messages as they are being send reset the relevant filter to its initial state when one of the 2 ends of the agent<->client "tunnel" disconnects.
* server: break read_from_vdi_port loop if the guest gets disconnectedHans de Goede2011-04-041-1/+1
| | | | | | | read_from_vdi_port calls dispatch_vdi_port data, which will disconnect the guest agent if it sends invalid data. It would then try to read more data from the disconnected guest agent resulting in a NULL ptr dereference, this patch fixes this.
* server: Don't stop writing agent data to the guest when the client disconnectsHans de Goede2011-04-041-2/+2
| | | | | | | | write_to_vdi_port() was checking for reds->agent_state.connected to determine wether it could write queued data. But agent_state.connected reflects if *both* ends are connected. If the client has disconnected, but the guest agent is still connected and some data is still pending (like a final clipboard release from the client), then this data should be written to the guest agent.
* server: Don't reset agent state when the client disconnectsHans de Goede2011-04-041-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were calling reds_reset_vdp on client disconnect, which is not a good idea. reds_reset_vdp does 3 things: 1) It resets the state related to reading chunks from the spicevmc virtio port. If the client disconnects while the guest agent is in the middle of sending a chunk, this will lead to an inconsistent state, and lots of printing of "dispatch_vdi_port_data: invalid port" messages caused by this inconsistent state sometimes followed by a segfault. This can be triggered by copy and pasting something large (say a screenshot) from the guest to the spice-gtk client, as the spice-gtk client currently has a bug causing it to crash when receiving a multi chunk vdagent messages. Without this patch (and with the spice-gtk bug present) I can consistently reproduce this. 2) It clears any buffered writes from the client to the guest still pending because the virtio port cannot consume data fast enough. Since the agent itself is still running fine, throwing away writes for it because the client has disconnected makes no sense. Esp, since on clean exit the client may very well send a clipboard release message directly before closing the connection, and this may get lost this way. 3) It sets client_agent_started to false, this is the only thing which actually makes sense to do on client disconnect. Note that since we no longer reset the vdp state on client disconnect, we must now reset it on agent disconnect even if we don't have a client. So the reds_reset_vdp call in reds_agent_remove() gets moved to the top, above both the agent_state.connected and reds->peer checks which will both fail in the no client case.
* server: avoid unneeded recursion in dispatch_vdi_port_dataHans de Goede2011-03-241-1/+1
| | | | | | | | | | | | | dispatch_vdi_port_data, was calling vdi_read_buf_release when no client is connected to free the passed in buf. The only difference between vdi_read_buf_release and directly adding the buffer back to the ring with ring_add, is that vdi_read_buf_release calls read_from_vdi_port after adding the buffer back. But dispatch_vdi_port_data only gets called from read_from_vdi_port itself, thus this would lead to recursing into read_from_vdi_port. read_from_vdi_port is protected against recursion and will immediately return if called recursively. Thus calling vdi_read_buf_release from dispatch_vdi_port_data is pointless, instead simply putting the buffer back in the ring suffices.
* server: Make copy paste support configurableHans de Goede2011-03-242-3/+14
| | | | | | Also bump SPICE_SERVER_VERSION to 0x000801 as 0.8.1 will be the first version with the new API for this, and we need to be able to detect the presence of this API in qemu.
* spice-server: Add the ability to filter agent messagesHans de Goede2011-03-244-2/+162
|
* spicec-x11: Work around a bug in xselHans de Goede2011-03-231-1/+3
| | | | | | | | | | | | | | | | | | | | Although ICCCM 2.2. Responsibilities of the Selection Owner: http://tronche.com/gui/x/icccm/sec-2.html#s-2.2 Clearly states (about selection notify events): The owner should set the specified selection, target, time, and property arguments to the values received in the SelectionRequest event. xsel sets the selection notify event target member to the incr atom when it is going to send the clipboard data incremental, rather then setting it to the UTF8_STRING atom (which was the target of the SelectionRequest). Work around this (esp as it is likely other programs may get this wrong too) and accept the incr atom as a valid target in a selection notify event. This fixes Alon's test with running: python -c "print list(range(1000))" | xsel -i -b on the client.
* spicec-x11: Don't crash on apps sending bad atoms as TARGETSHans de Goede2011-03-231-12/+16
| | | | | | | | | Some apps (bad xsel, bad!) send invalid Atoms in their TARGETS property, causing spicec to exit because of an XError. This patch makes spicec survive this scenario. For more info on the xsel bug, see: https://bugzilla.redhat.com/show_bug.cgi?id=690214
* common/gl: remove unused variableChristophe Fergeau2011-03-231-3/+2
| | | | | | | clang static analyzer warned that 'len' was computed but never used in glc_vertex2d. glc_stroke_line_dash has side effects so we have to call it, but we don't need to save its return value since it's not used.
* opengl: fix compilationChristophe Fergeau2011-03-231-3/+0
| | | | | | When OpenGL is enabled, build fails in DisplayChannel::create_surface because Canvas *canvas is declared twice. Remove the first declaration to fix compilation.
* server/tests: add test_playbackAlon Levy2011-03-223-1/+105
|
* configure.ac: fix message when missing SASL libAlon Levy2011-03-221-1/+1
|
* server: use -std=c99Alon Levy2011-03-221-0/+1
| | | | Finds some bugs.
* python_modules/codegen.py: fix indent error in an unused functionAlon Levy2011-03-221-1/+1
|
* client/smartcard: use proper include delemitersAlon Levy2011-03-221-4/+4
|
* client: Don't handle hotkeys while sticky alt is activeHans de Goede2011-03-111-4/+6
| | | | | | | | | | | | | | | | | In some cases rhev-m changes the hotkey for releasing the mouse grab to ctrl + alt. This makes it impossible to send ctrl + alt + other-key to the guest, even when using sticky alt. What happens is: -press alt until sticky alt activates -release alt (but recorded state stays pressed due to sticky alt) -press ctrl -hotkey code sees ctrl+alt pressed, releases mouse grab -mouse grab release code does an unpress all -> end of sticky state. This patch makes it possible to atleast send ctrl + alt + del (or other key) using sticky alt. Note: even with this patch it is still a bad idea to use ctrl + alt as hotkey combi.
* server/reds: allow call to reds_agent_remove even if it is goneAlon Levy2011-03-081-1/+3
| | | | | | | | | | | | | | | | | | | | | The current assert(reds->agent_state.connected) tiggers if when the agent disconnected there was still data waiting to be sent (for instance if there is a bug in the client handling clipboard and it is killed while a large clipboard transfer is in progress). So first call to reds_agent_remove happens from spice_server_char_device_remove_interface, and then it is called again (triggering the assert) from free_item_data from read_from_vdi_port because of the channel destruction. Other option would be to not call it from one of the paths - but that is suboptimal: * if there is no data in the pipe, the second call never happens. * the second call has to be there anyway, because it may fail during parsing data from the agent. This patch fixes a segfault on this assert when a client starts passing from guest agent to client a large clipboard and dies in the middle. There is still another assert happening occasionally at marshaller which I don't have a fix for (but it doesn't seem to be related).
* client/smartcard: handle the --smartcard-db optionAlon Levy2011-03-081-1/+4
|
* client/windows: cleanup vcproj based on updated libsArnon Gilboa2011-03-081-8/+8
| | | | | | | | | | | | | | | | using updated windows libraries: http://www.spice-space.org/download/stable/wspice-x86_08032011.zip http://www.spice-space.org/download/stable/wspice-x64_08032011.zip -remove IgnoreDefaultLibraryNames="MSVCRT.lib", since pixman is now compiled using MT threading model similar to other libraries. It used to be mistakenly compiled with MD. -downgrade freetype lib to 2.3.11-7, which is the one used/tested with CEGUI 0.6.2 -pthread lib patched (InterlockedCompareExchange), so x64 client will no longer crash on SelectClipRgn, BitBlt etc.
* server/input: avoid double free() of RedChannel on disconnectMarc-André Lureau2011-03-031-8/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current master is calling red_channel_destroy() on incoming error, but reds Channels still references it, which causes a double free() later on (see valgrind report below). Instead, on error condition, do like the rest of the channels and call reds_disconnect(), which remove the references and call shutdown(), which then call red_channel_destroy() and finally free the channel with red_channel_destroy(). Note: the previous code intention was certainly to be able to keep the rest of the channels connected when input channel has errors. This is not addressed by this patch. red_channel_shutdown: ==29792== Invalid read of size 8 ==29792== at 0x4C6F063: red_channel_shutdown (red_channel.c:460) ==29792== by 0x4C51EFA: inputs_shutdown (inputs_channel.c:463) ==29792== by 0x4C48445: reds_shatdown_channels (reds.c:539) ==29792== by 0x4C4868A: reds_disconnect (reds.c:603) ==29792== by 0x4C519E9: main_channel_on_error (main_channel.c:765) ==29792== by 0x4C6E80A: red_channel_peer_on_incoming_error (red_channel.c:215) ==29792== by 0x4C6E22D: red_peer_handle_incoming (red_channel.c:87) ==29792== by 0x4C6E551: red_channel_receive (red_channel.c:154) ==29792== by 0x4C6F329: red_channel_event (red_channel.c:531) ==29792== by 0x41CB8C: main_loop_wait (vl.c:1365) ==29792== by 0x437CDE: kvm_main_loop (qemu-kvm.c:1589) ==29792== by 0x41FE9A: main (vl.c:1411) ==29792== Address 0x30b0f6d0 is 0 bytes inside a block of size 28,648 free'd ==29792== at 0x4A05372: free (vg_replace_malloc.c:366) ==29792== by 0x4C6F032: red_channel_destroy (red_channel.c:454) ==29792== by 0x4C6E80A: red_channel_peer_on_incoming_error (red_channel.c:215) ==29792== by 0x4C6E22D: red_peer_handle_incoming (red_channel.c:87) ==29792== by 0x4C6E551: red_channel_receive (red_channel.c:154) ==29792== by 0x4C6F329: red_channel_event (red_channel.c:531) ==29792== by 0x41CB8C: main_loop_wait (vl.c:1365) ==29792== by 0x437CDE: kvm_main_loop (qemu-kvm.c:1589) ==29792== by 0x41FE9A: main (vl.c:1411) https://bugs.freedesktop.org/show_bug.cgi?id=34971
* Revert "server/red_channel: red_channel_event: push on blocked"Marc-André Lureau2011-03-031-6/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 5062433d8af45822371b6487a8d7baea23071d18. red_channel_receive() can call red_channel_destroy() which frees channel. The condition bellow is then checked, which can access a freed channel: if (event & SPICE_WATCH_EVENT_WRITE || channel->send_data.blocked) Reverting this commit solves the issue without any apparent bugs/drawbacks, which kind of clears out the weird TODO. handle_dev_input: cursor connect ==11826== Invalid read of size 4 ==11826== at 0x4C6F83C: red_channel_event (red_channel.c:535) ==11826== by 0x41CB8C: main_loop_wait (vl.c:1365) ==11826== by 0x437CDE: kvm_main_loop (qemu-kvm.c:1589) ==11826== by 0x41FE9A: main (vl.c:1411) ==11826== Address 0x31fb00f0 is 96 bytes inside a block of size 28,648 free'd ==11826== at 0x4A05372: free (vg_replace_malloc.c:366) ==11826== by 0x4C6F536: red_channel_destroy (red_channel.c:453) ==11826== by 0x4C52B5D: inputs_channel_on_incoming_error (inputs_channel.c:449) ==11826== by 0x4C6ED0E: red_channel_peer_on_incoming_error (red_channel.c:215) ==11826== by 0x4C6E731: red_peer_handle_incoming (red_channel.c:87) ==11826== by 0x4C6EA55: red_channel_receive (red_channel.c:154) ==11826== by 0x4C6F82D: red_channel_event (red_channel.c:530) ==11826== by 0x41CB8C: main_loop_wait (vl.c:1365) ==11826== by 0x437CDE: kvm_main_loop (qemu-kvm.c:1589) ==11826== by 0x41FE9A: main (vl.c:1411) ==11826== https://bugs.freedesktop.org/show_bug.cgi?id=34971
* server/red_worker: use red_channel_pipe_item_initAlon Levy2011-03-022-30/+38
| | | | replaces in file red_pipe_item_init.
* server/red_channel: move out_bytes_counter from Outgoing to RedChannelAlon Levy2011-03-023-7/+17
|
* server/red_channel: split Incoming/Outgoing to callback and stateAlon Levy2011-03-022-42/+57
| | | | | | | | This allows later to have the callback table under RedChannel when the callbacks actually get used by RedChannelClient. Since the cb's are identical for different clients of the same channel it makes sense to store the callback pointers in one place per channel. The rest of the incoming and outgoing struct just gets moved to RedChannelClient.
* server/red_channel: no opaque in red_channel_peer_on_*_errorAlon Levy2011-03-021-8/+4
|
* server/red_worker: use red_channel_is_connectedAlon Levy2011-03-021-3/+3
|
* server/red_channel: add red_channel_disconnect, use in red_workerAlon Levy2011-03-023-15/+12
| | | | replace channel_release_res in red_worker with red_channel_disconnect.
* server/red_channel: reset send_data.item to NULL after releaseAlon Levy2011-03-021-0/+1
|