Hi Mariana,
no, you do not need to create the INVITE trasaction in advance - do it
as usually : at the end, on t_relay(). Because if the INVITE transaction
does not exist (not yet relayed), the t_check_trans() for CANCEL will
fail and CANCEL will be dropped (not relayed). Only one of the following
retransmissions on the CANCEL will get relayed as soon as the INVITE
transaction is created.
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 01/09/2013 05:38 PM, Mariana Arduini wrote:
Hi Bogdan,
So I understand that the only way to recognize the transaction of a
CANCEL message received before relaying the INVITE is to create the
transaction using t_newtran() just after receiving the INVITE, but
this would affect some of our features.
In this case, we´ll have to work on the time our server is taking to
process the INVITE and make sure it won´t be stuck for too long
waiting for a DB query or something.
Thanks again for the kind help!
Regards,
Mariana.
On Wed, Jan 9, 2013 at 11:29 AM, Bogdan-Andrei Iancu
<[email protected] <mailto:[email protected]>> wrote:
Hi Mariana,
According to RFC3261, the CANCEL processing (as cancelling the
call) is not up to a proxy, but up to the end devices. So a proxy
has to simply relay all received info (INVITE and CANCEL) - it
cannot terminate the call by itself.
So you have to relay both INVITE and CANCEL and let the end device
to reject the call.
Regarding Flavio's suggestion - that function (as name says)
solves the problem only for the flags, but not for changes as
headers or SDP, AVPS, etc.
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 01/09/2013 02:31 PM, Mariana Arduini wrote:
Hi All!
Thank you both for the hints and explanation.
The retransmission of CANCEL messages would for sure be really
helpful, but we´d like to be able to handle cases where
processing the INVITE takes too long. If introducing some huge
delays in INVITE processing, OpenSIPS will relay it when the
processing finally ends, but UAC had already canceled it, so UAS
picks a dead call up.
Flavio´s suggestion looks interesting. I´m just wondering if
t_flush_flags() would update all kind of changes in the SIP
message. We perform lots of translations in headers and SDP and
not applying any of them would totally mess everything up. Any
idea of limitations?
I begin to think that including timeouts during INVITE processing
with smaller values than the previous hop fr_inv would be less
risky. I´d like to hear your oppinions.
Thanks again for the help!
Regards,
Mariana.
On Wed, Jan 9, 2013 at 9:54 AM, Bogdan-Andrei Iancu
<[email protected] <mailto:[email protected]>> wrote:
Hi Mariana,
If CANCEL hits opensips while the the INVITE is still under
processing (in a different process), the INVITE transaction
will not exist yet (it is created by t_relay), so the
t_check_trans() will return false -> script will exit without
doing anything for the CANCEL - more or less the CANCEL will
be dropped without being replied or fwded. This will force
retransmission of Cancel -> buying more time to finish the
processing of the INVITE.
Hope this helped.
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 01/08/2013 10:49 PM, Mariana Arduini wrote:
Hello all,
I hope somebody can give me a kind hint on what to do here.
We have this piece of code for CANCEL handling:
# CANCEL processing
if (is_method("CANCEL")) {
if (t_check_trans()) {
t_relay();
}
exit;
}
What happens is sometimes we take too long to process the
INVITE due to some DB issues, and the UAC sends us a CANCEL
before we relay the INVITE.
We don´t use t_newtran() because of this big warning in docs
saying that "the changes on the request that are made after
this function call will not be saved into transaction!!!".
We need to perform a lot of changes in the requests and I
understand this wouldn´t be possible after calling t_newtran().
So our transaction is not created untill we relay the
INVITE, which means that any CANCEL received before that
will be dropped.
We also tried testing the CANCEL messages we´re receiving in
these cases with has_totag() and loose_route(), but they
won´t pass as well.
Is there any way to verify a CANCEL message in this scenario
and relay it in case is belongs to a valid transaction?
Any help will be much appreciated.
Regards,
Mariana.
_______________________________________________
Users mailing list
[email protected] <mailto:[email protected]>
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users