From de8cae01617b57ebd36a7d3fab3b4875b0da2255 Mon Sep 17 00:00:00 2001 From: Björn Hagemeister Date: Thu, 4 Sep 2014 18:10:57 +0200 Subject: The sessionID is ignored by manager if client is connecting via auto-connect. --- src/server/mainwindow/mainwindow.cpp | 18 +++++++++++------- src/server/mainwindow/mainwindow.h | 1 - src/server/net/discoverylistener.cpp | 9 +++++++-- src/server/util/global.cpp | 13 +++++++++++++ src/server/util/global.h | 14 ++++++++++++++ 5 files changed, 45 insertions(+), 10 deletions(-) (limited to 'src/server') diff --git a/src/server/mainwindow/mainwindow.cpp b/src/server/mainwindow/mainwindow.cpp index 87e7471..c9eaf32 100644 --- a/src/server/mainwindow/mainwindow.cpp +++ b/src/server/mainwindow/mainwindow.cpp @@ -304,6 +304,7 @@ void MainWindow::tellClientCurrentSituation(Client* client) */ void MainWindow::tryToUseRoomTemplate() { + QMap > roomsList; SYSTEM_SETTINGS(conf); if (!conf.contains("rooms")) { @@ -327,7 +328,7 @@ void MainWindow::tryToUseRoomTemplate() for (int j = 0; j < size; j++) { conf.setArrayIndex(j); // qDebug() << "ip: " << conf.value("ip").toString() << " pos: " << conf.value("pos").toPoint(); - _rooms[i].append(qMakePair(conf.value("ip").toString(), conf.value("pos").toPoint())); + roomsList[i].insert(conf.value("ip").toString(), conf.value("pos").toPoint()); } conf.endArray(); @@ -338,6 +339,7 @@ void MainWindow::tryToUseRoomTemplate() if (address != QHostAddress(QHostAddress::LocalHost) && mgrIP == address.toString()) { qDebug("Found this ip in config."); + Global::setCurrentRoom(i); int size = conf.beginReadArray("client"); for (int j = 0; j < size; ++j) { conf.setArrayIndex(j); @@ -371,6 +373,7 @@ void MainWindow::tryToUseRoomTemplate() } conf.endGroup(); } + Global::setRooms(roomsList); } /***************************************************************************//** @@ -696,8 +699,8 @@ void MainWindow::onButtonReloadRoomConfig() { connect(_reloadWindow->ui->buttonBox, SIGNAL(accepted()), this, SLOT(onReloadRoomOk())); connect(_reloadWindow->ui->buttonBox, SIGNAL(rejected()), this, SLOT(onReloadRoomCancel())); - qDebug() << "in onButtonReloadRoomConfig!" << "size of room: " << _rooms.size(); - QList keyList = _rooms.keys(); + qDebug() << "in onButtonReloadRoomConfig!" << "size of room: " << Global::getRooms().size(); + QList keyList = Global::getRooms().keys(); for (QList::iterator it = keyList.begin(); it != keyList.end() ; it++) { _reloadWindow->ui->roomList->addItem(*it); } @@ -731,17 +734,18 @@ void MainWindow::onReloadRoomOk() // Load new room configuration. QString roomToReload = _reloadWindow->ui->roomList->currentItem()->data(0).toString(); // qDebug() << roomToReload; + Global::setCurrentRoom(roomToReload); _reloadWindow->ui->roomList->clear(); _reloadWindow->hide(); - QList> room = _rooms[roomToReload]; + QMap room = Global::getRooms()[roomToReload]; // qDebug() << " Room: " << room; // qDebug() << "_rooms: " << _rooms; - for (QList>::iterator it = room.begin(); it != room.end(); ++it) + for (QMap::iterator it = room.begin(); it != room.end(); ++it) { - QString computerId = (*it).first; - QPoint pos = (*it).second; + QString computerId = it.key(); + QPoint pos = it.value(); qDebug() << "ComputerID: " << computerId; qDebug() << "Pos: " << pos; diff --git a/src/server/mainwindow/mainwindow.h b/src/server/mainwindow/mainwindow.h index f8d0164..488ecc4 100644 --- a/src/server/mainwindow/mainwindow.h +++ b/src/server/mainwindow/mainwindow.h @@ -65,7 +65,6 @@ private: DiscoveryListener *_discoveryListener; FileDownloader _fileDownloader; QStringList _tutorList; - QMap > > _rooms; static const QString sStrTutorNdef; static const QString sStrTutorOffline; diff --git a/src/server/net/discoverylistener.cpp b/src/server/net/discoverylistener.cpp index f3d7d39..58e877c 100644 --- a/src/server/net/discoverylistener.cpp +++ b/src/server/net/discoverylistener.cpp @@ -159,8 +159,13 @@ void DiscoveryListener::onReadyRead() if (!Network::isAddressInList(QString::fromUtf8(iplist), addr.toString())) continue; // If so, check if the submitted hash seems valid - if (genSha1(&Global::sessionNameArray(), &salt1, &iplist) != hash) - continue; // did not match local session name + if (genSha1(&Global::sessionNameArray(), &salt1, &iplist) != hash && + !(Global::getRooms()[Global::getCurrentRoom()].contains(addr.toString()))) + { + // did not match local session name and client is not in same room. + continue; + } + qDebug("Got matching discovery request..."); QByteArray myiplist(Network::interfaceAddressesToString().toUtf8()); QSslKey key; diff --git a/src/server/util/global.cpp b/src/server/util/global.cpp index 7bb3cc0..3ddbd65 100644 --- a/src/server/util/global.cpp +++ b/src/server/util/global.cpp @@ -9,6 +9,9 @@ QString Global::_sessionName = QString(); QByteArray Global::_sessionNameArray = QByteArray(); +QMap > Global::_rooms = + QMap >(); +QString Global::_currentRoom = QString(); void Global::setSessionName(const QString& name) { @@ -22,3 +25,13 @@ void Global::setSessionName() Global::_sessionName = name; Global::_sessionNameArray = name.toUtf8(); } + +void Global::setRooms(const QMap >& roomList) +{ + Global::_rooms = roomList; +} + +void Global::setCurrentRoom(QString room) +{ + Global::_currentRoom = room; +} diff --git a/src/server/util/global.h b/src/server/util/global.h index c5e0728..d4fed6c 100644 --- a/src/server/util/global.h +++ b/src/server/util/global.h @@ -10,6 +10,10 @@ #include #include +#include +#include +#include +#include class Global { @@ -19,12 +23,22 @@ private: static QString _sessionName; static QByteArray _sessionNameArray; + static QMap > _rooms; + static QString _currentRoom; public: static const QString& sessionName() { return Global::_sessionName; } static const QByteArray& sessionNameArray() { return Global::_sessionNameArray; } static void setSessionName(const QString& name); static void setSessionName(); + + static void setRooms(const QMap > & roomList); + static const QMap >& getRooms() { + return _rooms; + } + + static void setCurrentRoom(QString room); + static const QString& getCurrentRoom() { return _currentRoom; } }; #endif /* GLOBAL_H_ */ -- cgit v1.2.3-55-g7522