Files
MCLEClient/Minecraft.Client/ClientConstants.cpp
T
2026-06-14 10:23:25 +02:00

144 lines
3.3 KiB
C++

#include "stdafx.h"
#include "ClientConstants.h"
#include <windows.h>
#include <wininet.h>
#include <string>
#pragma comment(lib, "wininet.lib")
extern char g_LCENToken[512];
const wchar_t* ClientConstants::LCEN_HOST = L"https://network-server-7kuc.onrender.com";
const std::wstring ClientConstants::VERSION_STRING =
L"Minecraft: Legacy Network Beta Build 2026.06.14-128 [DO NOT DISTRIBUTE]";
static std::wstring g_cachedStatus = L"LCEN: Establishing a connection";
static CRITICAL_SECTION g_statusLock;
static bool g_threadStarted = false;
static HANDLE g_threadHandle = nullptr;
DWORD WINAPI LCENStatusThread(LPVOID)
{
while (true)
{
std::wstring newStatus = L"LCE Network offline";
if (g_LCENToken[0] != '\0')
{
HINTERNET hNet = InternetOpenA("openLCE", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hNet)
{
char authHeader[600];
_snprintf_s(authHeader, sizeof(authHeader), _TRUNCATE, "Authorization: Bearer %s", g_LCENToken);
HINTERNET hReq = InternetOpenUrlA(
hNet,
"https://network-server-7kuc.onrender.com/auth/validate",
authHeader,
(DWORD)strlen(authHeader),
INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE,
0
);
if (hReq)
{
char buf[4096] = {};
DWORD read = 0;
InternetReadFile(hReq, buf, sizeof(buf) - 1, &read);
if (read > 0)
{
if (strstr(buf, "\"Account banned\""))
{
newStatus = L"LCEN could not connect: Banned user profile";
}
else if (strstr(buf, "\"reason\":\""))
{
const char* r = strstr(buf, "\"reason\":\"") + 10;
const char* end = strchr(r, '"');
if (end)
{
char reason[128] = {};
size_t len = min((size_t)(end - r), sizeof(reason) - 1);
strncpy_s(reason, r, len);
wchar_t wReason[128] = {};
MultiByteToWideChar(CP_UTF8, 0, reason, -1, wReason, 128);
newStatus = L"Banned dum dum: ";
newStatus += wReason;
}
}
else if (strstr(buf, "\"Invalid token\""))
{
newStatus = L"LCEN could not connect: Invalid Token";
}
else if (strstr(buf, "\"gamertag\":\""))
{
const char* g = strstr(buf, "\"gamertag\":\"") + 12;
const char* end = strchr(g, '"');
if (end)
{
char gamertag[64] = {};
size_t len = min((size_t)(end - g), sizeof(gamertag) - 1);
strncpy_s(gamertag, g, len);
wchar_t wGamertag[64] = {};
MultiByteToWideChar(CP_UTF8, 0, gamertag, -1, wGamertag, 64);
newStatus = L"[Connected] ";
newStatus += wGamertag;
}
}
else
{
newStatus = L"LCE Network Authentication failed";
}
}
InternetCloseHandle(hReq);
}
InternetCloseHandle(hNet);
}
}
else
{
newStatus = L"Not connected with LCEN servers";
}
EnterCriticalSection(&g_statusLock);
g_cachedStatus = newStatus;
LeaveCriticalSection(&g_statusLock);
Sleep(2000);
}
return 0;
}
static void InitLCENSystem()
{
if (g_threadStarted)
return;
g_threadStarted = true;
InitializeCriticalSection(&g_statusLock);
g_threadHandle = CreateThread(nullptr, 0, LCENStatusThread, nullptr, 0, nullptr);
}
std::wstring ClientConstants::GetLCENString()
{
InitLCENSystem();
EnterCriticalSection(&g_statusLock);
std::wstring copy = g_cachedStatus;
LeaveCriticalSection(&g_statusLock);
return copy;
}