Commit Graph

58 Commits

Author SHA1 Message Date
Uri Lublin
aed39aeccf vdagent: clipboard: GlobalUnlock on handle_request failure
Moved clipboard definition to the beginning of the function, as
mingw-gcc complains about gotos that jump over definitions.
2014-03-09 18:55:40 +02:00
Marc-André Lureau
5129f33899 Add suggested parentheses
vdagent/vdagent.cpp: In member function 'void
VDAgent::on_clipboard_grab()':
vdagent/vdagent.cpp:951:52: warning: suggest parentheses around
assignment used as truth value [-Wparentheses]
2013-07-17 20:45:22 +02:00
Marc-André Lureau
b52c9ddfa8 Fix wrong DWORD print fmt
format '%u' expects argument of type 'unsigned int', but argument 8 has type 'DWORD
2013-07-17 20:45:21 +02:00
Marc-André Lureau
3bf46bc2b2 dos2unix 2013-07-17 20:45:21 +02:00
Arnon Gilboa
c751e8fda0 vdagent: add support for client -> guest file transfers
rhbz#956146
2013-06-27 14:23:49 +03:00
Arnon Gilboa
f7968d5035 cleanup dispatch_message() 2013-06-27 13:24:21 +03:00
Arnon Gilboa
631c8623e3 vdagent: advertise CRLF line-ending
rhbz#872252
2013-06-20 17:36:17 +03:00
Uri Lublin
08a23eb45b vdagent: protect against NULL entry in _displays
rhbz#958051

It may be that a _displays entry will be NULL.
I encountered it when running with multiple QXL devices, for one of
which the driver failed to load since it was "out of resources".

Iterations over _displays should handle that case.
We found four such iterations, and fixed them in this patch.
2013-05-12 12:43:25 +03:00
Arnon Gilboa
b72b943309 vdagent: drop clipboard received after timeout
rhbz #951618
2013-05-09 14:19:11 +03:00
Arnon Gilboa
e55103589a vdagent: add support for VD_AGENT_CLIENT_DISCONNECTED
vdagent is stopped, so a new instance is to be launched by vdservice.
imho, this seems simpler than cleaning agent in/out msg state and
reseting the vio-serial device to cleanup pending msgs.

rhbz #956133
2013-05-09 14:19:11 +03:00
Arnon Gilboa
877ee81f81 vdagent: support sparse monitors config
rhbz #953973
2013-05-09 14:19:11 +03:00
Marc-André Lureau
4ca71770f2 build-sys: fix mingw build 2013-04-24 14:21:50 +02:00
Marc-André Lureau
de672f8cf2 Revert "Refresh monitor config only when needed"
This reverts commit 67c1bcf493.

Also add a comment why the refresh is necessary there. The original
issue, reentering call, doesn't seem reproducible...

https://bugzilla.redhat.com/show_bug.cgi?id=912793
2013-04-24 12:02:23 +03:00
Arnon Gilboa
0074ebcfb1 Revert "vdagent: add vdagent_helper to support mouse when UAC dialog takes focus"
This reverts commit dd9d1f41ca.
2013-04-22 11:17:40 +03:00
Arnon Gilboa
dd9d1f41ca vdagent: add vdagent_helper to support mouse when UAC dialog takes focus
Running the helper with ShellExecute(..."runas"...) is the way to SendInput()
to the UAC dialog in Windows Vista and above.

http://stackoverflow.com/questions/2426594/starting-a-uac-elevated-process-
from-a-non-interactive-service-win32-net-power

http://www.microsoft-questions.com/microsoft/Platform-SDK-Security/29620442/
how-to-proper-use-sendinput-to-a-elevated-window-from-a-service.aspx

rhbz #908422
2013-03-18 15:38:20 +02:00
Arnon Gilboa
136c8d3c94 vdagent: don't terminate if stop event cannot be opened
so vdagent can keep running as standalone without dependency on vdservice.

Regression was due to commit c1807e.

rhbz #903379
2013-03-18 14:13:04 +02:00
Arnon Gilboa
e364fa7799 vdagent: log unsupported grabbed clipboard formats
rhbz #919451 debugging, useful anyway
2013-03-18 13:21:14 +02:00
Arnon Gilboa
482a4980f4 vdagent: for Win7 class, use ClipboardFormatListener api
(Win7 class includes Win8/Vista/Server2012/Server2008/R2)

This new api was introduced in Vista/2K8 to keep track of clipboard changes,
without the need to trust the (mis)behavior of other applications registered
to the clipboard.

