W3C home > Mailing lists > Public > public-webrtc@w3.org > February 2014

Re: Panic between createOffer() and setLocalDescription()

From: Harald Alvestrand <harald@alvestrand.no>
Date: Fri, 28 Feb 2014 13:13:13 +0100
Message-ID: <53107D59.2090009@alvestrand.no>
To: "piranna@gmail.com" <piranna@gmail.com>
CC: public-webrtc <public-webrtc@w3.org>
On 02/20/2014 12:32 PM, piranna@gmail.com wrote:
> Callback hell from real code:
>
>
> peerConnection.setRemoteDescription(offer, function()
> {
>   peerConnection.createAnswer(function(answer)
>   {
>     peerConnection.setLocalDescription(answer, function()
>     {
>
>         // Send back answer SDP
>
>     },
>     console.error);
>   },
>   console.error);
> },
> console.error);

Apart from the rudimentary error handling, what's wrong with it?

(I may have achieved Javascript brain damage, but this clearly shows
that you do three things one after another, and do nothing inbetween.
Time may pass between all 3 things, which is important to know about -
in particular, you will begin sending media data before you attempt to
send the SDP back to the offerer; I assume this is intentional.)


>
>
> I have just noticed this on the code I'm using. I was doing mostly a
> copy&paste of this snippet between my projects since it was a "live
> with it" issue, by since this discussion started I'm now seeing how
> much disturbing the current API is. As you can see here, definitely
> for the most basic cases not only the setLocalDescription() could be
> integrated on createOffer(), but as you can see here for the most
> common use cases also the trio of
> setRemoteDescription-createAnswer-setLocalDescription could be merged
> in just one function (createAnswer() giving the offer as first
> parameter? a new one processOffer()?).

If you want one function, it is easy for you to wrap them (as you have
done).
If the API had only one function, there would be no way for you to tease
them apart.

Having the option of having to call one, two or three functions
depending on the invocation parameters of each of them would seem to me
to be the most confusing alternative.

>
> 2014-02-20 10:44 GMT+01:00 piranna@gmail.com <piranna@gmail.com>:
>>> I'm not sure that's a compelling reason to separate the two, but it's a
>>> possible reason, even in the absence of SDP modification.
>>>
>> I'm not saying to remove setLocalDescription(), I'm only saying that
>> for most use cases is redundant to call to
>> createOffer()/createAnswer() and inmediately to setLocalDescription(),
>> so I'll change the spec to do the call implicitly and if some changes
>> are required, let the user to do the call explicitly, overwritting
>> this way the content of the local description with its custom one.
>> This will make easier to new comers what's the call flow:
>>
>> createOffer() -> send()
>> onmessage -> setRemoteDescription()
>> createAnswer() -> send()
>> onmessage -> setRemoteDescription()
>>
>> Honestly, if you need to call to setLocalDescription() with a modified
>> SDP, you are not in "WebRTC 101" anymore... Why complicate it?
>>
>>
>> --
>> "Si quieres viajar alrededor del mundo y ser invitado a hablar en un
>> monton de sitios diferentes, simplemente escribe un sistema operativo
>> Unix."
>> - Linus Tordvals, creador del sistema operativo Linux
>
>


-- 
Surveillance is pervasive. Go Dark.
Received on Friday, 28 February 2014 12:13:44 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:38 UTC