From e0f69a69f6a20df35fdb1ad01c2cd606a27cf862 Mon Sep 17 00:00:00 2001 From: Sameer Vijaykar <194338+sam-vi@users.noreply.github.com> Date: Mon, 4 Sep 2023 11:13:21 +0200 Subject: [PATCH 1/9] Add candidatepairnominate event. --- index.html | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/index.html b/index.html index 5435267..c1a18e2 100644 --- a/index.html +++ b/index.html @@ -74,6 +74,10 @@
The terms [= event =], [= event handlers =] and [= event handler event types =] are defined in [[!HTML]].
++ The process of nominating a candidate pair is defined in + [[RFC8445]] Section 8.1.1. +
+ The [= ICE agent =] performs connectivity checks to identify valid candidate pairs on which it is possible to send and + receive media and data. In order to conclude ICE processing, the [= ICE agent =] {{nominates}} a valid candidate pair + as the selected candidate pair. Prior to nomination, any valid candidate pair may be used to exchange packets. Once a + candidate pair is nominated successfully, only the selected candidate pair may be used to exchange packets. Changing + the selected candidate pair after a successful nomination requires an ICE restart. +
++ When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, the [= user agent =] + MUST [= queue a task =] to nominate a candidate pair: +
++ Let |connection:RTCPeerConnection| be the {{RTCPeerConnection}} object associated with this [= ICE agent =]. +
+
+ If connection.{{RTCPeerConnection/[[IsClosed]]}} is
+ true
, abort these steps.
+
+ Let |transport:RTCIceTransport| be the {{RTCIceTransport}} object associated with this candidate pair. +
++ Let |candidatePair:RTCIceCandidatePair| be the candidate pair which is being {{nominated}}. +
++ Let |accepted:boolean| be the result of [= fire an event | firing an event =] named + {{RTCIceTransport/icecandidatepairnominate}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the + {{Event/cancelable}} attribute initialized to true, and the {{RTCIceCandidatePairEvent/local}} and + {{RTCIceCandidatePairEvent/remote}} attributes initialized to the local and remote candidates, respectively, of + |candidatePair|. +
+
+ If |accepted| is false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and instead
+ to continue to perform connectivity checks. The [= ICE agent =] may exchange packets using the candidate pair
+ indicated by |candidatePair| unless instructed to use another candidate pair with
+ setSelectedCandidatePair.
+
+ Otherwise, instruct the [= ICE agent =] to {{nominate}} the candidate pair indicated by |candidatePair|. If the + nomination succeeds, |candidatePair| will become the selected candidate pair and be exclusively used for + exchanging packets. Changing the selected candidate pair will require an ICE restart. +
+When the [= ICE agent =] has picked a candidate pair to remove, the [= user agent =] MUST [= queue a task =] to remove a candidate pair:
@@ -756,6 +818,7 @@+ The event type of this event handler is {{icecandidatepairnominate}}. +
++ When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, but before the + nomination takes place, the [= user agent =] MUST run the steps to [= nominate a candidate pair =]. +
+preventDefault()
method on the event, it will be removed.
+ preventDefault()
method on the event, it will be {{nominated}}.
+ false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and instead
to continue to perform connectivity checks. The [= ICE agent =] may exchange packets using the candidate pair
indicated by |candidatePair| unless instructed to use another candidate pair with
- setSelectedCandidatePair.
+ {{RTCIceTransport/setSelectedCandidatePair}}.
+
+
+ + Otherwise, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to true and instruct the [= ICE + agent =] to {{nominate}} the candidate pair indicated by |candidatePair|. +
++ When the [= ICE agent =] indicates that the {{nomination}} process has concluded, the [= user agent =] MUST queue a task + that runs + the following steps: +
++ Let |transport:RTCIceTransport| be the {{RTCIceTransport}} object associated with this [= ICE agent =]. +
++ If the nomination is successful, continue to the steps for a change in the selected candidate pair. +
++ If the nomination fails, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to false. The selected + candidate pair has not changed in this case. +
++ If the application defers the {{nomination}} of a candidate pair by cancelling the + {{RTCIceTransport/icecandidatepairnominate}} event, it may select a different candidate pair to exchange packets by + calling + {{RTCIceTransport/setSelectedCandidatePair}}. When the method is called, the [= user agent =] MUST run the steps to + change the selected candidate pair: +
++ Let |connection:RTCPeerConnection| be the {{RTCPeerConnection}} object associated with this [= ICE agent =]. +
+
+ If connection.{{RTCPeerConnection/[[IsClosed]]}} is
+ true
, [= exception/throw =] an {{InvalidStateError}}.
+
+ Let |transport:RTCIceTransport| be the {{RTCIceTransport}} object associated with this candidate pair.
- Otherwise, instruct the [= ICE agent =] to {{nominate}} the candidate pair indicated by |candidatePair|. If the - nomination succeeds, |candidatePair| will become the selected candidate pair and be exclusively used for - exchanging packets. Changing the selected candidate pair will require an ICE restart. + If transport.{{RTCIceTransport/[[IceRole]]}} is {{RTCIceRole/"controlled"}}, [= exception/throw =] a + {{NotAllowedError}}. +
++ If transport.{{RTCIceTransport/[[IceRole]]}} is {{RTCIceRole/"unknown"}}, [= exception/throw =] an + {{InvalidStateError}}. +
+
+ If transport.{{RTCIceTransport/[[CandidatePairNominated]]}} is true
, [= exception/throw =]
+ an {{InvalidStateError}}.
+
+ If |transport|.{{RTCIceTransport/[[IceTransportState]]}} is either of + {{RTCIceTransportState/"new"}}, {{RTCIceTransportState/"failed"}} or {{RTCIceTransportState/"closed"}}, [= exception/throw =] + an {{InvalidStateError}}. +
++ Let |candidatePair:RTCIceCandidatePair| be the candidate pair which is being set as the selected candidate pair. +
++ If |candidatePair| does not describe a candidate pair formed for this {{RTCIceTransport}} and sent in + {{RTCIceTransport/onicecandidatepairadd}}, [= exception/throw =] a {{NotFoundError}}. +
++ Instruct the [= ICE agent =] to use |candidatePair| to send and receive packets, and continue to the steps for a + change in the selected candidate pair (leading up to + {{RTCIceTransport/onselectedcandidatepairchange}}).
+ The {{RTCIceTransport}} object is extended by adding the following internal slot: +
+partial interface RTCIceTransport { attribute EventHandler onicecandidatepairadd; attribute EventHandler onicecandidatepairremove; attribute EventHandler onicecandidatepairnominate; + undefined setSelectedCandidatePair(RTCIceCandidatePair candidatePair); };
+ The {{setSelectedCandidatePair}} method attempts to change the selected candidate pair. If successful, packets will be + sent and received on the provided candidate pair. When this method is invoked, the [= user agent =] must run the + steps to [= change the selected candidate pair =]. +
+When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, the [= user agent =] - MUST [= queue a task =] to nominate a candidate pair: + MUST [= queue a task =] to nominate a candidate pair:
+ After changing the selected candidate pair, the [= ICE agent =] may attempt to [= nominate the candidate pair =] as well to conclude ICE processing. The application may cancel the nomination to allow further changes to the selected candidate pair. +
When the [= ICE agent =] has picked a candidate pair to remove, the [= user agent =] MUST [= queue a task =] to remove a candidate pair:
From 3a815e69da49570b692f8551b29382bad06b6610 Mon Sep 17 00:00:00 2001 From: Sameer Vijaykar <194338+sam-vi@users.noreply.github.com> Date: Mon, 4 Sep 2023 16:19:37 +0200 Subject: [PATCH 4/9] Only allow cancelling remove pre-nomination. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index c0c4844..31cf078 100644 --- a/index.html +++ b/index.html @@ -886,7 +886,7 @@
- Let |cancelable:boolean| be true
if the candidate pair is being removed in order to free an unused candidate, and false
otherwise.
+ Let |cancelable:boolean| be true
if |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} is false
and the candidate pair is being removed in order to free an unused candidate, and false
otherwise.
- The [= ICE agent =] performs connectivity checks to identify valid candidate pairs on which it is possible to send and - receive media and data. In order to conclude ICE processing, the [= ICE agent =] {{nominates}} a valid candidate pair - as the selected candidate pair. Prior to nomination, any valid candidate pair may be used to exchange packets. Once a + The [= ICE agent =] performs connectivity checks to identify valid candidate pairs on which it is possible to send + and + receive media and data. In order to conclude ICE processing, the [= ICE agent =] {{nominates}} a valid candidate + pair + as the selected candidate pair. Prior to nomination, any valid candidate pair may be used to exchange packets. Once + a candidate pair is nominated successfully, only the selected candidate pair may be used to exchange packets. Changing the selected candidate pair after a successful nomination requires an ICE restart.
- When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, the [= user agent =] - MUST [= queue a task =] to nominate a candidate pair: + When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, the [= user + agent =] + MUST [= queue a task =] to nominate a + candidate pair:
- If |accepted| is false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and instead
+ If |accepted| is false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and
+ instead
to continue to perform connectivity checks. The [= ICE agent =] may exchange packets using the candidate pair
indicated by |candidatePair| unless instructed to use another candidate pair with
{{RTCIceTransport/setSelectedCandidatePair}}.
-
- Otherwise, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to true and instruct the [= ICE + Otherwise, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to true and instruct the [= + ICE agent =] to {{nominate}} the candidate pair indicated by |candidatePair|.
- When the [= ICE agent =] indicates that the {{nomination}} process has concluded, the [= user agent =] MUST queue a task + When the [= ICE agent =] indicates that the {{nomination}} process has concluded, the [= user agent =] MUST queue a + task that runs the following steps:
@@ -826,14 +834,16 @@
- If transport.{{RTCIceTransport/[[CandidatePairNominated]]}} is true
, [= exception/throw =]
+ If transport.{{RTCIceTransport/[[CandidatePairNominated]]}} is true
, [= exception/throw
+ =]
an {{InvalidStateError}}.
If |transport|.{{RTCIceTransport/[[IceTransportState]]}} is either of - {{RTCIceTransportState/"new"}}, {{RTCIceTransportState/"failed"}} or {{RTCIceTransportState/"closed"}}, [= exception/throw =] + {{RTCIceTransportState/"new"}}, {{RTCIceTransportState/"failed"}} or {{RTCIceTransportState/"closed"}}, [= + exception/throw =] an {{InvalidStateError}}.
- After changing the selected candidate pair, the [= ICE agent =] may attempt to [= nominate the candidate pair =] as well to conclude ICE processing. The application may cancel the nomination to allow further changes to the selected candidate pair. + After changing the selected candidate pair, the [= ICE agent =] may attempt to [= nominate the candidate pair =] as + well to conclude ICE processing. The application may cancel the nomination to allow further changes to the selected + candidate pair.
- When the [= ICE agent =] has picked a candidate pair to remove, the [= user agent =] MUST [= queue a task =] to remove a candidate pair: + When the [= ICE agent =] has picked a candidate pair to remove, the [= user agent =] MUST [= queue a task =] to remove a candidate pair:
- Let |cancelable:boolean| be true
if |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} is false
and the candidate pair is being removed in order to free an unused candidate, and false
otherwise.
+ Let |cancelable:boolean| be true
if |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} is
+ false
and the candidate pair is being removed in order to free an unused candidate, and
+ false
otherwise.
Let |accepted:boolean| be the result of [= fire an event | firing an event =] named {{RTCIceTransport/icecandidatepairremove}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the - {{Event/cancelable}} attribute initialized to cancelable, and the {{RTCIceCandidatePairEvent/local}} and {{RTCIceCandidatePairEvent/remote}} attributes initialized to the local and remote candidates, respectively, of |candidatePair|. + {{Event/cancelable}} attribute initialized to cancelable, and the {{RTCIceCandidatePairEvent/local}} + and {{RTCIceCandidatePairEvent/remote}} attributes initialized to the local and remote candidates, respectively, + of |candidatePair|.
- If |accepted| is false
, instruct the [= ICE agent =] to not remove the candidate pair indicated by |candidatePair|, and instead continue to send and respond to ICE connectivity checks on the candidate pair as before.
+ If |accepted| is false
, instruct the [= ICE agent =] to not remove the candidate pair indicated by
+ |candidatePair|, and instead continue to send and respond to ICE connectivity checks on the candidate pair as
+ before.
- partial interface RTCIceTransport { - attribute EventHandler onicecandidatepairadd; - attribute EventHandler onicecandidatepairremove; - attribute EventHandler onicecandidatepairnominate; - undefined setSelectedCandidatePair(RTCIceCandidatePair candidatePair); - };-
When the [= ICE agent =] has formed a candidate pair, the [= user agent =] MUST queue a task to [= fire an event =] named {{icecandidatepairadd}} using the {{RTCIceCandidatePairEvent}} interface, with the - {{RTCIceCandidatePairEvent/local}} and {{RTCIceCandidatePairEvent/remote}} attributes set to the local and remote candidates, respectively, of the formed candidate pair. + {{RTCIceCandidatePairEvent/local}} and {{RTCIceCandidatePairEvent/remote}} attributes set to the local and + remote candidates, respectively, of the formed candidate pair.
- When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, but before the + When the [= ICE agent =] has picked a candidate pair to {{nominate}} as the selected candidate pair, but + before + the nomination takes place, the [= user agent =] MUST run the steps to [= nominate a candidate pair =].
- -- The {{setSelectedCandidatePair}} method attempts to change the selected candidate pair. If successful, packets will be - sent and received on the provided candidate pair. When this method is invoked, the [= user agent =] must run the - steps to [= change the selected candidate pair =]. -
-+ The {{setSelectedCandidatePair}} method attempts to change the selected candidate pair. If successful, packets + will be + sent and received on the provided candidate pair. When this method is invoked, the [= user agent =] must run + the + steps to [= change the selected candidate pair =]. +
+- The {{RTCIceTransport/icecandidatepairadd}} and {{RTCIceTransport/icecandidatepairremove}} events use the {{RTCIceCandidatePairEvent}} interface. + The {{RTCIceTransport/icecandidatepairadd}} and {{RTCIceTransport/icecandidatepairremove}} events use the + {{RTCIceCandidatePairEvent}} interface.
[Exposed=Window] -interface RTCIceCandidatePairEvent : Event { - constructor(DOMString type, RTCIceCandidatePairEventInit eventInitDict); - readonly attribute RTCIceCandidate local; - readonly attribute RTCIceCandidate remote; -};-
- The {{local}} attribute represents the local {{RTCIceCandidate}} of the candidate pair associated with the event. + The {{local}} attribute represents the local {{RTCIceCandidate}} of the candidate pair associated with the + event.
- The {{remote}} attribute represents the remote {{RTCIceCandidate}} of the candidate pair associated with the event. + The {{remote}} attribute represents the remote {{RTCIceCandidate}} of the candidate pair associated with + the event.
-dictionary RTCIceCandidatePairEventInit : EventInit { - required RTCIceCandidate local; - required RTCIceCandidate remote; -};+ dictionary RTCIceCandidatePairEventInit : EventInit { + required RTCIceCandidate local; + required RTCIceCandidate remote; + };
+ Set |transport|.{{RTCIceTransport/[[ProposalPending]]}} to true
.
+
Let |accepted:boolean| be the result of [= fire an event | firing an event =] named @@ -755,6 +760,11 @@
+ Set |transport|.{{RTCIceTransport/[[ProposalPending]]}} to false
.
+
If |accepted| is false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and
@@ -820,6 +830,11 @@
+ If |transport|.{{RTCIceTransport/[[ProposalPending]]}} is true
, [= exception/throw =] an {{InvalidStateError}}.
+
If transport.{{RTCIceTransport/[[IceRole]]}} is {{RTCIceRole/"controlled"}}, [= exception/throw =] a @@ -904,6 +919,11 @@
false
otherwise.
+ Set |transport|.{{RTCIceTransport/[[ProposalPending]]}} to true
.
+
Let |accepted:boolean| be the result of [= fire an event | firing an event =] named @@ -913,6 +933,11 @@
+ Set |transport|.{{RTCIceTransport/[[ProposalPending]]}} to false
.
+
If |accepted| is false
, instruct the [= ICE agent =] to not remove the candidate pair indicated by
@@ -927,11 +952,14 @@
- The {{RTCIceTransport}} object is extended by adding the following internal slot: + The {{RTCIceTransport}} object is extended by adding the following internal slots:
false
.
+ false
.
@@ -996,7 +1024,7 @@Methods
The {{setSelectedCandidatePair}} method attempts to change the selected candidate pair. If successful, packets will be - sent and received on the provided candidate pair. When this method is invoked, the [= user agent =] must run + sent and received on the provided candidate pair. When this method is invoked, the [= user agent =] MUST run the steps to [= change the selected candidate pair =].
From cb4a936dfab29a8cfc093daeb573aa68478a0947 Mon Sep 17 00:00:00 2001 From: Sameer Vijaykar <194338+sam-vi@users.noreply.github.com> Date: Tue, 5 Sep 2023 14:53:38 +0200 Subject: [PATCH 7/9] Fix boolean literal references. --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 6d50e77..d7b227e 100644 --- a/index.html +++ b/index.html @@ -691,7 +691,7 @@{{RTCRtpSender}} {{RTCRtpSender/setParameters()}} modifications to existing
@@ -755,7 +755,7 @@
For each setParameterOptions.encodingOptions indexed by i, - if
setParameterOptions.encodingOptions[i].keyFrame
is set to true, + ifsetParameterOptions.encodingOptions[i].keyFrame
is set totrue
, request that the encoder associated withparameters.encodings[i]
generates a key frame.
Let |accepted:boolean| be the result of [= fire an event | firing an event =] named {{RTCIceTransport/icecandidatepairnominate}} at |transport|, using {{RTCIceCandidatePairEvent}}, with the - {{Event/cancelable}} attribute initialized to true, and the {{RTCIceCandidatePairEvent/local}} and + {{Event/cancelable}} attribute initialized to
@@ -776,7 +776,7 @@true
, and the {{RTCIceCandidatePairEvent/local}} and {{RTCIceCandidatePairEvent/remote}} attributes initialized to the local and remote candidates, respectively, of |candidatePair|.
- Otherwise, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to true and instruct the [=
+ Otherwise, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to true
and instruct the [=
ICE
agent =] to {{nominate}} the candidate pair indicated by |candidatePair|.
- Otherwise, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to true
and instruct the [=
- ICE
- agent =] to {{nominate}} the candidate pair indicated by |candidatePair|.
-
- When the [= ICE agent =] indicates that the {{nomination}} process has concluded, the [= user agent =] MUST queue a - task - that runs - the following steps: -
-- Let |transport:RTCIceTransport| be the {{RTCIceTransport}} object associated with this [= ICE agent =]. -
-- If the nomination is successful, continue to the steps for a change in the selected candidate pair. -
-- If the nomination fails, set |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} to false. The selected - candidate pair has not changed in this case. + Otherwise, instruct the [= ICE agent =] to {{nominate}} the candidate pair indicated by |candidatePair|.
- If transport.{{RTCIceTransport/[[CandidatePairNominated]]}} is true
, [= exception/throw
- =]
- an {{InvalidStateError}}.
-
If |transport|.{{RTCIceTransport/[[IceTransportState]]}} is either of @@ -914,8 +881,7 @@
- Let |cancelable:boolean| be true
if |transport|.{{RTCIceTransport/[[CandidatePairNominated]]}} is
- false
and the candidate pair is being removed in order to free an unused candidate, and
+ Let |cancelable:boolean| be true
if the candidate pair is being removed in order to free an unused candidate, and
false
otherwise.
- The {{RTCIceTransport}} object is extended by adding the following internal slots: + The {{RTCIceTransport}} object is extended by adding the following internal slot:
false
.
- false
.
The [= ICE agent =] performs connectivity checks to identify valid candidate pairs on which it is possible to send - and - receive media and data. In order to conclude ICE processing, the [= ICE agent =] {{nominates}} a valid candidate - pair - as the selected candidate pair. Prior to nomination, any valid candidate pair may be used to exchange packets. Once - a - candidate pair is nominated successfully, only the selected candidate pair may be used to exchange packets. Changing + and receive media and data. In order to conclude ICE processing, the [= ICE agent =] {{nominates}} a valid candidate + pair as the selected candidate pair. Prior to nomination, any valid candidate pair may be used to send and receive data. + Once + a candidate pair is nominated successfully, only the selected candidate pair will be used to send and receive data. + Changing the selected candidate pair after a successful nomination requires an ICE restart.
@@ -767,9 +766,8 @@
- If |accepted| is false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and
- instead
- to continue to perform connectivity checks. The [= ICE agent =] may exchange packets using the candidate pair
+ If |accepted| is false
, instruct the [= ICE agent =] to not {{nominate}} |candidatePair|, and instead to
+ continue to perform connectivity checks. The [= ICE agent =] may continue to send data using the candidate pair
indicated by |candidatePair| unless instructed to use another candidate pair with
{{RTCIceTransport/setSelectedCandidatePair}}.
If the application defers the {{nomination}} of a candidate pair by cancelling the - {{RTCIceTransport/icecandidatepairnominate}} event, it may select a different candidate pair to exchange packets by - calling - {{RTCIceTransport/setSelectedCandidatePair}}. When the method is called, the [= user agent =] MUST run the steps to - change the selected candidate pair: + {{RTCIceTransport/icecandidatepairnominate}} event, it may select a different candidate pair to send data by calling + {{RTCIceTransport/setSelectedCandidatePair}}. When the method is called, the [= user agent =] MUST run the steps to change the selected candidate pair:
true
, [= exception/throw =] an {{InvalidStateError}}.
- If transport.{{RTCIceTransport/[[IceRole]]}} is {{RTCIceRole/"controlled"}}, [= exception/throw =] a - {{NotAllowedError}}. -
-- If transport.{{RTCIceTransport/[[IceRole]]}} is {{RTCIceRole/"unknown"}}, [= exception/throw =] an - {{InvalidStateError}}. -
-If |transport|.{{RTCIceTransport/[[IceTransportState]]}} is either of @@ -842,14 +827,14 @@
- Instruct the [= ICE agent =] to use |candidatePair| to send and receive packets, and continue to the steps for a - change in the selected candidate pair (leading up to - {{RTCIceTransport/onselectedcandidatepairchange}}). + Instruct the [= ICE agent =] to use |candidatePair| to send data, and continue to the steps for a change in the selected + candidate pair (leading up to {{RTCIceTransport/onselectedcandidatepairchange}}).
- After changing the selected candidate pair, the [= ICE agent =] may attempt to [= nominate the candidate pair =] as + After changing the selected candidate pair, the controlling [= ICE agent =] may attempt to [= nominate the candidate + pair =] as well to conclude ICE processing. The application may cancel the nomination to allow further changes to the selected candidate pair.
@@ -985,11 +970,9 @@- The {{setSelectedCandidatePair}} method attempts to change the selected candidate pair. If successful, packets - will be - sent and received on the provided candidate pair. When this method is invoked, the [= user agent =] MUST run - the - steps to [= change the selected candidate pair =]. + The {{setSelectedCandidatePair}} method attempts to change the selected candidate pair. If successful, data will be sent + on the provided candidate pair. When this method is invoked, the [= user agent =] MUST run the steps to [= change the + selected candidate pair =].