<div dir="ltr">I created a dummy SDP to pass to RTPEngine using the optional body string "<b>body(string, optional) - used to provide a specific body to the rtpengine_* function. If this parameter is missing the body of the current message is used.</b>" and RTPengine was able to create the response SDP.  It did, however, show me that the ACK was still not being accepted from the original 200OK as I am now getting the ACK for both CSeq now.  So I have two issues, the ACK is not being accepted, and the no SDP on the late media INVITE.  Not sure what is the best way to handle the Late Media INVITE with RTPEngine as so far it has only worked when it receives an SDP.<div><br></div><div><br><div>This is the snippit of code that I am using for this and using the IP of the Opensips server and an arbitrary port in the SDP creation.</div><div><br><div>                $var(newbody) = "v=0\r\no=Opensips  1 IN IP4 10.255.100.147\r\ns=-\r\nc=IN IP4 10.255.100.147\r\nt=0 0\r\nm=audio 3140 RTP/AVP 0 101\r\na=sendrecv\r\<br>na=rtpmap:0 PCMU/8000\r\na=rtpmap:101 telephone-event/8000\r\na=fmtp:101 0-15\r\n";<br>                xlog("New body is $var(newbody)");<br>                create_dialog();<br>                rtpengine_offer("from-tag=$ft replace-session-connection trust-address replace-origin codec-strip-g729",,$var(body),$var(newbody));<br>                xlog("Body from RTPENGINE is $var(body)");<span class="gmail-im" style="color:rgb(80,0,80)"><br>                $json(reply) := $rtpquery;<br>                $var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local port);<br>                append_to_reply("Contact:<sip:$rU@$socket_in(ip):$socket_in(port);transport=udp;did=$DLG_did>\r\n");<br>                append_to_reply("Content-Type: application/sdp\r\n");<br></span>                xlog("Body is $var(body)");<br>                t_reply_with_body(200, "OK", $var(body));<br>                rtpengine_play_media("call-id=$ci from-tag=$ft file=/etc/rtpengine/unk_num.wav");<br>                async(sleep(10), after_media);<br></div></div><div><br></div><div>Here is the sngrep showing that first ACK is coming in with CSEQ 1 for example, Reinvite, 200OK and ack for CSEQ 2, then 200OK and ACK for CSEQ 1 then 200OK and ACK for CSEQ 2.  until it times out with the async(sleep(10), after_media);</div></div><div><br></div><div>Any help is appreciated</div><div><br></div><div>Thank you</div><div><br>Kevin</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 7, 2023 at 9:19 AM Kevin Kennedy <<a href="mailto:kennedy4260@gmail.com">kennedy4260@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Looks like in the debug it is not finding an SDP so it cant construct a response.  Is there a way to remedy this?<div><br></div><div>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:rtpengine:extract_body: No body found<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] ERROR:rtpengine:rtpengine_offer_answer_body: can't extract body from the message<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_headers: flags=40<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_to_param: tag=1985761840-1699375436084-<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_to_param: end of header reached, state=11<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:_parse_to: end of header reached, state=29<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:_parse_to: display={}, ruri={<a href="mailto:sip%3A%2B17024054893@10.20.252.101" target="_blank">sip:+17024054893@10.20.252.101</a>;user=phone}<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:rtpengine:rtpe_function_call: proxy reply: d7:createdi1699375436e10:created_usi125586e11:last signali1699375436e4:SSRCde4:tagsde6:totalsd3:RTPd7:packetsi0e5:bytesi0e6:errorsi0ee4:RTCPd7:packetsi0e5:bytesi0e6:errorsi0eee6:result2:oke<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_headers: flags=ffffffffffffffff<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:sipmsgops:remove_body_part_f: no body found<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_headers: flags=ffffffffffffffff<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:pv_get_msg_body: no message body<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] ERROR:core:get_cmd_fixups: Variable in param [3] is not a string<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] ERROR:core:do_action: Failed to get fixups for command <t_reply_with_body> in /etc/opensips/opensips.cfg, line 284<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:rtpengine:rtpe_function_call: proxy reply: d8:durationi10152e6:result2:oke<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:t_newtran: transaction on entrance=(nil)<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_headers: flags=ffffffffffffffff<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_headers: flags=78<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:t_lookup_request: start searching: hash=31608, isACK=0<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:matching_3261: RFC3261 transaction matching failed<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:t_lookup_request: no transaction found<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:run_any_trans_callbacks: trans=0x7f920581abe8, callback type 1, id 0 entered<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:core:parse_headers: flags=ffffffffffffffff<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:_reply_light: reply sent out. buf=0x7f92094d8218: SIP/2.0 1..., shmem=0x7f920581dfa8: SIP/2.0 1<br>Nov  7 11:43:56 lab-opensips opensips[4670]: Nov  7 11:43:56 [4670] DBG:tm:_reply_light: finished<br></div><div><br></div><div>Thank you.</div><div><br></div><div>Kevin</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 6, 2023 at 2:58 PM Kevin Kennedy <<a href="mailto:kennedy4260@gmail.com" target="_blank">kennedy4260@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I would like to clarify the issue in case its not 100% clear.<div>* Caller sends INVITE with No SDP(Late Media Invite) </div><div>* Another device in path (B2BUA) receives INVITE and sends dummy SDP to Opensips with just G.711 codec in the Offer  </div><div>* Opensips Creates Dialog and sends 200OK with SDP using t_reply_with_body based on previously provided information.</div><div>* B2BUA receives 200OK with SDP then sends ACK followed by a Re-INVITE with No SDP back to OpenSips.</div><div>* Opensips appears to accept the ACK as it doesn't retransmit the 200OK right away as before updated changes.</div><div>* Opensips sends 100 trying with new CSEQ from Re-INVITE with no SDP</div><div>* 200OK Loop created</div><div>    * Opensips send 200 OK with old CSEQ </div><div>    * B2BUA sends ACK with old CSEQ</div><div>* Call times out.</div><div><br></div><div>No audio sent</div><div><br></div><div>Thank you</div><div><br></div><div>Kevin.</div><div>* </div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 6, 2023 at 12:54 PM Kevin Kennedy <<a href="mailto:kennedy4260@gmail.com" target="_blank">kennedy4260@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I tried updating from Opensips 3.2 to Opensips 3.4.2 as I saw that there was some re-invite fixes.  Still doesn't seem to resolve this issue.  What am I missing to handle this correctly?<div><br></div><div>Thank you.</div><div><br></div><div>Kevin</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Nov 3, 2023 at 12:51 PM Kevin Kennedy <<a href="mailto:kennedy4260@gmail.com" target="_blank">kennedy4260@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Dmitry,<div>Thank you for your response, it does appear to work this way and is absorbing the ACK now, but when a Re-INVITE happens, it responds correctly with the updated Cseq in the 100 Trying, but the 200 OK (using the t_reply_with_body), still has the same Cseq as the initial INVITE.  How can I make adjustments for this?<div><br></div><div>Thank you.</div><div><br></div><div>Kevin</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Nov 3, 2023 at 5:10 AM Dmitry Ponomaryov <<a href="mailto:iamhalje@gmail.com" target="_blank">iamhalje@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">It turns out that this is no early_media, there were simply successful <br>
attempts with 183 Session Progress, which is why there was such a <br>
misunderstanding, I’ll attach the snippet code again in plain text: <br>
route { if (is_method("INVITE")) { create_dialog(); route(media); exit; <br>
} } route[media] { if (has_body("application/sdp")) { rtpengine_offer(); <br>
} $json(reply) := $rtpquery; <br>
$var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local port); <br>
remove_body_part(); append_to_reply("Contact: <br>
<sip:$rU@$socket_in(ip):$socket_in(port);transport=udp;did=$DLG_did>\r\n"); <br>
append_to_reply("Content-Type: application/sdp\r\n"); $var(body) = <br>
$(rb{re.subst,/(IP4.).*/\1$socket_in(ip)/g}); $var(body) = <br>
$(var(body){re.subst,/(audio.)...../\1$var(port)/g}); <br>
t_reply_with_body(200, "OK", $var(body)); <br>
rtpengine_play_media("call-id=$ci from-tag=$ft <br>
file=/etc/rtpengine/media.wav"); async(sleep(10), after_media); } <br>
route[after_media] { if (t_was_cancelled()) { rtpengine_delete(); exit; <br>
} else { rtpengine_delete(); sl_send_reply(486,"Busy here"); exit; } }<br>
<br>
and pined previous posts below :)<br>
<br>
> ----------------------------------------------------------------------<br>
> Message: 2<br>
> Date: Fri, 3 Nov 2023 16:00:22 +0500<br>
> From: Dmitry Ponomaryov<<a href="mailto:iamhalje@gmail.com" target="_blank">iamhalje@gmail.com</a>><br>
> <a href="mailto:To%3Ausers@lists.opensips.org" target="_blank">To:users@lists.opensips.org</a><br>
> Subject: Re: [OpenSIPS-Users] Opensips and rtpengine_play_media not<br>
>       absorbing ACK<br>
> Message-ID:<<a href="mailto:3971cbc2-7281-2299-4212-7f241e8b8b5a@gmail.com" target="_blank">3971cbc2-7281-2299-4212-7f241e8b8b5a@gmail.com</a>><br>
> Content-Type: text/plain; charset="utf-8"; Format="flowed"<br>
><br>
> Hello everyone, I would like to show my part of the code when playing<br>
> early media after 200OK, when creating dialogs, I substituted $DLG_did<br>
> in the contact of my dialog, and received the same $DLG_did for my<br>
> dialog in ACK, but OpenSIPS also continued to send 200OK , despite<br>
> having already received an ACK response.<br>
><br>
> route {<br>
><br>
> # initial invite<br>
><br>
> if (is_method("INVITE")) {<br>
><br>
> create_dialog();<br>
><br>
> route(early_media);<br>
><br>
> exit;<br>
><br>
> }<br>
><br>
> } route[early_media] { if (has_body("application/sdp")) {<br>
> rtpengine_manage(); } $json(reply) := $rtpquery;<br>
> $var(port)=$json_pretty(reply/tags/$ft/medias[0]/streams[0]/local port);<br>
> remove_body_part();<br>
><br>
> append_to_reply("Contact:<br>
> <sip:$rU@$socket_in(ip):$socket_in(port);transport=udp;did=$DLG_did>\r\n");<br>
><br>
> append_to_reply("Content-Type: application/sdp\r\n"); $var(body) =<br>
> $(rb{re.subst,/(IP4.).*/\1$socket_in(ip)/g}); $var(body) =<br>
> $(var(body){re.subst,/(audio.)...../\1$var(port)/g});<br>
> t_reply_with_body(200, "OK", $var(body));<br>
> rtpengine_play_media("call-id=$ci from-tag=$ft<br>
> file=/etc/rtpengine/media.wav"); async(sleep(10), after_early_media); }<br>
> route[after_early_media] { if (t_was_cancelled()) { rtpengine_delete();<br>
> exit; } else { rtpengine_delete(); sl_send_reply(486,"Busy here"); exit;<br>
> } }<br>
><br>
> I don’t know if Kevin example was with creating a dialog, but I also<br>
> noticed this problem through transaction... thanks<br>
> -------------- next part --------------<br>
> An HTML attachment was scrubbed...<br>
> URL:<<a href="http://lists.opensips.org/pipermail/users/attachments/20231103/059cb479/attachment-0001.html" rel="noreferrer" target="_blank">http://lists.opensips.org/pipermail/users/attachments/20231103/059cb479/attachment-0001.html</a>><br>
> ----------------------------------------------------------------------<br>
><br>
> Message: 1<br>
> Date: Thu, 2 Nov 2023 16:32:02 -0700<br>
> From: Kevin Kennedy<<a href="mailto:kennedy4260@gmail.com" target="_blank">kennedy4260@gmail.com</a>><br>
> To: OpenSIPS users mailling list<<a href="mailto:users@lists.opensips.org" target="_blank">users@lists.opensips.org</a>><br>
> Subject: [OpenSIPS-Users] Opensips and rtpengine_play_media not<br>
>       absorbing ACK<br>
> Message-ID:<br>
>       <<a href="mailto:CABDXsRxLTp2_uEX_UPX1adg16af6gaetzJujUTPki8c7H3KKLQ@mail.gmail.com" target="_blank">CABDXsRxLTp2_uEX_UPX1adg16af6gaetzJujUTPki8c7H3KKLQ@mail.gmail.com</a>><br>
> Content-Type: text/plain; charset="utf-8"<br>
><br>
> I am trying to build a solution where Opensips 3.2+ with RTPengine acts as<br>
> a UAC, answers a call with 200OK, plays media from file, and will terminate<br>
> the call right after playing announcement.<br>
><br>
> Opensips is responding with 200OK with SDP body and making the<br>
> correct changes for the IP, but when the ACK comes back from the UAS,<br>
> Opensips doesn't seem to absorb it and retransmits the 200OK.<br>
><br>
> Code snippet handling this scenario<br>
><br>
>          rtpengine_manage("from-tag=$ft replace-session-connection<br>
> trust-address replace-origin codec-strip-g729",,$var(body));<br>
>          append_to_reply("Contact:<sip:$socket_out>\r\n");<br>
>          append_to_reply("Content-Type: application/sdp\r\n");<br>
>          t_reply_with_body(200, "OK", $var(body));<br>
>          rtpengine_play_media("from-tag=$ft<br>
> file=/etc/rtpengine/unk_num.wav");<br>
>          sleep(10);<br>
>          rtpengine_delete("from-tag=$ft");<br>
>          #t_reply(603, "Decline");<br>
>          exit();<br>
><br>
><br>
> What do I need to add to handle this scenario correctly?<br>
><br>
> Note:  I was able to get this to work with Early Media (183<br>
> reply_with_body, and send t_reply(603, "Decline")), but we have customers<br>
> using late media invite as well, so the Early Media option wouldn't work in<br>
> that case.<br>
><br>
> Thank you.<br>
><br>
> Kevin Kennedy<br>
> -------------- next part --------------<br>
> An HTML attachment was scrubbed...<br>
> URL:<<a href="http://lists.opensips.org/pipermail/users/attachments/20231102/dd52d307/attachment-0001.html" rel="noreferrer" target="_blank">http://lists.opensips.org/pipermail/users/attachments/20231102/dd52d307/attachment-0001.html</a>><br>
><br>
> ------------------------------<br>
><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>