Update: UltraVNC 1.4.3.6 and UltraVNC SC 1.4.3.6: viewtopic.php?t=37885
Important: Please update to latest version before to create a reply, a topic or an issue: viewtopic.php?t=37864

Join us on social networks and share our announcements:
- Website: https://uvnc.com/
- GitHub: https://github.com/ultravnc
- Mastodon: https://mastodon.social/@ultravnc
- Facebook: https://www.facebook.com/ultravnc1
- X/Twitter: https://twitter.com/ultravnc1
- Reddit community: https://www.reddit.com/r/ultravnc
- OpenHub: https://openhub.net/p/ultravnc

UltraVNC Server isn't working for non-incremental updates

Post Reply
OliverB
Posts: 1
Joined: 2008-07-07 14:39

UltraVNC Server isn't working for non-incremental updates

Post by OliverB »

Hello,

I have an own vnc client which will never ask for an incremental update. In this case the UltraVNC Server will always return a blank screen.

Reproducibility:
Change UltraVNC Viewer to never request any incremental updates. This could be done by changing the 4th argument of the SendFramebufferUpdateRequest function call in the SendIncrementalFramebufferUpdateRequest function to FALSE(File: CleintConnection.cpp in line 3891).

Problem:
When the update is requested and handled in the UltraVNC Server, it will check if the update is wanted by the client (vncdesktopthread.cpp: m_desktop->m_server->UpdateWanted() in line 833). This function checks the incremental region for every connected vnc client. This region is always empty when no incremental update was requested ((m_incr_rgn.is_empty() in vncclient.h:UpdateWanted()) and so the display will never get grabbed.
Because in vncserver.cpp:UpdateWanted() every vnc client will be checked, this bug won't occur for any connected vnc clients if one of them will request incremental updates. As soon as the vnc client(s) which requests incremental updates will be closed, the other vnc clients won't get any fresh screen data any more.

Solution / Workaround:
I have found no setting in the VNC-Server or VNC-Client to solve this problem.
I have no clean solution but curiously the full updates are working when the "incremental check section" in vncclient.cpp/vncClientThread/rfbFramebufferUpdateRequest will be removed. I just added a " && false" to the incremental update check "if (!msg.fur.incremental)". But I'm not sure about the consequences, this will trigger.

Background information:
The RFB protocol says "...the server assumes that the client keeps a copy of all parts of the framebuffer... .This means that normally the server only needs to send incremental updates to the client..." but also "...however , if for some reason the client has lost the contents...then the client sends a FramebufferUpdateRequest with incremental zero...". As I understand it's only recommended to request incremental updates if possible. My client is not able to store the entire screen contents and that's why it always asks for full updates.


This bug was already issued in a posting from 2004-06-30(!):
[topic=374][/topic]
Post Reply