While we're asking about protocol extensions, do we want to bring up adding the TurboVNC extensions as well? These extensions are a superset of the existing vnc-tight extensions, so I'm not sure if the RealVNC list would even care.
Pierre Ossman wrote: > Hi, > > We've been working on client initiated screen size changes and need to > extend the protocol to do that. > > In order to minimise the number of extensions, we'd also like to > accommodate multi-head configurations with this new protocol. > > So we'd like your feedback on the protocol, and allocation of one new > client to server message and one pseudo encoding. > > Suggested additions to the specification: > > > > [2.1 Screen Model] > > In its simplest form, the RFB protocol uses a single, rectangular > framebuffer. All updates are contained within this buffer and may not > extend outside of it. A client with basic functionality simply presents > this buffer to the user, padding or cropping it as necessary to fit > the user's display. > > More advanced RFB clients and servers have the ability to extend this > model and add multiple screens. The purpose being to create a > server-side representation of the client's physical layout. Applications > can use this information to properly position themselves with regard to > screen borders. > > In the multiple-screen model, there is still just a single framebuffer > and framebuffer updates are unaffected by the screen layout. This assures > compatibility between basic clients and advanced servers. Screens are > added to this model and act like viewports into the framebuffer. A basic > client acts as if there is a single screen covering the entire framebuffer. > > The server may support up to 255 screens, which must be contained fully > within the current framebuffer. Multiple screens may overlap partially > or completely. > > The client must keep track of the contents of the entire framebuffer, > not just the areas currently covered by a screen. Similarly, the server > is free to use encodings that rely on contents currently not visible > inside any screen. For example it may issue a CopyRect rectangle from > any part of the framebuffer. > > The client can request changes to the framebuffer size and screen > layout. The server is free to approve or deny these requests at will, > but must always inform the client of the result. See the SetDesktopSize > message for details. > > If the framebuffer size changes, for whatever reason, then all data in > it is invalidated and considered undefined. The server must not use > any encoding that relies on the previous framebuffer contents and the > client should request a full update. Note that this means that > changing only the screen layout does not affect the framebuffer > contents. The client must therefore keep track of the current > framebuffer dimensions and compare it with the one received in the > ExtendedDesktopSize rectangle. Only when they differ may it discard > the framebuffer contents. > > > > [6.4 Client to server messages] > > 6.4.6 SetDesktopSize > > Requests a change of desktop size. This message is an extension and > may only be sent if the client has previously received an > ExtendedDesktopSize rectangle. > > The server must send an ExtendedDesktopSize rectangle for every > SetDesktopSize message received. Several rectangles may be > sent in a single FramebufferUpdate message, but the rectangles must > not be merged in any way. > > Upon a successful request the server must send an ExtendedDesktopSize > rectangle to the requesting client with the exact same information the > client provided in the corresponding SetDesktopSize message. The > x-position must be set to 1, indicating a client initiated event, and > the y-position must be set to 0, indicating success. > > The server must also send an ExtendedDesktopSize rectangle to all other > connected clients, but with the x-position set to 2, indicating a change > initiated by another client. > > If the server can not or will not satisfy the request, it must send > an ExtendedDesktopSize rectangle to the requesting client with the > x-position set to 1 and the y-position set to the relevant error code. > All other fields must indicate the current state of the server. The > server must not send an ExtendedDesktopSize rectangle to any other > connected clients. > > All ExtendedDesktopSize rectangles that are sent as a result of a > SetDesktopSize message should be sent as soon as possible. > > ------------------------------------------------- > No. of bytes Type Description > ------------------------------------------------- > 1 U8 7 message-type > 1 padding > 2 U16 width > 2 U16 height > 1 U8 number-of-screens > 1 padding > number-of-screens * 8 SCREEN array of screens > ------------------------------------------------- > > The width and height indicates the framebuffer size requested. This > structure is followed by number-of-screens SCREEN structures, which is > defined in section 6.7.3: > > ----------------------------------------- > No. of bytes Type Description > ----------------------------------------- > 2 U16 x-position > 2 U16 y-position > 2 U16 width > 2 U16 height > 4 U32 flags > ----------------------------------------- > > The client should make every effort to preserve the fields it does > not modify, including any unknown flags bits. > > > [6.7 Pseudo-encodings] > > 6.7.3 ExtendedDesktopSize pseudo-encoding > > > A client which requests the ExtendedDesktopSize pseudo-encoding is > declaring that it is capable of coping with a change in the > framebuffer width, height, and/or screen configuration. This encoding > is used in conjunction with the SetDesktopSize message. If a server > supports the ExtendedDesktopSize encoding, it must also have basic > support for the SetDesktopSize message although it may deny all > requests to change the screen layout. > > The ExtendedDesktopSize pseudo-encoding is designed to replace the > simpler DesktopSize one. Servers and clients should support both for > maximum compatibility, but a server must always send the extended > version to a client asking for both. If both encodings are used, the > framebuffer size specified must be identical. > > The server must send a ExtendedDesktopSize rectangle in response to a > FrameBufferUpdateRequest with incremental set to zero, assuming the > client has requests the ExtendedDesktopSize pseudo encoding using > SetEncodings. > > The server must also send a ExtendedDesktopSize rectangle in response > to a SetDesktopSize message, indicating the result. > > For a full description of server behaviour as a result of the > SetDesktopSize message, see 6.4.X. > > Rectangles sent as a result of a SetDesktopSize message must be sent as > soon as possible. Rectangles sent for other reasons may be subjected to > delays imposed by the server. > > The pseudo-rectangle's x-position indicates the reason for the change: > > 0 - The screen layout was changed via outside means on the server. For > example the server may have provided means for server-side applications > to manipulate the screen layout. > > 1 - The client receiving this message requested a change of the screen > layout. The change may or may not have happened depending on server > policy or available resources. The status code in the y-position field > must be used to determine which. > > 2 - Another client requested a change of the screen layout and the > server approved it. A rectangle with this code is never sent if the > server denied the request. > > More reasons may be added in the future. Clients should treat an > unknown value as a server-side change (i.e. as if the x-position was > set to zero). > > The pseudo-rectangle's y-position indicates the status code for a change > requested by a client: > > 0 = No error > 1 = Resize is administratively prohibited > 2 = Out of resources > 3 = Invalid screen layout > > This field shall be set to zero by the server and ignored by clients > when not defined. Other error codes may be added in the future and > clients must handle unknown values gracefully. > > The width and height indicates the new width and height of the > framebuffer. > > The encoding data is defined as: > > ------------------------------------------------- > No. of bytes Type Description > ------------------------------------------------- > 2 U16 x-min > 2 U16 y-min > 2 U16 x-max > 2 U16 y-max > 1 U8 number-of-screens > 3 padding > number-of-screens * 8 SCREEN array of screens > ------------------------------------------------- > > The x-min, y-min, x-max, and y-max indicates server imposed limits of > the framebuffer. The client can use this information to indicate to > the user when resizing (using SetDesktopSize) is possible. > > The number-of-screens field indicates the number of active screens and > allows for multi head configurations. It also indicates how many > SCREEN structures that follows. These are defined as: > > ----------------------------------------- > No. of bytes Type Description > ----------------------------------------- > 2 U16 x-position > 2 U16 y-position > 2 U16 width > 2 U16 height > 4 U32 flags > ----------------------------------------- > > The flags field is currently unused. Clients and servers must ignore > any bits it does not understand. > > Note that a simple client which does not support multi head does not > need to parse the list of screens and can simply display the entire > framebuffer. > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are > powering Web 2.0 with engaging, cross-platform capabilities. Quickly and > easily build your RIAs with Flex Builder, the Eclipse(TM)based development > software that enables intelligent coding and step-through debugging. > Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com > ------------------------------------------------------------------------ > > _______________________________________________ > Tigervnc-devel mailing list > Tigervnc-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/tigervnc-devel > ------------------------------------------------------------------------------ Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are powering Web 2.0 with engaging, cross-platform capabilities. Quickly and easily build your RIAs with Flex Builder, the Eclipse(TM)based development software that enables intelligent coding and step-through debugging. Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com _______________________________________________ Tigervnc-devel mailing list Tigervnc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tigervnc-devel