Switch to side-by-side view

--- a/libupnpp/soaphelp.hxx
+++ b/libupnpp/soaphelp.hxx
@@ -20,6 +20,7 @@
 #include <vector>
 #include <string>
 #include <map>
+#include <unordered_map>
 
 #include <upnp/ixml.h>
 
@@ -33,8 +34,6 @@
     bool getBool(const char *nm, bool *value) const;
     bool getInt(const char *nm, int *value) const;
     bool getString(const char *nm, std::string *value) const;
-    static std::string xmlQuote(const std::string& in);
-    static std::string i2s(int val);
 };
 
 /** Decode the XML in a Soap call and return the arguments in a SoapArgs 
@@ -85,4 +84,25 @@
 extern IXML_Document *buildSoapBody(const SoapEncodeInput& data, 
                                     bool isResp = true);
 
+namespace SoapHelp {
+    std::string xmlQuote(const std::string& in);
+    std::string xmlUnquote(const std::string& in);
+    std::string i2s(int val);
+}
+
+/** Decode UPnP Event data. This is not soap, but it's quite close to
+ *  the other code in here so whatever...
+ *
+ * The variable values are contained in a propertyset XML document:
+ *     <?xml version="1.0"?>
+ *     <e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0">
+ *       <e:property>
+ *         <variableName>new value</variableName>
+ *       </e:property>
+ *       <!-- Other variable names and values (if any) go here. -->
+ *     </e:propertyset>
+ */
+extern bool decodePropertySet(IXML_Document *doc, 
+                       std::unordered_map<std::string,std::string>& out);
+
 #endif /* _SOAPHELP_H_X_INCLUDED_ */