diff options
author | Ted Trask <ttrask01@yahoo.com> | 2014-11-04 03:26:04 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2014-11-04 03:26:04 +0000 |
commit | a35207f4a93d5e1eb3892bc7496d5019a71b3734 (patch) | |
tree | 39acd0eb79f6d4e6f39fb4ce7012274cedafc1d1 | |
parent | 7c5939cac78e1ac487fcfd44872a3391e145f026 (diff) | |
download | acf-kamailio-a35207f4a93d5e1eb3892bc7496d5019a71b3734.tar.bz2 acf-kamailio-a35207f4a93d5e1eb3892bc7496d5019a71b3734.tar.xz |
Add support for MYSQL database
-rw-r--r-- | kamailio-model.lua | 52 |
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 |