CU-SeeMe Header

Overview

The CU-SeeMe header is used by all packets sent and received by CU-SeeMe.

Packet Format

    0              8              16             24            31
    +--------------+--------------+--------------+--------------+
    |    Destination Family       |      Destination Port       |
    +--------------+--------------+--------------+--------------+
04h |                   Destination Address                     |
    +--------------+--------------+--------------+--------------+
08h |        Source Family        |         Source Port         |
    +--------------+--------------+--------------+--------------+
0Ch |                       Source Address                      |
    +--------------+--------------+--------------+--------------+
10h |                      Sequence Number                      |
    +--------------+--------------+--------------+--------------+
14h |           Message           |          Data Type          |
    +--------------+--------------+--------------+--------------+
18h |           Packet Length     |
    +--------------+--------------+
00h - Destination Family (2 bytes - unsigned integer)
Values:
0 - Forward to all who are requesting this Data Type. Sends audio and AuxData to all participants.
1 - Forward only to the specified Destination Address. Used for private audio and private AuxData.
2 - Examine contents and then decide how to forward.

[Distinction between 0 & 2 is not useful, but is probably coded into the reflector. OPENCONTINUE packets may use a value of 2, and all other packets use 0, except for private audio, aux data hole reports and aux data retries, which use 1. Clients may not examine this field at all.]

02h - Destination Port (2 bytes - unsigned integer)
Values: Conference ID for OPENCONTINUE packets. Destination UDP port for all other packets (7648). Might not be examined by reflector or client.

04h - Destination Address (4 bytes)

Value: IP address of destination client when Destination Family is 1, otherwise equal to 0. Client rejects all packets that do not have Destination Address equal to 0 or its own IP address.

08h - Source Family (2 bytes - unsigned integer)
Values:
0 - May not be currently used
1 - All packets originating at clients
2 - May be used for all packets generated by reflector (except maybe not for surrogate OPENCONTINUE packets generated on behalf of nv, vat, etc. clients)

0Ah - Source Port (2 bytes - unsigned integer)
Value: Port number. Not sure if ever examined by client or reflector.

0Ch - Source Address (4 bytes)
Value: IP address of machine. Used as a unique identifier for each client in a conference.

10h - Sequence Number (4 bytes - unsigned integer)
Used only for OpenContinue packets and video packets. Incremented each time an OpenContinue or video packet is transmitted. Indicates whether this packet should be processed and whether packets have been lost. If the sequence number is greater than the previously saved sequence number, process this packet and save it's sequence number. This allows packets which arrive out of order to ignored.

14h - Message (2 bytes - unsigned integer)
Values:
For OpenContinue packets, the valid values are:
   1 - open a connection or keep a current connection alive
   6 - close connection

For Control packets, the valid values are (I think):
   0xffff -  used by client to acknowledge an OpenContinue 
             packet while waiting for user to agree or 
             disagree to an externally initiated connection. 

For video packets, the valid values are:
   0 - more packets to come for this frame
  20 - Frame end message - update image on screen
16h - Data Type (2 bytes - unsigned integer)
Values:
1 - small video (160x120)
2 - big video (320x240)
3 - audio
100 - used to acknowledge connectivity when there is nothing else to send (reflector connection only)
101 - OpenContinue packet, used to advertise capabilities and desires
104 - display a text message and then disconnect (used by reflector to kick clients off)
105 - display a text message (used to display a welcome message from reflector)
106 - exchanged among reflectors for reflector interoperation
107 - carry aux stream data when there is no video to piggy-back on
108 - obsolete; only appeared in some Mac alpha versions
109 - obsolete, only appeared in some Mac alpha versions
110 - used for data rate control
111 - used for data rate control
256 - aux data control messages
257 - aux data packets

18h - Packet Length (2 bytes - unsigned integer)
Length of entire packet. Used as corruption check.