summaryrefslogtreecommitdiffstats
path: root/signet/ConnectionHandler.cpp
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-11-01 17:01:26 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-11-01 17:01:26 +0000
commite41f087652cf102c04df1a78ac7a2c72724e740c (patch)
tree8913943b66f388bdd132e998bb3174175184898f /signet/ConnectionHandler.cpp
parenta286bb188d7654d644e2f26b71e8ddeaf4490a9d (diff)
downloadsigen-e41f087652cf102c04df1a78ac7a2c72724e740c.tar.gz
sigen-e41f087652cf102c04df1a78ac7a2c72724e740c.tar.xz
sigen-e41f087652cf102c04df1a78ac7a2c72724e740c.zip
[FIX] Challenge login can fail due to unknown user
[FIX] PacketMaker makes Packets (Packets only hold information) git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@292 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'signet/ConnectionHandler.cpp')
-rw-r--r--signet/ConnectionHandler.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/signet/ConnectionHandler.cpp b/signet/ConnectionHandler.cpp
index 98c2420b..7cab06b6 100644
--- a/signet/ConnectionHandler.cpp
+++ b/signet/ConnectionHandler.cpp
@@ -55,7 +55,7 @@ QByteArray Signet::ConnectionHandler::generateResponse(const QByteArray& key1, c
return QByteArray();
}
-Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(QTcpSocket* socket, const QByteArray& secret)
+Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(QTcpSocket* socket, const QByteArray& secret, const QByteArray& id)
{
QByteArray clientKey;
QByteArray serverKey;
@@ -63,9 +63,11 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(Q
QByteArray serverResponse;
QByteArray expectedServerResponse;
Protocol::ChallengeMediator mediator(socket, Protocol::ChallengeMediator::Client);
- mediator.init();
+ mediator.init(id);
if (!mediator.getServerKey(&serverKey))
return SocketError;
+ if (mediator.state() == Protocol::ChallengeMediator::Accepted)
+ return UnknownUser;
clientKey = generateChallengeKey();
clientResponse = generateResponse(clientKey, serverKey, secret);
expectedServerResponse = generateResponse(serverKey, clientKey, secret);
@@ -83,15 +85,20 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenge(Q
return NoError;
}
-Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged(QTcpSocket* socket)
+Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged(QTcpSocket* socket, const QByteArray& id)
{
QByteArray clientKey;
QByteArray serverKey;
QByteArray clientResponse;
QByteArray serverResponse;
QByteArray expectedClientResponse;
- QByteArray secret = secretForHost(socket->peerAddress());
+ QByteArray secret = secretForHost(id);
Protocol::ChallengeMediator mediator(socket, Protocol::ChallengeMediator::Server);
+ if (!secret.size())
+ {
+ mediator.notifyClientFail();
+ return ClientFailed;
+ }
serverKey = generateChallengeKey();
mediator.serverKey(serverKey);
if (!mediator.getClientResponse(&clientKey, &clientResponse))
@@ -100,7 +107,7 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged(
if (clientResponse != expectedClientResponse)
{
mediator.notifyClientFail();
- return ClientFailed;
+ return UnknownUser;
}
serverResponse = generateResponse(serverKey, clientKey, secret);
mediator.serverResponse(serverResponse);
@@ -111,9 +118,9 @@ Signet::ConnectionHandler::ChallengeError Signet::ConnectionHandler::challenged(
return NoError;
}
-QByteArray Signet::ConnectionHandler::secretForHost(const QHostAddress& address) const
+QByteArray Signet::ConnectionHandler::secretForHost(const QByteArray& id) const
{
- Q_UNUSED(address)
+ Q_UNUSED(id)
return QByteArray();
}