X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcore.cpp;h=bf611aa99308fd96a5d36a1a1f976b99bf09eb7b;hp=4d555cfc4720b59808e2357afc11d22a104ca99c;hb=1eb21546673535f5707aa6346e8c749b928cd772;hpb=41dd93ccb2696dced0e27e213ee7a3a75c9044a8 diff --git a/src/core/core.cpp b/src/core/core.cpp index 4d555cfc..bf611aa9 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -139,9 +139,22 @@ void Core::restoreState() { } /*** Core Setup ***/ +QString Core::setupCoreForInternalUsage() { + Q_ASSERT(!_storageBackends.isEmpty()); + QVariantMap setupData; + qsrand(QDateTime::currentDateTime().toTime_t()); + int pass = 0; + for(int i = 0; i < 10; i++) { + pass *= 10; + pass += qrand() % 10; + } + setupData["AdminUser"] = "AdminUser"; + setupData["AdminPasswd"] = QString::number(pass); + setupData["Backend"] = _storageBackends[_storageBackends.keys().first()]->displayName(); + return setupCore(setupData); +} -QString Core::setupCore(const QVariant &setupData_) { - QVariantMap setupData = setupData_.toMap(); +QString Core::setupCore(QVariantMap setupData) { QString user = setupData.take("AdminUser").toString(); QString password = setupData.take("AdminPasswd").toString(); if(user.isEmpty() || password.isEmpty()) { @@ -343,15 +356,21 @@ QHash Core::bufferLastSeenMsgIds(UserId user) { /*** Network Management ***/ bool Core::startListening() { + // in mono mode we only start a local port if a port is specified in the cli call + if(Quassel::runMode() == Quassel::Monolithic && !Quassel::isOptionSet("port")) + return true; + bool success = false; uint port = Quassel::optionValue("port").toUInt(); if(_server.listen(QHostAddress::Any, port)) { - quInfo() << "Listening for GUI clients on IPv6 port" << _server.serverPort() << "using protocol version" << Global::protocolVersion; + quInfo() << "Listening for GUI clients on IPv6 port" << _server.serverPort() + << "using protocol version" << Quassel::buildInfo().protocolVersion; success = true; } if(_v6server.listen(QHostAddress::AnyIPv6, port)) { - quInfo() << "Listening for GUI clients on IPv4 port" << _v6server.serverPort() << "using protocol version" << Global::protocolVersion; + quInfo() << "Listening for GUI clients on IPv4 port" << _v6server.serverPort() + << "using protocol version" << Quassel::buildInfo().protocolVersion; success = true; } @@ -362,10 +381,22 @@ bool Core::startListening() { return success; } -void Core::stopListening() { - _server.close(); - _v6server.close(); - quInfo() << "No longer listening for GUI clients."; +void Core::stopListening(const QString &reason) { + bool wasListening = false; + if(_server.isListening()) { + wasListening = true; + _server.close(); + } + if(_v6server.isListening()) { + wasListening = true; + _v6server.close(); + } + if(wasListening) { + if(reason.isEmpty()) + quInfo() << "No longer listening for GUI clients."; + else + quInfo() << qPrintable(reason); + } } void Core::incomingConnection() { @@ -382,9 +413,7 @@ void Core::incomingConnection() { quInfo() << qPrintable(tr("Client connected from")) << qPrintable(socket->peerAddress().toString()); if(!configured) { - _server.close(); - _v6server.close(); - quDebug() << "Closing server for basic setup."; + stopListening(tr("Closing server for basic setup.")); } } } @@ -412,23 +441,20 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { QVariantMap reply; // Just version information -- check it! - uint ver = 0; - if(!msg.contains("ProtocolVersion") && msg["ClientBuild"].toUInt() >= 732) ver = 1; // FIXME legacy - if(msg.contains("ProtocolVersion")) ver = msg["ProtocolVersion"].toUInt(); - if(ver < Global::coreNeedsProtocol) { + uint ver = msg["ProtocolVersion"].toUInt(); + if(ver < Quassel::buildInfo().coreNeedsProtocol) { reply["MsgType"] = "ClientInitReject"; reply["Error"] = tr("Your Quassel Client is too old!
" "This core needs at least client/core protocol version %1.
" - "Please consider upgrading your client.").arg(Global::coreNeedsProtocol); + "Please consider upgrading your client.").arg(Quassel::buildInfo().coreNeedsProtocol); SignalProxy::writeDataToDevice(socket, reply); quWarning() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("too old, rejecting.")); socket->close(); return; } - reply["CoreVersion"] = Global::quasselVersion; - reply["CoreDate"] = Global::quasselBuildDate; - reply["CoreBuild"] = 860; // FIXME legacy - reply["ProtocolVersion"] = Global::protocolVersion; + reply["CoreVersion"] = Quassel::buildInfo().fancyVersionString; + reply["CoreDate"] = Quassel::buildInfo().buildDate; + reply["ProtocolVersion"] = Quassel::buildInfo().protocolVersion; // TODO: Make the core info configurable int uptime = startTime().secsTo(QDateTime::currentDateTime().toUTC()); int updays = uptime / 86400; uptime %= 86400; @@ -436,7 +462,8 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { int upmins = uptime / 60; reply["CoreInfo"] = tr("Quassel Core Version %1
" "Built: %2
" - "Up %3d%4h%5m (since %6)").arg(Global::quasselVersion).arg(Global::quasselBuildDate) + "Up %3d%4h%5m (since %6)").arg(Quassel::buildInfo().fancyVersionString) + .arg(Quassel::buildInfo().buildDate) .arg(updays).arg(uphours,2,10,QChar('0')).arg(upmins,2,10,QChar('0')).arg(startTime().toString(Qt::TextDate)); #ifdef HAVE_SSL @@ -506,7 +533,7 @@ void Core::processClientMessage(QTcpSocket *socket, const QVariantMap &msg) { } if(msg["MsgType"] == "CoreSetupData") { QVariantMap reply; - QString result = setupCore(msg["SetupData"]); + QString result = setupCore(msg["SetupData"].toMap()); if(!result.isEmpty()) { reply["MsgType"] = "CoreSetupReject"; reply["Error"] = result; @@ -592,6 +619,22 @@ void Core::setupClientSession(QTcpSocket *socket, UserId uid) { sess->addClient(socket); } +void Core::setupInternalClientSession(SignalProxy *proxy) { + if(!configured) { + stopListening(); + setupCoreForInternalUsage(); + } + + UserId uid = 3; // FIXME!!!11 + // Find or create session for validated user + SessionThread *sess; + if(sessions.contains(uid)) + sess = sessions[uid]; + else + sess = createSession(uid); + sess->addClient(proxy); +} + SessionThread *Core::createSession(UserId uid, bool restore) { if(sessions.contains(uid)) { quWarning() << "Calling createSession() when a session for the user already exists!";