OpenContinue Packet

Overview

The OpenContinue packet is used for connecting, disconnecting, keeping a connection alive, and tracking information about participants. [Windows: Connections are kept alive by sending an OpenContinue packet every 2 seconds. If you don't receive an OpenContinue packet for 60 seconds, the connection has timed out. Mac: An OpenContinue packet is sent every 3 seconds if nothing else has been sent during the last 3 seconds; and OpenContinue packet is sent every 5 seconds if no OpenContinue packet was sent in the last 5 seconds. If no packets have been received for 60 seconds, the connection has timed out.]

Packet Format

    0              8              16             24            31
    +--------------+--------------+--------------+--------------+
    |                      CU-SeeMe Header                      |
    |                         (26 bytes)                        |
    |                            ...                            |
    |                             +--------------+--------------+
    |                             |         Client Count        |
    +--------------+--------------+--------------+--------------+
1Ch |                 OpenContinue Sequence Number              |
    +--------------+--------------+--------------+--------------+
20h |                                                           |
    |                                                           |
    |                   User Name (20 bytes)                    |
    |                                                           |
    |                                                           |
    +--------------+--------------+--------------+--------------+
34h |   Send Mode  | Receive Mode |     Flags    |   Version    |
    +--------------+--------------+--------------+--------------+
38h |                   Client Info array                       |
    |                           .....                           |
    +--------------+--------------+--------------+--------------+
00h - CU-SeeMe Header (26 bytes)

1Ah - Client Count (2 bytes - unsigned integer)
Number of participants in conference. There is 1 CLIENTINFO structure for each participant, excluding yourself.

1Ch - OpenContinue Sequence Number (4 bytes - unsigned integer)
Indicates whether this OpenContinue packet should be processed. If the sequence number is greater than the previously saved sequence number, process this OpenContinue packet and save it's sequence number. This allows packets which arrive out of order to be ignored. OpenContinue packets which arrive with the same sequence number are not processed, which means the contents of the current OpenContinue packet does not differ from the previous one. The exception to this rule is: Packet Loss fields in Client Info structures and any OpenContinue Packet Extensions are always processed regardless of sequence number.

20h - User Name (20 bytes)
User name. This is not a null terminated C string, but is instead stored with the first byte indicating the length of the string, followed by actual string itself; making the maximum length of the actual string 19 characters.

34h - Send Mode (1 byte)
Values:
0x00 - this participant will not send video
0x01 - this participant is willing to send small video (160x120)
0x02 - this participant is willing to send big video (240x320)
0x80 - this participant is willing to send White Pine's color video

35h - Receive Mode (1 byte)
Values:
0 - this participant does not want to receive video.
1 - this participant wants to receive video

36h - Flags (1 byte) - Specify various Boolean state that applies to all clients
Values:
0x01 - user wants is willing to receive audio
0x02 - user is capable of transmitting audio
0x04 - wants audio from lurkers
0x08 - specifies this is a Windows machine (otherwise is a Mac)
0x10 - I am sending private audio with Destination Address
0x20 - send version information

37h - Version (1 byte)
Protocol version number

38h - Client Info array.
Tracks participants and their options. There is 1 CLIENTINFO "structure" for each participant in a conference, excluding yourself. That is, if there are 3 participants in a conference (counting yourself as one of the participants), you would use an "array" of 2 CLIENTINFO structures. Note: no CLIENTINFO structures are used in an OpenContinue packet when making a new connection.
0              8              16             24            31
+--------------+--------------+--------------+--------------+
|                IP Address of this participant             |
+--------------+--------------+--------------+--------------+
|    Flags     |Aux Data Prune| I Will Recv  | I Will Send  |
+--------------+--------------+--------------+--------------+
|         Packets sent        |     Packets expected        |
+--------------+--------------+--------------+--------------+
IP Address of this participant (4 bytes) - just like it sounds.

Flags (1 byte) - Specify various Boolean states with respect to a particular client.
Values:
0x01 - update video - used by reflector to optimize "list maintenance"
0x02 - update audio - used by reflector to optimize "list maintenance"
0x04 - I will receive audio
0x08 - update AuxData

Aux Data Prune (1 byte)
Bitfield to specify which types of Aux Data are desired.

I Will Recv (1 byte)
Values:
0 - I do not want to receive video from this participant
1 - I do want to receive video from this participant

I Will Send (1 byte) - This participant wants to send video.
Values:
0 - this participant down not want to send video
1 - this participant wants to send video

Packets Expected (2 bytes - unsigned integer)
Number of packets sent to me since last OpenContinue packet was sent. Used to calculate end-to-end packet loss for informative display.

Packets Received (2 bytes - unsigned integer)
Number of packets received since last OpenContinue packet was sent. Used to calculate end-to-end packet loss for informative display