summaryrefslogtreecommitdiff
path: root/icespider/fcgi/xwwwFormUrlEncoded.h
diff options
context:
space:
mode:
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
+