5.1.1 ProtocolVersion: 12, 12 bytes

    - Sent by server, max supported
        12 ascii - "RFB 003.008\n"
    - Response by client, version to use
        12 ascii - "RFB 003.003\n"

5.1.2 Authentication: >=4, [16, 4] bytes

    - Sent by server
        CARD32 - authentication-scheme
                0 - connection failed
                    CARD32 - length
                    length - reason
                1 - no authentication

                2 - VNC authentication
                    16 CARD8 - challenge (random bytes)

    - Response by client (if VNC authentication)
        16 CARD8 - client encrypts the challenge with DES, using user
                   password as key, sends resulting 16 byte response

    - Response by server (if VNC authentication) 
        CARD32 - 0 - OK
                 1 - failed
                 2 - too-many

5.1.3 ClientInitialisation: 1 byte
    - Sent by client
        CARD8 - shared-flag, 0 exclusive, non-zero shared

5.1.4 ServerInitialisation: >=24 bytes
    - Sent by server
        CARD16 - framebuffer-width
        CARD16 - framebuffer-height
        16 byte PIXEL_FORMAT - server-pixel-format
            CARD8 - bits-per-pixel
            CARD8 - depth
            CARD8 - big-endian-flag, non-zero is big endian
            CARD8 - true-color-flag, non-zero then next 6 apply
            CARD16 - red-max
            CARD16 - green-max
            CARD16 - blue-max
            CARD8 - red-shift
            CARD8 - green-shift
            CARD8 - blue-shift
            3 bytes - padding
        CARD32 - name-length

        CARD8[length] - name-string



Client to Server Messages:

5.2.1 SetPixelFormat: 20 bytes
    CARD8: 0 - message-type
    ...

5.2.2 FixColourMapEntries: >=6 bytes
    CARD8: 1 - message-type
    ...

5.2.3 SetEncodings: >=8 bytes
    CARD8: 2 - message-type
    CARD8    - padding
    CARD16   - numer-of-encodings

    CARD32   - encoding-type in preference order
        0 - raw
        1 - copy-rectangle
        2 - RRE
        4 - CoRRE
        5 - hextile

5.2.4 FramebufferUpdateRequest (10 bytes)
    CARD8: 3 - message-type
    CARD8    - incremental (0 for full-update, non-zero for incremental)
    CARD16   - x-position
    CARD16   - y-position
    CARD16   - width
    CARD16   - height


5.2.5 KeyEvent: 8 bytes
    CARD8: 4 - message-type
    CARD8    - down-flag
    2 bytes  - padding
    CARD32   - key (X-Windows keysym values)

5.2.6 PointerEvent: 6 bytes
    CARD8: 5 - message-type
    CARD8    - button-mask
    CARD16   - x-position
    CARD16   - y-position

5.2.7 ClientCutText: >=9 bytes
    CARD8: 6 - message-type
    ...


Server to Client Messages:

5.3.1 FramebufferUpdate
    CARD8: 0 - message-type
    1 byte   - padding
    CARD16   - number-of-rectangles

    CARD16   - x-position
    CARD16   - y-position
    CARD16   - width
    CARD16   - height
    CARD16   - encoding-type:
        0 - raw
        1 - copy rectangle
        2 - RRE
        4 - CoRRE
        5 - hextile

        raw:
            - width x height pixel values

        copy rectangle: 
            CARD16 - src-x-position
            CARD16 - src-y-position

        RRE:
            CARD32  - N number-of-subrectangles
            Nxd bytes - background-pixel-value (d bits-per-pixel)

        ...

5.3.2 SetColourMapEntries (no support)
    CARD8: 1 - message-type
    ...

5.3.3 Bell
    CARD8: 2 - message-type

5.3.4 ServerCutText
    CARD8: 3 - message-type