Hi Carsten,

No, I didn't.  It didn't occur to me that this function calibrates the dialog 
scope of the next call, which is the missing ingredient inside a reply handler 
that is armed out of a more general, global event route. Thank you for this!

-- Alex

> On Nov 14, 2024, at 3:52 pm, Carsten Bock <[email protected]> wrote:
> 
> Hi,
> 
> Did you try to lookup the dialog[1] before calling dlg_req_within()?
> 
> [1] 
> https://kamailio.org/docs/modules/devel/modules/dialog.html#dialog.f.dlg_get
> 
> Thanks,
> Carsten 
> 
> --
> Schöne Grüße aus Hamburg, dem Tor zur Welt,
> Carsten Bock
> 
> Baron-Voght-Str. 128a I 22607 Hamburg I Germany
> T +49 179 2021244 I [email protected]
> LinkedIn: https://www.linkedin.com/in/carstenbock/
> 
> Alex Balashov via sr-users <[email protected]> schrieb am Do., 14. 
> Nov. 2024, 21:44:
> Hi,
> 
> I am trying to use dlg_req_within() for a 3pcc-style call setup, to set up 
> media via a reinvite:
> 
> 1. Store original SDP offer from caller in $dlg_var()s;
> 
> 2. Later, after e2e ACK is processed for initial INVITE transaction, send 
> reinvite to callee using dlg_req_within(). I call rtpengine_offer() and feed 
> it the original SDP offer (via read_sdp_pv modparam), and take the 
> RTPEngine-transformed SDP and feed that to dlg_req_within():
> 
>    dlg_req_within("callee", "INVITE", "application/sdp", 
> "$var(sdp_from_rtpengine)");
> 
> 3. I have found that event_route[tm:local-response] does not allow me to 
> capture the 200 OK / SDP answer to this reinvite; it is internally absorbed.
> 
> However, it is possible to arm an onreply_route in 
> event_route[tm:local-request], to receive the 200 OK:
> 
>    event_route[tm:local-request] {
>       if(method == "INVITE" && has_body("application/sdp")) 
>          t_on_reply("REINVITE_REPLY");
>    }
> 
> 4. My intent is for this reinvite reply handler to set off a reinvite to the 
> caller side:
> 
>    onreply_route[REINVITE_REPLY] {
>       if(method == "INVITE" && has_body("application/sdp") && 
> t_check_status("200")) {
>          ... 
>          $var(rtpengine_use_this_sdp) = $rb;
>          rtpengine_answer("...");
>          dlg_req_within("caller", "INVITE", "application/sdp", 
> "$var(sdp_from_rtpengine)");
>    }
> 
> This ensures proper relay symmetry. Otherwise, the caller will continue to 
> send RTP to the previous upstream endpoint of the call, prior to any 
> reinvite. 
> 
> However, dlg_req_within() doesn't work in this later context, even though the 
> documentation says it can be used from ANY_ROUTE. Kamailio doesn't complain, 
> there is no error. It just doesn't initiate a reinvite to the caller.
> 
> I considered the possibility that this may be because the calling scope is 
> that of a pending reinvite transaction to the callee, but there is no obvious 
> way to defer that into the future. If I send it to an async task worker, the 
> transaction scope required for dlg_req_within() to know which dialog it's 
> operating on will be lost. 
> 
> Any ideas appreciated, and thank you in advance!
> 
> -- Alex
> 
> -- 
> Alex Balashov
> Principal Consultant
> Evariste Systems LLC
> Web: https://evaristesys.com
> Tel: +1-706-510-6800
> 
> __________________________________________________________
> Kamailio - Users Mailing List - Non Commercial Discussions -- 
> [email protected]
> To unsubscribe send an email to [email protected]
> Important: keep the mailing list in the recipients, do not reply only to the 
> sender!

-- 
Alex Balashov
Principal Consultant
Evariste Systems LLC
Web: https://evaristesys.com
Tel: +1-706-510-6800

__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions -- 
[email protected]
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to