Hi Anon,

This is a know limitation of the Refresh Screen option in VNC Free Edition &
VNC Free Edition-based software, which isn't "safe" to use if the VNC Viewer
might be changing pixel format at a later point.  You shouldn't need to use
Refresh Screen, in general.

Cheers,

--
Wez @ RealVNC Ltd
 

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Anon Sricharoenchai
> Sent: 12 December 2007 12:25
> To: [email protected]; 
> [EMAIL PROTECTED]; [EMAIL PROTECTED]
> Subject: pixel format is out of sync, after refreshing and 
> suddenly changing pixel format
> 
> Hi,
> 
> I'm not sure to call this a bug in vncviewer, or a bug in VNC 
> protocol.
> 
> Anyhow, this bug apply to realvnc 4.0 to 4.1.1.  The bug may 
> demonstrate the flaw in VNC protocol, which don't have any 
> mechanism to ensure the synchronization of the pixel format 
> between client and server.
> 
> Let's see how to reproduce this bug first, and then see how 
> pixel format is out of sync.
> (To view this bug in a clear formatted text, visit 
> http://opensource.wikia.com/wiki/Bugs:realvnc4/pixel_format_is
> _unpredictable_after_refreshing_and_suddenly_changing_pixel_format
> )
> 
> == How to reproduce ==
> Run the following command in some terminal, "terminal1", in 
> this example,
> 
>    terminal1 $ Xvnc :1 -nolisten tcp -auth /dev/null 
> -localhost -SecurityTypes=None -geometry 800x600 -depth 24 &
>    terminal1 $ DISPLAY=:1 xterm -e perl -e '$|=1; 
> for(;;){print"."; select(undef,undef,undef,0.001); }' &
> 
> Then open another terminal, "terminal2", run vncviewer,
> 
>    terminal2 $ vncviewer :1 -shared -AutoSelect=0 -ViewOnly=1 
> -FullColor
> 
>    VNC Viewer Free Edition 4.1.1 for X - built Jan  6 2007 00:46:26
>    Copyright (C) 2002-2005 RealVNC Ltd.
>    See http://www.realvnc.com for information on VNC.
> 
>    Fri Dec  7 20:11:20 2007
>     CConn:       connected to host localhost port 5901
> 
>    Fri Dec  7 20:11:21 2007
>     CConnection: Server supports RFB protocol version 3.8
>     CConnection: Using RFB protocol version 3.8
>     TXImage:     Using default colormap and visual, 
> TrueColor, depth 24.
>     CConn:       Using pixel format depth 24 (32bpp) 
> little-endian rgb888
>     CConn:       Using ZRLE encoding
> 
> Switch back to "terminal1", suspend the Xvnc,
> 
>    terminal1 $ killall -TSTP Xvnc
> 
> Then switch to vncviewer x11 window, refresh screen, and 
> change colour level,
> 
>    vncviewer x11: press F8 --> select "Refresh screen"
>    vncviewer x11: press F8 --> select "Options..." --> select 
> "Very low (8 colours)" in "Encoding and Colour Level:" --> click "Ok"
> 
> Switch to "terminal1", resume Xvnc,
> 
>    terminal1 $ killall -CONT Xvnc
> 
> vncviewer will then fail like this,
> 
>    terminal2 $ vncviewer :1 -shared -AutoSelect=0 -ViewOnly=1 
> -FullColor
>    <--cut-->
>    ...
>    <--cut-->
>     CConn:       Using ZRLE encoding
> 
>    Fri Dec  7 20:11:45 2007
>     CConn:       Using pixel format depth 3 (8bpp) rgb111
>    vncviewer: ../rfb/zrleDecode.h:196: void 
> rfb::zrleDecode8(const rfb::Rect&, rdr::InStream*, 
> rdr::ZlibInStream*, rdr::U8*,
> rfb::CMsgHandler*): Assertion `len <= end - ptr' failed.
>    Aborted
> 
> 
> 
> == Cause ==
> This is because the client and server fail to synchronize the 
> pixel format, which is depicted as follow,
> 
>                              server send FramebufferUpdate0
>                              server is suspended
>    client receive FramebufferUpdate0
>    client send FramebufferUpdateRequest1:incremental=true
> 
>    user request refresh screen
>    client send FramebufferUpdateRequest2:incremental=false
>    user change colour level
> 
>                              server is resumed
>                              server receive 
> FramebufferUpdateRequest1:incremental=true
>                              server send FramebufferUpdate1
>    client receive FramebufferUpdate1
>    client change its internal pixel format to new pixel format
>    client send SetPixelFormat
>    client send FramebufferUpdateRequest3:incremental=false
>               (non-incremental since pixel format changed)
>    client is now expecting new pixel format from server
>                              server receive 
> FramebufferUpdateRequest2:incremental=false
>                              server send FramebufferUpdate2 
> with old pixel format
>    client receive FramebufferUpdate2 with old pixel format
>    client interprete FramebufferUpdate2 as new pixel format
>    client mis-interprete pixel format, and then fail 
> _______________________________________________
> VNC-List mailing list
> [email protected]
> To remove yourself from the list visit:
> http://www.realvnc.com/mailman/listinfo/vnc-list
> 
_______________________________________________
VNC-List mailing list
[email protected]
To remove yourself from the list visit:
http://www.realvnc.com/mailman/listinfo/vnc-list

Reply via email to