- From: Peter Thatcher <pthatcher@google.com>
- Date: Mon, 6 Jul 2015 13:51:33 -0700
- To: Bernard Aboba <Bernard.Aboba@microsoft.com>
- Cc: "public-ortc@w3.org" <public-ortc@w3.org>
- Message-ID: <CAJrXDUELiPOANUySJdypF4hk15nVE_KmjEwaD8M1wmd=_MXqTA@mail.gmail.com>
Can we just say that getOrCreateTransport doesn't work RTCP transports (ie
with RTCP-mux off)? You get call forking or RTCP-mux off. Pick one.
Trying to support both at the same time seems like a lot of work for
something no one will ever need.
On Fri, Jul 3, 2015 at 1:01 PM, Bernard Aboba <Bernard.Aboba@microsoft.com>
wrote:
> Peter Thatcher's proposed solution to Issue 170 is to add a
> getOrCreateTransport() method to the RTCIceGatherer:
>
> partial interface RTCIceGatherer : RTCStatsProvider {
> RTCIceTransport getOrCreateTransport (DOMString
> remoteUsernameFragment);
> };
>
> In addition, I believe it is also necessary to add a
> remoteUsernameFragment attribute to the RTCIceTransport:
>
> partial interface RTCIceTransport : RTCStatsProvider {
> readonly attribute DOMString? remoteUsernameFragment;
> };
>
> One of the questions that has come up in attempting to define the
> operation of getOrCreateTransport() is the expected behavior when it is
> called on RTP and RTCP IceGatherer objects.
>
> In general, I believe that the desired behavior (for an IceGather with any
> component value) is as follows:
>
> Retrieve the associated RTCIceTransport with a matching
> remoteUsernameFragment value, or construct an RTCIceTransport iceTransport
> with iceTransport.remoteUsernameFragment set to the value passed in the
> argument.
>
> When called on an RTP IceGatherer object, this appears relatively
> straightforward (although it is not clear under what circumstances if any
> errors can occur).
>
> For an RTCP IceGatherer object, it is a bit trickier. For example, what
> happens if there is no matching RTCP RTCIceTransport? This could occur
> when there is an RTP RTCIceTransport with a matching
> remoteUsernameFragment, but no RTCP RTCIceTransport rtpIceTransport as been
> created yet (rtcpIceTransport =
> rtpIceTransport.createAssociatedTransport()). Or there could be no
> matching RTP RTCIceTransport either (with or without an existing RTCP
> RTCIceTransport). So there are a number of corner cases that need to be
> taken into account, and here it does appear that there is a need for one
> more exceptions to be thrown for some of those.
>
> Here is a strawman for the text describing the operation
> getOrCreateTransport(). Comments very welcome.
>
> Retrieve the associated RTCIceTransport with a matching
> remoteUsernameFragment value, or construct an RTCIceTransport iceTransport
> with iceTransport.remoteUsernameFragment set to the value passed in the
> argument. If component is "RTCP", and no matching associated
> RTCIceTransport can be found, determine the RTP RTCIceGatherer
> rtpIceGatherer that was used to create iceGatherer, and attempt to retrieve
> an RTCIceTransport rtpIceTransport with a matching remoteUsernameFragement.
> If no suitable rtpIceTransport is found, throw an "InvalidStateError"
> exception. If a suitable rtpIceTransport is found, and an associated RTCP
> RTCIceTransport rtcpIceTransport exists, return rtcpIceTransport. If no
> associated rtcpIceTransport exists, construct rtcpTransport by calling
> rtpTransport.createAssociatedTransport() set
> rtcpTransport.remoteUsernameFragement to the value passed in the argument,
> and return rtcpTransport.
>
>
>
>
>
Received on Monday, 6 July 2015 20:52:40 UTC