Mercurial > irccd
annotate plugins/links/links.cpp @ 707:48afa8c41f50
Irccd: verify dynlib_plugin major version too
While here, fix the dynlib_plugin test that was not updated at that time.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 07 Jul 2018 08:56:25 +0200 |
parents | bd7feaa002cb |
children | e0cd4f544b24 |
rev | line source |
---|---|
705
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * links.cpp -- links plugin |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <memory> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <regex> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <sstream> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <string> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <variant> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <boost/algorithm/string/trim_all.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <boost/dll.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <boost/asio.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include <boost/asio/ssl.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include <boost/beast.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include <irccd/string_util.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #include <irccd/daemon/irc.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include <irccd/daemon/irccd.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #include <irccd/daemon/plugin.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 #include <irccd/daemon/server.hpp> |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 using boost::asio::async_connect; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 using boost::asio::deadline_timer; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 using boost::asio::io_context; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 using boost::asio::ip::tcp; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 using boost::asio::ssl::context; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 using boost::asio::ssl::stream; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 using boost::asio::ssl::stream_base; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 using boost::beast::flat_buffer; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 using boost::beast::http::async_read; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 using boost::beast::http::async_write; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 using boost::beast::http::empty_body; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 using boost::beast::http::field; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 using boost::beast::http::request; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 using boost::beast::http::response; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 using boost::beast::http::string_body; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 using boost::beast::http::verb; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 using boost::beast::http::status; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 using boost::posix_time::seconds; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 using boost::system::error_code; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 using std::get; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 using std::enable_shared_from_this; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 using std::monostate; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 using std::move; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 using std::regex; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 using std::regex_match; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 using std::regex_search; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 using std::shared_ptr; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 using std::smatch; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 using std::string; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 using std::variant; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 namespace irccd { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 namespace { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 // {{{ globals |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 // User options. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 struct config { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 static inline unsigned timeout{30U}; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 // User formats. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 struct formats { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 static inline string info{"#{title}"}; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 // }}} |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 // {{{ url |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 struct url { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 string protocol; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 string host; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 string path{"/"}; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 static auto parse(const string&) -> url; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 auto url::parse(const string& link) -> url |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 static const regex regex("^(https?):\\/\\/([^\\/\\?]+)(.*)$"); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 url ret; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 if (smatch match; regex_match(link, match, regex)) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 ret.protocol = match[1]; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 ret.host = match[2]; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 if (match.length(3) > 0) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 ret.path = match[3]; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 if (ret.path[0] != '/') |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 ret.path.insert(ret.path.begin(), '/'); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 return ret; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 // }}} |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 // {{{ requester |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 class requester : public enable_shared_from_this<requester> { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 private: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 using socket = variant<monostate, tcp::socket, stream<tcp::socket>>; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 shared_ptr<server> server_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 string channel_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 string origin_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 url url_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 context ctx_{context::sslv23}; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 socket socket_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 flat_buffer buffer_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 request<empty_body> req_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 response<string_body> res_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 deadline_timer timer_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 tcp::resolver resolver_; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 void notify(const string&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 void parse(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 void handle_read(const error_code&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 void read(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 void handle_write(const error_code&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 void write(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 void handle_handshake(const error_code&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 void handshake(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 void handle_connect(const error_code&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 void connect(const tcp::resolver::results_type&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 void handle_resolve(const error_code&, const tcp::resolver::results_type&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 void resolve(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 void handle_timer(const error_code&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 void timer(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 void start(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 requester(io_context&, shared_ptr<server>, string, string, url); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 public: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 static void run(io_context&, const message_event&); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 void requester::notify(const string& title) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 string_util::subst subst; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 subst.keywords.emplace("channel", channel_); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 subst.keywords.emplace("nickname", irc::user::parse(origin_).nick()); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 subst.keywords.emplace("origin", origin_); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 subst.keywords.emplace("server", server_->get_name()); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 subst.keywords.emplace("title", title); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 server_->message(channel_, format(formats::info, subst)); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 void requester::parse() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 /* |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 * Use a regex because Boost's XML parser is strict and many web pages may |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 * have invalid or broken tags. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 */ |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 static const regex regex("<title>([^<]+)<\\/title>"); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 string data(res_.body().data()); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 smatch match; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 if (regex_search(data, match, regex)) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 notify(match[1]); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 void requester::handle_read(const error_code& code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 timer_.cancel(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 if (code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 return; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 // Request again in case of relocation. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 if (res_.result() == status::moved_permanently) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 const string host(res_[field::location].data()); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 // Clean '\r\n' |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 url_ = url::parse(boost::algorithm::trim_all_copy(host)); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 start(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 } else |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 parse(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 void requester::read() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 const auto self = shared_from_this(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 const auto wrap = [self] (auto code, auto) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 self->handle_read(code); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 timer(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 switch (socket_.index()) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 case 1: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 async_read(get<1>(socket_), buffer_, res_, wrap); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 case 2: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 async_read(get<2>(socket_), buffer_, res_, wrap); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 default: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 void requester::handle_write(const error_code& code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 timer_.cancel(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 if (!code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 read(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 void requester::write() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 req_.version(11); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 req_.method(verb::get); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 req_.target(url_.path); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 req_.set(field::host, url_.host); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 req_.set(field::user_agent, BOOST_BEAST_VERSION_STRING); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 const auto self = shared_from_this(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 const auto wrap = [self] (auto code, auto) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 self->handle_write(code); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 timer(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 switch (socket_.index()) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 case 1: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 async_write(get<1>(socket_), req_, wrap); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 case 2: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 async_write(get<2>(socket_), req_, wrap); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 default: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 void requester::handle_handshake(const error_code& code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 timer_.cancel(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 if (!code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 write(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 void requester::handshake() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 const auto self = shared_from_this(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 timer(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 switch (socket_.index()) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 case 1: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 handle_handshake(error_code()); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 case 2: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 get<2>(socket_).async_handshake(stream_base::client, [self] (auto code) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 self->handle_handshake(code); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 }); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 default: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 void requester::handle_connect(const error_code& code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 timer_.cancel(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 if (!code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 handshake(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 void requester::connect(const tcp::resolver::results_type& eps) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 const auto self = shared_from_this(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 const auto wrap = [self] (auto code, auto) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 self->handle_connect(code); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 timer(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 switch (socket_.index()) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 case 1: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 async_connect(get<1>(socket_), eps, wrap); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 case 2: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 async_connect(get<2>(socket_).lowest_layer(), eps, wrap); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 default: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 break; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 void requester::handle_resolve(const error_code& code, const tcp::resolver::results_type& eps) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 timer_.cancel(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 if (!code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 connect(eps); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 void requester::resolve() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 auto self = shared_from_this(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 timer(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 resolver_.async_resolve(url_.host, url_.protocol, [self] (auto code, auto eps) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 self->handle_resolve(code, eps); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 }); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 void requester::handle_timer(const error_code& code) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 // Force close sockets to cancel all pending operations. |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 if (code && code != boost::asio::error::operation_aborted) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 socket_.emplace<monostate>(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 void requester::timer() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 const auto self = shared_from_this(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 timer_.expires_from_now(seconds(config::timeout)); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 timer_.async_wait([self] (auto code) { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 self->handle_timer(code); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 }); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 void requester::start() |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 if (url_.protocol == "http") |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 socket_.emplace<tcp::socket>(resolver_.get_io_service()); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 else |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 socket_.emplace<stream<tcp::socket>>(resolver_.get_io_service(), ctx_); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 resolve(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 requester::requester(io_context& io, |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 shared_ptr<server> server, |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 string channel, |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 string origin, |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 url url) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 : server_(move(server)) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 , channel_(move(channel)) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 , origin_(move(origin)) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 , url_(move(url)) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 , timer_(io) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 , resolver_(io) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
382 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
383 void requester::run(io_context& io, const message_event& ev) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
384 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 auto url = url::parse(ev.message); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 if (url.protocol.empty() || url.host.empty()) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 return; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 shared_ptr<requester>(new requester(io, ev.server, ev.channel, ev.origin, move(url)))->start(); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 // }}} |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 // {{{ links_plugin |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
397 class links_plugin : public plugin { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
398 public: |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 using plugin::plugin; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 void set_config(plugin_config) override; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
402 void set_formats(plugin_formats) override; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 void handle_message(irccd&, const message_event&) override; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 }; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 void links_plugin::set_config(plugin_config conf) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
408 if (const auto v = string_util::to_uint(conf["timeout"]); v) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 config::timeout = *v; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
412 void links_plugin::set_formats(plugin_formats formats) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
414 if (const auto it = formats.find("info"); it != formats.end()) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
415 formats::info = it->second; |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
417 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
418 void links_plugin::handle_message(irccd& irccd, const message_event& ev) |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
419 { |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
420 requester::run(irccd.get_service(), ev); |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
421 } |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
422 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
423 // }}} |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
424 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
425 } // !namespace |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
426 |
706
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
427 extern "C" { |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
428 |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
429 BOOST_SYMBOL_EXPORT |
707
48afa8c41f50
Irccd: verify dynlib_plugin major version too
David Demelier <markand@malikania.fr>
parents:
706
diff
changeset
|
430 auto irccd_abi_links() -> version |
706
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
431 { |
707
48afa8c41f50
Irccd: verify dynlib_plugin major version too
David Demelier <markand@malikania.fr>
parents:
706
diff
changeset
|
432 return version(); |
706
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
433 } |
705
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
434 |
706
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
435 BOOST_SYMBOL_EXPORT |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
436 auto irccd_init_links() -> std::unique_ptr<plugin> |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
437 { |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
438 return std::make_unique<links_plugin>("links", ""); |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
439 } |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
440 |
bd7feaa002cb
Irccd: check ABI compatibility in dynlib_plugin
David Demelier <markand@malikania.fr>
parents:
705
diff
changeset
|
441 } // !C |
705
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
442 |
4b5dba257d81
Plugin links: brand new plugin, closes #872 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
443 } // !irccd |