package.path = package.path .. ";/usr/share/lua/5.1/?.lua" package.cpath = package.cpath .. ";/usr/lib64/lua/5.1/?.so" -- mysql Config require ('DBI') mydb,myuser,mypass,myhost = "yourdb,youruser,yourpass,yourhost" -- Logging LOGLEVEL = "info" -- Progname PROGNAME = "loop.lua" -- functions function logger(message) freeswitch.consoleLog(LOGLEVEL,"["..PROGNAME.."] "..message.."\n") end function mysqlabfrage(u) if u == nil then return end local dbh = assert(DBI.Connect('MySQL', mydb, myuser, mypass, myhost)) local sth = assert(dbh:prepare('SELECT username, domain, password, fs_username FROM subscriber WHERE username=? LIMIT 1')) sth:execute(u) -- print all rows, the rows will be indexed by field names row = sth:fetch ({}, "a") if not row then return end username = row.username fs_username = row.fs_username domain = row.domain password = row.password dbh:close() sth:close() return username,fs_username,domain,password end function mysqlupdate(u) if u == nil then logger("Execute Update failed - no username given") return end local dbh = assert(DBI.Connect('MySQL', mydb, myuser, mypass, myhost)) dbh:autocommit(true) local wrt = assert(dbh:prepare("UPDATE subscriber SET fs_username=? WHERE username=? LIMIT 1")) logger("Execute Update fs_username to [" .. u .. "] !") success,err = wrt:execute(u,u) if success == false then logger("Execute Update ERROR") end dbh:close() wrt:close() end -- Send Stop Event on arg[1] == stop if argv[1] then i=1 while argv[i] do if argv[i] == "stop" then --Send Stop message local event = freeswitch.Event("custom", "lua::stop_event") event:addHeader("Action", "stop") event:fire() logger("Sent stop message to lua script") return end i=i+1 end return end -- main loop logger("Starting script and loop forever") con = freeswitch.EventConsumer("CUSTOM"); run = true while run do for e in (function() return con:pop(1,1000) end) do -- logger("event\n" .. e:serialize("xml")) element = e:getHeader("Event-Subclass") or "" if (element == "lua::stop_event") then action = e:getHeader("Action") or "" if (action == "stop") then logger("got stop message, Exiting") run = false break end end if (element == "sofia::register") then registerstatus = e:getHeader("status") if (registerstatus:find("Registered",1,true)) then req_username = e:getHeader("username") if req_username then logger("user registerd " .. req_username) mysqlabfrage(req_username) if req_username ~= fs_username then mysqlupdate(req_username) end end end end end end