Re: [MMUSIC] Trickle ICE for SIP Questions

"Stach, Thomas" <> Thu, 04 July 2013 13:15 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id D2C9B21F9FD8 for <>; Thu, 4 Jul 2013 06:15:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id qvOXTTy14Psh for <>; Thu, 4 Jul 2013 06:15:09 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id A5DA521F9FD5 for <>; Thu, 4 Jul 2013 06:15:08 -0700 (PDT)
Received: from (unknown []) by (Server) with ESMTP id 944C01EB85FB; Thu, 4 Jul 2013 15:15:05 +0200 (CEST)
Received: from ([]) by ([]) with mapi id 14.03.0123.003; Thu, 4 Jul 2013 15:15:05 +0200
From: "Stach, Thomas" <>
To: Emil Ivov <>
Thread-Topic: [MMUSIC] Trickle ICE for SIP Questions
Thread-Index: AQHOd/eUM0XqJDBgnkG3edAtUHILLJlUd8BA
Date: Thu, 04 Jul 2013 13:15:04 +0000
Message-ID: <>
References: <>
In-Reply-To: <>
Accept-Language: de-AT, en-US
Content-Language: en-US
x-originating-ip: []
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Subject: Re: [MMUSIC] Trickle ICE for SIP Questions
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Multiparty Multimedia Session Control Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 04 Jul 2013 13:15:12 -0000


> -----Original Message-----
> From: [] On
> Behalf Of Emil Ivov
> Sent: Wednesday, 03 July, 2013 16:13
> Subject: [MMUSIC] Trickle ICE for SIP Questions
> Hey all,
> Christer, Enrico and I are preparing the next version of Trickle ICE
> for
> SIP. Now that discussions on BUNDLE and the plans seem to be winding
> down, we wanted to run a few questions by the working group.
> Q1: Making reliable provisional responses and PRACK mandatory.
> Obviously
> this would be nice to avoid, so the question is: is there a reasonable
> mechanism to achieve this (and by reasonable, we mean something that
> wouldn't be harder than implementing support for PRACK).
> There was some discussion about this back in April and there was a
> suggestion for implementing a 5245-style hack where the answerer
> basically resends the 180 until it knows that it has been received.
> 5245 uses connectivity checks for this (i.e. it stops 180
> retransmissions when the first connectivity check is received) but we
> don't have that option here since the 180 may contain either none or
> only host candidates so there are strong chances that no binding
> request
> would be received on them.
> Thomas also suggested a second option which would be to also use INFO
> requests with trickled candidates as an indication that 180 was
> received. This however wouldn't work with half trickle so we are
> basically back to vanilla ICE for all (non-re) INVITEs.
> Another option would be to mandate an INFO request with
> "end-of-candidates" in response to the 180, but that would be just the
> same as mandating PRACK support.
> Thomas also suggested that the answerer can start sending INFOs right
> after it sends its answer in the 180 and then it can just resend the
> 180
> if the INFOs result in a 481 response.
> Personally I think this could potentially be made to work, but it would
> imply a level of complexity that considerably exceeds PRACK support.
[TS] I'm not convinced about the different level of complexity. 
If you use PRACK you have SIP timer T1 running and would re-transmit the 180 in case that the PRACK is not received. 
Assuming that you want to wait with sending of the INFO until you saw the PRACK, would lead to delay in that case.
If you don't wait you would also have to treat a 481 response to the INFO.
... and you would detect quicker that the 180 was lost than by waiting for the PRACK.

BTW: 5245 recommends to use PRACK. However it does not mandate it, but gives the alternative procedures as an option.
You could do the same here.

> Opinions?
> Q2: How do we send INFOs? Are they blocking or do we just send them in
> parallel? If the latter, then what happens when an INFO fails because
> it
> is received out of order? Do we just tell the application to resend the
> candidates asap?
[TS] I would go with the proposal below and send cumulatively. You also have the CSeq: header field to detect late arrivals.

> This also leads to the following question:
> Q3: What exactly do we send in INFOs? Just the latest batch of freshly
> learned candidates or all candidates we've learned so far? Dale
> suggested that if we do this cumulatively we wouldn't need to worry
> about the case with the out-of-order INFOs from Q2 since the
> information
> gets resent anyway. A drawback here would obviously be that this adds
> more complexity for trickle ICE users (WebRTC applications
> specifically)
[TS] Again I'm not convinced about the complexity. Both peer know their candidates, what is the issue in putting all of them into the INFO?
> A third option would be to allow both and leave it to the application.
[TS] This now adds complexity. ;-) I would just always send all candidates.
> Comments are most welcome!
> Emil
> --
> _______________________________________________
> mmusic mailing list