[OpenSIPS-Users] sst causes unnecessary 422s
Jeff Pyle
jpyle at fidelityvoice.com
Tue Apr 28 15:13:04 CEST 2009
Hi Bogdan,
Here's the call flow:
Adtran CPE gateway (no timer support)
|
V
Opensips 1.4.4 with SST (P1)
|
V
Opensips 1.5.x with SST (P2)
|
V
PSTN carrier
The INVITE arrives at P1 from the CPE gateway. The CPE has no timer
support, so no SE or Min-SE. P1's SST is configured like this:
loadmodule "sst.so"
modparam("sst", "timeout_avp", "$avp(s:sst_timeout)")
modparam("sst", "sst_flag", 5)
modparam("sst", "enable_stats", 1)
modparam("sst", "min_se", 2400)
Because of this, P1 appends an SE of 2400 to the INVITE before forwarding to
P2. P2's SST is configured like this:
loadmodule "sst.so"
modparam("sst|dialog", "timeout_avp", "$avp(s:sst_timeout)")
modparam("sst", "sst_flag", 6)
modparam("sst", "enable_stats", 1)
modparam("sst", "min_se", 1800)
modparam("sst", "reject_to_small", 1)
The INVITE that arrives at P2 does not have a Min-SE header. The original
CPE doesn't support the timer at all, and P1 did not append one.
This confuses me some. Given the behavior of Opensips, it seems impossible
to configure two SST-enabled proxies one behind the other, unless the second
proxy runs a Min-SE of 90. I'm sure I've missed something. Or, should
Opensips (P1 in this case) append a Min-SE header as well?
Changing subjects slightly, is it possible to modify Opensips' SE value in a
failure route processing a 422 failure? If Opensips receives a 422, I'd
like to be able to re-send the INVITE after adjusting the SE/Min-SE per the
Min-SE in the 422. If this is possible, perhaps it is also possible to
select the SE/Min-SE in the request route? I'd like to run a SE of 240, but
one of my carriers requires no smaller than 1800. I'd love to be able to
set the SE to 1800 only when serial forking is about to send a request to
that carrier.
Thanks,
Jeff
On 4/28/09 8:13 AM, "Bogdan-Andrei Iancu" <bogdan at voice-system.ro> wrote:
> Hi Jeff,
>
> Could you post the INVITE that gets the 422 ? Does it contain a min-se
> header? If not, according to the RFC, the default min-se is 90 (from the
> request) and the server has min-se 1800 -> this is why you get the 422.
>
> Regards,
> Bogdan
>
>
>
> Jeff Pyle wrote:
>> Hello,
>>
>> I noticed today that if a packet comes into the proxy with a Session-Expires
>> header, it get's 422'ed. Period. Unfortunately the proxy that is doing
>> this has real users on it I cannot take down at the moment, so debugging is
>> limited during the day. It is Opensips 1.5 build revision 5641.
>>
>> Here's what I can tell you:
>>
>> loadmodule "sst.so"
>> modparam("sst|dialog", "timeout_avp", "$avp(s:sst_timeout)")
>> modparam("sst", "sst_flag", 6)
>> modparam("sst", "enable_stats", 1)
>> modparam("sst", "min_se", 1800)
>> modparam("sst", "reject_to_small", 1)
>>
>> and...
>>
>> if (is_method("INVITE")) {
>> if (sstCheckMin("1")) {
>> xlog("L_INFO", "SST too short - M=$rm RURI=$ru F=$fu T=$tu
>> IP=$si ID=$ci\n");
>> exit;
>> }
>>
>> // continue call processing...
>> }
>>
>> ... in route[0].
>>
>> This xlog trips on an invite that has:
>> Session-Expires: 2400
>>
>> and then sends back a 422 that has:
>> MIN-SE: 1800
>>
>> I looked at sst_handlers.c, and it seems to make sense to me, but
>> unfortunately my C skills aren't even a B.
>>
>> Any assistance would be most appreciated.
>>
>>
>> Thanks,
>> Jeff
>>
More information about the Users
mailing list