[asterisk-dev] Testers wanted - PRACK for 1.8

Alec Davis sivad.a at paradise.net.nz
Thu Jul 5 02:58:53 CDT 2012


<quote>
RFC3262

 7.1 RSeq

   The RSeq header is used in provisional responses in order to transmit
   them reliably.  It contains a single numeric value from 1 to 2**32 -
   1.  For details on its usage, see Section 3.
</quote>

Using '%d' would show these numbers as negative numbers, should it be
possible for rseqno get to 1**31.

In other words. Rseqno, their-rseqno and possiblty others need to be defined
as a uint32_t and use '%u' instead of '%d' to print the value.

This is for the same reasons as 'seqno' and it's friends are defined as
uint32.

Alec

> -----Original Message-----
> From: asterisk-dev-bounces at lists.digium.com 
> [mailto:asterisk-dev-bounces at lists.digium.com] On Behalf Of 
> Olle E. Johansson
> Sent: Wednesday, 4 July 2012 8:10 p.m.
> To: Pavel Troller; Asterisk Developers Mailing List
> Subject: Re: [asterisk-dev] Testers wanted - PRACK for 1.8
> 
> 
> 4 jul 2012 kl. 05:50 skrev Pavel Troller:
> 
> > Hi!
> >  Is it possible to get a patch based on 1.8 branch instead 
> of the full tree? I would like to test it on the SIP trunk 
> against Nortel's CallServer 2000, which prefers 100rel 
> support, but my source tree is highly customized and I cannot 
> easily adapt another tree without spending too much time on it :-(.
> You can just do a diff with 1.8 or any 1.8 release yourself 
> with svn :-)
> 
> I just added a patch to the /patches directory in 
> http://svnview.digium.com/svn/asterisk/team/oej/darjeeling-pra
ck-1.8/patches/darjeeling-prack-1.8.diff
> 
> Looking forward to your feedback.
> 
> /Olle
> 
> >    Regards, Pavel
> > 
> >> http://svn.digium.com/svn/asterisk/team/oej/darjeeling-prack-1.8
> >> 
> >> As far as I can see from tests with various phones this 
> implementation of SIP PRACK - or "100rel" seems to work now. 
> All you have to do is to add prack=yes to sip.conf (general 
> or per-device) and Asterisk will start playing the PRACK game.
> >> 
> >> Feedback from tests is always welcome!
> >> 
> >> Regards,
> >> /Olle
> >> 
> >> ========== README.darjeeling ===============================
> >> 
> >> Edvina AB
> >> Olle E. Johansson
> >> 
> >> 
> >> Project started: 2012-06-15
> >> 
> >> 
> >> 
> >> 
> >> 
> >> Darjeeling-prack-1.8
> >> --------------------
> >> 
> >> This branch will implement PRACK in the SIP stack of Asterisk.
> >> 
> >> PRACK stands for reliable unreliable provisional responses.
> >> 
> >> In SIP, the provisional responses are often sent over UDP, which 
> >> means that they can get lost. Some of them are retransmitted every 
> >> minute (to get at least one through once during a three 
> minute period 
> >> following RFC 3261). For some messages, it's important 
> that they get 
> >> through immediately. Like if you want to play a message to 
> the customer that his call will be cancelled due to lack of 
> funds in his account.
> >> 
> >> PRACK adds a retransmit and ACK mechanism to the 1xx messages 
> >> excluding 100 (since it's transmitted hop-by-hop).
> >> 
> >> Configuration
> >> =============
> >> Add prack=yes in the [general] section of sip.conf or in 
> device configurations. 
> >> Asterisk will now add 100rel to the list of supported 
> options. If the 
> >> other device supports PRACK Asterisk will activate it or 
> support it 
> >> if the other side requires it.
> >> There's currently no support for requiring PRACK in a call.
> >> 
> >> 
> >> Technichal details
> >> ==================
> >> 
> >> If the INVITE contains
> >> 	Supported: 100rel
> >> 
> >> then the 1xx answer can add 
> >> 	Require: 100rel
> >> 	Rseq: 	42
> >> 
> >> The Rseq is the PRACK sequence number The caller then needs to 
> >> confirm the message with a new request, during the INVITE 
> transaction
> >> 	PRACK
> >> 	RAck: 	42	<cseq #> <cseq method>
> >> 
> >> And the callee confirms this (and close the PRACK 
> transaction) with a 200 OK.
> >> 
> >> If the PRACK is not received in time, the 1xx response 
> will be retransmitted.
> >> There can only be ONE outstanding PRACK, which makes it easier to 
> >> integrate in the Asterisk SIP stack that unfortunately 
> lacks a transaction layer.
> >> 
> >> PRACK is documented in RFC 3262.
> >> 
> >> Retransmission works like the retransmission of responses 
> to INVITE (like the 200 OK).
> >> It starts with T1 and doubles for each retransmission. 
> Unlike INVITE 
> >> responses, the retransmission timer does not cap at T2.
> >> 
> >> If retransmission times out, a 5xx message should 
> terminate the INVITE transaction.
> >> 
> >> 
> >> A PRACK received that does not match existing SIP_PVT is 
> responded to with 481.
> >> 
> >> * When to stop?
> >> ---------------
> >>> From the RFC: 
> >> "The UAS MAY send a final response to the initial request before 
> >> having received PRACKs for all unacknowledged reliable provisional 
> >> responses, unless the final response is 2xx and any of the 
> >> unacknowledged reliable provisional responses contained a session 
> >> description. In that case, it MUST NOT send a final response until 
> >> those provisional responses are acknowledged. If the UAS 
> does send a 
> >> final response when reliable responses are still 
> unacknowledged, it 
> >> SHOULD NOT continue to retransmit the unacknowledged 
> reliable provisional responses, but it MUST be prepared to 
> process PRACK requests for those outstanding responses. A UAS 
> MUST NOT send new reliable provisional responses (as opposed 
> to retransmissions of unacknowledged ones) after sending a 
> final response to a request"
> >> 
> >> * Receive in order until final response
> >> ---------------------------------------
> >> "Handling of subsequent reliable provisional responses for 
> the same 
> >> initial request follows the same rules as above, with the 
> following 
> >> difference: reliable provisional responses are guaranteed to be in 
> >> order. As a result, if the UAC receives another reliable 
> provisional 
> >> response to the same request, and its RSeq value is not one higher 
> >> than the value of the sequence number, that response MUST 
> NOT be acknowledged with a PRACK, and MUST NOT be processed 
> further by the UAC. An implementation MAY discard the 
> response, or MAY cache the response in the hopes of receiving 
> the missing responses.
> >> The UAC MAY acknowledge reliable provisional responses 
> received after 
> >> the final response or MAY discard them."
> >> 
> >> * When do the call begin?
> >> -------------------------
> >> A corner case that I don't know if it's implemented: If we receive 
> >> and INVITE without SDP, we MUST add SDP offer to the 
> reliable answer 
> >> and the caller must add an SDP answer to the PRACK. This 
> means that the session begins in the middle of the INVITE transaction.
> >> "Once an answer has been sent or received, the UA SHOULD establish 
> >> the session based on the parameters of the offer and 
> answer, even if 
> >> the original INVITE itself has not been responded to." (section 5)
> >> 
> >> * Security
> >> ----------
> >> "The PRACK request can be injected by attackers to force 
> >> retransmissions of reliable provisional responses to 
> cease. As these 
> >> responses can convey important information, PRACK messages 
> SHOULD be 
> >> authenticated as any other request." (section 9)
> >> 
> >> Todo
> >> ----
> >> * Add PRACK to the list of supported headers
> >> 	- done
> >> * Should we be able to REQUIRE prack? Based on what? 
> _SIPREQUIREPRACK ?
> >> 	- not now
> >> * PRACK enabled globally and per device - user and peer
> >> 	- done
> >> * PRACK working when Asterisk is the UAS
> >> 	- done
> >> * PRACK working when Asterisk is the UAC
> >> 	- done
> >> * PRACK with authentication
> >> 	- not done
> >> * Requesting auth for PRACK
> >> 	- not done
> >> * PRACK in "sip show settings"
> >> 	- done
> >> * PRACK in "sip show peer xxx"
> >> 	- done
> >> * PRACK in "sip show channel xxx"
> >> 	- done
> >> 
> >> ---------------------
> >> The patch is (C) Copyright by Edvina AB, Sollentuna, Sweden. 
> >> Developed by Olle E. Johansson, oej at edvina.net
> >> --
> >> 
> _____________________________________________________________________
> >> -- Bandwidth and Colocation Provided by 
> http://www.api-digital.com --
> >> 
> >> asterisk-dev mailing list
> >> To UNSUBSCRIBE or update options visit:
> >>   http://lists.digium.com/mailman/listinfo/asterisk-dev
> > 
> > --
> > 
> _____________________________________________________________________
> > -- Bandwidth and Colocation Provided by 
> http://www.api-digital.com --
> > 
> > asterisk-dev mailing list
> > To UNSUBSCRIBE or update options visit:
> >   http://lists.digium.com/mailman/listinfo/asterisk-dev
> 
> ---
> * Olle E Johansson - oej at edvina.net
> * Cell phone +46 70 593 68 51, Office +46 8 96 40 20, Sweden
> 
> 
> 
> 
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
> 
> asterisk-dev mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-dev
> 




More information about the asterisk-dev mailing list