summaryrefslogtreecommitdiff
path: root/src/mbgl/util/http_header.cpp
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2015-11-19 21:47:15 +0100
committerKonstantin Käfer <mail@kkaefer.com>2015-11-20 14:39:44 +0100
commitb5f7cafab45471bd7d714fb2972e33603a4baaae (patch)
treeaff2a9125627105e1bd977105df5175f332b89dc /src/mbgl/util/http_header.cpp
parent94e2d8a02c321380e650d055e7e7d6d6ed1c529d (diff)
downloadqtlocation-mapboxgl-b5f7cafab45471bd7d714fb2972e33603a4baaae.tar.gz
[core] more robust max-age parsing
Diffstat (limited to 'src/mbgl/util/http_header.cpp')
-rw-r--r--src/mbgl/util/http_header.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mbgl/util/http_header.cpp b/src/mbgl/util/http_header.cpp
new file mode 100644
index 0000000000..00aee151c8
--- /dev/null
+++ b/src/mbgl/util/http_header.cpp
@@ -0,0 +1,29 @@
+#include <mbgl/util/http_header.hpp>
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunknown-pragmas"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#pragma GCC diagnostic pop
+
+namespace mbgl {
+namespace http {
+
+CacheControl CacheControl::parse(const std::string& value) {
+ namespace qi = boost::spirit::qi;
+ namespace phoenix = boost::phoenix;
+
+ CacheControl result;
+ qi::phrase_parse(value.begin(), value.end(), (
+ (qi::lit("must-revalidate") [ phoenix::ref(result.mustRevalidate) = true ]) |
+ (qi::lit("max-age") >> '=' >> qi::ulong_long [ phoenix::ref(result.maxAge) = qi::_1 ]) |
+ (*(('"' >> *(('\\' >> qi::char_) | (qi::char_ - '"')) >> '"') | (qi::char_ - '"' - ',')))
+ ) % ',', qi::ascii::space);
+ return result;
+}
+
+} // namespace http
+} // namespace mbgl