summaryrefslogtreecommitdiff
path: root/icespider/fcgi/xwwwFormUrlEncoded.h
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2016-10-08 06:41:18 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2016-10-08 06:41:18 +0100
commit60d2c5bbe19b7cb3cf7b3c39dbcb541324519caf (patch)
tree4268e876f25df71619d1fafbb8490413322c244d /icespider/fcgi/xwwwFormUrlEncoded.h
parentIncreased flexibility for reading post body content and support for deseriali... (diff)
downloadicespider-60d2c5bbe19b7cb3cf7b3c39dbcb541324519caf.tar.bz2
icespider-60d2c5bbe19b7cb3cf7b3c39dbcb541324519caf.tar.xz
icespider-60d2c5bbe19b7cb3cf7b3c39dbcb541324519caf.zip
Use a single implementation for parsing www form url encoded data in post and query string
Diffstat (limited to 'icespider/fcgi/xwwwFormUrlEncoded.h')
-rw-r--r--icespider/fcgi/xwwwFormUrlEncoded.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/icespider/fcgi/xwwwFormUrlEncoded.h b/icespider/fcgi/xwwwFormUrlEncoded.h
new file mode 100644
index 0000000..fe6aa00
--- /dev/null
+++ b/icespider/fcgi/xwwwFormUrlEncoded.h
@@ -0,0 +1,34 @@
+#ifndef ICESPIDER_CGI_XWWWFORMURLENCODED_H
+#define ICESPIDER_CGI_XWWWFORMURLENCODED_H
+
+#include <slicer/serializer.h>
+#include <boost/algorithm/string/split.hpp>
+
+namespace IceSpider {
+ class XWwwFormUrlEncoded : public Slicer::Deserializer {
+ public:
+ typedef boost::function<void(const std::string &, const std::string &)> KVh;
+
+ XWwwFormUrlEncoded(std::istream & in);
+
+ void Deserialize(Slicer::ModelPartForRootPtr mp) override;
+ static inline void iterateVars(const std::string & input, const KVh & h);
+
+ private:
+
+ static inline void iterateVars(const KVh & h, boost::algorithm::split_iterator<std::string::const_iterator> pi);
+ static std::string urldecode(std::string::const_iterator s, std::string::const_iterator);
+
+ void iterateVars(const KVh & h);
+
+ void DeserializeSimple(Slicer::ModelPartPtr mp);
+ void DeserializeComplex(Slicer::ModelPartPtr mp);
+ void DeserializeDictionary(Slicer::ModelPartPtr mp);
+
+ const std::string input;
+ };
+
+};
+
+#endif
+