<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">I see. If that is your need then you will get a new tag. As far as I know it would be a feature enhancement to change that behavior, though someone from OpenSIPS team may need to check me on that. It is operating within the RFC for this
 [1]:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When the proxy is aggregating information from several<o:p></o:p></p>
<p class="MsoNormal">responses, choosing a To tag from among them is arbitrary, and<o:p></o:p></p>
<p class="MsoNormal">generating a new To tag may make debugging easier.  This<o:p></o:p></p>
<p class="MsoNormal">happens, for instance, when combining 401 (Unauthorized) and<o:p></o:p></p>
<p class="MsoNormal">407 (Proxy Authentication Required) challenges, or combining<o:p></o:p></p>
<p class="MsoNormal">Contact values from unencrypted and unauthenticated 3xx<o:p></o:p></p>
<p class="MsoNormal">responses.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Receiving a final reply with a different To tag than a provisional reply is allowed and must be handled by Server A in order to accommodate SIP forking of messages. Server A is operating out of spec by refusing to accept the final reply
 because of the different To tag. The tags are only used to uniquely identify a Dialog, and the 183 response does not establish a dialog, nor does a 4xx response. [2]<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The forking of SIP requests means that multiple dialogs can <o:p>
</o:p></p>
<p class="MsoNormal">be established from a single request.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[1] - <a href="https://tools.ietf.org/html/rfc3261#section-16.7">
https://tools.ietf.org/html/rfc3261#section-16.7</a><br>
[2] - <a href="https://tools.ietf.org/html/rfc3261#section-19.3">https://tools.ietf.org/html/rfc3261#section-19.3</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:black">Ben Newlin </span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Users <users-bounces@lists.opensips.org> on behalf of Yury Kirsanov <y.kirsanov@gmail.com><br>
<b>Reply-To: </b>OpenSIPS users mailling list <users@lists.opensips.org><br>
<b>Date: </b>Thursday, March 26, 2020 at 10:25 AM<br>
<b>To: </b>OpenSIPS users mailling list <users@lists.opensips.org><br>
<b>Subject: </b>Re: [OpenSIPS-Users] Issue with 'To' tag and t_reply<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The problem is that I need to go through a list of SIP servers, analyze response of each of them and if it's an error like 4XX, 5XX or 6XX I need to send appropriate response to originating server. Let's say I'm not only adding a Reason
 field but upon receipt of 404 Not Found I want to respond with 480 Temporarily Unavailable with Reason: Q.850;Cause=41 for example? But Server B first replied with 183 Session Progress playing back a message 'Sorry, you need to top up your account' and then
 replied with SIP 402 Payment Required. I had to proxy 183 Session Progress back to Server A so its SIP client could hear that message and then I'd like to signal 480 Temporarily Unavailable - but I can't as OpenSIPS is using completely different To tag.
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I can't do this in onreply_route as I'm going through a list of SIP servers (upstreams or downstreams), so it definitely needs to be done from failure route, as far as I understand, and yes, I'm matching against 4XX, 5XX and 6XX codes and
 I need to reply with 480 Temporarily Unavailable in most cases so Server A would have a possibility to do failover to any other server in that case. I don't want to just proxy 4XX, 5XX or 6XX response to it.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I've figured out why I have two 404 responses in my original call log - I was using sl_send_reply instead of t_reply and it was using original To tag but only on second attempt.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Yury.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">пт, 27 мар. 2020 г. в 01:02, Yury Kirsanov <<a href="mailto:y.kirsanov@gmail.com">y.kirsanov@gmail.com</a>>:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Hi, <o:p></o:p></p>
