http_common.h
1 // Copyright 2020, Beeri 15. All rights reserved.
2 // Author: Roman Gershman (romange@gmail.com)
3 //
4 #pragma once
5 #include <boost/beast/http/string_body.hpp>
6 #include <boost/beast/http/file_body.hpp>
7 
8 #include "absl/strings/string_view.h"
9 #include "util/asio_stream_adapter.h"
10 
11 namespace util {
12 namespace http {
13 
14 // URL consists of path and query delimited by '?'.
15 // query can be broken into query args delimited by '&'.
16 // Each query arg can be a pair of "key=value" values.
17 // In case there is not '=' delimiter, only the first field is filled.
18 using QueryParam = std::pair<absl::string_view, absl::string_view>;
19 typedef std::vector<QueryParam> QueryArgs;
20 
21 typedef ::boost::beast::http::response<::boost::beast::http::string_body>
22  StringResponse;
23 
24 inline StringResponse MakeStringResponse(
25  ::boost::beast::http::status st = ::boost::beast::http::status::ok) {
26  return StringResponse(st, 11);
27 }
28 
29 inline void SetMime(const char* mime, ::boost::beast::http::fields* dest) {
30  dest->set(::boost::beast::http::field::content_type, mime);
31 }
32 
33 inline absl::string_view as_absl(::boost::string_view s) {
34  return absl::string_view(s.data(), s.size());
35 }
36 
37 extern const char kHtmlMime[];
38 extern const char kJsonMime[];
39 extern const char kSvgMime[];
40 extern const char kTextMime[];
41 extern const char kXmlMime[];
42 extern const char kBinMime[];
43 
44 QueryParam ParseQuery(absl::string_view str);
45 QueryArgs SplitQuery(absl::string_view query);
46 StringResponse ParseFlagz(const QueryArgs& args);
47 
48 StringResponse BuildStatusPage(const QueryArgs& args, const char* resource_prefix);
49 StringResponse ProfilezHandler(const QueryArgs& args);
50 
51 using FileResponse = ::boost::beast::http::response<::boost::beast::http::file_body>;
52 ::boost::system::error_code LoadFileResponse(absl::string_view fname, FileResponse* resp);
53 
54 } // namespace http
55 } // namespace util