diff options
-rw-r--r-- | src/client/net/serverdiscovery.cpp | 6 | ||||
-rw-r--r-- | src/client/toolbar/toolbar.cpp | 19 | ||||
-rw-r--r-- | src/server/mainwindow/mainwindow.cpp | 18 | ||||
-rw-r--r-- | src/server/mainwindow/mainwindow.h | 1 | ||||
-rw-r--r-- | src/server/net/discoverylistener.cpp | 9 | ||||
-rw-r--r-- | src/server/util/global.cpp | 13 | ||||
-rw-r--r-- | src/server/util/global.h | 14 |
7 files changed, 53 insertions, 27 deletions
diff --git a/src/client/net/serverdiscovery.cpp b/src/client/net/serverdiscovery.cpp index 2cd0796..0062561 100644 --- a/src/client/net/serverdiscovery.cpp +++ b/src/client/net/serverdiscovery.cpp @@ -47,10 +47,10 @@ ServerDiscovery::~ServerDiscovery() */ void ServerDiscovery::start(const QByteArray& sessionName, QString mgrIP) { - if (mgrIP != NULL) { + if (!mgrIP.isEmpty()) { _mgrIP.setAddress(mgrIP); } else { - _mgrIP = NULL; + _mgrIP = QHostAddress::Null; } //assert(!this->isActive()); @@ -176,7 +176,7 @@ void ServerDiscovery::onUdpReadyRead() } // If so, check if the submitted hash seems valid - if (genSha1(&_nameBytes, &_salt2, &iplist, &port, &cert) != hash) + if (genSha1(&_nameBytes, &_salt2, &iplist, &port, &cert) != hash && _mgrIP != addr) { // did not match local session name, or other data was spoofed ++_hashErrorCount; diff --git a/src/client/toolbar/toolbar.cpp b/src/client/toolbar/toolbar.cpp index 0111c1c..4b64b62 100644 --- a/src/client/toolbar/toolbar.cpp +++ b/src/client/toolbar/toolbar.cpp @@ -30,7 +30,7 @@ Toolbar::Toolbar(const QByteArray sessionName, QWidget *parent) : Toolbar(parent) { qDebug() << "sessionName - constructor"; - _connectWindow->connectToSession(sessionName, NULL); + _connectWindow->connectToSession(sessionName, ""); } /***************************************************************************//** @@ -50,16 +50,7 @@ Toolbar::Toolbar(const bool autoConnect, QWidget *parent) : Toolbar(parent) if (autoConnect) { // Try getting manager ip. QString mgrIp = identifyMgrIP(); - qDebug() << "mgrIP: " << mgrIp; - if (mgrIp != NULL) { - qDebug() << "Starting WITH specific mgrIP"; - _connectWindow->connectToSession("", mgrIp); - } else { - qDebug() << "Starting WITHOUT specific mgrIP"; - _connectWindow->connectToSession("", NULL); - } - } else { - _connectWindow->connectToSession("", NULL); + _connectWindow->connectToSession("", mgrIp); } } @@ -183,7 +174,7 @@ QString Toolbar::identifyMgrIP() if (!conf.contains("rooms")) { qDebug() << "Invalid config file!"; - return NULL; + return ""; } QStringList rooms = conf.value("rooms").toStringList(); @@ -195,7 +186,7 @@ QString Toolbar::identifyMgrIP() conf.beginGroup(i); if (!conf.contains("mgrIP")) { qDebug() << "Invalid config file!"; - return NULL; + return ""; } // Find the managerIP of current room. @@ -222,7 +213,7 @@ QString Toolbar::identifyMgrIP() } conf.endGroup(); } - return NULL; + return ""; } /* 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<QString, QMap<QString, QPoint> > 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<QString> keyList = _rooms.keys(); + qDebug() << "in onButtonReloadRoomConfig!" << "size of room: " << Global::getRooms().size(); + QList<QString> keyList = Global::getRooms().keys(); for (QList<QString>::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<QPair<QString, QPoint>> room = _rooms[roomToReload]; + QMap<QString, QPoint> room = Global::getRooms()[roomToReload]; // qDebug() << " Room: " << room; // qDebug() << "_rooms: " << _rooms; - for (QList<QPair<QString, QPoint>>::iterator it = room.begin(); it != room.end(); ++it) + for (QMap<QString, QPoint>::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<QString, QList<QPair<QString, QPoint> > > _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<QString, QMap<QString, QPoint> > Global::_rooms = + QMap<QString, QMap<QString, QPoint> >(); +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<QString, QMap<QString, QPoint> >& 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 <QString> #include <QByteArray> +#include <QMap> +#include <QPair> +#include <QPoint> +#include <QList> class Global { @@ -19,12 +23,22 @@ private: static QString _sessionName; static QByteArray _sessionNameArray; + static QMap<QString, QMap<QString, QPoint> > _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<QString, QMap<QString, QPoint> > & roomList); + static const QMap<QString, QMap<QString, QPoint> >& getRooms() { + return _rooms; + } + + static void setCurrentRoom(QString room); + static const QString& getCurrentRoom() { return _currentRoom; } }; #endif /* GLOBAL_H_ */ |