From 35359f038f571dc46de3d14af72a2bc911fb0a24 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 18 Mar 2020 22:17:49 +0300 Subject: Implement brep-monitor --- web/server/mime-url-encoding.cxx | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 web/server/mime-url-encoding.cxx (limited to 'web/server/mime-url-encoding.cxx') diff --git a/web/server/mime-url-encoding.cxx b/web/server/mime-url-encoding.cxx new file mode 100644 index 0000000..fd1e4e8 --- /dev/null +++ b/web/server/mime-url-encoding.cxx @@ -0,0 +1,66 @@ +// file : web/server/mime-url-encoding.cxx -*- C++ -*- +// license : MIT; see accompanying LICENSE file + +#include + +#include +#include // back_inserter + +#include + +using namespace std; +using namespace butl; + +namespace web +{ + inline static bool + encode_query (char& c) + { + if (c == ' ') + { + c = '+'; + return false; + } + + return !url::unreserved (c); + } + + string + mime_url_encode (const char* v, bool query) + { + return query ? url::encode (v, encode_query) : url::encode (v); + } + + string + mime_url_encode (const string& v, bool query) + { + return query ? url::encode (v, encode_query) : url::encode (v); + } + + string + mime_url_decode (const char* b, const char* e, bool trim, bool query) + { + if (trim) + { + for (; b != e && *b == ' '; ++b) ; + + if (b == e) + return string (); + + while (*--e == ' '); + ++e; + } + + string r; + if (!query) + url::decode (b, e, back_inserter (r)); + else + url::decode (b, e, back_inserter (r), + [] (char& c) + { + if (c == '+') + c = ' '; + }); + return r; + } +} -- cgit v1.1