diff --git a/src/murmur/Server.cpp b/src/murmur/Server.cpp index a53e12721..ff5e30dd1 100644 --- a/src/murmur/Server.cpp +++ b/src/murmur/Server.cpp @@ -62,6 +62,8 @@ ServerParams::ServerParams() { iMaxUsers = 1000; qsWelcomeText = QString("Welcome to this server"); qsDatabase = QString(); + iDBPort = 0; + qsDBDriver = "QSQLITE"; } void ServerParams::read(QString fname) { @@ -76,7 +78,14 @@ void ServerParams::read(QString fname) { iMaxBandwidth = qs.value("bandwidth", iMaxBandwidth).toInt(); iMaxUsers = qs.value("users", iMaxUsers).toInt(); qsWelcomeText = qs.value("welcometext", qsWelcomeText).toString(); + qsDatabase = qs.value("database", qsDatabase).toString(); + + qsDBDriver = qs.value("dbDriver", qsDBDriver).toString(); + qsDBUserName = qs.value("dbUsername", qsDBUserName).toString(); + qsDBPassword = qs.value("dbPassword", qsDBPassword).toString(); + qsDBHostName = qs.value("dbHost", qsDBHostName).toString(); + iDBPort = qs.value("dbPort", iDBPort).toInt(); } BandwidthRecord::BandwidthRecord() { diff --git a/src/murmur/Server.h b/src/murmur/Server.h index a5764c8b8..0e63ced81 100644 --- a/src/murmur/Server.h +++ b/src/murmur/Server.h @@ -127,8 +127,16 @@ struct ServerParams { int iMaxUsers; QString qsPassword; QString qsWelcomeText; - QString qsDatabase; bool bTestloop; + + QString qsDatabase; + + QString qsDBDriver; + QString qsDBUserName; + QString qsDBPassword; + QString qsDBHostName; + int iDBPort; + ServerParams(); void read(QString fname = QString("murmur.ini")); }; diff --git a/src/murmur/ServerDB.cpp b/src/murmur/ServerDB.cpp index 5f7914baf..d301dd146 100644 --- a/src/murmur/ServerDB.cpp +++ b/src/murmur/ServerDB.cpp @@ -61,46 +61,56 @@ class TransactionHolder { }; ServerDB::ServerDB() { - QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); - QSettings qs; + if (! QSqlDatabase::isDriverAvailable(g_sp.qsDBDriver)) { + qFatal("Database driver %s not available", qPrintable(g_sp.qsDBDriver)); + } + QSqlDatabase db = QSqlDatabase::addDatabase(g_sp.qsDBDriver); QStringList datapaths; int i; bool found = false; - if (! g_sp.qsDatabase.isEmpty()) { - db.setDatabaseName(g_sp.qsDatabase); - found = db.open(); - } else { + if (g_sp.qsDBDriver == "QSQLITE") { + if (! g_sp.qsDatabase.isEmpty()) { + db.setDatabaseName(g_sp.qsDatabase); + found = db.open(); + } else { + datapaths << QCoreApplication::instance()->applicationDirPath(); + datapaths << QDir::currentPath(); + datapaths << QDir::homePath(); - datapaths << qs.value("DBPath").toString(); - datapaths << QCoreApplication::instance()->applicationDirPath(); - datapaths << QDir::currentPath(); - datapaths << QDir::homePath(); - - for(i = 0; (i < datapaths.size()) && ! found; i++) { - if (!datapaths[i].isEmpty()) { - QFile f(datapaths[i] + "/murmur.sqlite"); - if (f.exists()) { - db.setDatabaseName(f.fileName()); - found = db.open(); - } - } - } - - if (! found) { for(i = 0; (i < datapaths.size()) && ! found; i++) { if (!datapaths[i].isEmpty()) { QFile f(datapaths[i] + "/murmur.sqlite"); - db.setDatabaseName(f.fileName()); - found = db.open(); + if (f.exists()) { + db.setDatabaseName(f.fileName()); + found = db.open(); + } + } + } + + if (! found) { + for(i = 0; (i < datapaths.size()) && ! found; i++) { + if (!datapaths[i].isEmpty()) { + QFile f(datapaths[i] + "/murmur.sqlite"); + db.setDatabaseName(f.fileName()); + found = db.open(); + } } } } + } else { + db.setDatabaseName(g_sp.qsDatabase); + db.setHostName(g_sp.qsDBHostName); + db.setPort(g_sp.iDBPort); + db.setUserName(g_sp.qsDBUserName); + db.setPassword(g_sp.qsDBPassword); + found = db.open(); } if (! found) { - qFatal("ServerDB: Failed initialization"); + QSqlError e = db.lastError(); + qFatal("ServerDB: Failed initialization: %s",qPrintable(e.text())); } else { qWarning("ServerDB: Opened successfully"); }