From c9f52b7223685d2e7fca925594171f94dd8c6e3b Mon Sep 17 00:00:00 2001 From: TrickyLeifa Date: Wed, 15 May 2024 00:00:17 +0200 Subject: Ported to CMake, ... * Ported the project to CMake * Android and Mac support dropped for the time being. * Tests, BASS and Discord-RPC are now options * Restructured and reformated the project. * Merged `include` and `src` * Renamed `resource` to `data` * Renamed various files * External libraries headers are no longer included in `src` * Replaced header guards with #pragma once * Multiple refactors (keywords, headers) * Added Qt6 compatibility * Removed various unused functions and headers * Reworked AOPacket * When content is passed to AOPacket, it should be ensured that the content is already decoded. * Encoding/decoding are now static methods. * Fixed various memory leaks * Removed animation code for AOImage * AOImage is always using static images * Simplified ChatLogPiece --- src/packet_distribution.cpp | 556 ++++++++++++++++++++++++++++---------------- 1 file changed, 359 insertions(+), 197 deletions(-) (limited to 'src/packet_distribution.cpp') diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index 9bd4d8f6..011a4623 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -9,37 +9,45 @@ void AOApplication::append_to_demofile(QString packet_string) { - if (Options::getInstance().logToDemoFileEnabled() && !log_filename.isEmpty()) + if (Options::getInstance().logToDemoFileEnabled() && !log_filename.isEmpty()) + { + QString path = log_filename.left(log_filename.size()).replace(".log", ".demo"); + if (!demo_timer.isValid()) { - QString path = log_filename.left(log_filename.size()).replace(".log", ".demo"); - if (!demo_timer.isValid()) - demo_timer.start(); - else - append_to_file("wait#"+ QString::number(demo_timer.restart()) + "#%", path, true); - append_to_file(packet_string, path, true); + demo_timer.start(); + } + else + { + append_to_file("wait#" + QString::number(demo_timer.restart()) + "#%", path, true); } + append_to_file(packet_string, path, true); + } } -void AOApplication::server_packet_received(AOPacket *p_packet) +void AOApplication::server_packet_received(AOPacket p_packet) { - QStringList f_contents_encoded = p_packet->get_contents(); - QString f_packet_encoded = p_packet->to_string(); - p_packet->net_decode(); + QStringList f_contents_encoded = p_packet.get_content(); + QString f_packet_encoded = p_packet.to_string(); - QString header = p_packet->get_header(); - QStringList f_contents = p_packet->get_contents(); - QString f_packet = p_packet->to_string(); + QString header = p_packet.get_header(); + QStringList f_contents = p_packet.get_content(); + QString f_packet = p_packet.to_string(); bool log_to_demo = true; #ifdef DEBUG_NETWORK if (header != "checkconnection") + { qDebug() << "R:" << f_packet; + } #endif - if (header == "decryptor") { + if (header == "decryptor") + { if (f_contents.size() == 0) - goto end; + { + return; + } // default(legacy) values yellow_text_supported = false; @@ -61,13 +69,16 @@ void AOApplication::server_packet_received(AOPacket *p_packet) f_hdid = get_hdid(); QStringList f_contents = {f_hdid}; - AOPacket *hi_packet = new AOPacket("HI", f_contents); + AOPacket hi_packet("HI", f_contents); send_server_packet(hi_packet); log_to_demo = false; } - else if (header == "ID") { + else if (header == "ID") + { if (f_contents.size() < 2) - goto end; + { + return; + } client_id = f_contents.at(0).toInt(); server_software = f_contents.at(1); @@ -75,21 +86,26 @@ void AOApplication::server_packet_received(AOPacket *p_packet) net_manager->server_connected(true); QStringList f_contents = {"AO2", get_version_string()}; - send_server_packet(new AOPacket("ID", f_contents)); + send_server_packet(AOPacket("ID", f_contents)); } - else if (header == "CT") { - if (!courtroom_constructed || f_contents.size() < 2) { - goto end; -} + else if (header == "CT") + { + if (!courtroom_constructed || f_contents.size() < 2) + { + return; + } if (f_contents.size() == 3) - w_courtroom->append_server_chatmessage( - f_contents.at(0), f_contents.at(1), f_contents.at(2)); + { + w_courtroom->append_server_chatmessage(f_contents.at(0), f_contents.at(1), f_contents.at(2)); + } else - w_courtroom->append_server_chatmessage(f_contents.at(0), - f_contents.at(1), "0"); + { + w_courtroom->append_server_chatmessage(f_contents.at(0), f_contents.at(1), "0"); + } } - else if (header == "FL") { + else if (header == "FL") + { yellow_text_supported = false; prezoom_supported = false; flipping_supported = false; @@ -106,63 +122,102 @@ void AOApplication::server_packet_received(AOPacket *p_packet) expanded_desk_mods_supported = false; auth_packet_supported = false; if (f_packet.contains("yellowtext", Qt::CaseInsensitive)) + { yellow_text_supported = true; + } if (f_packet.contains("prezoom", Qt::CaseInsensitive)) + { prezoom_supported = true; + } if (f_packet.contains("flipping", Qt::CaseInsensitive)) + { flipping_supported = true; + } if (f_packet.contains("customobjections", Qt::CaseInsensitive)) + { custom_objection_supported = true; + } if (f_packet.contains("deskmod", Qt::CaseInsensitive)) + { desk_mod_supported = true; + } if (f_packet.contains("evidence", Qt::CaseInsensitive)) + { evidence_supported = true; + } if (f_packet.contains("cccc_ic_support", Qt::CaseInsensitive)) + { cccc_ic_supported = true; + } if (f_packet.contains("arup", Qt::CaseInsensitive)) + { arup_supported = true; + } if (f_packet.contains("casing_alerts", Qt::CaseInsensitive)) + { casing_alerts_supported = true; + } if (f_packet.contains("modcall_reason", Qt::CaseInsensitive)) + { modcall_reason_supported = true; + } if (f_packet.contains("looping_sfx", Qt::CaseInsensitive)) + { looping_sfx_supported = true; + } if (f_packet.contains("additive", Qt::CaseInsensitive)) + { additive_text_supported = true; + } if (f_packet.contains("effects", Qt::CaseInsensitive)) + { effects_supported = true; + } if (f_packet.contains("y_offset", Qt::CaseInsensitive)) - y_offset_supported = true; + { + y_offset_supported = true; + } if (f_packet.contains("expanded_desk_mods", Qt::CaseInsensitive)) + { expanded_desk_mods_supported = true; + } if (f_packet.contains("auth_packet", Qt::CaseInsensitive)) + { auth_packet_supported = true; + } log_to_demo = false; } - else if (header == "PN") { + else if (header == "PN") + { if (!lobby_constructed || f_contents.size() < 2) - goto end; + { + return; + } - w_lobby->set_player_count(f_contents.at(0).toInt(), - f_contents.at(1).toInt()); + w_lobby->set_player_count(f_contents.at(0).toInt(), f_contents.at(1).toInt()); - if (f_contents.size() >= 3) { - w_lobby->set_server_description(f_contents.at(2)); + if (f_contents.size() >= 3) + { + w_lobby->set_server_description(f_contents.at(2)); } log_to_demo = false; } - else if (header == "SI") { - if (!lobby_constructed || f_contents.size() != 3) { - goto end; -} + else if (header == "SI") + { + if (!lobby_constructed || f_contents.size() != 3) + { + return; + } char_list_size = f_contents.at(0).toInt(); evidence_list_size = f_contents.at(1).toInt(); music_list_size = f_contents.at(2).toInt(); if (char_list_size < 0 || evidence_list_size < 0 || music_list_size < 0) - goto end; + { + return; + } loaded_chars = 0; loaded_evidence = 0; @@ -175,91 +230,107 @@ void AOApplication::server_packet_received(AOPacket *p_packet) courtroom_loaded = false; int selected_server = w_lobby->get_selected_server(); - QString server_address = "", server_name = ""; - switch (w_lobby->pageSelected()) { + QString server_address; + QString server_name; + switch (w_lobby->pageSelected()) + { case 0: - if (selected_server >= 0 && selected_server < server_list.size()) { - auto info = server_list.at(selected_server); - server_name = info.name; - server_address = - QString("%1:%2").arg(info.ip, QString::number(info.port)); - window_title = server_name; - } - break; + if (selected_server >= 0 && selected_server < server_list.size()) + { + auto info = server_list.at(selected_server); + server_name = info.name; + server_address = QString("%1:%2").arg(info.ip, QString::number(info.port)); + window_title = server_name; + } + break; case 1: { - QVector favorite_list = Options::getInstance().favorites(); - if (selected_server >= 0 && selected_server < favorite_list.size()) { - auto info = favorite_list.at(selected_server); - server_name = info.name; - server_address = - QString("%1:%2").arg(info.ip, QString::number(info.port)); - window_title = server_name; - } + QVector favorite_list = Options::getInstance().favorites(); + if (selected_server >= 0 && selected_server < favorite_list.size()) + { + auto info = favorite_list.at(selected_server); + server_name = info.name; + server_address = QString("%1:%2").arg(info.ip, QString::number(info.port)); + window_title = server_name; + } } - break; + break; case 2: - window_title = "Local Demo Recording"; - break; + window_title = "Local Demo Recording"; + break; default: - break; + break; } if (courtroom_constructed) + { w_courtroom->set_window_title(window_title); + } - AOPacket *f_packet; - - f_packet = new AOPacket("RC"); - send_server_packet(f_packet); + send_server_packet(AOPacket("RC")); // Remove any characters not accepted in folder names for the server_name // here - if (Options::getInstance().logToDemoFileEnabled() && server_name != "Demo playback") { - this->log_filename = QDateTime::currentDateTime().toUTC().toString( - "'logs/" + server_name.remove(QRegularExpression("[\\\\/:*?\"<>|\']")) + - "/'yyyy-MM-dd hh-mm-ss t'.log'"); - this->write_to_file("Joined server " + server_name + " hosted on address " + - server_address + " on " + - QDateTime::currentDateTime().toUTC().toString(), - log_filename, true); + if (Options::getInstance().logToDemoFileEnabled() && server_name != "Demo playback") + { + this->log_filename = QDateTime::currentDateTime().toUTC().toString("'logs/" + server_name.remove(QRegularExpression("[\\\\/:*?\"<>|\']")) + "/'yyyy-MM-dd hh-mm-ss t'.log'"); + this->write_to_file("Joined server " + server_name + " hosted on address " + server_address + " on " + QDateTime::currentDateTime().toUTC().toString(), log_filename, true); } else + { this->log_filename = ""; + } QCryptographicHash hash(QCryptographicHash::Algorithm::Sha256); hash.addData(server_address.toUtf8()); if (Options::getInstance().discordEnabled()) - discord->state_server(server_name.toStdString(), - hash.result().toBase64().toStdString()); + { + discord->state_server(server_name.toStdString(), hash.result().toBase64().toStdString()); + } log_to_demo = false; } - else if (header == "CharsCheck") { + else if (header == "CharsCheck") + { if (!courtroom_constructed) - goto end; + { + return; + } - for (int n_char = 0; n_char < f_contents.size(); ++n_char) { + for (int n_char = 0; n_char < f_contents.size(); ++n_char) + { if (f_contents.at(n_char) == "-1") + { w_courtroom->set_taken(n_char, true); + } else + { w_courtroom->set_taken(n_char, false); + } } log_to_demo = false; } - else if (header == "SC") { + else if (header == "SC") + { if (!courtroom_constructed) - goto end; + { + return; + } w_courtroom->clear_chars(); - for (int n_element = 0; n_element < f_contents.size(); ++n_element) { + for (int n_element = 0; n_element < f_contents.size(); ++n_element) + { QStringList sub_elements = f_contents.at(n_element).split("&"); - - AOPacket::unescape(sub_elements); + for (QString &sub_element : sub_elements) + { + sub_element = AOPacket::decode(sub_element); + } char_type f_char; f_char.name = sub_elements.at(0); if (sub_elements.size() >= 2) + { f_char.description = sub_elements.at(1); + } // temporary. the CharsCheck packet sets this properly f_char.taken = false; @@ -268,55 +339,67 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } if (!courtroom_loaded) - send_server_packet(new AOPacket("RM")); + { + send_server_packet(AOPacket("RM")); + } else + { w_courtroom->character_loading_finished(); + } } - else if (header == "SM") { + else if (header == "SM") + { if (!courtroom_constructed || courtroom_loaded) - goto end; + { + return; + } bool musics_time = false; int areas = 0; - for (int n_element = 0; n_element < f_contents.size(); ++n_element) { + for (int n_element = 0; n_element < f_contents.size(); ++n_element) + { ++loaded_music; - if (musics_time) { + if (musics_time) + { w_courtroom->append_music(f_contents.at(n_element)); } - else { - if (f_contents.at(n_element).endsWith(".wav") || - f_contents.at(n_element).endsWith(".mp3") || - f_contents.at(n_element).endsWith(".mp4") || - f_contents.at(n_element).endsWith(".ogg") || - f_contents.at(n_element).endsWith(".opus")) { + else + { + if (f_contents.at(n_element).endsWith(".wav") || f_contents.at(n_element).endsWith(".mp3") || f_contents.at(n_element).endsWith(".mp4") || f_contents.at(n_element).endsWith(".ogg") || f_contents.at(n_element).endsWith(".opus")) + { musics_time = true; w_courtroom->fix_last_area(); w_courtroom->append_music(f_contents.at(n_element)); areas--; } - else { + else + { w_courtroom->append_area(f_contents.at(n_element)); areas++; } } } - for (int area_n = 0; area_n < areas; area_n++) { + for (int area_n = 0; area_n < areas; area_n++) + { w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown"); } - send_server_packet(new AOPacket("RD")); + send_server_packet(AOPacket("RD")); log_to_demo = false; } else if (header == "FM") // Fetch music ONLY { if (!courtroom_constructed) - goto end; + { + return; + } w_courtroom->clear_music(); - for (int n_element = 0; n_element < f_contents.size(); ++n_element) { + for (int n_element = 0; n_element < f_contents.size(); ++n_element) + { w_courtroom->append_music(f_contents.at(n_element)); } @@ -326,12 +409,15 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "FA") // Fetch areas ONLY { if (!courtroom_constructed) - goto end; + { + return; + } w_courtroom->clear_areas(); w_courtroom->arup_clear(); - for (int n_element = 0; n_element < f_contents.size(); ++n_element) { + for (int n_element = 0; n_element < f_contents.size(); ++n_element) + { w_courtroom->append_area(f_contents.at(n_element)); w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown"); } @@ -339,9 +425,12 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_courtroom->list_areas(); log_to_demo = false; } - else if (header == "DONE") { + else if (header == "DONE") + { if (!courtroom_constructed) - goto end; + { + return; + } w_courtroom->character_loading_finished(); w_courtroom->done_received(); @@ -351,21 +440,30 @@ void AOApplication::server_packet_received(AOPacket *p_packet) destruct_lobby(); log_to_demo = false; } - else if (header == "BN") { + else if (header == "BN") + { if (!courtroom_constructed || f_contents.isEmpty()) - goto end; + { + return; + } - if (f_contents.size() >= 2) { + if (f_contents.size() >= 2) + { // We have a pos included in the background packet! - if (!f_contents.at(1).isEmpty()) - //Not touching it when its empty. - w_courtroom->set_side(f_contents.at(1)); + if (!f_contents.at(1).isEmpty()) + { + // Not touching it when its empty. + w_courtroom->set_side(f_contents.at(1)); + } } w_courtroom->set_background(f_contents.at(0), f_contents.size() >= 2); } - else if (header == "SP") { + else if (header == "SP") + { if (!courtroom_constructed || f_contents.isEmpty()) - goto end; + { + return; + } // We were sent a "set position" packet w_courtroom->set_side(f_contents.at(0)); @@ -373,61 +471,83 @@ void AOApplication::server_packet_received(AOPacket *p_packet) else if (header == "SD") // Send pos dropdown { if (!courtroom_constructed || f_contents.isEmpty()) - goto end; + { + return; + } w_courtroom->set_pos_dropdown(f_contents.at(0).split("*")); } // server accepting char request(CC) packet - else if (header == "PV") { + else if (header == "PV") + { if (!courtroom_constructed || f_contents.size() < 3) - goto end; + { + return; + } // For some reason, args 0 and 1 are not used (from tsu3 they're client ID and a string "CID") w_courtroom->enter_courtroom(); w_courtroom->set_courtroom_size(); w_courtroom->update_character(f_contents.at(2).toInt()); } - else if (header == "MS") { + else if (header == "MS") + { if (courtroom_constructed && courtroom_loaded) { - w_courtroom->chatmessage_enqueue(p_packet->get_contents()); + w_courtroom->chatmessage_enqueue(p_packet.get_content()); } } - else if (header == "MC") { + else if (header == "MC") + { if (courtroom_constructed && courtroom_loaded) { - w_courtroom->handle_song(&p_packet->get_contents()); + w_courtroom->handle_song(&p_packet.get_content()); } } - else if (header == "RT") { + else if (header == "RT") + { if (f_contents.isEmpty()) - goto end; - if (courtroom_constructed) { + { + return; + } + if (courtroom_constructed) + { if (f_contents.size() == 1) + { w_courtroom->handle_wtce(f_contents.at(0), 0); + } else if (f_contents.size() >= 2) + { w_courtroom->handle_wtce(f_contents.at(0), f_contents.at(1).toInt()); + } } } - else if (header == "HP") { + else if (header == "HP") + { if (courtroom_constructed && f_contents.size() >= 2) { - w_courtroom->set_hp_bar(f_contents.at(0).toInt(), - f_contents.at(1).toInt()); + w_courtroom->set_hp_bar(f_contents.at(0).toInt(), f_contents.at(1).toInt()); } } - else if (header == "LE") { - if (courtroom_constructed) { + else if (header == "LE") + { + if (courtroom_constructed) + { QVector f_evi_list; - for (QString f_string : f_contents_encoded) { + for (QString f_string : f_contents_encoded) + { QStringList sub_contents = f_string.split("&"); - if (sub_contents.size() < 3) + { continue; + } // decoding has to be done here instead of on reception // because this packet uses & as a delimiter for some reason - AOPacket::unescape(sub_contents); + for (QString &data : sub_contents) + { + data = AOPacket::decode(data); + } evi_type f_evi; f_evi.name = sub_contents.at(0); @@ -440,72 +560,93 @@ void AOApplication::server_packet_received(AOPacket *p_packet) w_courtroom->set_evidence_list(f_evi_list); } } - else if (header == "ARUP") { - if (courtroom_constructed && !f_contents.isEmpty()) { + else if (header == "ARUP") + { + if (courtroom_constructed && !f_contents.isEmpty()) + { int arup_type = f_contents.at(0).toInt(); - for (int n_element = 1; n_element < f_contents.size(); n_element++) { - w_courtroom->arup_modify(arup_type, n_element - 1, - f_contents.at(n_element)); + for (int n_element = 1; n_element < f_contents.size(); n_element++) + { + w_courtroom->arup_modify(arup_type, n_element - 1, f_contents.at(n_element)); } w_courtroom->list_areas(); } log_to_demo = false; } - else if (header == "IL") { + else if (header == "IL") + { if (courtroom_constructed && !f_contents.isEmpty()) + { w_courtroom->set_ip_list(f_contents.at(0)); + } log_to_demo = false; } - else if (header == "MU") { + else if (header == "MU") + { if (courtroom_constructed && !f_contents.isEmpty()) + { w_courtroom->set_mute(true, f_contents.at(0).toInt()); + } log_to_demo = false; } - else if (header == "UM") { - if (courtroom_constructed && !f_contents.isEmpty()) { + else if (header == "UM") + { + if (courtroom_constructed && !f_contents.isEmpty()) + { w_courtroom->set_mute(false, f_contents.at(0).toInt()); - log_to_demo = false; -} + log_to_demo = false; + } } - else if (header == "BB") { - if (courtroom_constructed && !f_contents.isEmpty()) { + else if (header == "BB") + { + if (courtroom_constructed && !f_contents.isEmpty()) + { call_notice(f_contents.at(0)); } log_to_demo = false; } - else if (header == "KK") { - if (courtroom_constructed && !f_contents.isEmpty()) { - call_notice(tr("You have been kicked from the server.\nReason: %1") - .arg(f_contents.at(0))); + else if (header == "KK") + { + if (courtroom_constructed && !f_contents.isEmpty()) + { + call_notice(tr("You have been kicked from the server.\nReason: %1").arg(f_contents.at(0))); construct_lobby(); destruct_courtroom(); } log_to_demo = false; } - else if (header == "KB") { - if (courtroom_constructed && !f_contents.isEmpty()) { - call_notice(tr("You have been banned from the server.\nReason: %1") - .arg(f_contents.at(0))); + else if (header == "KB") + { + if (courtroom_constructed && !f_contents.isEmpty()) + { + call_notice(tr("You have been banned from the server.\nReason: %1").arg(f_contents.at(0))); construct_lobby(); destruct_courtroom(); } log_to_demo = false; } - else if (header == "BD") { - if (f_contents.isEmpty()) { - goto end; + else if (header == "BD") + { + if (f_contents.isEmpty()) + { + return; } - call_notice( - tr("You are banned on this server.\nReason: %1").arg(f_contents.at(0))); + call_notice(tr("You are banned on this server.\nReason: %1").arg(f_contents.at(0))); log_to_demo = false; } - else if (header == "ZZ") { + else if (header == "ZZ") + { if (courtroom_constructed && !f_contents.isEmpty()) + { w_courtroom->mod_called(f_contents.at(0)); + } } - else if (header == "TI") { // Timer packet + else if (header == "TI") + { // Timer packet if (!courtroom_constructed || f_contents.size() < 2) - goto end; + { + return; + } // Timer ID is reserved as argument 0 int id = f_contents.at(0).toInt(); @@ -519,7 +660,9 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (type == 0 || type == 1) { if (f_contents.size() < 3) - goto end; + { + return; + } // The time as displayed on the clock, in milliseconds. // If the number received is negative, stop the timer. @@ -543,99 +686,118 @@ void AOApplication::server_packet_received(AOPacket *p_packet) } } else if (type == 2) + { w_courtroom->set_clock_visibility(id, true); + } else if (type == 3) + { w_courtroom->set_clock_visibility(id, false); + } } - else if (header == "CHECK") { + else if (header == "CHECK") + { if (!courtroom_constructed) - goto end; + { + return; + } qint64 ping_time = w_courtroom->pong(); qDebug() << "ping:" << ping_time; if (ping_time != -1) + { latency = ping_time; + } log_to_demo = false; } // Subtheme packet - else if (header == "ST") { + else if (header == "ST") + { if (!courtroom_constructed || f_contents.isEmpty()) - goto end; + { + return; + } // Subtheme reserved as argument 0 subtheme = f_contents.at(0); // Check if we have subthemes set to "server" if (Options::getInstance().settingsSubTheme().toLower() != "server") + { // We don't. Simply acknowledge the subtheme sent by the server, but don't do anything else. return; + } // Reload theme request - if (f_contents.size() > 1 && f_contents.at(1) == "1") { + if (f_contents.size() > 1 && f_contents.at(1) == "1") + { Options::getInstance().setServerSubTheme(subtheme); w_courtroom->on_reload_theme_clicked(); } } // Auth packet - else if (header == "AUTH") { - if (!courtroom_constructed || !auth_packet_supported || f_contents.isEmpty()) { - goto end; -} + else if (header == "AUTH") + { + if (!courtroom_constructed || !auth_packet_supported || f_contents.isEmpty()) + { + return; + } bool ok; int authenticated = f_contents.at(0).toInt(&ok); - if (!ok) { + if (!ok) + { qWarning() << "Malformed AUTH packet! Contents:" << f_contents.at(0); } w_courtroom->on_authentication_state_received(authenticated); log_to_demo = false; } - else if (header == "JD") { - if (!courtroom_constructed || f_contents.isEmpty()) { - goto end; + else if (header == "JD") + { + if (!courtroom_constructed || f_contents.isEmpty()) + { + return; } bool ok; Courtroom::JudgeState state = static_cast(f_contents.at(0).toInt(&ok)); - if (!ok) { - goto end; // ignore malformed packet + if (!ok) + { + return; // ignore malformed packet } w_courtroom->set_judge_state(state); - if (w_courtroom->get_judge_state() != Courtroom::POS_DEPENDENT) { // If we receive JD -1, it means the server asks us to fall back to client-side judge buttons behavior + if (w_courtroom->get_judge_state() != Courtroom::POS_DEPENDENT) + { // If we receive JD -1, it means the server asks us to fall back to client-side judge buttons behavior w_courtroom->show_judge_controls(w_courtroom->get_judge_state() == Courtroom::SHOW_CONTROLS); } - else { + else + { w_courtroom->set_judge_buttons(); // client-side judge behavior } } - //AssetURL Packet - else if (header == "ASS") { - if (f_contents.size() > 1 || f_contents.isEmpty()) { // This can never be more than one link. - goto end; + // AssetURL Packet + else if (header == "ASS") + { + if (f_contents.size() > 1 || f_contents.isEmpty()) + { // This can never be more than one link. + return; } QUrl t_asset_url = QUrl::fromPercentEncoding(f_contents.at(0).toUtf8()); if (t_asset_url.isValid()) - asset_url = t_asset_url.toString(); + { + asset_url = t_asset_url.toString(); + } } - if (log_to_demo) { + if (log_to_demo) + { append_to_demofile(f_packet_encoded); } - -end: - - delete p_packet; } -void AOApplication::send_server_packet(AOPacket *p_packet) +void AOApplication::send_server_packet(AOPacket p_packet) { - // ***NEVER*** send an unencoded packet. - p_packet->net_encode(); - - QString f_packet = p_packet->to_string(); + QString f_packet = p_packet.to_string(); #ifdef DEBUG_NETWORK - qDebug() << "S:" << f_packet; + qDebug() << "S:" << p_packet.to_string(); #endif - net_manager->ship_server_packet(f_packet); - - delete p_packet; + net_manager->ship_server_packet(p_packet); } -- cgit