# HG changeset patch # User Wuzzy # Date 1556662403 -7200 # Node ID 9078d787d491ecc8390946d659419d1f16e820ce # Parent 349a87011080ed3c470b129a8b4aa5d97251e5e2# Parent e088bd03812d7b2aed9915eee38a95c845868d06 Merge alfadur's commits diff -r 349a87011080 -r 9078d787d491 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Wed May 01 00:11:36 2019 +0200 +++ b/QTfrontend/hwform.cpp Wed May 01 00:13:23 2019 +0200 @@ -294,7 +294,7 @@ connect(ui.pageNet->BtnNetSvrStart, SIGNAL(clicked()), pageSwitchMapper, SLOT(map())); pageSwitchMapper->setMapping(ui.pageNet->BtnNetSvrStart, ID_PAGE_NETSERVER); - connect(ui.pageNet, SIGNAL(connectClicked(const QString &, quint16)), this, SLOT(NetConnectServer(const QString &, quint16))); + connect(ui.pageNet, SIGNAL(connectClicked(const QString &, quint16, bool)), this, SLOT(NetConnectServer(const QString &, quint16, bool))); connect(ui.pageNetServer->BtnStart, SIGNAL(clicked()), this, SLOT(NetStartServer())); @@ -1155,18 +1155,18 @@ void HWForm::NetConnectQuick(const QString & host, quint16 port) { GoToPage(ID_PAGE_MAIN); - NetConnectServer(host, port); + NetConnectServer(host, port, false); } -void HWForm::NetConnectServer(const QString & host, quint16 port) +void HWForm::NetConnectServer(const QString & host, quint16 port, bool useTls) { qDebug("connecting to %s:%d", qPrintable(host), port); - _NetConnect(host, port, ui.pageOptions->editNetNick->text().trimmed()); + _NetConnect(host, port, useTls, ui.pageOptions->editNetNick->text().trimmed()); } void HWForm::NetConnectOfficialServer() { - NetConnectServer(NETGAME_DEFAULT_SERVER, NETGAME_DEFAULT_PORT); + NetConnectServer(NETGAME_DEFAULT_SERVER, NETGAME_DEFAULT_PORT, false); } void HWForm::NetPassword(const QString & nick) @@ -1261,7 +1261,7 @@ if (retry && hwnet) { if (hwnet->m_private_game) { QStringList list = hwnet->getHost().split(":"); - NetConnectServer(list.at(0), list.at(1).toShort()); + NetConnectServer(list.at(0), list.at(1).toShort(), false); } else NetConnectOfficialServer(); } @@ -1350,7 +1350,7 @@ ui.pageRoomsList->displayWarning(wrnmsg); } -void HWForm::_NetConnect(const QString & hostName, quint16 port, QString nick) +void HWForm::_NetConnect(const QString & hostName, quint16 port, bool useTls, QString nick) { Q_UNUSED(nick); @@ -1531,7 +1531,7 @@ ui.pageRoomsList->setUser(nickname); ui.pageNetGame->setUser(nickname); - hwnet->Connect(hostName, port, nickname); + hwnet->Connect(hostName, port, useTls, nickname); } int HWForm::AskForNickAndPwd(void) @@ -1585,7 +1585,7 @@ if (retry) { if (hwnet->m_private_game) { QStringList list = hwnet->getHost().split(":"); - NetConnectServer(list.at(0), list.at(1).toShort()); + NetConnectServer(list.at(0), list.at(1).toShort(), false); } else NetConnectOfficialServer(); } @@ -1631,7 +1631,7 @@ delete netHost; netHost = new QString(hpd->leHost->text()); netPort = hpd->sbPort->value(); - NetConnectServer(*netHost, netPort); + NetConnectServer(*netHost, netPort, false); } delete hpd; } @@ -1659,7 +1659,7 @@ void HWForm::AsyncNetServerStart() { - NetConnectServer("localhost", pnetserver->getRunningPort()); + NetConnectServer("localhost", pnetserver->getRunningPort(), false); } void HWForm::NetDisconnect() @@ -1688,7 +1688,7 @@ if (retry) { if (hwnet->m_private_game) { QStringList list = hwnet->getHost().split(":"); - NetConnectServer(list.at(0), list.at(1).toUInt()); + NetConnectServer(list.at(0), list.at(1).toUInt(), false); } else NetConnectOfficialServer(); } @@ -1728,8 +1728,13 @@ questionMsg.addButton(QMessageBox::No); if (questionMsg.exec() == QMessageBox::Yes) + { + QString host = hwnet->getHost().split(":").at(0); + NetConnectServer(host, port, true); + } + else if (hwnet) { - + hwnet->ContinueConnection(); } } diff -r 349a87011080 -r 9078d787d491 QTfrontend/hwform.h --- a/QTfrontend/hwform.h Wed May 01 00:11:36 2019 +0200 +++ b/QTfrontend/hwform.h Wed May 01 00:13:23 2019 +0200 @@ -100,7 +100,7 @@ void startTraining(const QString&, const QString&); void StartCampaign(); void NetConnect(); - void NetConnectServer(const QString & host, quint16 port); + void NetConnectServer(const QString & host, quint16 port, bool useTls); void NetConnectOfficialServer(); void NetStartServer(); void NetRedirected(quint16 port); @@ -159,7 +159,7 @@ void FromNetProxySlot(const QByteArray &); private: - void _NetConnect(const QString & hostName, quint16 port, QString nick); + void _NetConnect(const QString & hostName, quint16 port, bool useTls, QString nick); int AskForNickAndPwd(void); void UpdateTeamsLists(); void CreateGame(GameCFGWidget * gamecfg, TeamSelWidget* pTeamSelWidget, QString ammo); diff -r 349a87011080 -r 9078d787d491 QTfrontend/net/newnetclient.cpp --- a/QTfrontend/net/newnetclient.cpp Wed May 01 00:11:36 2019 +0200 +++ b/QTfrontend/net/newnetclient.cpp Wed May 01 00:13:23 2019 +0200 @@ -80,12 +80,23 @@ NetSocket.flush(); } -void HWNewNet::Connect(const QString & hostName, quint16 port, const QString & nick) +void HWNewNet::Connect(const QString & hostName, quint16 port, bool useTls, const QString & nick) { netClientState = Connecting; mynick = nick; myhost = hostName + QString(":%1").arg(port); - NetSocket.connectToHost(hostName, port); + if (useTls) + { + NetSocket.connectToHostEncrypted(hostName, port); + if (!NetSocket.waitForEncrypted()) + { + qWarning("Handshake failed"); + } + } + else + { + NetSocket.connectToHost(hostName, port); + } } void HWNewNet::Disconnect() @@ -257,6 +268,17 @@ maybeSendPassword(); } +void HWNewNet::ContinueConnection() +{ + if (netClientState == Connected) + { + RawSendNet(QString("NICK%1%2").arg(delimiter).arg(mynick)); + RawSendNet(QString("PROTO%1%2").arg(delimiter).arg(*cProtoVer)); + m_game_connected = true; + emit adminAccess(false); + } +} + void HWNewNet::ParseCmd(const QStringList & lst) { qDebug() << "Server: " << lst; @@ -311,6 +333,7 @@ } else { + netClientState = Redirected; emit redirected(port); } return; @@ -328,11 +351,12 @@ return; } - RawSendNet(QString("NICK%1%2").arg(delimiter).arg(mynick)); - RawSendNet(QString("PROTO%1%2").arg(delimiter).arg(*cProtoVer)); - netClientState = Connected; - m_game_connected = true; - emit adminAccess(false); + ClientState lastState = netClientState; + netClientState = Connected; + if (lastState != Redirected) + { + ContinueConnection(); + } return; } diff -r 349a87011080 -r 9078d787d491 QTfrontend/net/newnetclient.h --- a/QTfrontend/net/newnetclient.h Wed May 01 00:11:36 2019 +0200 +++ b/QTfrontend/net/newnetclient.h Wed May 01 00:13:23 2019 +0200 @@ -22,7 +22,7 @@ #include #include -#include +#include #include #include "team.h" @@ -43,11 +43,12 @@ Q_OBJECT public: - enum ClientState { Disconnected, Connecting, Connected, InLobby, InRoom, InGame }; + enum ClientState { Disconnected, Connecting, Redirected, Connected, InLobby, InRoom, InGame }; HWNewNet(); ~HWNewNet(); - void Connect(const QString & hostName, quint16 port, const QString & nick); + void Connect(const QString & hostName, quint16 port, bool useTls, const QString & nick); + void ContinueConnection(); void Disconnect(); void SendPasswordHash(const QString & hash); void NewNick(const QString & nick); @@ -68,7 +69,7 @@ QString mynick; QString myroom; QString myhost; - QTcpSocket NetSocket; + QSslSocket NetSocket; QString seed; bool m_game_connected; bool m_nick_registered; @@ -87,7 +88,7 @@ int ByteLength(const QString & str); void RawSendNet(const QString & buf); void RawSendNet(const QByteArray & buf); - void ParseCmd(const QStringList & lst); + void ParseCmd(const QStringList & lst); void handleNotice(int n); void maybeSendPassword(); diff -r 349a87011080 -r 9078d787d491 QTfrontend/ui/page/pagenet.cpp --- a/QTfrontend/ui/page/pagenet.cpp Wed May 01 00:11:36 2019 +0200 +++ b/QTfrontend/ui/page/pagenet.cpp Wed May 01 00:13:23 2019 +0200 @@ -128,5 +128,5 @@ QString host = model->index(mi.row(), 1).data().toString(); quint16 port = model->index(mi.row(), 2).data().toUInt(); - emit connectClicked(host, port); + emit connectClicked(host, port, false); } diff -r 349a87011080 -r 9078d787d491 QTfrontend/ui/page/pagenet.h --- a/QTfrontend/ui/page/pagenet.h Wed May 01 00:11:36 2019 +0200 +++ b/QTfrontend/ui/page/pagenet.h Wed May 01 00:13:23 2019 +0200 @@ -38,7 +38,7 @@ void updateServersList(); signals: - void connectClicked(const QString & host, quint16 port); + void connectClicked(const QString & host, quint16 port, bool useTls); private: QLayout * bodyLayoutDefinition();