From 4bf1fc4ac1718afae4657e06262cdd34ac2acb4a Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 13 Aug 2023 12:05:52 +1000 Subject: [PATCH] Fix b5acd75c3e1dc8cbf9f9dc24388b25e3cff737c1 accidentally causing User Agent header to no longer include special platform names --- src/Http_Worker.c | 22 +++++++++++++++------- src/Program.c | 4 ++-- src/Protocol.c | 21 ++++++++++++--------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/Http_Worker.c b/src/Http_Worker.c index 3ddf533cc..2b935289c 100644 --- a/src/Http_Worker.c +++ b/src/Http_Worker.c @@ -121,6 +121,17 @@ static void Http_SetRequestHeaders(struct HttpRequest* req) { Http_AddHeader(req, "Cookie", &cookies); } +/* TODO: Rewrite to use a local variable instead */ +static cc_string* Http_GetUserAgent_UNSAFE(void) { + static char userAgentBuffer[STRING_SIZE]; + static cc_string userAgent; + + String_InitArray(userAgent, userAgentBuffer); + String_AppendConst(&userAgent, GAME_APP_NAME); + String_AppendConst(&userAgent, Platform_AppNameSuffix); + return &userAgent; +} + static void Http_SignalWorker(void) { Waitable_Signal(workerWaitable); } /* Adds a req to the list of pending requests, waking up worker thread if needed */ @@ -634,8 +645,7 @@ static void HttpClientState_Init(struct HttpClientState* state) { static void HttpClient_Serialise(struct HttpClientState* state) { - static const cc_string userAgent = String_FromConst(GAME_APP_NAME); - static const char* verbs[3] = { "GET", "HEAD", "POST" }; + static const char* verbs[] = { "GET", "HEAD", "POST" }; struct HttpRequest* req = state->req; cc_string* buffer = (cc_string*)req->meta; @@ -645,7 +655,7 @@ static void HttpClient_Serialise(struct HttpClientState* state) { verbs[req->requestType], &state->url.resource); Http_AddHeader(req, "Host", &state->url.address); - Http_AddHeader(req, "User-Agent", &userAgent); + Http_AddHeader(req, "User-Agent", Http_GetUserAgent_UNSAFE()); if (req->data) String_Format1(buffer, "Content-Length: %i\r\n", &req->size); Http_SetRequestHeaders(req); @@ -1306,7 +1316,6 @@ static cc_result Http_SetData(JNIEnv* env, struct HttpRequest* req) { } static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) { - static const cc_string userAgent = String_FromConst(GAME_APP_NAME); JNIEnv* env; jint res; @@ -1315,7 +1324,7 @@ static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) { java_req = req; Http_SetRequestHeaders(req); - Http_AddHeader(req, "User-Agent", &userAgent); + Http_AddHeader(req, "User-Agent", Http_GetUserAgent_UNSAFE()); if (req->data && (res = Http_SetData(env, req))) return res; req->_capacity = 0; @@ -1381,7 +1390,6 @@ static cc_result ParseResponseHeaders(struct HttpRequest* req, CFReadStreamRef s } static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) { - static const cc_string userAgent = String_FromConst(GAME_APP_NAME); static CFStringRef verbs[] = { CFSTR("GET"), CFSTR("HEAD"), CFSTR("POST") }; cc_bool gotHeaders = false; char tmp[NATIVE_STR_LEN]; @@ -1400,7 +1408,7 @@ static cc_result HttpBackend_Do(struct HttpRequest* req, cc_string* url) { request = CFHTTPMessageCreateRequest(NULL, verbs[req->requestType], urlRef, kCFHTTPVersion1_1); req->meta = request; Http_SetRequestHeaders(req); - Http_AddHeader(req, "User-Agent", &userAgent); + Http_AddHeader(req, "User-Agent", Http_GetUserAgent_UNSAFE()); CFRelease(urlRef); if (req->data && req->size) { diff --git a/src/Program.c b/src/Program.c index 7e40eda0d..6bdb38b59 100644 --- a/src/Program.c +++ b/src/Program.c @@ -76,9 +76,9 @@ static int RunProgram(int argc, char** argv) { int argsCount = Platform_GetCommandLineArgs(argc, argv, args); #ifdef _MSC_VER /* NOTE: Make sure to comment this out before pushing a commit */ - //cc_string rawArgs = String_FromConst("UnknownShadow200 fffff 127.0.0.1 25565"); + cc_string rawArgs = String_FromConst("UnknownShadow200 fffff 127.0.0.1 25565"); //cc_string rawArgs = String_FromConst("UnknownShadow200"); - //argsCount = String_UNSAFE_Split(&rawArgs, ' ', args, 4); + argsCount = String_UNSAFE_Split(&rawArgs, ' ', args, 4); #endif if (argsCount == 0) { diff --git a/src/Protocol.c b/src/Protocol.c index 2a0413a45..18f2ddef8 100644 --- a/src/Protocol.c +++ b/src/Protocol.c @@ -73,7 +73,7 @@ static struct CpeExt blockDefsExt_Ext = { "BlockDefinitionsExt", 2 }, bulkBlockUpdate_Ext = { "BulkBlockUpdate", 1 }, textColors_Ext = { "TextColors", 1 }, - envMapAspect_Ext = { "EnvMapAspect", 1 }, + envMapAspect_Ext = { "EnvMapAspect", 2 }, entityProperty_Ext = { "EntityProperty", 1 }, extEntityPos_Ext = { "ExtEntityPositions", 1 }, twoWayPing_Ext = { "TwoWayPing", 1 }, @@ -819,7 +819,6 @@ static cc_uint8* Classic_Tick(cc_uint8* data) { /*########################################################################################################################* *------------------------------------------------------CPE protocol-------------------------------------------------------* *#########################################################################################################################*/ - static void CPEExtensions_Reset(void) { struct CpeExt* ext; int i; @@ -842,7 +841,6 @@ static struct CpeExt* CPEExtensions_Find(const cc_string* name) { } return NULL; } -static void CPE_SetMapEnvUrl(cc_uint8* data); #define Ext_Deg2Packed(x) ((int)((x) * 65536.0f / 360.0f)) void CPE_SendPlayerClick(int button, cc_bool pressed, cc_uint8 targetId, struct RayTracer* t) { @@ -1025,6 +1023,14 @@ static void CPE_ExtEntry(cc_uint8* data) { #endif } +static void CPE_ApplyTexturePack(const cc_string* url) { + if (!url->length || Utils_IsUrlPrefix(url)) { + Server_RetrieveTexturePack(url); + } + Platform_Log1("Tex url: %s", url); +} + + static void CPE_SetClickDistance(cc_uint8* data) { LocalPlayer_Instance.ReachDistance = Stream_GetU16_BE(data) / 32.0f; } @@ -1173,9 +1179,10 @@ static void CPE_ChangeModel(cc_uint8* data) { } static void CPE_EnvSetMapAppearance(cc_uint8* data) { + cc_string url = UNSAFE_GetString(data); int maxViewDist; + CPE_ApplyTexturePack(&url); - CPE_SetMapEnvUrl(data); Env_SetSidesBlock(data[64]); Env_SetEdgeBlock(data[65]); Env_SetEdgeHeight((cc_int16)Stream_GetU16_BE(data + 66)); @@ -1280,11 +1287,7 @@ static void CPE_SetTextColor(cc_uint8* data) { static void CPE_SetMapEnvUrl(cc_uint8* data) { cc_string url = UNSAFE_GetString(data); - - if (!url.length || Utils_IsUrlPrefix(&url)) { - Server_RetrieveTexturePack(&url); - } - Platform_Log1("Tex url: %s", &url); + CPE_ApplyTexturePack(&url); } static void CPE_SetMapEnvProperty(cc_uint8* data) {