Kamailio python kemi - registration error

64 Views Asked by At

I am using Python KEMI Interpreter and trying to perform a simple SIP registration. But an error occurs, there is an error in the log: ERROR: register [api.c:44]: regapi_save(): usrloc domain [location] not found.

If I use Kamailio native language, registration is successful.

Here is my kamailio.cfg

#!KAMAILIO

debug=2
log_stderror=yes
fork=yes
children=2

memdbg=5
memlog=5

#!define DBURL "mysql://kamailio:xxxxxxxxx@localhost/kamailio"

loadmodule "auth.so"
loadmodule "auth_db.so"
loadmodule "db_mysql.so"
loadmodule "debugger.so"
loadmodule "tm.so"
loadmodule "tmx.so"
loadmodule "pv.so"
loadmodule "textops.so"
loadmodule "sl.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "ctl.so"
loadmodule "kex.so"
loadmodule "jsonrpcs.so"
loadmodule "nathelper.so"
loadmodule "siputils.so"
loadmodule "rr.so"
loadmodule "xlog.so"
loadmodule "maxfwd.so"
loadmodule "pv_headers.so"
loadmodule "acc.so"
loadmodule "kemix.so"
loadmodule "regex.so"
loadmodule "sanity.so"
loadmodule "path.so"

modparam("xlog", "force_color", 1)
modparam("xlog", "prefix", "-xlog: ")

loadmodule "app_python3.so"
modparam("app_python3", "load", "/etc/kamailio/kemi.py")
cfgengine "python"          

modparam("auth_db", "db_url", DBURL);

modparam("usrloc", "db_url", DBURL);
modparam("usrloc", "db_mode", 1);

// request_route {
//         if (is_method("REGISTER")) {
//                 route(AUTH);
//         }
// }

// route[AUTH] {
//             xlog("L_INFO", "\nfd =  $fd\nru = $ru\nuri = $var(uri)\n");
//             if (!auth_check("$fd", "subscriber", "1")) {
//                     force_rport();
//                     auth_challenge("$fd", "1");
//                     exit;
//             }
//             force_rport();
//             save("location");
//             exit;
// }

Here is a part of my kemi.py

def mod_init():
    KSR.info("===== from Python mod init\n")
    return kamailio()

# -- {start defining kamailio class}
class kamailio:

    # to handle loading of the class
    def __init__(self):
        KSR.info('===== kamailio.__init__\n')
        self.db = DataBase()

    # executed when kamailio child processes are initialized
    # for handling child processes
    def child_init(self, rank):
        KSR.info('===== kamailio.child_init(%d)\n' % rank)
        return 0

    # SIP request routing
    # -- equivalent of request_route{}
    # to handle the initial requests
    def ksr_request_route(self, msg):
        if KSR.is_method("REGISTER"):
            fd = KSR.pv.get("$fd")
            KSR.info("\nfd = %s" % fd+"\n")

            is_registered = KSR.auth_db.auth_check(fd, "subscriber", 1)
            if is_registered < 0:
                KSR.force_rport()
                auth_challenge = KSR.auth.auth_challenge(fd, 1)
                exit()
                
            KSR.force_rport()
            if not KSR.registrar.save("location", 0x01):
                KSR.sl.sl_reply_error()
            return 1
0

There are 0 best solutions below