<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hello,</p>
<p>looks like after sending the response execution continues
somewhere else hitting t_check_trans() which detect the
transaction exists and re-sends the last last reply (as it is
supposed to behave).</p>
<p>Be also careful with async processing in python, I am not
familiar with it at all, just be aware that kamailio has a
multi-process design and uses per-process global variables. if you
do multi-threading async processing in python, be sure you ensure
consistency of globals and avoid races to read+change them.</p>
<p>Cheers,<br>
Daniel<br>
</p>
<div class="moz-cite-prefix">On 26.01.22 16:53, Lewis Hutchinson
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CWXP265MB2517B239EEE4CAD560E27B0AC5209@CWXP265MB2517.GBRP265.PROD.OUTLOOK.COM">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}div.WordSection1
{page:WordSection1;}</style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal">First of all I should start by saying this
is my first post so go easy on me!! : ) and thank for
everyone’s efforts to share knowledge it has been invaluable
for my kamailio learning.<br>
<br>
<u>Build Details</u><br>
<br>
Version: kamailio 5.5.3 (x86_64/linux)<br>
Kamailio kemi python <br>
<br>
<u>Scenario</u><br>
<br>
Relevant config<br>
<br>
def ksr_route_api_query(self, msg):<o:p></o:p></p>
<p class="MsoNormal"> KSR.log("info", "SUBSCRIBE API
Query Starts")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> # Create new Transaction<o:p></o:p></p>
<p class="MsoNormal"> KSR.tm.t_newtran()<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> async def main():<o:p></o:p></p>
<p class="MsoNormal"> url =
'<a class="moz-txt-link-freetext" href="https://api.hidingtheurl.com/subscribe">https://api.hidingtheurl.com/subscribe</a>'<o:p></o:p></p>
<p class="MsoNormal"> payload = {<o:p></o:p></p>
<p class="MsoNormal"> "ruri": KSR.pv.get("$ru"),<o:p></o:p></p>
<p class="MsoNormal"> "from": KSR.pv.get("$fu"),<o:p></o:p></p>
<p class="MsoNormal"> "from_tag":
KSR.pv.gete("$ft"),<o:p></o:p></p>
<p class="MsoNormal"> "to": KSR.pv.get("$tu"),<o:p></o:p></p>
<p class="MsoNormal"> "callid":
KSR.pv.get("$ci"),<o:p></o:p></p>
<p class="MsoNormal"> "cseq": KSR.pv.get("$cs"),<o:p></o:p></p>
<p class="MsoNormal"> "contact":
KSR.pv.gete("$ct"),<o:p></o:p></p>
<p class="MsoNormal"> "supported":
KSR.pv.get("$hdr(Supported)"),<o:p></o:p></p>
<p class="MsoNormal"> "event":
KSR.pv.get("$hdr(Event)"),<o:p></o:p></p>
<p class="MsoNormal"> "expires":
KSR.pv.get("$hdr(Expires)"),<o:p></o:p></p>
<p class="MsoNormal"> "diversion":
KSR.pv.get("$di"),<o:p></o:p></p>
<p class="MsoNormal"> "body": KSR.pv.get("$rb")<o:p></o:p></p>
<p class="MsoNormal"> }<o:p></o:p></p>
<p class="MsoNormal"> async with
aiohttp.ClientSession() as session:<o:p></o:p></p>
<p class="MsoNormal"> async with
session.post(url, json=payload) as response:<o:p></o:p></p>
<p class="MsoNormal"> if response.status ==
0:<o:p></o:p></p>
<p class="MsoNormal">
KSR.xlog.xinfo(f"SUB Manager Timeout: {response.status}")<o:p></o:p></p>
<p class="MsoNormal"> KSR.tm.t_reply(408,
"SUB Manager Timeout")<o:p></o:p></p>
<p class="MsoNormal"> elif response.status
>= 500:<o:p></o:p></p>
<p class="MsoNormal">
KSR.xlog.xinfo(f"SUB Manager Down: {response.status}")<o:p></o:p></p>
<p class="MsoNormal"> KSR.tm.t_reply(500,
"SUB Manager Down")<o:p></o:p></p>
<p class="MsoNormal"> elif response.status
>= 400:<o:p></o:p></p>
<p class="MsoNormal">
KSR.xlog.xinfo(f"SUB Manager Error: {response.status}")<o:p></o:p></p>
<p class="MsoNormal"> KSR.tm.t_reply(400,
"SUB Manager Error")<o:p></o:p></p>
<p class="MsoNormal"> else:<o:p></o:p></p>
<p class="MsoNormal"> if response.status
== 200:<o:p></o:p></p>
<p class="MsoNormal">
KSR.xlog.xinfo(f"SUB Manager Success: {response.status}")<o:p></o:p></p>
<p class="MsoNormal">
KSR.tm.t_reply(200, "OK")<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> KSR.log("info", "SUBSCRIBE API
Query Ends")<o:p></o:p></p>
<p class="MsoNormal"> asyncio.run(main())<o:p></o:p></p>
<p class="MsoNormal"> # API Query Ends<br>
<br>
<u>Scenario</u><br>
<br>
<o:p></o:p></p>
<p class="MsoNormal">Initial SUBSCRIBE >>> hits
Kamailio >>> send payload in JSON to API get receive
200OK response from API and send a 200OK on to Device
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">SUBSCRIBE --------><o:p></o:p></p>
<p class="MsoNormal"><------------ 200 OK <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">After Subscription Expiry<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">re-SUBSCRIBE >>> hits Kamailio
>>> send payload in JSON to API get 200OK response
from API and send a 200OK on to Device but also another 200OK
a fraction of a second later...<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">SUBSCRIBE --------><o:p></o:p></p>
<p class="MsoNormal"><------------ 200 OK <o:p></o:p></p>
<p class="MsoNormal"><<<--------- 200 OK <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><br>
This happens for all following re-SUBSCRIBE's<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The 200 OK are identical, and it is a re
transmission, but I can’t work out why..<br>
<br>
Relevant DEBUG is below<br>
<br>
Jan 26 12:31:17 ip-172-20-46-39 kamailio[11234]: INFO:
<script>: SUB Manager Success: 200<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: app_python3 [apy_kemi.c:232]:
sr_apy_kemi_exec_func_ex(): execution of method: t_reply<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: app_python3 [apy_kemi.c:287]:
sr_apy_kemi_exec_func_ex(): params[2] for: t_reply are
int-str: [200] [OK]<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_lookup.c:1034]: t_check_msg():
msg (0x7eff0cd4e828) id=2/11234 global id=2/11234 T
start=0x7eff0918d7d8<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_lookup.c:1108]: t_check_msg(): T
(0x7eff0918d7d8) already found for msg (0x7eff0cd4e828)!<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: <core>
[core/msg_translator.c:162]: check_via_address():
(80.111.111.111, 80.111.111.111, 0)<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_reply.c:1763]:
cleanup_uac_timers(): RETR/FR timers reset<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_reply.c:637]: _reply_light():
reply sent out - buf=0x7eff0cd50938: SIP/2.0 200
OK#015#012Via:... shmem=0x7eff09190ca8: SIP/2.0 200
OK#015#012Via:<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_reply.c:648]: _reply_light():
finished<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: app_python3 [apy_kemi.c:232]:
sr_apy_kemi_exec_func_ex(): execution of method:
t_precheck_trans<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: app_python3 [apy_kemi.c:232]:
sr_apy_kemi_exec_func_ex(): execution of method: t_check_trans<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_lookup.c:1034]: t_check_msg():
msg (0x7eff0cd4e828) id=2/11234 global id=2/11234 T
start=0x7eff0918d7d8<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_lookup.c:1108]: t_check_msg(): T
(0x7eff0918d7d8) already found for msg (0x7eff0cd4e828)!<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: tm [t_reply.c:1703]:
t_retransmit_reply(): reply retransmitted. buf=0x7eff0cb18220:
SIP/2.0 2..., shmem=0x7eff09190ca8: SIP/2.0 2<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: app_python3 [apy_kemi.c:112]:
sr_kemi_config_engine_python(): execution of route type 1 with
no name returned 1<o:p></o:p></p>
<p class="MsoNormal">Jan 26 12:31:17 ip-172-20-46-39
kamailio[11234]: DEBUG: <core> [core/receive.c:514]:
receive_msg(): request-route executed in: 38258 usec<br>
<br>
<br>
Everything works well as is but I want to clean up this issue
or at least understand what is causing it.<br>
<br>
<br>
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b><span
style="font-size:12.0pt;color:black;mso-fareast-language:EN-GB">Lewis</span></b><span
style="font-size:12.0pt;color:black;mso-fareast-language:EN-GB"><o:p></o:p></span></p>
</div>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
* <a class="moz-txt-link-abbreviated" href="mailto:sr-users@lists.kamailio.org">sr-users@lists.kamailio.org</a>
Important: keep the mailing list in the recipients, do not reply only to the sender!
Edit mailing list options or unsubscribe:
* <a class="moz-txt-link-freetext" href="https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users">https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
Daniel-Constantin Mierla -- <a class="moz-txt-link-abbreviated" href="http://www.asipto.com">www.asipto.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.twitter.com/miconda">www.twitter.com/miconda</a> -- <a class="moz-txt-link-abbreviated" href="http://www.linkedin.com/in/miconda">www.linkedin.com/in/miconda</a>
Kamailio Advanced Training - Online
Feb 21-24, 2022 (America Timezone)
* <a class="moz-txt-link-freetext" href="https://www.asipto.com/sw/kamailio-advanced-training-online/">https://www.asipto.com/sw/kamailio-advanced-training-online/</a></pre>
</body>
</html>