Mercurial > irccd
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 |
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 |