Hi Bogdan, Not 100% sure since I haven't tested with 1.2.2 and uac_replace_from() NOT being called indirectly from branch_route.
What I can tell though is that with 1.3.1 and calling uac_replace_from from request_route, it works as expected. Thanks for clarification, Andreas Bogdan-Andrei Iancu wrote: > Hi Andreas, > > I guess this is also related to the improper usage of uac_replace_from() > from branch route, right? > > Regards, > Bogdan > > > Andreas Granig wrote: >> Hi again, >> >> This problem actually applies to the ACK for the 487 if the CANCEL as >> well, and there it's even worse. >> >> RFC3261 says in 17.1.1.3: >> The ACK request constructed by the client transaction MUST contain >> values for the Call-ID, From, and Request-URI that are equal to the >> values of those header fields in the request passed to the transport >> by the client transaction >> >> On the other hand, in 17.2.3 it says regarding server transaction >> matching: >> The ACK request matches a transaction if the Request- >> URI, From tag, Call-ID, CSeq number (not the method), and top Via >> header field match those of the INVITE request which created the >> transaction, and the To tag of the ACK matches the To tag of the >> response sent by the server transaction. >> >> Now if for some reason, the UAC in this case is OpenSER and the UAS is >> a server which not only compares the From tag, but the overall >> From-Header (like the Cisco PGW in version 9.6 seems to do), then both >> of the parties don't behave correctly, and it's a little bit hard to >> argue with vendors who has to move now. >> >> The real problem I have now is that for the CANCEL I can at least >> manually replace From, but for ACK, OpenSER refuses to do so. In >> "auto" mode, uac_replace_from bails out with "ERROR:uac:replace_from: >> decline FROM replacing in sequential request in auto mode (has TO >> tag)". In "manual" mode, it doesn't complain, but the From still isn't >> replaced, and also an ugly hack like "remove_hf("From"); >> insert_hf("From: $var(my_from_hdr)\r\n", "To");" has no effect. >> >> Any advice, since 1.3.1 doesn't seem to help also? >> >> Andreas >> >> >> Bai Shi wrote: >>> Hi Andreas, >>> I called without any branches. >>> >>> Bogdan, I'd appreciate if you can spare sometime to look at this again. >>> Rgds, >>> Bai Shi >>> >>> -----Original Message----- >>> From: Andreas Granig [mailto:[EMAIL PROTECTED] Sent: 2008年3月20日 >>> 1:34 >>> To: Bogdan-Andrei Iancu >>> Cc: Bai Shi; Thomas Gelf; [EMAIL PROTECTED] >>> Subject: Re: [OpenSER-Users] uac_replace_from and CANCEL >>> >>> Or, to be more specific, I call it from a route which is called by a >>> branch_route. Not sure if that matters. >>> >>> Andreas >>> >>> Andreas Granig wrote: >>>> Bogdan, >>>> >>>> I just tested with 1.3.1, and there the From of the CANCEL is also >>>> NOT updated. A probably not so unimportant side-note is that I call >>>> uac_replace_from() from a branch_route. >>>> >>>> Andreas >>>> >>>> Bogdan-Andrei Iancu wrote: >>>>> Hi Bai Shi, >>>>> >>>>> I just tested (to be sure no bugs are present) and in 1.3, the >>>>> CANCELs are automatically updated (the FROM header), as expected. >>>>> >>>>> Regards, >>>>> Bogdan >>>>> >>>>> Bai Shi wrote: >>>>>> Hi, Thomas, >>>>>> This will do in openser 1.2, however, in openser 1.3 it won't do >>>>>> any help. The CANCEL will be sent out regardless what you have >>>>>> done to the request, but follow the information in the original >>>>>> INVITE. I tested it and suffered a lot ;( >>>>>> Rgds, >>>>>> BS >>>>>> >>>>>> -----Original Message----- >>>>>> From: [EMAIL PROTECTED] >>>>>> [mailto:[EMAIL PROTECTED] On Behalf Of Andreas Granig >>>>>> Sent: 2008年3月13日 2:54 >>>>>> To: Thomas Gelf >>>>>> Cc: [EMAIL PROTECTED] >>>>>> Subject: Re: [OpenSER-Users] uac_replace_from and CANCEL >>>>>> >>>>>> Hi Thomas, >>>>>> >>>>>> Yes, I'm doing it that way now (without that "append_branch()" >>>>>> though), but if you have an uuid-based setup where you fetch the >>>>>> uuid from the subscriber table during authentication of the INVITE >>>>>> and then with that uuid fetch dynamic data from the >>>>>> usr_preferences table to be used for "uac_rewrite_host()", then >>>>>> you have to do some work-arounds and hacks to get that data for >>>>>> the CANCEL as well, which could be quite a pain. >>>>>> >>>>>> So yes, it would be really great if this could be done >>>>>> automatically *hint hint* :) >>>>>> >>>>>> Andreas >>>>>> >>>>>> Thomas Gelf wrote: >>>>>> >>>>>>> Applying uac_replace_from() to the CANCEL request should do the job, >>>>>>> it sadly doesn't happen automagically :'-( >>>>>>> >>>>>>> Try something like: >>>>>>> >>>>>>> if(is_method("CANCEL") && uri =~ "^sip:...") >>>>>>> { >>>>>>> if(t_check_trans()) >>>>>>> { >>>>>>> rewritehostport("..."); >>>>>>> uac_replace_from("..."); >>>>>>> append_branch(); >>>>>>> } >>>>>>> if(!t_relay()) >>>>>>> { >>>>>>> sl_reply_error(); >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> Cheers, >>>>>>> Thomas Gelf >>>>>>> >>>>>>> Andreas Granig schrieb: >>>>>>>> Hi, >>>>>>>> >>>>>>>> I hit another problem with a Cisco PGW in combination with >>>>>>>> CANCEL, and I'm not sure which fault it is. If I do >>>>>>>> uac_replace_from in the INVITE, the From-Header is altered >>>>>>>> somehow and sent to the PGW. So if A calls B where B is a PGW, >>>>>>>> the From from A to OpenSER is for example sip:[EMAIL PROTECTED] and >>>>>>>> from OpenSER to B it's sip:[EMAIL PROTECTED] >>>>>>>> >>>>>>>> If the call is cancelled, the From-header isn't altered, so the >>>>>>>> From from A to OpenSER is sip:[EMAIL PROTECTED] and from OpenSER to B >>>>>>>> it's sip:[EMAIL PROTECTED] as well. >>>>>>>> >>>>>>>> Now the PGW seems to ignore this CANCEL, and I guess it's >>>>>>>> because of the different From-usernames, since it works if I >>>>>>>> don't do any uac_replace_from. >>>>>>>> >>>>>>>> RFC3261 says in §9.1: >>>>>>>> The Request-URI, Call-ID, To, the numeric part of CSeq, and From >>>>>>>> header >>>>>>>> fields in the CANCEL request MUST be identical to those in the >>>>>>>> request being cancelled, including tags. >>>>>>>> >>>>>>>> So is it correct behavior of the PGW because the From header in >>>>>>>> the CANCEL is different from the From header in the INVITE? >>>>>>>> Should OpenSER alter the From in the CANCEL as well? Or should >>>>>>>> the PGW just check the From tags, but not the From URI? >>>>>>>> >>>>>>>> Andreas >>>>>>>> >>>>>>> _______________________________________________ >>>>>>> Users mailing list >>>>>>> Users@lists.openser.org >>>>>>> http://lists.openser.org/cgi-bin/mailman/listinfo/users >>>>>> _______________________________________________ >>>>>> Users mailing list >>>>>> Users@lists.openser.org >>>>>> http://lists.openser.org/cgi-bin/mailman/listinfo/users >>>>>> >>>>>> _______________________________________________ >>>>>> Users mailing list >>>>>> Users@lists.openser.org >>>>>> http://lists.openser.org/cgi-bin/mailman/listinfo/users >> > _______________________________________________ Users mailing list Users@lists.openser.org http://lists.openser.org/cgi-bin/mailman/listinfo/users