summaryrefslogtreecommitdiffstats
path: root/src/ClientHandle.cpp
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2014-04-15 08:16:16 +0200
committerMattes D <github@xoft.cz>2014-04-15 08:16:16 +0200
commit112dd2c5ec60b55807f73ada7057488a98e769a5 (patch)
tree7fe960574b01b1bc1b76327a3f163fd2f69d06ce /src/ClientHandle.cpp
parentProtoProxy: Fixed weird gcc compilation errors. (diff)
parentImplemented the 1.7.6 protocol and authenticator. (diff)
downloadcuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.tar
cuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.tar.gz
cuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.tar.bz2
cuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.tar.lz
cuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.tar.xz
cuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.tar.zst
cuberite-112dd2c5ec60b55807f73ada7057488a98e769a5.zip
Diffstat (limited to '')
-rw-r--r--src/ClientHandle.cpp45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 5876e55c7..79738ff0b 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -24,13 +24,15 @@
#include "Root.h"
-#include "Authenticator.h"
+#include "Protocol/Authenticator.h"
#include "MersenneTwister.h"
#include "Protocol/ProtocolRecognizer.h"
#include "CompositeChat.h"
#include "Items/ItemSword.h"
+#include "md5/md5.h"
+
/** Maximum number of explosions to send this tick, server will start dropping if exceeded */
@@ -175,6 +177,39 @@ void cClientHandle::Destroy(void)
+void cClientHandle::GenerateOfflineUUID(void)
+{
+ m_UUID = GenerateOfflineUUID(m_Username);
+}
+
+
+
+
+
+AString cClientHandle::GenerateOfflineUUID(const AString & a_Username)
+{
+ // Proper format for a version 3 UUID is:
+ // xxxxxxxx-xxxx-3xxx-yxxx-xxxxxxxxxxxx where x is any hexadecimal digit and y is one of 8, 9, A, or B
+
+ // Generate an md5 checksum, and use it as base for the ID:
+ MD5 Checksum(a_Username);
+ AString UUID = Checksum.hexdigest();
+ UUID[12] = '3'; // Version 3 UUID
+ UUID[16] = '8'; // Variant 1 UUID
+
+ // Now the digest doesn't have the UUID slashes, but the client requires them, so add them into the appropriate positions:
+ UUID.insert(8, "-");
+ UUID.insert(13, "-");
+ UUID.insert(18, "-");
+ UUID.insert(23, "-");
+
+ return UUID;
+}
+
+
+
+
+
void cClientHandle::Kick(const AString & a_Reason)
{
if (m_State >= csAuthenticating) // Don't log pings
@@ -188,7 +223,7 @@ void cClientHandle::Kick(const AString & a_Reason)
-void cClientHandle::Authenticate(void)
+void cClientHandle::Authenticate(const AString & a_Name, const AString & a_UUID)
{
if (m_State != csAuthenticating)
{
@@ -197,6 +232,12 @@ void cClientHandle::Authenticate(void)
ASSERT( m_Player == NULL );
+ m_Username = a_Name;
+ m_UUID = a_UUID;
+
+ // Send login success (if the protocol supports it):
+ m_Protocol->SendLoginSuccess();
+
// Spawn player (only serversided, so data is loaded)
m_Player = new cPlayer(this, GetUsername());