summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-11-02 23:33:52 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-11-02 23:33:52 +0000
commite6ea5a782398c6cb8257e7b178b7cd180b6e4c91 (patch)
tree243f78c2d1c62c1defca8620f14a0a783f3d5cab
parentaaf9850c8350e3d7d20a91d3fe4e026576a7a032 (diff)
downloadsigen-e6ea5a782398c6cb8257e7b178b7cd180b6e4c91.tar.gz
sigen-e6ea5a782398c6cb8257e7b178b7cd180b6e4c91.tar.xz
sigen-e6ea5a782398c6cb8257e7b178b7cd180b6e4c91.zip
[FIX] Minor fixes with the ChallengeMediator
[ADD] Added ConnectMediator code [FIX] Added more packet types git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@297 6ecfd1a5-f3ed-3746-8530-beee90d26b22
-rw-r--r--Changelog9
-rw-r--r--signet/CMakeLists.txt1
-rw-r--r--signet/Table.cpp8
-rw-r--r--signet/protocol/ChallengeMediator.cpp18
-rw-r--r--signet/protocol/ConnectMediator.cpp74
-rw-r--r--signet/protocol/ConnectMediator.h7
-rw-r--r--signet/protocol/Packet.h32
-rw-r--r--signet/protocol/PacketMaker.cpp20
-rw-r--r--signet/protocol/PacketMaker.h4
9 files changed, 155 insertions, 18 deletions
diff --git a/Changelog b/Changelog
index f6937210..d3a6b8e0 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,13 @@
-----------------
+Rev: 297
+Date: 2 November 2008
+User: MathStuf
+-----------------
+[FIX] Minor fixes with the ChallengeMediator
+[ADD] Added ConnectMediator code
+[FIX] Added more packet types
+
+-----------------
Rev: 296
Date: 2 November 2008
User: MathStuf
diff --git a/signet/CMakeLists.txt b/signet/CMakeLists.txt
index 190c5520..3aeb09dd 100644
--- a/signet/CMakeLists.txt
+++ b/signet/CMakeLists.txt
@@ -23,6 +23,7 @@ SET(signet_HEADERS
)
SET(signet_PROTOCOL_SRCS
protocol/ChallengeMediator.cpp
+ protocol/ConnectMediator.cpp
protocol/Packet.cpp
protocol/PacketMaker.cpp
)
diff --git a/signet/Table.cpp b/signet/Table.cpp
index 5cd6373d..89012237 100644
--- a/signet/Table.cpp
+++ b/signet/Table.cpp
@@ -38,5 +38,11 @@ void Signet::Table::packetReceived(QTcpSocket* client, Protocol::Packet* packet)
// TODO: Handle the packet
}
else
- Protocol::PacketMaker::unknownReceiver(client);
+ {
+ if (receiver == "spectators")
+ {
+ }
+ else
+ Protocol::PacketMaker::unknownReceiver(client);
+ }
}
diff --git a/signet/protocol/ChallengeMediator.cpp b/signet/protocol/ChallengeMediator.cpp
index 0f09faff..45d70deb 100644
--- a/signet/protocol/ChallengeMediator.cpp
+++ b/signet/protocol/ChallengeMediator.cpp
@@ -116,7 +116,7 @@ void Signet::Protocol::ChallengeMediator::init(const QByteArray& id)
void Signet::Protocol::ChallengeMediator::sendServerKey(const QByteArray& serverKey)
{
- PacketMaker::rawData(m_socket, serverKey);
+ PacketMaker::challengeKey(m_socket, serverKey);
}
void Signet::Protocol::ChallengeMediator::recvServerKey(QByteArray* serverKey)
@@ -125,7 +125,7 @@ void Signet::Protocol::ChallengeMediator::recvServerKey(QByteArray* serverKey)
Packet packet = PacketMaker::unwrap(m_socket);
if (packet.isValid())
{
- if (packet.type() == Packet::RawData)
+ if (packet.type() == Packet::ChallengeKey)
packet.rawDump(&buffer);
else if (packet.type() == Packet::Denial)
m_error = UnknownUser;
@@ -138,8 +138,8 @@ void Signet::Protocol::ChallengeMediator::recvServerKey(QByteArray* serverKey)
void Signet::Protocol::ChallengeMediator::sendClientResponse(const QByteArray& clientKey, const QByteArray& clientResponse)
{
- PacketMaker::rawData(m_socket, clientKey);
- PacketMaker::rawData(m_socket, clientResponse);
+ PacketMaker::challengeKey(m_socket, clientKey);
+ PacketMaker::challengeResponse(m_socket, clientResponse);
}
void Signet::Protocol::ChallengeMediator::recvClientResponse(QByteArray* clientKey, QByteArray* clientResponse)
@@ -148,18 +148,20 @@ void Signet::Protocol::ChallengeMediator::recvClientResponse(QByteArray* clientK
Packet packet = PacketMaker::unwrap(m_socket);
if (packet.isValid())
{
- if (packet.type() == Packet::RawData)
+ if (packet.type() == Packet::ChallengeKey)
{
packet.rawDump(&buffer);
buffer.setBuffer(clientResponse);
packet = PacketMaker::unwrap(m_socket);
if (packet.isValid())
{
- if (packet.type() == Packet::RawData)
+ if (packet.type() == Packet::ChallengeResponse)
packet.rawDump(&buffer);
else
m_error = UnexpectedError;
}
+ else
+ m_error = SocketError;
}
else
m_error = UnexpectedError;
@@ -170,7 +172,7 @@ void Signet::Protocol::ChallengeMediator::recvClientResponse(QByteArray* clientK
void Signet::Protocol::ChallengeMediator::sendServerResponse(const QByteArray& serverResponse)
{
- PacketMaker::rawData(m_socket, serverResponse);
+ PacketMaker::challengeResponse(m_socket, serverResponse);
}
void Signet::Protocol::ChallengeMediator::recvServerResponse(QByteArray* serverResponse)
@@ -179,7 +181,7 @@ void Signet::Protocol::ChallengeMediator::recvServerResponse(QByteArray* serverR
Packet packet = PacketMaker::unwrap(m_socket);
if (packet.isValid())
{
- if (packet.type() == Packet::RawData)
+ if (packet.type() == Packet::ChallengeResponse)
packet.rawDump(&buffer);
else if (packet.type() == Packet::Denial)
m_error = ClientFailed;
diff --git a/signet/protocol/ConnectMediator.cpp b/signet/protocol/ConnectMediator.cpp
new file mode 100644
index 00000000..5610281a
--- /dev/null
+++ b/signet/protocol/ConnectMediator.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2008 Ben Boeckel <MathStuf@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Header include
+#include "ConnectMediator.h"
+
+// Protocol includes
+#include "PacketMaker.h"
+
+// Qt includes
+#include <QtNetwork/QTcpSocket>
+
+Signet::Protocol::ConnectMediator::ConnectMediator(QTcpSocket* socket, Side side) :
+ m_side(side),
+ m_error(NoError),
+ m_socket(socket)
+{
+}
+
+Signet::Protocol::ConnectMediator::Error Signet::Protocol::ConnectMediator::requestConnection()
+{
+ if (m_side != Client)
+ return SideError;
+ init();
+ recvAck();
+ return m_error;
+}
+
+Signet::Protocol::ConnectMediator::Error Signet::Protocol::ConnectMediator::replyToConnection()
+{
+ if (m_side != Server)
+ return SideError;
+ recvAck();
+ if (m_error != NoError)
+ return m_error;
+ sendAck();
+ return m_error;
+}
+
+void Signet::Protocol::ConnectMediator::init()
+{
+ PacketMaker::makeConnection(m_socket);
+}
+
+void Signet::Protocol::ConnectMediator::sendAck()
+{
+ PacketMaker::ack(m_socket);
+}
+
+void Signet::Protocol::ConnectMediator::recvAck()
+{
+ Packet packet = PacketMaker::unwrap(m_socket);
+ if (packet.isValid())
+ {
+ if (packet.type() != Packet::Acknowledge)
+ m_error = UnexpectedError;
+ }
+ else
+ m_error = SocketError;
+}
diff --git a/signet/protocol/ConnectMediator.h b/signet/protocol/ConnectMediator.h
index 78c91fc3..666d7409 100644
--- a/signet/protocol/ConnectMediator.h
+++ b/signet/protocol/ConnectMediator.h
@@ -21,6 +21,9 @@
// Signet includes
#include "../Global.h"
+// Forward declarations
+class QTcpSocket;
+
namespace Signet
{
namespace Protocol
@@ -51,6 +54,10 @@ class SIGNET_IMPORT ConnectMediator
void sendAck();
void recvAck();
+ private:
+ const Side m_side;
+ Error m_error;
+ QTcpSocket* m_socket;
};
}
}
diff --git a/signet/protocol/Packet.h b/signet/protocol/Packet.h
index a66e94d2..1f426e16 100644
--- a/signet/protocol/Packet.h
+++ b/signet/protocol/Packet.h
@@ -38,27 +38,41 @@ class SIGNET_IMPORT Packet
enum Type
{
// Errors
- UnknownReceiver = 0x7F00,
- UnhandledPacket = 0x7F01,
- LimitedPermissions = 0x7F02,
- Invalid = 0x7FFF,
+ UnknownReceiver = 0x4000,
+ UnhandledPacket = 0x4001,
+ LimitedPermissions = 0x4002,
+ Invalid = 0x40FF,
// Requests
ConnectRequest = 0x0100,
DisconnectRequest = 0x0101,
ChallengeRequest = 0x0102,
- ServerListRequest = 0x0103,
- UserListRequest = 0x0104,
+ UserListRequest = 0x0103,
+ ServerListRequest = 0x0104,
RoomListRequest = 0x0105,
TableListRequest = 0x0106,
SigmodListRequest = 0x0107,
SigmodRequest = 0x0108,
-
- // Data types
+ TableState = 0x0109,
+ DecisionRequest = 0x010A,
+ // Data
RawData = 0x0200,
Acceptance = 0x0201,
Denial = 0x0202,
- Message = 0x0204,
+ Acknowledge = 0x0203,
+ ChallengeKey = 0x0204,
+ ChallengeResponse = 0x0205,
+ Message = 0x0206,
+ ServerList = 0x0207,
+ UserList = 0x0208,
+ RoomList = 0x0209,
+ SigmodList = 0x020A,
+ Sigmod = 0x020B,
+ BattleState = 0x020C,
+ MapState = 0x020D,
+ Decision = 0x020E,
+ // Updates
};
+
enum SectionType
{
Receiver = 0,
diff --git a/signet/protocol/PacketMaker.cpp b/signet/protocol/PacketMaker.cpp
index 5ede3996..a5b8e890 100644
--- a/signet/protocol/PacketMaker.cpp
+++ b/signet/protocol/PacketMaker.cpp
@@ -68,6 +68,12 @@ void Signet::Protocol::PacketMaker::accept(QIODevice* device, const QStringList&
packet.dump(device);
}
+void Signet::Protocol::PacketMaker::ack(QIODevice* device, const QStringList& receivers)
+{
+ Packet packet(Packet::Acceptance, receivers);
+ packet.dump(device);
+}
+
void Signet::Protocol::PacketMaker::challenge(QIODevice* device, const QByteArray& id, const QStringList& receivers)
{
Packet packet(Packet::ChallengeRequest, receivers);
@@ -75,6 +81,20 @@ void Signet::Protocol::PacketMaker::challenge(QIODevice* device, const QByteArra
packet.dump(device);
}
+void Signet::Protocol::PacketMaker::challengeKey(QIODevice* device, const QByteArray& key, const QStringList& receivers)
+{
+ Packet packet(Packet::ChallengeKey, receivers);
+ packet.write(key);
+ packet.dump(device);
+}
+
+void Signet::Protocol::PacketMaker::challengeResponse(QIODevice* device, const QByteArray& response, const QStringList& receivers)
+{
+ Packet packet(Packet::ChallengeResponse, receivers);
+ packet.write(response);
+ packet.dump(device);
+}
+
void Signet::Protocol::PacketMaker::makeConnection(QIODevice* device, const QStringList& receivers)
{
Packet packet(Packet::ConnectRequest, receivers);
diff --git a/signet/protocol/PacketMaker.h b/signet/protocol/PacketMaker.h
index f044b20a..46d45f77 100644
--- a/signet/protocol/PacketMaker.h
+++ b/signet/protocol/PacketMaker.h
@@ -41,7 +41,11 @@ class SIGNET_IMPORT PacketMaker
static void deny(QIODevice* device, const QStringList& receivers = QStringList());
static void accept(QIODevice* device, const QStringList& receivers = QStringList());
+ static void ack(QIODevice* device, const QStringList& receivers = QStringList());
+
static void challenge(QIODevice* device, const QByteArray& id, const QStringList& receivers = QStringList());
+ static void challengeKey(QIODevice* device, const QByteArray& key, const QStringList& receivers = QStringList());
+ static void challengeResponse(QIODevice* device, const QByteArray& response, const QStringList& receivers = QStringList());
static void message(QIODevice* device, const QString& message, const QStringList& receivers = QStringList());