summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2014-11-04 03:26:04 +0000
committerTed Trask <ttrask01@yahoo.com>2014-11-04 03:26:04 +0000
commita35207f4a93d5e1eb3892bc7496d5019a71b3734 (patch)
tree39acd0eb79f6d4e6f39fb4ce7012274cedafc1d1
parent7c5939cac78e1ac487fcfd44872a3391e145f026 (diff)
downloadacf-kamailio-a35207f4a93d5e1eb3892bc7496d5019a71b3734.tar.bz2
acf-kamailio-a35207f4a93d5e1eb3892bc7496d5019a71b3734.tar.xz
Add support for MYSQL database
-rw-r--r--kamailio-model.lua52
1 files changed, 48 insertions, 4 deletions
diff --git a/kamailio-model.lua b/kamailio-model.lua
index 77140e4..e91e7b3 100644
--- a/kamailio-model.lua
+++ b/kamailio-model.lua
@@ -40,7 +40,7 @@ local databasecreate = function()
-- create environment object
if config.DBENGINE == "MYSQL" or config.DBENGINE == "mysql" or config.DBENGINE == "MySQL" then
- error("MYSQL database not supported")
+ engine = db.engine.mysql
elseif config.DBENGINE == "PGSQL" or config.DBENGINE == "pgsql" or config.DBENGINE == "postgres" or config.DBENGINE == "postgresql" or config.DBENGINE == "POSTGRESQL" then
engine = db.engine.postgresql
elseif config.DBENGINE == "ORACLE" or config.DBENGINE == "oracle" or config.DBENGINE == "Oracle" then
@@ -53,8 +53,17 @@ local databasecreate = function()
error("Unknown database engine "..config.DBENGINE)
end
+ -- We don't want to leave the port as null, or it will ask the user each time
+ -- But, it usually isn't specified. Let's make the proper default
+ local port
+ if engine == db.engine.mysql then
+ port = "3306"
+ elseif engine == db.engine.postgresql then
+ port = "5432"
+ end
+
-- connect to data source
- dbkam = db.create(engine, config.DBNAME or "openser", config.DBRWUSER or "openser", config.DBRWPW or "openserrw", config.DBHOST or "127.0.0.1", config.DBPORT or "5432")
+ dbkam = db.create(engine, config.DBNAME or "openser", config.DBRWUSER or "openser", config.DBRWPW or "openserrw", config.DBHOST or "127.0.0.1", config.DBPORT or port)
end
return dbkam
end
@@ -301,11 +310,46 @@ function mymodule.update_user(self, user)
end
function mymodule.get_create_database(self, clientdata)
- return cfe({ type="group", value={}, label="Create Database" })
+ local retval = cfe({ type="group", value={}, label="Create Database" })
+ if not dbkam then
+ databasecreate()
+ end
+ if dbkam and dbkam.engine == db.engine.mysql then
+ retval.value.password = cfe({ type="password", label="Password", seq=1 })
+ -- MYSQL has some character sets that Kamailio cannot use, namely utf8 and ucs2
+ -- If it's using one of them, kamdbctl will prompt for which one to use
+ -- so, have to check in advance
+ local out,err = modelfunctions.run_executable({"mysql", "-h", dbkam.host, "-e", "show variables like '%character_set_server%'"})
+ local charset = string.match(out, "([^%s]+)%s*$") or ""
+ if string.find(charset, "utf8") or string.find(charset, "ucs2") then
+ retval.value.characterset = cfe({ type="select", label="Character Set", option={}, seq=2 })
+ out,err = modelfunctions.run_executable({"mysql", "-h", config.DBHOST, "-e", "show character set"})
+ local charsets = format.string_to_table(out, "\n")
+ for i,c in ipairs(charsets) do
+ local label = string.match(c, "[^\t]*\t[^\t]*")
+ local value = string.match(c, "[^\t]*")
+ if value ~= "Charset" and not string.find (value, "utf8") and not string.find(value, "ucs2") then
+ retval.value.characterset.option[#retval.value.characterset.option+1] = {label=label, value=value}
+ end
+ end
+ end
+ end
+ return retval
end
function mymodule.create_database(self, create_db)
- create_db.descr, create_db.errtxt = modelfunctions.run_executable({"kamdbctl", "create"}, true, 'y\ny\n')
+ local input = "y\ny\n"
+ if create_db.value.characterset then
+ if not modelfunctions.validateselect(create_db.value.characterset) then
+ create_db.errtxt = "Failed to create database"
+ return create_db
+ end
+ input = create_db.value.characterset.value.."\n"..input
+ end
+ if create_db.value.password then
+ input = create_db.value.password.value.."\n"..input
+ end
+ create_db.descr, create_db.errtxt = modelfunctions.run_executable({"kamdbctl", "create"}, true, input)
return create_db
end