After a local agent has trickled a candidate and formed a candidate pair from that local candidate (
Section 9), or after a remote agent has received a trickled candidate and formed a candidate pair from that remote candidate (
Section 11), a Trickle ICE agent adds the new candidate pair to a checklist as defined in this section.
As an aid to understanding the procedures defined in this section, consider the following tabular representation of all checklists in an agent (note that initially for one of the foundations, i.e., f5, there are no candidate pairs):
|
f1 |
f2 |
f3 |
f4 |
f5 |
s1 (Audio.RTP) |
F |
F |
F |
|
|
s2 (Audio.RTCP) |
F |
F |
F |
F |
|
s3 (Video.RTP) |
F |
|
|
|
|
s4 (Video.RTCP) |
F |
|
|
|
|
Table 1: Example of Checklist State
Each row in the table represents a component for a given data stream (e.g., s1 and s2 might be the RTP and RTP Control Protocol (RTCP) components for audio) and thus a single checklist in the checklist set. Each column represents one foundation. Each cell represents one candidate pair. In the tables shown in this section, "F" stands for "frozen", "W" stands for "waiting", and "S" stands for "succeeded"; in addition, "^^" is used to notate newly added candidate pairs.
When an agent commences ICE processing, in accordance with
Section 6.1.2.6 of
RFC 8445, for each foundation it will unfreeze the pair with the lowest component ID and, if the component IDs are equal, with the highest priority (this is the topmost candidate pair in every column). This initial state is shown in the following table.
|
f1 |
f2 |
f3 |
f4 |
f5 |
s1 (Audio.RTP) |
W |
W |
W |
|
|
s2 (Audio.RTCP) |
F |
F |
F |
W |
|
s3 (Video.RTP) |
F |
|
|
|
|
s4 (Video.RTCP) |
F |
|
|
|
|
Table 2: Initial Checklist State
Then, as the checks proceed (see
Section 7.2.5.4 of
RFC 8445), for each pair that enters the Succeeded state (denoted here by "S"), the agent will unfreeze all pairs for all data streams with the same foundation (e.g., if the pair in column 1, row 1 succeeds then the agent will unfreeze the pairs in column 1, rows 2, 3, and 4).
|
f1 |
f2 |
f3 |
f4 |
f5 |
s1 (Audio.RTP) |
S |
W |
W |
|
|
s2 (Audio.RTCP) |
W |
F |
F |
W |
|
s3 (Video.RTP) |
W |
|
|
|
|
s4 (Video.RTCP) |
W |
|
|
|
|
Table 3: Checklist State with Succeeded Candidate Pair
Trickle ICE preserves all of these rules as they apply to "static" checklist sets. This implies that if a Trickle ICE agent were to begin connectivity checks with all of its pairs already present, the way that pair states change is indistinguishable from that of a regular ICE agent.
Of course, the major difference with Trickle ICE is that checklist sets can be dynamically updated because candidates can arrive after connectivity checks have started. When this happens, an agent sets the state of the newly formed pair as described below.
Rule 1: If the newly formed pair has the lowest component ID and, if the component IDs are equal, the highest priority of any candidate pair for this foundation (i.e., if it is the topmost pair in the column), set the state to Waiting. For example, this would be the case if the newly formed pair were placed in column 5, row 1. This rule is consistent with
Section 6.1.2.6 of
RFC 8445.
|
f1 |
f2 |
f3 |
f4 |
f5 |
s1 (Audio.RTP) |
S |
W |
W |
|
^W^ |
s2 (Audio.RTCP) |
W |
F |
F |
W |
|
s3 (Video.RTP) |
W |
|
|
|
|
s4 (Video.RTCP) |
W |
|
|
|
|
Table 4: Checklist State with Newly Formed Pair, Rule 1
Rule 2: If there is at least one pair in the Succeeded state for this foundation, set the state to Waiting. For example, this would be the case if the pair in column 5, row 1 succeeded and the newly formed pair were placed in column 5, row 2. This rule is consistent with
Section 7.2.5.3.3 of
RFC 8445.
|
f1 |
f2 |
f3 |
f4 |
f5 |
s1 (Audio.RTP) |
S |
W |
W |
|
S |
s2 (Audio.RTCP) |
W |
F |
F |
W |
^W^ |
s3 (Video.RTP) |
W |
|
|
|
|
s4 (Video.RTCP) |
W |
|
|
|
|
Table 5: Checklist State with Newly Formed Pair, Rule 2
Rule 3: In all other cases, set the state to Frozen. For example, this would be the case if the newly formed pair were placed in column 3, row 3.
|
f1 |
f2 |
f3 |
f4 |
f5 |
s1 (Audio.RTP) |
S |
W |
W |
|
S |
s2 (Audio.RTCP) |
W |
F |
F |
W |
W |
s3 (Video.RTP) |
W |
|
^F^ |
|
|
s4 (Video.RTCP) |
W |
|
|
|
|
Table 6: Checklist State with Newly Formed Pair, Rule 3