On 24 Apr 2023, at 16:17, Daniel-Constantin Mierla miconda@gmail.com wrote:
On 24.04.23 10:29, Olle E. Johansson wrote:
On 24 Apr 2023, at 10:02, Alex Balashov abalashov@evaristesys.com wrote:
On Apr 24, 2023, at 2:46 AM, Henning Westerholt hw@gilawa.com wrote:
Hello,
actually, this also documented in the kamailio modules readme:
https://kamailio.org/docs/modules/5.5.x/modules/rtpengine.html#rtpengine.f.r...
"- If reply to INVITE with code >= 300 do rtpengine_delete()"
Yeah, it is.
But what I think Benoît was really getting at is a question not addressed by the documentation or the source code: do I really want to 'delete' for _any_ >= 300 reply code, or are there corner cases, like 488 for a reinvite (where the standards say the call must continue according to previous parameters if a reinvite fails)? And if so, are there any others, or is 488 truly it?
Agree that the reinvite case is interesting, exactly because of the possible fallback to original state.
I guess there are a number of possible codes, like a timeout (408) or system problem (5xx) in addition to the “correct” code 488 where fallback could happen.
rtpengine_manage() should be used in failure_route only when knowing that the call is failing completely. In failure route it should not be used for the purpose of an offer, that is for branch_route usage. The rtpengine offer()/answer()/delete() functions are there to use when specific needs pop up.
Of course, then config conditions can be used to exclude cases as needed.
So how do we handle a reinvite that is not accepted and tell RTPengine to fall back?
Consider:
1. Successfull INVITE/200OK/ACK with alaw only - RTPengine setup and active 2. Re-invite with video added - RTP engine active with video 3. Re-invite denied with 488 - How do we tel RTPengine to skip video?
In many cases a re-invite is just hold/off hold or mute/off mute so it’s no problem, But if we have significant modification of media - ports, types and codecs (if RTPengine transcodes) a failed re-invite could be hurtful to the call. Unless there’s some code in RTPengine to handle this.
/O