--[[ * UK01 FreeSWITCH system * * Map MSISDN to SIP user * * Developed by Seventh Signal Ltd. & Co. KG, 2011 * Daniel Swarbrick ]] -- Set variable - or print to console if no session is available function setvar(key, val) if session then session:setVariable(key, val) elseif stream then stream:write(string.format("%25s : %s\n", key, val)) else -- A script executed using luarun does not have a stream print(key .. " : " .. val) end end function setLocalvar(val) internal_domain=val end local clid_num = nil if session then clid_num = session:getVariable("caller_id_number") dest_num = session:getVariable("destination_number") elseif argv[1] then clid_num = argv[1] end if not clid_num then freeswitch.consoleLog("err", "msisdn_user.lua: Could not determine caller ID number\n") return end local dsn = "smepbx" local dbh = freeswitch.Dbh(dsn, "smepbx", "smeswitch") if not dbh:connected() then freeswitch.consoleLog("crit", "msisdn_user.lua cannot connect to database " .. dsn .. "\n") return end local query = string.format("SELECT dir_users.user_id, prefix, domain_name FROM dir_users " .. "INNER JOIN dir_domains ON (domain_id=dir_domains.id) " .. "WHERE msisdn='%s'", clid_num) assert(dbh:query(query, function(row) setvar("sip_user_account", string.format("%s@%s", row.user_id, row.domain_name)) setvar("caller_prefix", row.prefix) setLocalvar(row.domain_name) end)) if dest_num then if internal_domain then local query = string.format("SELECT prefix FROM dir_users " .. "INNER JOIN dir_domains ON (domain_id=dir_domains.id) " .. "WHERE (msisdn='%s' OR user_id='%s') AND domain_name='%s'", dest_num,dest_num,internal_domain) assert(dbh:query(query, function(row) -- setvar("dest_domain", row.domain_name) setvar("caller_domain_prefix", row.prefix) end)) end query = string.format("SELECT prefix FROM dir_users " .. "INNER JOIN dir_domains ON (domain_id=dir_domains.id) " .. "WHERE msisdn='%s' OR user_id='%s'", dest_num,dest_num) assert(dbh:query(query, function(row) setvar("dest_prefix", row.prefix) end)) query = string.format("SELECT id FROM did WHERE did_number = '%s'", dest_num) assert(dbh:query(query, function(row) setvar("local_did", row.id) end)) end