annotate plugins/links/requester.cpp @ 768:d8bf53170fb6

Plugin links: fix various errors, closes #912 @2h Import uriparser to decode URLs correctly with fragment and query support for a better link decomposition. Improve pre-check message to allow people writing text after the link, e.g: http://example.org <- you should check this Improve relocation. Split code for better style.
author David Demelier <markand@malikania.fr>
date Wed, 24 Oct 2018 21:05:00 +0200
parents
children 8c44bbcbbab9
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.cpp -- convenient HTTP get requester
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr>
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 #include <regex>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <irccd/daemon/server.hpp>
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 #include <irccd/string_util.hpp>
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include "links.hpp"
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include "requester.hpp"
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include "uri.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 using std::error_code;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 using std::get;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 using std::monostate;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 using std::move;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 using std::regex;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 using std::regex_match;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 using std::regex_search;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 using std::shared_ptr;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 using std::smatch;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 using std::string;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 using std::variant;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 using boost::beast::flat_buffer;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 using boost::beast::http::async_read;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 using boost::beast::http::async_write;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 using boost::beast::http::empty_body;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 using boost::beast::http::field;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 using boost::beast::http::request;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 using boost::beast::http::response;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 using boost::beast::http::status;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 using boost::beast::http::string_body;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 using boost::beast::http::verb;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 using boost::asio::async_connect;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 using boost::asio::deadline_timer;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 using boost::asio::io_context;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 using boost::asio::ip::tcp;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 using boost::asio::ssl::context;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 using boost::asio::ssl::stream;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 using boost::asio::ssl::stream_base;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 using boost::posix_time::seconds;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 namespace irccd {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 using string_util::subst;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 using string_util::format;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 void requester::notify(const string& title)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 subst subst;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 subst.keywords.emplace("channel", channel_);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 subst.keywords.emplace("nickname", irc::user::parse(origin_).nick);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 subst.keywords.emplace("origin", origin_);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 subst.keywords.emplace("server", server_->get_id());
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 subst.keywords.emplace("title", title);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 server_->message(channel_, format(links_plugin::format_info, subst));
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 void requester::parse()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82 /*
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 * Use a regex because Boost's XML parser is strict and many web pages may
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * have invalid or broken tags.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 static const regex regex("<title>([^<]+)<\\/title>");
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
87
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 string data(res_.body().data());
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 smatch match;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 if (regex_search(data, match, regex))
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 notify(match[1]);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
94
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 void requester::handle_read(const error_code& code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 timer_.cancel();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 if (code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 return;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 // Request again in case of relocation.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 if (const auto it = res_.find(field::location); it != res_.end() && level_ < 32U) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 const string location(it->value().data(), it->value().size());
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 auto& io = timer_.get_io_service();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 auto uri = uri::parse(location);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
107
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 if (!uri)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 return;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 shared_ptr<requester>(new requester(io, server_, channel_, origin_, move(*uri), level_ + 1))->start();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 } else if (res_.result() == status::ok)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 parse();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
115
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 void requester::read()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 const auto self = shared_from_this();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 const auto wrap = [self] (auto code, auto) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
120 self->handle_read(code);
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 timer();
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 switch (socket_.index()) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 case 1:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 async_read(get<1>(socket_), buffer_, res_, wrap);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 #if defined(IRCCD_HAVE_SSL)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 case 2:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 async_read(get<2>(socket_), buffer_, res_, wrap);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 default:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
138
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 void requester::handle_write(const error_code& code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 timer_.cancel();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
142
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 if (!code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 read();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 void requester::write()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 req_.version(11);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 req_.method(verb::get);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 req_.target(uri_.path);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 req_.set(field::host, uri_.host);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 req_.set(field::user_agent, BOOST_BEAST_VERSION_STRING);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 const auto self = shared_from_this();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 const auto wrap = [self] (auto code, auto) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 self->handle_write(code);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 };
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
159
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 timer();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
161
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 switch (socket_.index()) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 case 1:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 async_write(get<1>(socket_), req_, wrap);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 #if defined(IRCCD_HAVE_SSL)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 case 2:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 async_write(get<2>(socket_), req_, wrap);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 default:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
175
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 void requester::handle_handshake(const error_code& code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 timer_.cancel();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 if (!code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 write();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
183
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 void requester::handshake()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
185 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 const auto self = shared_from_this();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 timer();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 switch (socket_.index()) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 case 1:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 handle_handshake(error_code());
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 #if defined(IRCCD_HAVE_SSL)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 case 2:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 get<2>(socket_).async_handshake(stream_base::client, [self] (auto code) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 self->handle_handshake(code);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
198 });
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 default:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
203 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
205
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 void requester::handle_connect(const error_code& code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 timer_.cancel();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
209
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 if (!code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 handshake();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
213
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 void requester::connect(const tcp::resolver::results_type& eps)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 const auto self = shared_from_this();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 const auto wrap = [self] (auto code, auto) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 self->handle_connect(code);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 };
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
220
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 timer();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
222
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 switch (socket_.index()) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 case 1:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 async_connect(get<1>(socket_), eps, wrap);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 #if defined(IRCCD_HAVE_SSL)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 case 2:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 async_connect(get<2>(socket_).lowest_layer(), eps, wrap);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 default:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 break;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
236
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 void requester::handle_resolve(const error_code& code, const tcp::resolver::results_type& eps)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
238 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 timer_.cancel();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
240
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 if (!code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 connect(eps);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
243 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 void requester::resolve()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 auto self = shared_from_this();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
248
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 timer();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 resolver_.async_resolve(uri_.host, uri_.port, [self] (auto code, auto eps) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 self->handle_resolve(code, eps);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 });
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
254
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 void requester::handle_timer(const error_code& code)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 // Force close sockets to cancel all pending operations.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 if (code && code != std::errc::operation_canceled)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 socket_.emplace<monostate>();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
261
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 void requester::timer()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
263 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 const auto self = shared_from_this();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
265
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 timer_.expires_from_now(seconds(links_plugin::conf_timeout));
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 timer_.async_wait([self] (auto code) {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
268 self->handle_timer(code);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 });
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
271
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 void requester::start()
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 if (uri_.scheme == "http")
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 socket_.emplace<tcp::socket>(resolver_.get_io_service());
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 #if defined(IRCCD_HAVE_SSL)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 else if (uri_.scheme == "https")
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 socket_.emplace<stream<tcp::socket>>(resolver_.get_io_service(), ctx_);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 #endif
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
280
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 // Only do the resolve if scheme is correct.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 if (socket_.index() != 0)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 resolve();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
285
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
286 requester::requester(io_context& io,
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 shared_ptr<server> server,
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 string channel,
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
289 string origin,
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 uri uri,
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 size_t level)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 : level_(level)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 , server_(move(server))
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 , channel_(move(channel))
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 , origin_(move(origin))
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
296 , uri_(move(uri))
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 , timer_(io)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 , resolver_(io)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
301
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 void requester::run(io_context& io, shared_ptr<server> server, string origin, string channel, string link)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
303 {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 auto uri = uri::parse(link);
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
305
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
306 if (!uri)
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 return;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
308
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
309 shared_ptr<requester>(new requester(io, server, channel, origin, move(*uri), 0))->start();
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
310 }
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
311
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
312 } // !irccd