diff options
| -rw-r--r-- | include/aopacket.h | 2 | ||||
| -rw-r--r-- | src/aopacket.cpp | 27 | ||||
| -rw-r--r-- | src/packet_distribution.cpp | 9 |
3 files changed, 27 insertions, 11 deletions
diff --git a/include/aopacket.h b/include/aopacket.h index 794025c5..a3251033 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 a40d2ef7..8f4a6e36 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("#", "<num>") - .replaceInStrings("%", "<percent>") - .replaceInStrings("$", "<dollar>") - .replaceInStrings("&", "<and>"); + escape(contents); return m_header + "#" + contents.join("#") + "#%"; } void AOPacket::net_encode() { - m_contents.replaceInStrings("#", "<num>") - .replaceInStrings("%", "<percent>") - .replaceInStrings("$", "<dollar>") - .replaceInStrings("&", "<and>"); + escape(m_contents); } void AOPacket::net_decode() { - m_contents.replaceInStrings("<num>", "#") + unescape(m_contents); +} + +void AOPacket::escape(QStringList &contents) +{ + contents.replaceInStrings("#", "<num>") + .replaceInStrings("%", "<percent>") + .replaceInStrings("$", "<dollar>") + .replaceInStrings("&", "<and>"); + +} + +void AOPacket::unescape(QStringList &contents) +{ + contents.replaceInStrings("<num>", "#") .replaceInStrings("<percent>", "%") .replaceInStrings("<dollar>", "$") .replaceInStrings("<and>", "&"); + } diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index 2da6981c..5a093e3c 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) |
