<h2>Description</h2>
<p>Hello all, I'm migrating my Kamailio logics from legacy .cfg file to KEMI script.<br>
I began with Python but switched then to Lua, but there are some subclass / functions described in KEMI documentation that seem not to be present in Lua KSR object.</p>
<p>In this case, I am having trouble with the subclass "kx" described <a href="https://kamailio.org/docs/tutorials/devel/kamailio-kemi-framework/modules/#ksrkxget_srcip" rel="nofollow">here</a> which is used in the default Lua script example <a href="https://github.com/kamailio/kamailio/blob/ca49dc0344f2ca4eae1999f6b46e0ab8c30bd1a3/misc/examples/kemi/kamailio-basic-kemi-lua.lua">here</a></p>
<p>The error in the logs:</p>
<div class="highlight highlight-source-shell"><pre> app_lua [app_lua_api.c:726]: <span class="pl-en">app_lua_run_ex</span>(): error from Lua: /etc/kamailio/kamailio.lua:196: attempt to index field <span class="pl-s"><span class="pl-pds">'</span>kx<span class="pl-pds">'</span></span> (a nil value)</pre></div>
<p>Referring to the following line in my Lua script:</p>
<div class="highlight highlight-source-lua"><pre><span class="pl-k">function</span> <span class="pl-en">ksr_route_reqinit</span>()
        <span class="pl-k">if</span> <span class="pl-k">not</span> KSR.<span class="pl-c1">is_myself_srcip</span>() <span class="pl-k">then</span>
                <span class="pl-k">local</span> srcip <span class="pl-k">=</span> KSR.<span class="pl-smi">kx</span>.<span class="pl-c1">get_srcip</span>();
                <span class="pl-k">if</span> KSR.<span class="pl-smi">htable</span>.<span class="pl-c1">sht_match_name</span>(<span class="pl-s"><span class="pl-pds">"</span>ipban<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>eq<span class="pl-pds">"</span></span>, srcip) <span class="pl-k">></span> <span class="pl-c1">0</span> <span class="pl-k">then</span>
                        <span class="pl-c"><span class="pl-c">--</span> ip is already blocked</span>
                        KSR.<span class="pl-c1">dbg</span>(<span class="pl-s"><span class="pl-pds">"</span>request from blocked IP - <span class="pl-pds">"</span></span> <span class="pl-k">..</span> KSR.<span class="pl-smi">pv</span>.<span class="pl-c1">get</span>(<span class="pl-s"><span class="pl-pds">"</span>$rm<span class="pl-pds">"</span></span>)
                                        <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span> from <span class="pl-pds">"</span></span> <span class="pl-k">..</span> KSR.<span class="pl-smi">kex</span>.<span class="pl-c1">gete_furi</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span> (IP:<span class="pl-pds">"</span></span>
                                        <span class="pl-k">..</span> srcip <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span>:<span class="pl-pds">"</span></span> <span class="pl-k">..</span> KSR.<span class="pl-smi">kex</span>.<span class="pl-c1">get_srcport</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span>)<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);
                        KSR.<span class="pl-smi">x</span>.<span class="pl-c1">exit</span>();
                <span class="pl-k">end</span>
                <span class="pl-k">if</span> KSR.<span class="pl-smi">pike</span>.<span class="pl-c1">pike_check_req</span>() <span class="pl-k"><</span> <span class="pl-c1">0</span> <span class="pl-k">then</span>
                        KSR.<span class="pl-c1">err</span>(<span class="pl-s"><span class="pl-pds">"</span>ALERT: pike blocking <span class="pl-pds">"</span></span> <span class="pl-k">..</span> KSR.<span class="pl-smi">pv</span>.<span class="pl-c1">get</span>(<span class="pl-s"><span class="pl-pds">"</span>$rm<span class="pl-pds">"</span></span>)
                                        <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span> from <span class="pl-pds">"</span></span> <span class="pl-k">..</span> KSR.<span class="pl-smi">kex</span>.<span class="pl-c1">gete_furi</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span> (IP:<span class="pl-pds">"</span></span>
                                        <span class="pl-k">..</span> srcip <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span>:<span class="pl-pds">"</span></span> <span class="pl-k">..</span> KSR.<span class="pl-smi">kex</span>.<span class="pl-c1">get_srcport</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span>)<span class="pl-cce">\n</span><span class="pl-pds">"</span></span>);
                        KSR.<span class="pl-smi">htable</span>.<span class="pl-c1">sht_seti</span>(<span class="pl-s"><span class="pl-pds">"</span>ipban<span class="pl-pds">"</span></span>, srcip, <span class="pl-c1">1</span>);
                        KSR.<span class="pl-smi">x</span>.<span class="pl-c1">exit</span>();
                <span class="pl-k">end</span>
        <span class="pl-k">end</span>
<span class="pl-k">end</span></pre></div>
<ul>
<li>Should this function be available through KSR object ? If yes we're talking about an issue<br>
Or</li>
<li>Is this function not supported anymore / not with app_lua ? In this case we should fix the documentation + the example script</li>
</ul>
<h3>Troubleshooting</h3>
<p>Debian Jessie<br>
Kamailio 5.3<br>
Lua 5.2</p>
<h4>Reproduction</h4>
<p>I tried different versions, all KO (Kamailio 5.2, 5.3, and last commit on master: kamailio 5.4.0-dev3 (x86_64/linux) 5afe1e)</p>
<ol>
<li>Install Debian Jessie</li>
<li>Clone Kamilio GIT</li>
<li>Build from source with make (enabling the desired modules before)</li>
<li>Insert Lua script (demo one is fine to reproduce my issue)</li>
</ol>
<h4>Debugging Data</h4>
<div class="highlight highlight-source-shell"><pre>aaaa@bbbbb:/<span class="pl-c"><span class="pl-c">#</span> kamailio -V</span>
version: kamailio 5.4.0-dev3 (x86_64/linux) 5afe1e
flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES, TLS_PTHREAD_MUTEX_SHARED
ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: 5afe1e
compiled on 14:27:15 Jan 14 2020 with gcc 6.3.0</pre></div>
<h4>Log Messages</h4>
<div class="highlight highlight-source-shell"><pre>app_lua [app_lua_api.c:726]: <span class="pl-en">app_lua_run_ex</span>(): error from Lua: /etc/kamailio/kamailio.lua:196: attempt to index field <span class="pl-s"><span class="pl-pds">'</span>kx<span class="pl-pds">'</span></span> (a nil value)</pre></div>
<h4>SIP Traffic</h4>
<p>Any message going through ksr_route_reqinit() function is triggering the error</p>
<p>Thanks !</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/kamailio/kamailio/issues/2196?email_source=notifications&email_token=ABO7UZNN6O3X6T4KNE5JGKLQ5XILNA5CNFSM4KGUSLCKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IGCU6WA">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABO7UZKINTSAXRR2RDODF23Q5XILNANCNFSM4KGUSLCA">unsubscribe</a>.<img src="https://github.com/notifications/beacon/ABO7UZOKA4OR6XAPLABUCXTQ5XILNA5CNFSM4KGUSLCKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IGCU6WA.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/kamailio/kamailio/issues/2196?email_source=notifications\u0026email_token=ABO7UZNN6O3X6T4KNE5JGKLQ5XILNA5CNFSM4KGUSLCKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IGCU6WA",
"url": "https://github.com/kamailio/kamailio/issues/2196?email_source=notifications\u0026email_token=ABO7UZNN6O3X6T4KNE5JGKLQ5XILNA5CNFSM4KGUSLCKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IGCU6WA",
"name": "View Issue"
},
"description": "View this Issue on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>