The frames or messages that are sent in IAX2 are binary and therefore each bit or each set of bits has a meaning. There are basically two types of frames:
A) F Frames or Full Frames
Full Frames are the only frame type are transmitted reliably. This means that the recipient host must return some type of message back to the sending host immediately upon reception.
F frame or Full Frame binary format in IAX2
The meaning of each field is the following one::
- F : is used in indicate whether a frame is a Full Frame or not. A value of 1 in this field indicates the frame is a Full Frame and a value 0 indicates the frame is something other than a Full Frame.
- Source Call Number: a 15-bit unsigned integer that is used to track a media stream endpoint on the source host
- R : Set to the value 1 if this frame is being retransmitted and the value 0 for the initial transmission
- Destination Call Number : the same as source call number but with destination instead of source.
- Timestamp o sello de tiempo - To stamp the time of each packet
- OSeqno: Outbound stream sequence number.OSeqno, always begins with 0 and increases monotonically
- ISeqno: is similar to OSeqno, except that it is used to track the ordering of inbound media frames.
- Frame Type: Frame type
- C: If C is set to 1, the Subclass value is interpreted as a power of two. If C is set to 0, Subclass is interpreted as a simple 7-bit unsigned integer value.
- Subclass: Subclass type of message.
- Data: Data sent in binary format.
B) Tramas M o Mini Frames
An F frame or Mini Frame is used to send media with a minimal protocol overhead. This frames are not transmitted reliably. If one of these frames is lost is not retransmitted.
The binary format for M frames or mini frames is the following one:
The meaning is similar to the F frames but the F bit is set to 0. The Timestamp in the Mini Frame is truncated. The client generally
maintains a 32-bit full timestamp. When sending Mini Frames, only the low 16 bits of the timestamp are sent in the Timestamp field. When the 16-bit timestamp wraps around, a Full Frame is sent to allow the other end to synchronize its full 32-bit timestamp counter.