annotate plugins/links/requester.hpp @ 847:a23b7b574ed2

irccd: rename [format] section to [templates], closes #1671
author David Demelier <markand@malikania.fr>
date Wed, 10 Jul 2019 20:10:00 +0200
parents 0df3a4977bf9
children 5e25439fe98d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * requester.hpp -- convenient HTTP get requester
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
824
06cc2f95f479 misc: happy new year!
David Demelier <markand@malikania.fr>
parents: 809
diff changeset
4 * Copyright (c) 2013-2019 David Demelier <markand@malikania.fr>
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #ifndef IRCCD_REQUESTER_HPP
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define IRCCD_REQUESTER_HPP
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file requester.hpp
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Convenient HTTP get requester.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <irccd/sysconfig.hpp>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <boost/beast.hpp>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <boost/asio.hpp>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #if defined(IRCCD_HAVE_SSL)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 # include <boost/asio/ssl.hpp>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #include <cstddef>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 #include <memory>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #include <string>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include <system_error>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #include <variant>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #include "uri.hpp"
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 namespace irccd {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
809
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
46 namespace daemon {
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
47
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 class server;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
809
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
50 } // !daemon
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
51
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * \brief Convenient HTTP get requester.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 class requester : public std::enable_shared_from_this<requester> {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 private:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
57 std::variant<
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
58 std::monostate,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
59 boost::asio::ip::tcp::socket
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 #if defined(IRCCD_HAVE_SSL)
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
61 , boost::asio::ssl::stream<boost::asio::ip::tcp::socket>
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 #endif
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
63 > socket_;
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
65 std::size_t level_{0U};
809
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
66 std::shared_ptr<daemon::server> server_;
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
67 std::string channel_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
68 std::string origin_;
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
70 uri uri_;
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 #if defined(IRCCD_HAVE_SSL)
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
73 boost::asio::ssl::context ctx_{boost::asio::ssl::context::sslv23};
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75
783
d0bd19183743 Plugin links: enable limit to buffer size, closes #942
David Demelier <markand@malikania.fr>
parents: 773
diff changeset
76 boost::beast::flat_buffer buffer_{163840};
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
77 boost::beast::http::request<boost::beast::http::empty_body> req_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
78 boost::beast::http::response<boost::beast::http::string_body> res_;
842
0df3a4977bf9 plugin links: fix recent boost version
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
79 boost::asio::io_service& service_;
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
80 boost::asio::deadline_timer timer_;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
81 boost::asio::ip::tcp::resolver resolver_;
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
83 void notify(const std::string&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
84 void parse();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
85 void handle_read(const std::error_code&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
86 void read();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
87 void handle_write(const std::error_code&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
88 void write();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
89 void handle_handshake(const std::error_code&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
90 void handshake();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
91 void handle_connect(const std::error_code&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
92 void connect(const boost::asio::ip::tcp::resolver::results_type&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
93 void handle_resolve(const std::error_code&, const boost::asio::ip::tcp::resolver::results_type&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
94 void resolve();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
95 void handle_timer(const std::error_code&);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
96 void timer();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
97 void start();
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
99 requester(boost::asio::io_context&,
809
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
100 std::shared_ptr<daemon::server>,
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
101 std::string,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
102 std::string,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
103 uri,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
104 std::size_t);
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 public:
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
107 /**
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
108 * Start seeking for a title in the link
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
109 *
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
110 * \param ctx the IO context
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
111 * \param sv the server
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
112 * \param origin the originator
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
113 * \param channel the channel
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
114 * \param message the message text
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
115 */
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
116 static void run(boost::asio::io_context& ctx,
809
8460b4a34191 misc: reorganize namespaces, closes #952 @4h
David Demelier <markand@malikania.fr>
parents: 783
diff changeset
117 std::shared_ptr<daemon::server> sv,
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
118 std::string origin,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
119 std::string channel,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 768
diff changeset
120 std::string message);
768
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 };
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 } // !irccd
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
124
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 #endif // !IRCCD_REQUESTER_HPP