Pierre Ossman [Mon, 29 Oct 2018 09:03:37 +0000 (10:03 +0100)]
Require all SMsgWriter caller to check capabilities
Make the API consisitent by requiring the caller to check what the client
supports before calling any of the write* functions. This avoids the
confusion that the functions might not always do anything.
Pierre Ossman [Mon, 10 Dec 2018 19:16:12 +0000 (20:16 +0100)]
Always send current screen layout to client
This is what the protocol requires, rather than sending what the
client specified in the request. This should be the same in practice
except for failures and possibly some races.
Pierre Ossman [Fri, 30 Nov 2018 14:59:43 +0000 (15:59 +0100)]
Increase range of ComparingUpdateTracker statistics
32 bits are not enough to keep track of all the pixels that might
flow through the system. Expand things to 64 bits, which should cover
all reasonable uses.
Pierre Ossman [Mon, 26 Nov 2018 14:40:30 +0000 (15:40 +0100)]
Avoid using "fake" key codes
There is a range of key codes that are never sent by a real keyboard
and are therefore used by layouts to hide "fake" mappings. Make sure
to only use these as a fallback as some applications get confused
when they see these codes.
Pierre Ossman [Fri, 23 Nov 2018 16:48:02 +0000 (17:48 +0100)]
Abort unsafe lossless refresh early
We need to check earlier if we are going to send this refresh or
not. Otherwise we send out pings pointlessly, and we also stall
the request loop with a client as we clear the requested region
without actually sending an update message.
Prevent rendering uninitialized Pixmap contents on X11
The Pixmap is filled in as updates from the server arrive. Before the first full update, it would contain undefined contents, which would be rendered onto the ViewPort.
Clearing the Pixmap is only done on startup and when changing the server resolution, so it's not performance critical.
Pierre Ossman [Fri, 26 Oct 2018 13:54:56 +0000 (15:54 +0200)]
Get rid of SocketServer::checkTimeouts()
It doesn't belong on each socket server object as timers are global.
Force implementations to call the Timer system directly instead,
avoiding any middle men.
Pierre Ossman [Sat, 29 Sep 2018 09:24:19 +0000 (11:24 +0200)]
Properly terminate server on timeouts
Do a proper cleanup when one of the termination timeouts trigger
rather than just exiting on the spot. This makes sure we don't leave
stray stuff around, e.g. unix socket files.
Pierre Ossman [Fri, 26 Oct 2018 13:34:03 +0000 (15:34 +0200)]
Change exit timeouts to timers
This makes them more consistent with everything else, which makes
things clearer and also allows them to handle some corner cases
(e.g. only firing once).
Pierre Ossman [Tue, 6 Nov 2018 16:31:11 +0000 (17:31 +0100)]
Fixed handling of AltGr from Windows' touch keyboard
We need to test this always in order to catch Ctrl+AltGr, and to
handle release of the key properly. Hopefully there isn't any other
case where VK_MENU is sent without a scan code.
Pierre Ossman [Wed, 20 Jun 2018 14:03:23 +0000 (16:03 +0200)]
Move client attributes out of ServerParams
ServerParams should contain the server state and not information about
client settings or capabilities. Move those things up a level to the
CConnection object.
Pierre Ossman [Wed, 20 Jun 2018 13:47:49 +0000 (15:47 +0200)]
Merge client resize capabilities
No need to have one setting for each extension. All the client code
needs to indicate is if it supports resize. The common code can then
map this to relevant extensions.
Pierre Ossman [Wed, 20 Jun 2018 09:35:05 +0000 (11:35 +0200)]
Make arguments explicit in all message writer methods
Make sure all methods only write what is given as arguments, and
avoid side effects by getting data from parameter objects. This keeps
things readable in the calling code.
Pierre Ossman [Wed, 31 Oct 2018 16:08:59 +0000 (17:08 +0100)]
Let CMsgHandler::serverInit() handle initial set up
Avoid using the callbacks used for runtime changes for the initial
setup. They weren't really useful anyway as you could not allocate
a framebuffer without also knowing the pixel format. So make things
more clear by letting serverInit() get the initial settings.
Pierre Ossman [Wed, 20 Jun 2018 10:25:14 +0000 (12:25 +0200)]
Encapsulate screen layout storage in ConnParams
Avoid direct access to the screen dimensions and layout so that we
can make sure it stays sane. This also makes sure the layout is
properly updated when we only get the screen dimensions from the
server.
Pierre Ossman [Fri, 5 Oct 2018 15:48:58 +0000 (17:48 +0200)]
Inherit SocketServer directly from VNCServer
This makes VNCServer a sufficiently complete interface that callers
don't need to know about the specific implementation (VNCServerST
currently). And assuming that all servers will use sockets is not
that outrageous.
Pierre Ossman [Fri, 5 Oct 2018 15:35:51 +0000 (17:35 +0200)]
Encapsulate client handling in VNCServerST
Removed the last parts of VNCSConnectionST's back door in to
VNCServerST and let the parent class fully handle coordination of
clients, and access to the desktop.
Pierre Ossman [Thu, 25 Oct 2018 08:36:21 +0000 (10:36 +0200)]
Fix rendering on big endian system
Our XRender code assumes a certain pixel layout which was not
guaranteed on big endian systems. The previous workaround only worked
for some cases, so fix this properly now.
Pierre Ossman [Fri, 5 Oct 2018 15:30:52 +0000 (17:30 +0200)]
Encapsulate event handling in VNCServerST
There is some client coordination needed which is better encapsulated
inside VNCServerST. This also helps hiding the desktop from the
individual clients.
Pierre Ossman [Fri, 5 Oct 2018 14:59:22 +0000 (16:59 +0200)]
Force common flow of connection queries
Force queryConnection() to always call back to approveConnection()
rather than return special values. This makes the flow easier to
follow as it will be the same in all cases.
Pierre Ossman [Fri, 21 Sep 2018 13:33:30 +0000 (15:33 +0200)]
Delete TLS streams before deleting the session
The streams depend on the session and can crash the program if they
are removed in the wrong order. Do a general cleanup of the life time
management of the streams.