Re: [rtcweb] #13: Transport of DATA_CHANNEL_OPEN

Randell Jesup <randell-ietf@jesup.org> Sat, 20 April 2013 03:21 UTC

Return-Path: <randell-ietf@jesup.org>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 08C5A21F91CF for <rtcweb@ietfa.amsl.com>; Fri, 19 Apr 2013 20:21:06 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.299
X-Spam-Level:
X-Spam-Status: No, score=-1.299 tagged_above=-999 required=5 tests=[AWL=1.299, BAYES_00=-2.599, HTML_MESSAGE=0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TcAYVl0PjOu7 for <rtcweb@ietfa.amsl.com>; Fri, 19 Apr 2013 20:21:05 -0700 (PDT)
Received: from r2-chicago.webserversystems.com (r2-chicago.webserversystems.com [173.236.101.58]) by ietfa.amsl.com (Postfix) with ESMTP id 18F6D21F91C4 for <rtcweb@ietf.org>; Fri, 19 Apr 2013 20:21:04 -0700 (PDT)
Received: from pool-98-111-140-34.phlapa.fios.verizon.net ([98.111.140.34]:3344 helo=[192.168.1.12]) by r2-chicago.webserversystems.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80) (envelope-from <randell-ietf@jesup.org>) id 1UTOMJ-0004pP-Qv; Fri, 19 Apr 2013 22:21:04 -0500
Message-ID: <5172091A.5040205@jesup.org>
Date: Fri, 19 Apr 2013 23:18:50 -0400
From: Randell Jesup <randell-ietf@jesup.org>
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130328 Thunderbird/17.0.5
MIME-Version: 1.0
To: Bernard Aboba <bernard_aboba@hotmail.com>
References: <066.3120a55540cacaa74ee5fda0b5273a48@trac.tools.ietf.org>, <516CE3EC.2050804@jesup.org>, <CABkgnnVaTOLa-hs7AtEgaTk7eq00bEkCY+_8L96Y8pooqybBxA@mail.gmail.com>, <CAJrXDUFgxLT3-1HehKbg5byzifFi4Obe3XW9G4sbWRbnU+Hi1A@mail.gmail.com>, <CABkgnnXr85LZyJiSF+ok2KMS_xQnS0CE4VBq4PvEhBBscn2QZQ@mail.gmail.com>, <516F1AF9.2080301@alvestrand.no>, <CABkgnnVtUjk4jSDVioxQnrt-b69Hx0nZLefs7tpEzETSmLXeNA@mail.gmail.com>, <516F9A5A.6080402@alvestrand.no>, <CABkgnnWrAMnm5fTWCNA1jqC_8Js0a6ewfSkvni4xg0E6rXdCtA@mail.gmail.com>, <5170247F.4090908@alvestrand.no>, <CABkgnnXU4HeJT-QwDcJ5NTvr72gZXxXi5zHFkQjJS__UXqzvtQ@mail.gmail.com>, <206CB075-6754-4578-B623-866E410DACCC@lurchi.franken.de>, <CABkgnnUCXUH+0a+F1LVQVrtL=Q65HGgsdT-oBBF++zSVR4OhWw@mail.gmail.com>, <5171734E.3050300@jesup.org>, <CABkgnnW0V7Sjx27Ff7CHANLqPifRLMDNatqD=VgPOB+d-iR+4A@mail.gmail.com>, <CAJrXDUGQyuKA_DxSOPfsWqCnkSRd=_Qzkir+r0-27oprCz6=sw@mail.gmail.com> <BLU169-W71259E99EC38724B1682D293C90@phx.gbl>
In-Reply-To: <BLU169-W71259E99EC38724B1682D293C90@phx.gbl>
Content-Type: multipart/alternative; boundary="------------080301010004000403090209"
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - r2-chicago.webserversystems.com
X-AntiAbuse: Original Domain - ietf.org
X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain - jesup.org
Cc: Randell Jesup <randell-ietf@jesup.org>, "rtcweb@ietf.org" <rtcweb@ietf.org>
Subject: Re: [rtcweb] #13: Transport of DATA_CHANNEL_OPEN
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtcweb>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 20 Apr 2013 03:21:06 -0000

On 4/19/2013 8:32 PM, Bernard Aboba wrote:
> Peter Thatcher said:
>
> I like all the discussion, but I feel like we need to get back to the 
> question and what options we have.  The question: "what does the 
> browser do with unexpected data (before an open of an unregistered sid)?"
>
> 1. Buffer forever without limits:  Randell thinks it's OK to buffer 
> forever without limits.  Martin disagrees.  I disagree (I agree with 
> Martin).
>
> [BA] This seems like a bad idea.  If the receiver is expecting an OPEN 
> then it shouldn't allow an unlimited amount of (ordered!) data to be 
> received before getting one.

This case only applies in an un-ordered channel I believe, if we send 
the Open as reliable-in-order.  Ordered data must be delivered in-order 
(!), so the Open must be delivered before any following ordered data.  
(This is why I said the Open *should* be sent in-order; it removes the 
need to buffer in an ordered channel.)

>  If the receiver buffers a large amount of data and passes it to the 
>  JS even if the application indicated that an OPEN was required, this 
> might encourage implementations to bypass the OPEN, since receivers 
> are so tolerant about not getting it even if the application has 
> indicated it is required.

Well, if we do decide to timeout or size-out buffering of unordered 
early data, I wouldn't do so quickly.  My example for this would be a 
data-only application opening an channel just as it's fading out of 
WiFi/cell coverage, and hasn't picked up the new one yet (going through 
a tunnel, dead spot in the building, walk down to the basement, etc).

I would far rather the transaction 'freeze' and resume when a new 
connection is picked up (and ICE restart brings the connections alive 
again), than to have an arbitrary timer cause my app/game/etc to fail in 
a very very hard-to-test way.  In practical terms, it would be Very hard 
for significant data to end up buffered.  The application can deal with 
timeouts of the entire connection; I don't want to drop the data if the 
app has decided to stay in suspension waiting for a connection to 
resume.  After all, what is gained by dropping the data?  Don't say 
"knowledge that the channel failed to open" or "the connection is 
borked" - this isn't a good way to find out about total connection loss, 
and given we don't have timeouts on opens, I see no reason to insert 
them in an edge case for open for no useful reason.  If you want opens 
to timeout, that should be part of how Open works (partial-reliable with 
a max time), not indirectly-in-some-edge-cases like this.

> 2. Buffer with limits, and then:
>   a.  Hand an error to JS saying "got some data for a data channel, 
> but an OPEN never came" WITHOUT providing the data to JS: Harald likes 
> this.  I'm OK with this.
>
> [BA] One desirable aspect of this is that it (combined with a stream 
> reset) limits the potential for attacks or implementation problems to 
> affect applications.

Painful for implementers to test, and virtually impossible for 
application authors to test, even if they realize it's a possibility.

>   b.  Hand an error to JS saying "got some data for a data channel, 
> but an OPEN never came" WITH providing the data: I like this better, 
> since I don't see a reason not to give JS the data.
>
> [BA]  For the reasons described above, I think we could end up 
> regretting this option.

I agree, though for different reasons than Bernard.

-- 
Randell Jesup
randell-ietf@jesup.org