diff --git a/include/aopacket.h b/include/aopacket.h index 794025c..a325103 100644 --- a/include/aopacket.h +++ b/include/aopacket.h @@ -17,6 +17,8 @@ public: void net_encode(); void net_decode(); + static void escape(QStringList &contents); + static void unescape(QStringList &contents); private: QString m_header; diff --git a/src/aopacket.cpp b/src/aopacket.cpp index a40d2ef..8f4a6e3 100644 --- a/src/aopacket.cpp +++ b/src/aopacket.cpp @@ -12,25 +12,34 @@ QString AOPacket::to_string(bool encoded) { QStringList contents = m_contents; if (encoded) - contents.replaceInStrings("#", "") - .replaceInStrings("%", "") - .replaceInStrings("$", "") - .replaceInStrings("&", ""); + escape(contents); return m_header + "#" + contents.join("#") + "#%"; } void AOPacket::net_encode() { - m_contents.replaceInStrings("#", "") - .replaceInStrings("%", "") - .replaceInStrings("$", "") - .replaceInStrings("&", ""); + escape(m_contents); } void AOPacket::net_decode() { - m_contents.replaceInStrings("", "#") + unescape(m_contents); +} + +void AOPacket::escape(QStringList &contents) +{ + contents.replaceInStrings("#", "") + .replaceInStrings("%", "") + .replaceInStrings("$", "") + .replaceInStrings("&", ""); + +} + +void AOPacket::unescape(QStringList &contents) +{ + contents.replaceInStrings("", "#") .replaceInStrings("", "%") .replaceInStrings("", "$") .replaceInStrings("", "&"); + } diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index 2da6981..5a093e3 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -8,9 +8,12 @@ void AOApplication::ms_packet_received(AOPacket *p_packet) { - p_packet->net_decode(); - QString header = p_packet->get_header(); + + // Some packets need to handle decode/encode separately + if (header != "SC") { + p_packet->net_decode(); + } QStringList f_contents = p_packet->get_contents(); #ifdef DEBUG_NETWORK @@ -333,6 +336,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet) 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); + char_type f_char; f_char.name = sub_elements.at(0); if (sub_elements.size() >= 2)