diff --git a/cockatrice/src/remoteclient.cpp b/cockatrice/src/remoteclient.cpp index b652726d..59b8e73b 100644 --- a/cockatrice/src/remoteclient.cpp +++ b/cockatrice/src/remoteclient.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "remoteclient.h" #include "settingscache.h" #include "pending_command.h" @@ -81,7 +82,7 @@ void RemoteClient::processServerIdentificationEvent(const Event_ServerIdentifica cmdRegister.set_gender((ServerInfo_User_Gender) gender); cmdRegister.set_country(country.toStdString()); cmdRegister.set_real_name(realName.toStdString()); - cmdRegister.set_clientid(settingsCache->getClientID().toStdString()); + cmdRegister.set_clientid(getSrvClientID(lastHostname).toStdString()); PendingCommand *pend = prepareSessionCommand(cmdRegister); connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this, SLOT(registerResponse(Response))); sendCommand(pend); @@ -107,11 +108,10 @@ void RemoteClient::processServerIdentificationEvent(const Event_ServerIdentifica void RemoteClient::doLogin() { setStatus(StatusLoggingIn); - Command_Login cmdLogin; cmdLogin.set_user_name(userName.toStdString()); cmdLogin.set_password(password.toStdString()); - cmdLogin.set_clientid(settingsCache->getClientID().toStdString()); + cmdLogin.set_clientid(getSrvClientID(lastHostname).toStdString()); cmdLogin.set_clientver(VERSION_STRING); if (!clientFeatures.isEmpty()) { @@ -119,7 +119,6 @@ void RemoteClient::doLogin() { for (i = clientFeatures.begin(); i != clientFeatures.end(); ++i) cmdLogin.add_clientfeatures(i.key().toStdString().c_str()); } - PendingCommand *pend = prepareSessionCommand(cmdLogin); connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this, SLOT(loginResponse(Response))); sendCommand(pend); @@ -263,7 +262,6 @@ void RemoteClient::doConnectToServer(const QString &hostname, unsigned int port, userName = _userName; password = _password; - QString clientid = settingsCache->getClientID(); lastHostname = hostname; lastPort = port; @@ -363,3 +361,11 @@ void RemoteClient::disconnectFromServer() { emit sigDisconnectFromServer(); } + +QString RemoteClient::getSrvClientID(const QString _hostname) +{ + QString srvClientID = settingsCache->getClientID(); + srvClientID += _hostname; + QString uniqueServerClientID = QCryptographicHash::hash(srvClientID.toUtf8(), QCryptographicHash::Sha1).toHex().right(15); + return uniqueServerClientID; +} \ No newline at end of file diff --git a/cockatrice/src/remoteclient.h b/cockatrice/src/remoteclient.h index 3e0ae971..ed0b66db 100644 --- a/cockatrice/src/remoteclient.h +++ b/cockatrice/src/remoteclient.h @@ -51,6 +51,7 @@ private: QTcpSocket *socket; QString lastHostname; int lastPort; + QString getSrvClientID(const QString _hostname); protected slots: void sendCommandContainer(const CommandContainer &cont); public: diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index 036f6966..f9456162 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -176,7 +176,7 @@ public: bool getRememberGameSettings() const { return rememberGameSettings; } int getKeepAlive() const { return keepalive; } void setClientID(QString clientID); - QString getClientID() { return clientID; } + QString getClientID() { return clientID; } ShortcutsSettings& shortcuts() const { return *shortcutsSettings; } CardDatabaseSettings& cardDatabase() const { return *cardDatabaseSettings; } ServersSettings& servers() const { return *serversSettings; }