<div>
<p class="MsoNormal">As per my original email:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">1. I was doing exactly as you suggested, in failure_route I'm using t_reply("404","Not Found") and it comes out with a wrong To: tag.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">2. I don't need to proxy response from server B, I need to analyze its response and send a response to server A according to my needs.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Currently it seems that t_reply is not using same To tag if 183 Session Progress has been proxied, which is strange as I have dialog running.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Yury.<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">чт, 26 мар. 2020 г. в 19:13, Yury Kirsanov <<a href="mailto:y.kirsanov@gmail.com" target="_blank">y.kirsanov@gmail.com</a>>:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<p class="MsoNormal">Hi, <o:p></o:p></p>
<div>
<p class="MsoNormal">I'm using an OpenSIPS as a proxy between two servers. First one is sending SIP INVITE to OpenSIPS, then OpenSIPS forwards request to second server. I'm creating a dialog on initial INVITE. Second server then replies with SIP 183 Session
 Progress, plays back a message and then responds with 4XX code, for example SIP 404 Not Found (indicating that number dialed is disconnected). In OpenSIPS I'm receiving that reply and in failure_route I'd like to change that code to a bit different SIP 404,
 so I'm using following code:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">append_to_reply("Reason: Q.850;cause=1");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">t_reply("404","Not Found");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">exit;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">But in this case I can see that OpenSIPS generates additional branch (??? not sure here) with different "To" tag and pushes it out and then forwards original reply SIP packet even though I have an exit statement in my failure_route. I tried
 to do sl_send_reply and behavior is pretty much the same. Can someone let me know what I may be doing wrong? I need correct "To" tag to be used (based on 183 Session Progress message from server B and passed to server A previously) and second 404 shouldn't
 be forwarded out.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Here's an example of a call with my explanations<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Initial invite from server A, no 'to tag' as expected:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">INVITE sip:XXXXXXXXX@B.B.B.B SIP/2.0<br>
