<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@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;}
/* Style Definitions */
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;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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]-->
</head>
<body lang="EN-GB" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<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 = 'https://api.hidingtheurl.com/subscribe'<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>
</body>
</html>