If the issue is reproduced on XP as well, it can be hacked by a periodic call
to ChangeClipboardChain & SetClipboardViewer as described in
http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/
521183dc-7872-472e-8104-8c0d75b1bf53

rhbz #919451
2013-03-18 13:16:22 +02:00
Arnon Gilboa
9b05b948fc vdagent: on encoding only, use HBITMAP to keep the correct palette
for decoding, keep using CF_DIB and CxImage.CopyToHandle() as before.

Regression was due to commit da07ce (rhbz #919150)

rhbz #921980
2013-03-18 12:45:25 +02:00
Marc-André Lureau
67c1bcf493 Refresh monitor config only when needed
Somehow wnd_proc()->get_display() may be reentered during ChangeDisplaySettings
2013-03-16 00:55:15 +01:00
Arnon Gilboa
da07ced71c vdagent: use HBITMAP instead of DIB for image encoding
CxImage DIB to PNG encoding seems to ignore pallete in some scenarios.
This issue happens when copying a png from FireFox, but with IE it's ok.

rhbz #919150
2013-03-12 13:09:50 +02:00
Arnon Gilboa
2d03cc5c2c vdservice stops vdagent via event
Terminate agent politely instead of ugly TerminateProcess(), so now
VD_AGENT_CLIPBOARD_RELEASE is sent (if guest owned the clipboard),
followed by cleanup.

rhbz #903379
2013-01-31 11:34:14 +02:00
Arnon Gilboa
f1873dfa9b vdagent: remove vdi_port, use vio_serial directly 2012-12-09 11:33:25 +02:00
Arnon Gilboa
9b5954165d vdagent: when SetClipboardData fails, set clipboard control event to stop wait
Currently, a SetClipboardData failure is followed by useless wait for timeout
(VD_CLIPBOARD_TIMEOUT_MS).

In addition, we remove the clipboard open-empty-set-close retry, which became
irrelevant with the current on_clipboard_request().
2012-12-09 11:24:27 +02:00
Arnon Gilboa
7330f5132a vdagent: remove a wrong return 2012-11-18 12:13:40 +02:00
Arnon Gilboa
a69af07da3 vdagent: set timeout for next clipboard chunk instead of complete reception
currently:
-handling client disconnect during clipboard data trasfer is buggy
-agent also timeouts on large paste from client (>10sec)

therfore:
-reduce VD_CLIPBOARD_TIMEOUT_MS to 3sec from previous clipboard chunk
-remove _clipboard_event and use _control_event(CONTROL_CLIPBOARD) instead
-use _clipboard_tick for clipboard timeout, updated on each clipboard chunk
-use cleanup_in_msg() to reset incoming message state

rhbz#833835
2012-11-14 10:50:52 +02:00
Arnon Gilboa
f71197330c vdagent: extract event_dispatcher from input_desktop_message_loop 2012-11-14 10:50:51 +02:00
Arnon Gilboa
22d25256fd vdagent: use virtio-serial, remove pipe usage 2012-11-14 10:50:51 +02:00
Arnon Gilboa
900ef2b4db vdagent: don't stop due to UIPI blocking
User Interface Privilege Isolation is usually used only for specific windows of
system security applications (anti-viruses etc.), so with this patch mouse will
be irresponsive for these windows but keep working for the rest. A complete
solution might be switching to server mouse mode while the agent is still active.
2012-09-10 10:17:23 +03:00
Arnon Gilboa
4e95b73ecf vdagent: add message_queue for messages written to pipe
This is only part of the message corruption solution.
The other part is fixing virtio-serial / spice-qemu-char throttling code.

-replace write_[lock/unlock/completion] calls with [new/enqueue]_message
-remove clipboard specific _out_msg_* class members
-remove ugly loop - while (a->_out_msg && a->write_clipboard());
-add _message_mutex for message queue
-fix pending_write race using _write_mutex
-TODO: enqueue large message without dividing it to chunks in advance

rhbz #846427
2012-09-10 09:48:46 +03:00
Marc-André Lureau
04a28a35ed Fix remaining warnings 2012-07-25 11:27:22 +02:00
Marc-André Lureau
0cef8ba42b vdagent: reset clipboard event
Waiting for a Windows event will not last if it is already set.

For example, the client may send clipboard_release() messages
while we are not waiting in on_clipboard_request(), and this will
SetEvent(clipboard_event)
The following clipboard request will thus not wait for the data,
resulting in an empty clipboard & paste for the guest application.

We could say there is fundamentally a race as there is no obvious
way to know if a received message is related to the current request,
but by reseting the event before waiting for new events to come, we
at least clear the past events.
2012-05-25 20:21:54 +02:00
Marc-André Lureau
b4b7105c57 mingw: add standard main() entry function
Thanks Paolo for the suggestion:
http://lists.freedesktop.org/archives/spice-devel/2012-May/009291.html
2012-05-24 13:53:43 +02:00
Christophe Fergeau
74af857e8e Revert "mingw: remove tMain use"
This patch wasn't sent for review, and wasn't meant to be pushed
as part of the mingw series

This reverts commit 63541ea6ac.
2012-03-01 16:58:18 +01:00
Christophe Fergeau
6670fc556a Fix spacing in VDAgent initialization list
The convention in vdagent codebase seems to put a space before
the opening parenthesis in initialization list, this commit fixes
2 inconsistencies related to that.
2012-03-01 14:32:39 +01:00
Christophe Fergeau
63541ea6ac mingw: remove tMain use
mingw does not support it.
2012-03-01 12:59:05 +01:00
Christophe Fergeau
b1e2f1a8ed mingw: fix another signed/unsigned warning
VDAgent::_mouse_x and VDAgent::_mouse_y are both signed but are
always assigned values from VDAgentMouseState which are unsigned.
gcc warns about this so change them to unsigned values.
2012-03-01 12:59:05 +01:00
Christophe Fergeau
ff0a9e72b3 mingw: workaround ximage.h #defining min/max
This confuses the deque implementation of gcc which uses std::min
std::max and causes compile failure.
2012-03-01 12:59:05 +01:00
Christophe Fergeau
92583e91d4 mingw: workaround "use of unitialized var" warning
mingw warns about using a variable before it's initialized, but
it's a false alarm. Initialize it to 0 to avoid the warning.
2012-03-01 12:59:05 +01:00
Christophe Fergeau
bc99951685 mingw: use unsigned int in for loops when needed
gcc complains about mixed use of signed/unsigned otherwise
2012-03-01 12:59:05 +01:00
Christophe Fergeau
52d6594284 mingw: fix initialization list order for VDAgent() 2012-03-01 12:58:29 +01:00
Christophe Fergeau
df3fe9cb90 mingw: fix format string warnings
Most of them are caused by not using %lu to print a DWORD (which
is an unsigned long).
2012-02-23 19:03:25 +01:00
Arnon Gilboa
28d7028278 vdagent: release clipboard ownership on agent stop & desktop switch rhbz#731628
-use event queue for agent stop & desktop switch
-exit gracefully on session end
2011-11-16 12:09:46 +02:00
Arnon Gilboa
d896c004e5 vdagent: remove whitespaces 2011-07-24 18:08:03 +03:00
Arnon Gilboa
97f69ccade vdagent: add image copy-paste support
-currently png & bmp
-using wspice libs cximage.lib & png.lib
-jpg & tiff will follow
2010-11-23 17:19:55 +02:00
Arnon Gilboa
1e7f9e85a7 vdagent: handle multiple types on clipboard grab send & receive 2010-10-11 15:10:04 +02:00
Arnon Gilboa
d9c16de429 vdagent: remove clipboard_changer hack
Instead of keeping a flag, we simply check wether the new owner is usor not
2010-10-06 16:35:55 +02:00
Arnon Gilboa
f58826a83f vdagent: Keep track of clipboard ownership
Given that all clipboard handling is async, it is possible to for
example receive a request for clipboard data from the client
while the agent no longer owns the clipboard (ie a
VD_AGENT_CLIPBOARD_RELEASE message is in transit to the client).

Thus it is necessary to keep track of our notion of clipboard ownership
and check received clipboard messages (both from other apps on the client
machine and from the agent) to see if they match our notion and if not
drop, or in case were a counter message is expected nack the clipboard
message.(citing hansg)

clean ups: capability checks, return values
2010-10-06 13:31:15 +02:00
Arnon Gilboa
1d095da5d8 vdagent: receiving a clipboard request with an unsupported type is replied by data with a none type
Currently we send a VD_AGENT_CLIPBOARD_RELEASE when we receive a
VD_AGENT_CLIPBOARD_REQUEST with a type which we do not support. This is not
correct, as this means given up clipboard ownership while we may be able
to answer requests with different types. The correct response is to
nack the request by sending a VD_AGENT_CLIPBOARD (data) message with a type
of VD_AGENT_CLIPBOARD_NONE.(citing hansg)
2010-10-05 16:02:52 +02:00
Arnon Gilboa
9115c03973 vdagent: remove windows-specific bitmap cut & paste support
will wait until png comes in
2010-10-05 15:27:53 +02:00