Max-Forwards: 67<br>
To: "XXXXXXXXX" <sip:XXXXXXXXX@B.B.B.B><br>
Call-ID: 469A5568-E092-4038-B1B8-13AC9B9571CA<br>
Via: SIP/2.0/UDP A.A.A.A:5060;rport;branch=z9hG4bK773616538<br>
From: "YYYYYYYYY" <sip:YYYYYYYYY@A.A.A.A>;tag=117583367<br>
CSeq: 1741310 INVITE<br>
User-Agent: User Agent<br>
Contact: <sip:YYYYYYYYY@A.A.A.A:5060><br>
Allow: ACK, INVITE, BYE, CANCEL, REGISTER, REFER, OPTIONS, INFO, SUBSCRIBE, NOTIFY<br>
Date: Thu, 26 Mar 2020 07:54:55 GMT<br>
Content-Type: application/sdp<br>
Content-Length: 250<br>
<br>
v=0<br>
o=dcom 1585209295 1585209295 IN IP4 A.A.A.A<br>
s=SIP Call<br>
c=IN IP4 A.A.A.A<br>
t=0 0<br>
m=audio 15340 RTP/AVP 8 0 18 101<br>
a=rtpmap:8 PCMA/8000<br>
a=rtpmap:0 PCMU/8000<br>
a=rtpmap:18 G729/8000<br>
a=fmtp:18 annexb=no<br>
a=rtpmap:101 telephone-event/8000<br>
<br>
Response from OpenSIPS:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><br>
SIP/2.0 100 Giving a try<br>
To: "XXXXXXXXX" <sip:XXXXXXXXX@B.B.B.B><br>
Call-ID: 469A5568-E092-4038-B1B8-13AC9B9571CA<br>
Via: SIP/2.0/UDP A.A.A.A:5060;received=A.A.A.A;rport=5060;branch=z9hG4bK773616538<br>
From: "YYYYYYYYY" <sip:YYYYYYYYY@A.A.A.A>;tag=117583367<br>
CSeq: 1741310 INVITE<br>
Server: Server Signature<br>
Content-Length: 0<br>
<br>
OpenSIPS has forwarded packet to Server B and Server B responded with 183 and assigned a 'To' tag:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><br>
SIP/2.0 183 Session Progress<br>
Via: SIP/2.0/UDP A.A.A.A:5060;received=A.A.A.A;rport=5060;branch=z9hG4bK773616538<br>
Call-ID: 469A5568-E092-4038-B1B8-13AC9B9571CA<br>
From: "YYYYYYYYY" <sip:YYYYYYYYY@A.A.A.A>;tag=117583367<br>
To: "XXXXXXXXX" <sip:XXXXXXXXX@B.B.B.B>;<b><span style="font-size:13.5pt;color:red">tag=0b49dc32-2c4b-413e-a349-c781a23d53b9</span></b><br>
CSeq: 1741310 INVITE<br>
Server: PBX<br>
Contact: <sip:B.B.B.B;did=d0a.99678f73><br>
Allow: OPTIONS, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REFER<br>
Content-Type: application/sdp<br>
Content-Length: 354<br>
<br>
v=0<br>
o=- 1585209295 1585209297 IN IP4 B.B.B.B<br>
s=Asterisk<br>
c=IN IP4 B.B.B.B<br>
t=0 0<br>
a=rtpengine:673f999268ae<br>
m=audio 32386 RTP/AVP 0 8 18 101<br>
a=maxptime:150<br>
a=rtpmap:0 PCMU/8000<br>
a=rtpmap:8 PCMA/8000<br>
a=rtpmap:18 G729/8000<br>
a=rtpmap:101 telephone-event/8000<br>
a=fmtp:18 annexb=no<br>
a=fmtp:101 0-16<br>
a=sendrecv<br>
a=rtcp:32387<br>
a=ptime:20<br>
<br>
Server B responds with SIP 404 after playing back message that number is disconnected and I'm trying to reply to server A with custom Reason message. To_tag is completely different from the To tag that has been passed to server A after initial 183!!!<br>
<br>
SIP/2.0 404 Not Found<br>
To: "XXXXXXXXX" <sip:XXXXXXXXX@B.B.B.B>;<b><span style="font-size:13.5pt;color:blue">tag=a976.21514595b467be41a9b712a6b0b621d9</span></b><br>
Call-ID: 469A5568-E092-4038-B1B8-13AC9B9571CA<br>
Via: SIP/2.0/UDP A.A.A.A:5060;received=A.A.A.A;rport=5060;branch=z9hG4bK773616538<br>
From: "YYYYYYYYY" <sip:YYYYYYYYY@A.A.A.A>;tag=117583367<br>
CSeq: 1741310 INVITE<br>
Reason: Q.850;cause=1;text="Number is disconnected"<br>
Server: Server Signature<br>
Content-Length: 0<br>
<br>
Of course, server A just ignores this message as it can't match 'To' tag to its transaction. Now, for some reason, OpenSIPS forwards original reply from Server B to Server A with the same 'To' tag as in 183 Session Progress:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">SIP/2.0 404 Not Found<br>
Via: SIP/2.0/UDP A.A.A.A:5060;received=A.A.A.A;rport=5060;branch=z9hG4bK773616538<br>
Call-ID: 469A5568-E092-4038-B1B8-13AC9B9571CA<br>
From: "YYYYYYYYY" <sip:YYYYYYYYY@A.A.A.A>;tag=117583367<br>
To: "XXXXXXXXX" <sip:XXXXXXXXX@B.B.B.B>;<b><span style="font-size:13.5pt;color:red">tag=0b49dc32-2c4b-413e-a349-c781a23d53b9</span></b><br>
CSeq: 1741310 INVITE<br>
Server: PBX<br>
Allow: OPTIONS, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, REFER<br>
Reason: Q.850;cause=1<br>
Content-Length:  0<br>
<br>
And at this point Server A can match this reply and responds with an ACK:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><br>
ACK sip:XXXXXXXXX@B.B.B.B SIP/2.0<br>
Via: SIP/2.0/UDP A.A.A.A:5060;rport;branch=z9hG4bK773616538<br>
From: "YYYYYYYYY" <sip:YYYYYYYYY@A.A.A.A>;tag=117583367<br>
To: "XXXXXXXXX" <sip:XXXXXXXXX@B.B.B.B>;<b><span style="font-size:13.5pt;color:red">tag=0b49dc32-2c4b-413e-a349-c781a23d53b9</span></b><br>
Call-ID: 469A5568-E092-4038-B1B8-13AC9B9571CA<br>
CSeq: 1741310 ACK<br>
Max-Forwards: 67<br>
Contact: <sip:YYYYYYYYY@A.A.A.A:5060><br>
User-Agent: User Agent<br>
Content-Length: 0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I think that t_reply is creating a new transaction instead of using existing one, but I'm not sure why and how to fix this?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Best regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Yury.<o:p></o:p></p>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</body>
</html>