annotate libirccd/irccd/daemon/irccd.hpp @ 757:97b356010785

Irccd: create (command|jsapi)::registry Make two list of constructor functions to initialize all command and all Javascript modules to avoid duplicating efforts in case of change. While here, update test fixtures to load all of them for simplicity.
author David Demelier <markand@malikania.fr>
date Mon, 06 Aug 2018 21:27:00 +0200
parents d3660cbf2f3c
children 8c44bbcbbab9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * irccd.hpp -- main irccd class
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
628
27587ff92a64 Misc: update copyrights
David Demelier <markand@malikania.fr>
parents: 627
diff changeset
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr>
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 599
diff changeset
19 #ifndef IRCCD_DAEMON_IRCCD_HPP
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 599
diff changeset
20 #define IRCCD_DAEMON_IRCCD_HPP
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
21
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 /**
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 * \file irccd.hpp
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 * \brief Base class for irccd front end.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 */
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 599
diff changeset
27 #include <irccd/sysconfig.hpp>
551
a5e1c91abb8e Irccd: split services, closes #730
David Demelier <markand@malikania.fr>
parents: 546
diff changeset
28
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 #include <memory>
690
849c4337c18e Misc: headers reduction
David Demelier <markand@malikania.fr>
parents: 670
diff changeset
30 #include <system_error>
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
32 #include <boost/asio/io_service.hpp>
534
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
33
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 599
diff changeset
34 #include <irccd/config.hpp>
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 /**
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 * \brief Main irccd namespace
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 */
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 namespace irccd {
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
725
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
41 namespace logger {
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
42
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
43 class sink;
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
44
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
45 } // !logger
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
46
488
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
47 class plugin_service;
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
48 class rule_service;
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
49 class server_service;
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
50 class transport_service;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 /**
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * \brief Irccd main instance.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 */
488
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
55 class irccd {
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 private:
653
026a8dd20bd4 Irccd: style (irccd) #782
David Demelier <markand@malikania.fr>
parents: 630
diff changeset
57 // Configuration.
026a8dd20bd4 Irccd: style (irccd) #782
David Demelier <markand@malikania.fr>
parents: 630
diff changeset
58 config config_;
525
d070d33bf4a0 Plugin hangman: finally switch to boost
David Demelier <markand@malikania.fr>
parents: 519
diff changeset
59
534
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
60 // Main io service.
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
61 boost::asio::io_service& service_;
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
62
585
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
63 // Tells if the configuration has already been called.
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
64 bool loaded_{false};
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
65
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
66 // Custom logger.
725
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
67 std::unique_ptr<logger::sink> sink_;
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
68
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 // Services.
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
70 std::unique_ptr<server_service> server_service_;
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
71 std::unique_ptr<transport_service> tpt_service_;
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
72 std::unique_ptr<rule_service> rule_service_;
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
73 std::unique_ptr<plugin_service> plugin_service_;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
74
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
75 // Not copyable and not movable because services have references to irccd.
488
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
76 irccd(const irccd&) = delete;
7e273b7f4f92 Irccd: new coding style, closes #576
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
77 irccd(irccd&&) = delete;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
78
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
79 void operator=(const irccd&) = delete;
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
80 void operator=(irccd&&) = delete;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
81
585
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
82 // Load functions.
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
83 void load_logs_file(const ini::section&);
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
84 void load_logs_syslog();
585
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
85 void load_logs();
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
86 void load_formats();
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
87
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 public:
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 /**
757
97b356010785 Irccd: create (command|jsapi)::registry
David Demelier <markand@malikania.fr>
parents: 742
diff changeset
90 * Constructor.
97b356010785 Irccd: create (command|jsapi)::registry
David Demelier <markand@malikania.fr>
parents: 742
diff changeset
91 *
97b356010785 Irccd: create (command|jsapi)::registry
David Demelier <markand@malikania.fr>
parents: 742
diff changeset
92 * This only create a barebone irccd instance.
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
93 *
534
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
94 * \param service the service
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
95 * \param config the optional path to the configuration.
757
97b356010785 Irccd: create (command|jsapi)::registry
David Demelier <markand@malikania.fr>
parents: 742
diff changeset
96 * \see load_all
97b356010785 Irccd: create (command|jsapi)::registry
David Demelier <markand@malikania.fr>
parents: 742
diff changeset
97 * \see load_config
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 */
534
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
99 irccd(boost::asio::io_service& service, std::string config = "");
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 /**
516
bb65cec664c5 Irccd: use unique_ptr for services
David Demelier <markand@malikania.fr>
parents: 488
diff changeset
102 * Default destructor.
bb65cec664c5 Irccd: use unique_ptr for services
David Demelier <markand@malikania.fr>
parents: 488
diff changeset
103 */
bb65cec664c5 Irccd: use unique_ptr for services
David Demelier <markand@malikania.fr>
parents: 488
diff changeset
104 ~irccd();
bb65cec664c5 Irccd: use unique_ptr for services
David Demelier <markand@malikania.fr>
parents: 488
diff changeset
105
bb65cec664c5 Irccd: use unique_ptr for services
David Demelier <markand@malikania.fr>
parents: 488
diff changeset
106 /**
525
d070d33bf4a0 Plugin hangman: finally switch to boost
David Demelier <markand@malikania.fr>
parents: 519
diff changeset
107 * Get the current configuration.
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
108 *
525
d070d33bf4a0 Plugin hangman: finally switch to boost
David Demelier <markand@malikania.fr>
parents: 519
diff changeset
109 * \return the configuration
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
110 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
111 auto get_config() const noexcept -> const config&;
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
112
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
113 /**
525
d070d33bf4a0 Plugin hangman: finally switch to boost
David Demelier <markand@malikania.fr>
parents: 519
diff changeset
114 * Set the configuration.
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
115 *
525
d070d33bf4a0 Plugin hangman: finally switch to boost
David Demelier <markand@malikania.fr>
parents: 519
diff changeset
116 * \param cfg the new config
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
117 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
118 void set_config(config cfg) noexcept;
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
119
546
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
120 /**
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
121 * Get the underlying io service.
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
122 *
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
123 * \return the service
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
124 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
125 auto get_service() const noexcept -> const boost::asio::io_service&;
534
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
126
546
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
127 /**
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
128 * Overloaded function.
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
129 *
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
130 * \return the service
fd96de07657a Irccd: switch Irccd.Timer to Boost, closes #572
David Demelier <markand@malikania.fr>
parents: 534
diff changeset
131 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
132 auto get_service() noexcept -> boost::asio::io_service&;
534
2326a4dc39e6 Irccd: rewrite transports in Boost.Asio, closes #681
David Demelier <markand@malikania.fr>
parents: 525
diff changeset
133
519
63faa8087c46 Irccd: store configuration path, closes #723
David Demelier <markand@malikania.fr>
parents: 516
diff changeset
134 /**
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
135 * Access the logger.
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
136 *
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
137 * \return the logger
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
138 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
139 auto get_log() const noexcept -> const logger::sink&;
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
140
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
141 /**
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
142 * Overloaded function.
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
143 *
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
144 * \return the logger
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
145 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
146 auto get_log() noexcept -> logger::sink&;
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
147
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
148 /**
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
149 * Set the logger.
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
150 *
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
151 * \pre logger != nullptr
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
152 * \param logger the new logger
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
153 */
725
0dbe1842a7d8 Irccd: rework loggers, closes #793 @3h
David Demelier <markand@malikania.fr>
parents: 708
diff changeset
154 void set_log(std::unique_ptr<logger::sink> sink) noexcept;
599
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
155
e531f04507aa Irccd: move logger into libirccd, closes #740
David Demelier <markand@malikania.fr>
parents: 596
diff changeset
156 /**
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 * Access the server service.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 *
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 * \return the service
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
161 auto servers() noexcept -> server_service&;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
162
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 /**
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 * Access the transport service.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 *
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 * \return the service
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
168 auto transports() noexcept -> transport_service&;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
169
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 /**
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 * Access the rule service.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 *
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 * \return the service
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
175 auto rules() noexcept -> rule_service&;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 /**
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 * Access the plugin service.
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 *
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 * \return the service
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
182 auto plugins() noexcept -> plugin_service&;
585
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
183
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
184 /**
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
185 * Load and re-apply the configuration to the daemon.
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
186 */
1ad88e2e3086 Irccd: config class no longer load things, closes #744
David Demelier <markand@malikania.fr>
parents: 569
diff changeset
187 void load() noexcept;
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 };
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
189
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
190 /**
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
191 * \brief Irccd error.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
192 */
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 653
diff changeset
193 class irccd_error : public std::system_error {
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
194 public:
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
195 /**
627
8c0942ee6e63 Irccd: do not use ranges for error codes
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
196 * \brief Irccd related errors.
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
197 */
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
198 enum error {
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
199 //!< No error.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
200 no_error = 0,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
201
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
202 //!< The connected peer is not irccd.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
203 not_irccd,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
204
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
205 //!< The irccd version is too different.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
206 incompatible_version,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
207
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
208 //!< Authentication was required but not issued.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
209 auth_required,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
210
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
211 //!< Authentication was invalid.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
212 invalid_auth,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
213
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
214 //!< The message was not a valid JSON object.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
215 invalid_message,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
216
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
217 //!< The specified command does not exist.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
218 invalid_command,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
219
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
220 //!< The specified command requires more arguments.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
221 incomplete_message,
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
222 };
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
223
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
224 /**
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
225 * Inherited constructors.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
226 */
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
227 using system_error::system_error;
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
228 };
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
229
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
230 /**
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
231 * Get the irccd error category singleton.
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
232 *
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
233 * \return the singleton
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
234 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
235 auto irccd_category() noexcept -> const std::error_category&;
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
236
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
237 /**
734
649bb151f40d Irccd: use std::error_code everywhere
David Demelier <markand@malikania.fr>
parents: 725
diff changeset
238 * Create a std::error_code from irccd_error::error enum.
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
239 *
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
240 * \param e the error code
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
241 */
742
d3660cbf2f3c Irccd: style
David Demelier <markand@malikania.fr>
parents: 734
diff changeset
242 auto make_error_code(irccd_error::error e) noexcept -> std::error_code;
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
243
291
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 } // !irccd
b490853404d9 Irccd: split lib into libirccd, #564
David Demelier <markand@malikania.fr>
parents:
diff changeset
245
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 653
diff changeset
246 namespace std {
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
247
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
248 template <>
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
249 struct is_error_code_enum<irccd::irccd_error::error> : public std::true_type {
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
250 };
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
251
670
95ac3ace1610 Common: introduce new io code
David Demelier <markand@malikania.fr>
parents: 653
diff changeset
252 } // !std
569
24b79bccc181 Irccd: initial support of error code responses
David Demelier <markand@malikania.fr>
parents: 553
diff changeset
253
603
986ed3a7575d Misc: fix includes style, closes #732
David Demelier <markand@malikania.fr>
parents: 599
diff changeset
254 #endif // !IRCCD_DAEMON_IRCCD_HPP