diff --git a/code/modules/tgui/helpers.dm b/code/modules/tgui/helpers.dm index 40e1ee3d653..0ed34ddefff 100644 --- a/code/modules/tgui/helpers.dm +++ b/code/modules/tgui/helpers.dm @@ -24,38 +24,10 @@ deltimer(partial_packets["timeout"]) partial_packets = null + if (!rustg_json_is_valid(assembled_payload)) + log_tgui(usr, "Error: Invalid JSON") + return return json_decode(assembled_payload) /datum/tgui_say/proc/clear_oversized_payload() partial_packets = null - -/datum/tgui/proc/handle_packets(id, total_packets, packet) - id = text2num(id) - - var/total = text2num(total_packets) - if(id == 1) - if(total > MAX_MESSAGE_CHUNKS) - return null - - partial_packets = list("chunks" = new /list(total), - "timeout" = addtimer(CALLBACK(src, PROC_REF(clear_oversized_payload)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) - ) - - var/list/chunks = partial_packets["chunks"] - chunks[id] = packet - - if(id != total) - if(id > 1) - partial_packets["timeout"] = addtimer(CALLBACK(src, PROC_REF(clear_oversized_payload)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) - return null - - var/assembled_payload = "" - for(var/received_packet in partial_packets["chunks"]) - assembled_payload += received_packet - - deltimer(partial_packets["timeout"]) - partial_packets = null - return json_decode(assembled_payload) - -/datum/tgui/proc/clear_oversized_payload() - partial_packets = null diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index a788a7d947e..94af74f80e3 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -380,11 +380,6 @@ // Pass act type messages to tgui_act if(type && copytext(type, 1, 5) == "act/") var/act_type = copytext(type, 5) - var/id = href_list["packetId"] - if(!isnull(id)) - payload = handle_packets(id, href_list["totalPackets"], href_list["packet"]) - if(!payload) - return FALSE #ifdef TGUI_DEBUGGING log_tgui(user, "Action: [act_type] [href_list["payload"]], Window: [window.id], Source: [src_object]") #endif diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index 995376fb5a6..9a0867ab133 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -407,7 +407,7 @@ "type" = message_type, "count" = chunk_count, "chunks" = list(), - "timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + "timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) ) /datum/tgui_window/proc/append_payload_chunk(payload_id, chunk) @@ -421,9 +421,12 @@ var/message_type = payload["type"] var/final_payload = chunks.Join() remove_oversized_payload(payload_id) + if (!rustg_json_is_valid(final_payload)) + log_tgui(usr, "Error: Invalid JSON") + return on_message(message_type, json_decode(final_payload), list("type" = message_type, "payload" = final_payload, "tgui" = TRUE, "window_id" = id)) else - payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) /datum/tgui_window/proc/remove_oversized_payload(payload_id) oversized_payloads -= payload_id diff --git a/tgui/packages/tgui/events/act.ts b/tgui/packages/tgui/events/act.ts index 081e17cda26..835b75a16c5 100644 --- a/tgui/packages/tgui/events/act.ts +++ b/tgui/packages/tgui/events/act.ts @@ -30,7 +30,7 @@ export function sendAct( '', ).length; - if (urlSize > 2048) { + if (urlSize > 1024) { const chunks: string[] = stringifiedPayload.split(chunkSplitter); const id = `${Date.now()}`; createQueue({ id, chunks });