Summary:ASTERISK-16516: SIP REFER auth fails, RTP timeout ignored, and other discrepancies between e/ingress calls
Reporter:Kirill Katsnelson (kkm)Labels:
Date Opened:2010-08-06 01:22:22Date Closed:
Versions:Frequency of
Environment:Attachments:( 0) 17805-issue-analysis.txt
Description:The following per-peer parameters in sip.conf are ignored for incoming calls, but applied correctly to outgoing calls:

auth= :: if incoming call is transferred by Transfer() dialplan application, user name and secret not used when constructing the digest in reply to the 407 response.

rtptimeout= :: overrides global value of the same for outgoing calls but not for incoming calls.


Dialog fields (sip_pvt) are set up by different functions in case of incoming and outgoing INVITEs: incoming dialog is set up in the function check_peer_ok(), and the outgoing one in create_addr_from_peer().

Some fields are set in one but not in another. In particular, the peerauth field is set only in create_addr_from_peer(), and that's the cause for REFER authentication failure. The field rtptimeout is set, and a whole block of RTP setup code is also only in  create_addr_from_peer(), and that is the reason for the second one.

I am attaching a file with the synopsys of dialog fields and set up functions called in both and in either of the two. An obvious fix would be to create a common set up function called from both; for someone who understands the code, that's a quarter-hour job. I am not qualified to tell which fields are not correctly set in each of the 2 functions, and which are left out by mistake. Hope my analysis would help someone in fixing that issue.
Comments:By: Leif Madsen (lmadsen) 2010-08-06 12:51:22

Oops, I switched this to IPv6 thinking you meant an IP address of :: -- too much IPv6 lately :)

By: Kirill Katsnelson (kkm) 2010-08-06 18:01:49

I am sorry, that's my bad -- I really chose a confusing separator symbol. No IPv6 around here...