annotate plugins/links/links.hpp @ 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 * links.hpp -- links plugin
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 #ifndef IRCCD_LINKS_HPP
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define IRCCD_LINKS_HPP
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file links.hpp
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Links plugin.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <irccd/daemon/plugin.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 namespace irccd {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 * \brief Links plugin.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 class links_plugin : public plugin {
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 public:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 // options.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 static inline unsigned conf_timeout{30U};
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 // formats.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 static inline std::string format_info{"#{title}"};
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 public:
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 * Inherited constructors.
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 using plugin::plugin;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 * \copydoc plugin::get_name
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 auto get_name() const noexcept -> std::string_view override;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * \copydoc plugin::get_author
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 auto get_author() const noexcept -> std::string_view override;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 * \copydoc plugin::get_license
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 auto get_license() const noexcept -> std::string_view override;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
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 * \copydoc plugin::get_summary
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 auto get_summary() const noexcept -> std::string_view override;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
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 * \copydoc plugin::get_version
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 auto get_version() const noexcept -> std::string_view override;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 * \copydoc plugin::set_options
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 void set_options(const map&) override;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
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 * \copydoc plugin::set_formats
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 void set_formats(const map&) override;
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 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 * \copydoc plugin::handle_message
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 void handle_message(irccd&, const message_event&) override;
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 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 * Export ABI.
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 * \return the compiled version
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 static auto abi() -> version;
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 /**
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 * Create the plugin
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 *
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * \param id the plugin id
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 * \return the compiled version
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 */
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 static auto init(std::string) -> std::unique_ptr<plugin>;
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 };
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
103
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 } // !irccd
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
d8bf53170fb6 Plugin links: fix various errors, closes #912 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 #endif // !IRCCD_LINKS_HPP