aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/aopacket.h2
-rw-r--r--src/aopacket.cpp27
-rw-r--r--src/packet_distribution.cpp9
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)