diff --git a/CMakeLists.txt b/CMakeLists.txt index bca731c..b40e7df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ find_package(OpenSSL REQUIRED) pkg_check_modules(LIBHS libhs REQUIRED IMPORTED_TARGET) -set(BOOST_INCLUDE_LIBRARIES asio log signals2 endian) +set(BOOST_INCLUDE_LIBRARIES asio log signals2 endian beast) set(BOOST_ENABLE_CMAKE ON) include(FetchContent) FetchContent_Declare( diff --git a/driver/CMakeLists.txt b/driver/CMakeLists.txt index 2c7d985..ca7a45b 100644 --- a/driver/CMakeLists.txt +++ b/driver/CMakeLists.txt @@ -1,12 +1,13 @@ add_executable(xbot main.cpp settings.cpp + web.cpp ) target_link_libraries(xbot PRIVATE myirc OpenSSL::SSL - Boost::signals2 Boost::log Boost::asio + Boost::signals2 Boost::log Boost::asio Boost::beast tomlplusplus_tomlplusplus PkgConfig::LIBHS mysocks5 mybase64) diff --git a/driver/main.cpp b/driver/main.cpp index 522f345..b981055 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -1,13 +1,16 @@ -#include "bot.hpp" -#include "challenge.hpp" -#include "client.hpp" -#include "connection.hpp" -#include "openssl_utils.hpp" -#include "registration.hpp" -#include "sasl_mechanism.hpp" #include "settings.hpp" -#include "ref.hpp" -#include "irc_coroutine.hpp" +#include "web.hpp" + +#include "myirc/bot.hpp" +#include "myirc/challenge.hpp" +#include "myirc/client.hpp" +#include "myirc/connection.hpp" +#include "myirc/openssl_utils.hpp" +#include "myirc/registration.hpp" +#include "myirc/sasl_mechanism.hpp" +#include "myirc/ref.hpp" +#include "myirc/irc_coroutine.hpp" + #include #include @@ -19,6 +22,16 @@ #include using namespace std::literals; +using myirc::SaslMechanism; +using myirc::SaslPlain; +using myirc::SaslExternal; +using myirc::SaslEcdsa; +using myirc::Bot; +using myirc::Client; +using myirc::Connection; +using myirc::Registration; +using myirc::Challenge; +using myirc::Ref; auto configure_sasl(const Settings &settings) -> std::unique_ptr { @@ -38,7 +51,7 @@ auto configure_sasl(const Settings &settings) -> std::unique_ptr not settings.sasl_authcid.empty() && not settings.sasl_key_file.empty() ) { - if (auto sasl_key = key_from_file(settings.sasl_key_file, settings.sasl_key_password)) + if (auto sasl_key = myirc::key_from_file(settings.sasl_key_file, settings.sasl_key_password)) return std::make_unique( settings.sasl_authcid, settings.sasl_authzid, @@ -52,13 +65,13 @@ static auto start(boost::asio::io_context &io, const Settings &settings) -> void Ref tls_cert; if (settings.use_tls && not settings.tls_cert_file.empty()) { - tls_cert = cert_from_file(settings.tls_cert_file); + tls_cert = myirc::cert_from_file(settings.tls_cert_file); } Ref tls_key; if (settings.use_tls && not settings.tls_key_file.empty()) { - tls_key = key_from_file(settings.tls_key_file, settings.tls_key_password); + tls_key = myirc::key_from_file(settings.tls_key_file, settings.tls_key_password); } const auto connection = std::make_shared(io); @@ -75,7 +88,7 @@ static auto start(boost::asio::io_context &io, const Settings &settings) -> void // Configure CHALLENGE on registration if applicable if (not settings.challenge_username.empty() && not settings.challenge_key_file.empty()) { - if (auto key = key_from_file(settings.challenge_key_file, settings.challenge_key_password)) { + if (auto key = myirc::key_from_file(settings.challenge_key_file, settings.challenge_key_password)) { client->sig_registered.connect([&settings, connection, key = std::move(key)]() { Challenge::start(connection, settings.challenge_username, key); }); diff --git a/driver/web.cpp b/driver/web.cpp new file mode 100644 index 0000000..10f32b6 --- /dev/null +++ b/driver/web.cpp @@ -0,0 +1 @@ +#include "web.hpp" diff --git a/driver/web.hpp b/driver/web.hpp new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/driver/web.hpp @@ -0,0 +1 @@ +#pragma once diff --git a/myirc/bot.cpp b/myirc/bot.cpp index 1b13993..dd0df85 100644 --- a/myirc/bot.cpp +++ b/myirc/bot.cpp @@ -1,7 +1,9 @@ -#include "bot.hpp" +#include "myirc/bot.hpp" #include +namespace myirc { + auto Bot::start(std::shared_ptr self) -> std::shared_ptr { const auto thread = std::make_shared(std::move(self)); @@ -77,3 +79,5 @@ auto Bot::shutdown() -> void { sig_command.disconnect_all_slots(); } + +} // namespace myirc diff --git a/myirc/challenge.cpp b/myirc/challenge.cpp index fa84344..c6ef5d9 100644 --- a/myirc/challenge.cpp +++ b/myirc/challenge.cpp @@ -1,6 +1,6 @@ -#include "challenge.hpp" +#include "myirc/challenge.hpp" -#include "openssl_utils.hpp" +#include "myirc/openssl_utils.hpp" #include @@ -12,6 +12,8 @@ #include #include +namespace myirc { + Challenge::Challenge(Ref key, std::shared_ptr connection) : key_{std::move(key)} , connection_{std::move(connection)} @@ -29,7 +31,7 @@ auto Challenge::on_ircmsg(IrcCommand cmd, const IrcMsg &msg) -> void { break; case IrcCommand::RPL_YOUREOPER: slot_.disconnect(); - connection_->send_ping("mitigation"); + //connection_->send_ping("mitigation"); break; case IrcCommand::RPL_ENDOFRSACHALLENGE2: finish_challenge(); @@ -89,3 +91,5 @@ auto Challenge::start(std::shared_ptr connection, const std::string_ connection->send_challenge(user); return self; } + +} // namespace myirc diff --git a/myirc/client.cpp b/myirc/client.cpp index 558c765..3feabb7 100644 --- a/myirc/client.cpp +++ b/myirc/client.cpp @@ -1,12 +1,15 @@ -#include "client.hpp" +#include "myirc/client.hpp" -#include "connection.hpp" +#include "myirc/connection.hpp" +#include "myirc/sasl_mechanism.hpp" #include #include #include +namespace myirc { + using namespace std::literals; auto Client::on_welcome(const IrcMsg &irc) -> void @@ -425,3 +428,5 @@ auto Client::on_cap(const IrcMsg &msg) -> void ); } } + +} // namespace myirc diff --git a/myirc/connection.cpp b/myirc/connection.cpp index 84f7793..678aee9 100644 --- a/myirc/connection.cpp +++ b/myirc/connection.cpp @@ -1,10 +1,11 @@ -#include "connection.hpp" +#include "myirc/connection.hpp" -#include "boost/asio/steady_timer.hpp" -#include "linebuffer.hpp" +#include "myirc/linebuffer.hpp" +#include "myirc/snote.hpp" #include +#include #include namespace { @@ -14,6 +15,8 @@ using tcp_type = boost::asio::ip::tcp::socket; using tls_type = boost::asio::ssl::stream; } // namespace +namespace myirc { + using namespace std::literals; Connection::Connection(boost::asio::io_context &io) @@ -518,7 +521,10 @@ auto Connection::connect( // Name resolution auto resolver = boost::asio::ip::tcp::resolver{stream_.get_executor()}; const auto endpoints = co_await resolver.async_resolve(settings.host, std::to_string(settings.port), boost::asio::use_awaitable); - + for (auto e : endpoints) { + BOOST_LOG_TRIVIAL(debug) << "DNS: " << e.endpoint(); + } + // Connect to the IRC server auto& socket = stream_.reset(); const auto endpoint = co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable); @@ -604,3 +610,5 @@ auto Connection::start(Settings settings) -> void self->sig_disconnect.disconnect_all_slots(); }); } + +} // namespace myirc diff --git a/myirc/include/bot.hpp b/myirc/include/myirc/bot.hpp similarity index 95% rename from myirc/include/bot.hpp rename to myirc/include/myirc/bot.hpp index 90e70b7..74d33a8 100644 --- a/myirc/include/bot.hpp +++ b/myirc/include/myirc/bot.hpp @@ -6,6 +6,8 @@ #include +namespace myirc { + struct Bot : std::enable_shared_from_this { struct Command @@ -34,3 +36,5 @@ struct Bot : std::enable_shared_from_this auto shutdown() -> void; }; + +} // namespace myirc diff --git a/myirc/include/c_callback.hpp b/myirc/include/myirc/c_callback.hpp similarity index 91% rename from myirc/include/c_callback.hpp rename to myirc/include/myirc/c_callback.hpp index 652cf6d..6e19e65 100644 --- a/myirc/include/c_callback.hpp +++ b/myirc/include/myirc/c_callback.hpp @@ -1,5 +1,7 @@ #pragma once +namespace myirc { + template struct CCallback_; template struct CCallback_ @@ -14,3 +16,5 @@ struct CCallback_ /// @tparam F Type of the closure template using CCallback = CCallback_; + +} // namespace myirc diff --git a/myirc/include/challenge.hpp b/myirc/include/myirc/challenge.hpp similarity index 95% rename from myirc/include/challenge.hpp rename to myirc/include/myirc/challenge.hpp index a0fbeca..0e83a70 100644 --- a/myirc/include/challenge.hpp +++ b/myirc/include/myirc/challenge.hpp @@ -8,6 +8,8 @@ #include #include +namespace myirc { + /// @brief Implements the CHALLENGE command protocol to identify as an operator. class Challenge : std::enable_shared_from_this { @@ -29,3 +31,5 @@ public: /// @return Handle to the challenge object. static auto start(std::shared_ptr, std::string_view user, Ref key) -> std::shared_ptr; }; + +} // namespace myirc diff --git a/myirc/include/client.hpp b/myirc/include/myirc/client.hpp similarity index 96% rename from myirc/include/client.hpp rename to myirc/include/myirc/client.hpp index 2e0da69..a61c3a5 100644 --- a/myirc/include/client.hpp +++ b/myirc/include/myirc/client.hpp @@ -1,13 +1,14 @@ #pragma once -#include "connection.hpp" -#include "sasl_mechanism.hpp" +#include "myirc/connection.hpp" +#include "myirc/sasl_mechanism.hpp" #include #include #include -struct Connection; +namespace myirc { + struct IrcMsg; enum class Casemap @@ -101,3 +102,5 @@ public: auto shutdown() -> void; }; + +} // namespace myirc diff --git a/myirc/include/connection.hpp b/myirc/include/myirc/connection.hpp similarity index 98% rename from myirc/include/connection.hpp rename to myirc/include/myirc/connection.hpp index 59608bf..90e10fb 100644 --- a/myirc/include/connection.hpp +++ b/myirc/include/myirc/connection.hpp @@ -4,7 +4,6 @@ #include "ircmsg.hpp" #include "ratelimit.hpp" #include "ref.hpp" -#include "snote.hpp" #include "stream.hpp" #include @@ -14,6 +13,10 @@ #include #include +namespace myirc { + +struct SnoteMatch; + class Connection : public std::enable_shared_from_this { public: @@ -136,3 +139,5 @@ auto Connection::write_irc(std::string front, std::string_view next, Args... res front += next; write_irc(std::move(front), rest...); } + +} // namespace myirc diff --git a/myirc/include/irc_command.hpp b/myirc/include/myirc/irc_command.hpp similarity index 98% rename from myirc/include/irc_command.hpp rename to myirc/include/myirc/irc_command.hpp index cb4e148..4636e78 100644 --- a/myirc/include/irc_command.hpp +++ b/myirc/include/myirc/irc_command.hpp @@ -1,3 +1,7 @@ +#pragma once + +namespace myirc { + enum class IrcCommand { UNKNOWN, @@ -280,3 +284,5 @@ enum class IrcCommand TOPIC, WALLOPS, }; + +} // namespace myirc diff --git a/myirc/include/irc_coroutine.hpp b/myirc/include/myirc/irc_coroutine.hpp similarity index 98% rename from myirc/include/irc_coroutine.hpp rename to myirc/include/myirc/irc_coroutine.hpp index eb58dd9..99a7615 100644 --- a/myirc/include/irc_coroutine.hpp +++ b/myirc/include/myirc/irc_coroutine.hpp @@ -1,6 +1,7 @@ #pragma once -#include "connection.hpp" +#include "myirc/connection.hpp" +#include "myirc/snote.hpp" #include #include @@ -8,6 +9,8 @@ #include #include +namespace myirc { + struct irc_promise; /// A coroutine that can co_await on various IRC events @@ -275,3 +278,5 @@ inline auto irc_coroutine::exception() -> std::exception_ptr { return promise().exception_; } + +} // namespace myirc diff --git a/myirc/include/ircmsg.hpp b/myirc/include/myirc/ircmsg.hpp similarity index 97% rename from myirc/include/ircmsg.hpp rename to myirc/include/myirc/ircmsg.hpp index 28a9542..9a0e0a4 100644 --- a/myirc/include/ircmsg.hpp +++ b/myirc/include/myirc/ircmsg.hpp @@ -4,6 +4,8 @@ #include #include +namespace myirc { + struct irctag { std::string_view key; @@ -72,3 +74,5 @@ struct irc_parse_error : public std::exception auto parse_irc_message(char *msg) -> IrcMsg; auto parse_irc_tags(char *msg) -> std::vector; + +} // namespace myirc diff --git a/myirc/include/linebuffer.hpp b/myirc/include/myirc/linebuffer.hpp similarity index 98% rename from myirc/include/linebuffer.hpp rename to myirc/include/myirc/linebuffer.hpp index 531f453..8b613be 100644 --- a/myirc/include/linebuffer.hpp +++ b/myirc/include/myirc/linebuffer.hpp @@ -16,6 +16,8 @@ #include #include +namespace myirc { + /** * @brief Fixed-size buffer with line-oriented dispatch * @@ -99,3 +101,5 @@ public: } } }; + +} // namespace myirc diff --git a/myirc/include/openssl_utils.hpp b/myirc/include/myirc/openssl_utils.hpp similarity index 87% rename from myirc/include/openssl_utils.hpp rename to myirc/include/myirc/openssl_utils.hpp index 35a7551..452017d 100644 --- a/myirc/include/openssl_utils.hpp +++ b/myirc/include/myirc/openssl_utils.hpp @@ -4,6 +4,10 @@ #include +namespace myirc { + auto log_openssl_errors(const std::string_view prefix) -> void; auto key_from_file(const std::string &filename, const std::string_view password) -> Ref; auto cert_from_file(const std::string &filename) -> Ref; + +} // namespace myirc diff --git a/myirc/include/ratelimit.hpp b/myirc/include/myirc/ratelimit.hpp similarity index 92% rename from myirc/include/ratelimit.hpp rename to myirc/include/myirc/ratelimit.hpp index 2815024..b11c2a1 100644 --- a/myirc/include/ratelimit.hpp +++ b/myirc/include/myirc/ratelimit.hpp @@ -3,6 +3,8 @@ #include #include +namespace myirc { + struct RateLimit { virtual ~RateLimit(); auto virtual query(size_t want_to_send) -> std::pair = 0; @@ -18,3 +20,5 @@ struct Rfc1459RateLimit final : RateLimit auto query(size_t want_to_send) -> std::pair override; }; + +} // namespace myirc diff --git a/myirc/include/ref.hpp b/myirc/include/myirc/ref.hpp similarity index 97% rename from myirc/include/ref.hpp rename to myirc/include/myirc/ref.hpp index 6128ce3..449471e 100644 --- a/myirc/include/ref.hpp +++ b/myirc/include/myirc/ref.hpp @@ -5,6 +5,8 @@ #include +namespace myirc { + // Specializations must Free to release a reference // Specializations can implement UpRef to increase a reference count on copy template struct RefTraits {}; @@ -56,3 +58,5 @@ struct Ref : std::unique_ptr> return *this; } }; + +} // namespace myirc diff --git a/myirc/include/registration.hpp b/myirc/include/myirc/registration.hpp similarity index 96% rename from myirc/include/registration.hpp rename to myirc/include/myirc/registration.hpp index 6af0f40..e9296bb 100644 --- a/myirc/include/registration.hpp +++ b/myirc/include/myirc/registration.hpp @@ -7,6 +7,8 @@ #include #include +namespace myirc { + class Registration : public std::enable_shared_from_this { public: @@ -44,3 +46,5 @@ public: std::shared_ptr ) -> std::shared_ptr; }; + +} // namespace myirc diff --git a/myirc/include/sasl_mechanism.hpp b/myirc/include/myirc/sasl_mechanism.hpp similarity index 98% rename from myirc/include/sasl_mechanism.hpp rename to myirc/include/myirc/sasl_mechanism.hpp index 2a66183..7bbb318 100644 --- a/myirc/include/sasl_mechanism.hpp +++ b/myirc/include/myirc/sasl_mechanism.hpp @@ -10,6 +10,8 @@ #include #include +namespace myirc { + class SaslMechanism { public: @@ -108,3 +110,5 @@ public: return stage_ == 2;; } }; + +} // namespace myirc diff --git a/myirc/include/snote.hpp b/myirc/include/myirc/snote.hpp similarity index 98% rename from myirc/include/snote.hpp rename to myirc/include/myirc/snote.hpp index aef0601..5e8a017 100644 --- a/myirc/include/snote.hpp +++ b/myirc/include/myirc/snote.hpp @@ -12,6 +12,8 @@ struct hs_database; struct hs_scratch; +namespace myirc { + enum class SnoteTag { ClientConnecting, @@ -95,3 +97,5 @@ struct SnoteCore }; extern SnoteCore snoteCore; + +} // namespace myirc diff --git a/myirc/include/stream.hpp b/myirc/include/myirc/stream.hpp similarity index 99% rename from myirc/include/stream.hpp rename to myirc/include/myirc/stream.hpp index ea5c317..934e4d4 100644 --- a/myirc/include/stream.hpp +++ b/myirc/include/myirc/stream.hpp @@ -6,6 +6,8 @@ #include #include +namespace myirc { + /// @brief Abstraction over plain-text and TLS streams. class Stream : private std::variant< @@ -112,3 +114,5 @@ public: socket.lowest_layer().close(err); } }; + +} // namespace myirc diff --git a/myirc/irc_commands.gperf b/myirc/irc_commands.gperf index 9cf741f..8257135 100644 --- a/myirc/irc_commands.gperf +++ b/myirc/irc_commands.gperf @@ -1,283 +1,283 @@ struct RecognizedCommand { char const* text; - IrcCommand command; + myirc::IrcCommand command; std::size_t min_args; std::size_t max_args; }; %% -001, IrcCommand::RPL_WELCOME, 2, 2 -002, IrcCommand::RPL_YOURHOST, 2, 2 -003, IrcCommand::RPL_CREATED, 2, 2 -004, IrcCommand::RPL_MYINFO, 5, 6 -005, IrcCommand::RPL_ISUPPORT, 2, 15 -008, IrcCommand::RPL_SNOMASK, 3, 3 -010, IrcCommand::RPL_REDIR, 4, 4 -015, IrcCommand::RPL_MAP, 2, 2 -017, IrcCommand::RPL_MAPEND, 2, 2 -043, IrcCommand::RPL_SAVENICK, 3, 3 -200, IrcCommand::RPL_TRACELINK, 5, 5 -201, IrcCommand::RPL_TRACECONNECTING, 4, 4 -202, IrcCommand::RPL_TRACEHANDSHAKE, 4, 4 -203, IrcCommand::RPL_TRACEUNKNOWN, 6, 6 -204, IrcCommand::RPL_TRACEOPERATOR, 7, 7 -205, IrcCommand::RPL_TRACEUSER, 7, 7 -206, IrcCommand::RPL_TRACESERVER, 8, 8 -208, IrcCommand::RPL_TRACENEWTYPE, 4, 4 -209, IrcCommand::RPL_TRACECLASS, 4, 4 -211, IrcCommand::RPL_STATSLINKINFO -212, IrcCommand::RPL_STATSCOMMANDS, 5, 5 -213, IrcCommand::RPL_STATSCLINE, 8, 8 -214, IrcCommand::RPL_STATSNLINE -215, IrcCommand::RPL_STATSILINE, 8, 8 -216, IrcCommand::RPL_STATSKLINE, 6, 6 -217, IrcCommand::RPL_STATSQLINE, 5, 5 -218, IrcCommand::RPL_STATSYLINE, 10, 10 -219, IrcCommand::RPL_ENDOFSTATS, 3, 3 -220, IrcCommand::RPL_STATSPLINE, 6, 6 -221, IrcCommand::RPL_UMODEIS, 2, 2 -224, IrcCommand::RPL_STATSFLINE -225, IrcCommand::RPL_STATSDLINE, 4, 4 -234, IrcCommand::RPL_SERVLIST -235, IrcCommand::RPL_SERVLISTEND -241, IrcCommand::RPL_STATSLLINE, 7, 7 -242, IrcCommand::RPL_STATSUPTIME, 2, 2 -243, IrcCommand::RPL_STATSOLINE, 7, 7 -244, IrcCommand::RPL_STATSHLINE, 7, 7 -245, IrcCommand::RPL_STATSSLINE -247, IrcCommand::RPL_STATSXLINE, 5, 5 -248, IrcCommand::RPL_STATSULINE, 5, 5 -249, IrcCommand::RPL_STATSDEBUG, 3, 3 -250, IrcCommand::RPL_STATSCONN, 2, 2 -251, IrcCommand::RPL_LUSERCLIENT, 2, 2 -252, IrcCommand::RPL_LUSEROP, 3, 3 -253, IrcCommand::RPL_LUSERUNKNOWN, 3, 3 -254, IrcCommand::RPL_LUSERCHANNELS, 3, 3 -255, IrcCommand::RPL_LUSERME, 2, 2 -256, IrcCommand::RPL_ADMINME, 3, 3 -257, IrcCommand::RPL_ADMINLOC1, 2, 2 -258, IrcCommand::RPL_ADMINLOC2, 2, 2 -259, IrcCommand::RPL_ADMINEMAIL, 2, 2 -261, IrcCommand::RPL_TRACELOG -262, IrcCommand::RPL_ENDOFTRACE, 3, 3 -263, IrcCommand::RPL_LOAD2HI, 3, 3 -265, IrcCommand::RPL_LOCALUSERS, 4, 4 -266, IrcCommand::RPL_GLOBALUSERS, 4, 4 -270, IrcCommand::RPL_PRIVS, 3, 3 -276, IrcCommand::RPL_WHOISCERTFP, 3, 3 -281, IrcCommand::RPL_ACCEPTLIST, 1, 15 -282, IrcCommand::RPL_ENDOFACCEPT, 2, 2 -300, IrcCommand::RPL_NONE -301, IrcCommand::RPL_AWAY, 3, 3 -302, IrcCommand::RPL_USERHOST, 2, 2 -303, IrcCommand::RPL_ISON, 2, 2 -304, IrcCommand::RPL_TEXT -305, IrcCommand::RPL_UNAWAY, 2, 2 -306, IrcCommand::RPL_NOWAWAY, 2, 2 -310, IrcCommand::RPL_WHOISHELPOP, 3, 3 -311, IrcCommand::RPL_WHOISUSER, 6, 6 -312, IrcCommand::RPL_WHOISSERVER, 4, 4 -313, IrcCommand::RPL_WHOISOPERATOR, 3, 3 -314, IrcCommand::RPL_WHOWASUSER, 6, 6 -369, IrcCommand::RPL_ENDOFWHOWAS, 3, 3 -316, IrcCommand::RPL_WHOISCHANOP -317, IrcCommand::RPL_WHOISIDLE, 5, 5 -318, IrcCommand::RPL_ENDOFWHOIS, 3, 3 -319, IrcCommand::RPL_WHOISCHANNELS, 3, 3 -320, IrcCommand::RPL_WHOISSPECIAL, 3, 3 -321, IrcCommand::RPL_LISTSTART, 3, 3 -322, IrcCommand::RPL_LIST, 4, 4 -323, IrcCommand::RPL_LISTEND, 2, 2 -324, IrcCommand::RPL_CHANNELMODEIS, 3, 3 -325, IrcCommand::RPL_CHANNELMLOCK, 4, 4 -328, IrcCommand::RPL_CHANNELURL -329, IrcCommand::RPL_CREATIONTIME, 3, 3 -330, IrcCommand::RPL_WHOISLOGGEDIN, 4, 4 -331, IrcCommand::RPL_NOTOPIC, 3, 3 -332, IrcCommand::RPL_TOPIC, 3, 3 -333, IrcCommand::RPL_TOPICWHOTIME, 4, 4 -338, IrcCommand::RPL_WHOISACTUALLY, 4, 4 -341, IrcCommand::RPL_INVITING, 3, 3 -342, IrcCommand::RPL_SUMMONING -346, IrcCommand::RPL_INVITELIST, 5, 5 -347, IrcCommand::RPL_ENDOFINVITELIST, 3, 3 -348, IrcCommand::RPL_EXCEPTLIST, 5, 5 -349, IrcCommand::RPL_ENDOFEXCEPTLIST, 3, 3 -351, IrcCommand::RPL_VERSION, 4, 4 -352, IrcCommand::RPL_WHOREPLY, 8, 8 -354, IrcCommand::RPL_WHOSPCRPL -315, IrcCommand::RPL_ENDOFWHO, 3, 3 -353, IrcCommand::RPL_NAMREPLY, 4, 4 -360, IrcCommand::RPL_WHOWASREAL, 3, 3 -366, IrcCommand::RPL_ENDOFNAMES, 3, 3 -361, IrcCommand::RPL_KILLDONE -362, IrcCommand::RPL_CLOSING, 3, 3 -363, IrcCommand::RPL_CLOSEEND, 3, 3 -364, IrcCommand::RPL_LINKS, 4, 4 -365, IrcCommand::RPL_ENDOFLINKS, 3, 3 -367, IrcCommand::RPL_BANLIST, 5, 5 -368, IrcCommand::RPL_ENDOFBANLIST, 3, 3 -371, IrcCommand::RPL_INFO, 2, 2 -372, IrcCommand::RPL_MOTD, 2, 2 -373, IrcCommand::RPL_INFOSTART -374, IrcCommand::RPL_ENDOFINFO, 2, 2 -375, IrcCommand::RPL_MOTDSTART, 2, 2 -376, IrcCommand::RPL_ENDOFMOTD, 2, 2 -378, IrcCommand::RPL_WHOISHOST, 3, 3 -381, IrcCommand::RPL_YOUREOPER, 2, 2 -382, IrcCommand::RPL_REHASHING, 3, 3 -384, IrcCommand::RPL_MYPORTIS -385, IrcCommand::RPL_NOTOPERANYMORE -386, IrcCommand::RPL_RSACHALLENGE, 2, 2 -391, IrcCommand::RPL_TIME, 3, 3 -392, IrcCommand::RPL_USERSSTART -393, IrcCommand::RPL_USERS -394, IrcCommand::RPL_ENDOFUSERS -395, IrcCommand::RPL_NOUSERS -396, IrcCommand::RPL_HOSTHIDDEN -401, IrcCommand::ERR_NOSUCHNICK, 3, 3 -402, IrcCommand::ERR_NOSUCHSERVER, 3, 3 -403, IrcCommand::ERR_NOSUCHCHANNEL, 3, 3 -404, IrcCommand::ERR_CANNOTSENDTOCHAN, 3, 3 -405, IrcCommand::ERR_TOOMANYCHANNELS, 3, 3 -406, IrcCommand::ERR_WASNOSUCHNICK, 3, 3 -407, IrcCommand::ERR_TOOMANYTARGETS, 3, 3 -409, IrcCommand::ERR_NOORIGIN, 2, 2 -410, IrcCommand::ERR_INVALIDCAPCMD, 3, 3 -411, IrcCommand::ERR_NORECIPIENT, 2, 2 -412, IrcCommand::ERR_NOTEXTTOSEND, 2, 2 -413, IrcCommand::ERR_NOTOPLEVEL, 3, 3 -414, IrcCommand::ERR_WILDTOPLEVEL, 3, 3 -415, IrcCommand::ERR_MSGNEEDREGGEDNICK, 3, 3 -416, IrcCommand::ERR_TOOMANYMATCHES, 3, 3 -421, IrcCommand::ERR_UNKNOWNCOMMAND, 3, 3 -422, IrcCommand::ERR_NOMOTD, 2, 2 -423, IrcCommand::ERR_NOADMININFO -424, IrcCommand::ERR_FILEERROR -431, IrcCommand::ERR_NONICKNAMEGIVEN, 2, 2 -432, IrcCommand::ERR_ERRONEUSNICKNAME, 3, 3 -433, IrcCommand::ERR_NICKNAMEINUSE, 3, 3 -435, IrcCommand::ERR_BANNICKCHANGE, 3, 3 -436, IrcCommand::ERR_NICKCOLLISION, 3, 3 -437, IrcCommand::ERR_UNAVAILRESOURCE, 3, 3 -438, IrcCommand::ERR_NICKTOOFAST, 4, 4 -440, IrcCommand::ERR_SERVICESDOWN, 3, 3 -441, IrcCommand::ERR_USERNOTINCHANNEL, 4, 4 -442, IrcCommand::ERR_NOTONCHANNEL, 3, 3 -443, IrcCommand::ERR_USERONCHANNEL, 4, 4 -444, IrcCommand::ERR_NOLOGIN -445, IrcCommand::ERR_SUMMONDISABLED -446, IrcCommand::ERR_USERSDISABLED -451, IrcCommand::ERR_NOTREGISTERED, 2, 2 -456, IrcCommand::ERR_ACCEPTFULL, 2, 2 -457, IrcCommand::ERR_ACCEPTEXIST, 3, 3 -458, IrcCommand::ERR_ACCEPTNOT, 3, 3 -461, IrcCommand::ERR_NEEDMOREPARAMS, 3, 3 -462, IrcCommand::ERR_ALREADYREGISTRED, 2, 2 -463, IrcCommand::ERR_NOPERMFORHOST -464, IrcCommand::ERR_PASSWDMISMATCH, 2, 2 -465, IrcCommand::ERR_YOUREBANNEDCREEP, 2, 2 -466, IrcCommand::ERR_YOUWILLBEBANNED -467, IrcCommand::ERR_KEYSET -470, IrcCommand::ERR_LINKCHANNEL, 4, 4 -471, IrcCommand::ERR_CHANNELISFULL, 3, 3 -472, IrcCommand::ERR_UNKNOWNMODE, 3, 3 -473, IrcCommand::ERR_INVITEONLYCHAN, 3, 3 -474, IrcCommand::ERR_BANNEDFROMCHAN, 3, 3 -475, IrcCommand::ERR_BADCHANNELKEY, 3, 3 -476, IrcCommand::ERR_BADCHANMASK -477, IrcCommand::ERR_NEEDREGGEDNICK, 3, 3 -478, IrcCommand::ERR_BANLISTFULL, 4, 4 -479, IrcCommand::ERR_BADCHANNAME, 3, 3 -480, IrcCommand::ERR_THROTTLE, 3, 3 -481, IrcCommand::ERR_NOPRIVILEGES, 2, 2 -482, IrcCommand::ERR_CHANOPRIVSNEEDED, 3, 3 -483, IrcCommand::ERR_CANTKILLSERVER, 2, 2 -484, IrcCommand::ERR_ISCHANSERVICE, 4, 4 -485, IrcCommand::ERR_BANNEDNICK -486, IrcCommand::ERR_NONONREG, 3, 3 -489, IrcCommand::ERR_VOICENEEDED, 3, 3 -491, IrcCommand::ERR_NOOPERHOST, 2, 2 -492, IrcCommand::ERR_CANNOTSENDTOUSER, 2, 2 -494, IrcCommand::ERR_OWNMODE, 3, 3 -501, IrcCommand::ERR_UMODEUNKNOWNFLAG, 2, 2 -502, IrcCommand::ERR_USERSDONTMATCH, 2, 2 -503, IrcCommand::ERR_GHOSTEDCLIENT -504, IrcCommand::ERR_USERNOTONSERV, 3, 3 -513, IrcCommand::ERR_WRONGPONG, 2, 2 -517, IrcCommand::ERR_DISABLED, 3, 3 -524, IrcCommand::ERR_HELPNOTFOUND, 3, 3 -670, IrcCommand::RPL_STARTTLS, 2, 2 -671, IrcCommand::RPL_WHOISSECURE, 3, 3 -691, IrcCommand::ERR_STARTTLS, 2, 2 -702, IrcCommand::RPL_MODLIST, 5, 5 -703, IrcCommand::RPL_ENDOFMODLIST, 2, 2 -704, IrcCommand::RPL_HELPSTART, 3, 3 -705, IrcCommand::RPL_HELPTXT, 3, 3 -706, IrcCommand::RPL_ENDOFHELP, 3, 3 -707, IrcCommand::ERR_TARGCHANGE, 3, 3 -708, IrcCommand::RPL_ETRACEFULL, 10, 10 -709, IrcCommand::RPL_ETRACE, 8, 8 -710, IrcCommand::RPL_KNOCK, 4, 4 -711, IrcCommand::RPL_KNOCKDLVR, 3, 3 -712, IrcCommand::ERR_TOOMANYKNOCK, 3, 3 -713, IrcCommand::ERR_CHANOPEN, 3, 3 -714, IrcCommand::ERR_KNOCKONCHAN, 3, 3 -715, IrcCommand::ERR_KNOCKDISABLED, 2, 2 -716, IrcCommand::ERR_TARGUMODEG, 3, 3 -717, IrcCommand::RPL_TARGNOTIFY -718, IrcCommand::RPL_UMODEGMSG, 4, 4 -720, IrcCommand::RPL_OMOTDSTART, 2, 2 -721, IrcCommand::RPL_OMOTD, 2, 2 -722, IrcCommand::RPL_ENDOFOMOTD, 2, 2 -723, IrcCommand::ERR_NOPRIVS, 3, 3 -724, IrcCommand::RPL_TESTMASK -725, IrcCommand::RPL_TESTLINE, 5, 5 -726, IrcCommand::RPL_NOTESTLINE -727, IrcCommand::RPL_TESTMASKGECO, 6, 6 -728, IrcCommand::RPL_QUIETLIST, 6, 6 -729, IrcCommand::RPL_ENDOFQUIETLIS, 4, 4 -730, IrcCommand::RPL_MONONLINE, 2, 2 -731, IrcCommand::RPL_MONOFFLINE, 2, 2 -732, IrcCommand::RPL_MONLIST, 2, 2 -733, IrcCommand::RPL_ENDOFMONLIS, 2, 2 -734, IrcCommand::ERR_MONLISTFULL, 4, 4 -740, IrcCommand::RPL_RSACHALLENGE2, 2, 2 -741, IrcCommand::RPL_ENDOFRSACHALLENGE2, 2, 2 -742, IrcCommand::ERR_MLOCKRESTRICTE, 5, 5 -743, IrcCommand::ERR_INVALIDBAN, 5, 5 -744, IrcCommand::ERR_TOPICLOCK -750, IrcCommand::RPL_SCANMATCHED, 3, 3 -751, IrcCommand::RPL_SCANUMODES, 8, 8 -900, IrcCommand::RPL_LOGGEDIN, 4, 4 -901, IrcCommand::RPL_LOGGEDOUT, 3, 3 -902, IrcCommand::ERR_NICKLOCKED, 2, 2 -903, IrcCommand::RPL_SASLSUCCESS, 2, 2 -904, IrcCommand::ERR_SASLFAIL, 2, 2 -905, IrcCommand::ERR_SASLTOOLONG, 2, 2 -906, IrcCommand::ERR_SASLABORTED, 2, 2 -907, IrcCommand::ERR_SASLALREADY, 2, 2 -908, IrcCommand::RPL_SASLMECHS, 3, 3 -ACCOUNT, IrcCommand::ACCOUNT, 1, 1 -AUTHENTICATE, IrcCommand::AUTHENTICATE, 1, 1 -AWAY, IrcCommand::AWAY, 0, 1 -BATCH, IrcCommand::BATCH -BOUNCER, IrcCommand::BOUNCER -CAP, IrcCommand::CAP, 1, 15 -CHGHOST, IrcCommand::CHGHOST, 2, 2 -ERROR, IrcCommand::ERROR, 1, 1 -INVITE, IrcCommand::INVITE, 2, 2 -JOIN, IrcCommand::JOIN, 1, 3 -KICK, IrcCommand::KICK, 3, 3 -KILL, IrcCommand::KILL, 2, 2 -MODE, IrcCommand::MODE, 2, 15 -NICK, IrcCommand::NICK, 1, 1 -NOTICE, IrcCommand::NOTICE, 2, 2 -PART, IrcCommand::PART, 1, 2 -PING, IrcCommand::PING, 1, 1 -PONG, IrcCommand::PONG, 1, 2 -PRIVMSG, IrcCommand::PRIVMSG, 2, 2 -QUIT, IrcCommand::QUIT, 1, 1 -SETNAME, IrcCommand::SETNAME, 1, 1 -TAGMSG, IrcCommand::TAGMSG, 1, 1 -TOPIC, IrcCommand::TOPIC, 2, 2 -WALLOPS, IrcCommand::WALLOPS, 1, 1 +001, myirc::IrcCommand::RPL_WELCOME, 2, 2 +002, myirc::IrcCommand::RPL_YOURHOST, 2, 2 +003, myirc::IrcCommand::RPL_CREATED, 2, 2 +004, myirc::IrcCommand::RPL_MYINFO, 5, 6 +005, myirc::IrcCommand::RPL_ISUPPORT, 2, 15 +008, myirc::IrcCommand::RPL_SNOMASK, 3, 3 +010, myirc::IrcCommand::RPL_REDIR, 4, 4 +015, myirc::IrcCommand::RPL_MAP, 2, 2 +017, myirc::IrcCommand::RPL_MAPEND, 2, 2 +043, myirc::IrcCommand::RPL_SAVENICK, 3, 3 +200, myirc::IrcCommand::RPL_TRACELINK, 5, 5 +201, myirc::IrcCommand::RPL_TRACECONNECTING, 4, 4 +202, myirc::IrcCommand::RPL_TRACEHANDSHAKE, 4, 4 +203, myirc::IrcCommand::RPL_TRACEUNKNOWN, 6, 6 +204, myirc::IrcCommand::RPL_TRACEOPERATOR, 7, 7 +205, myirc::IrcCommand::RPL_TRACEUSER, 7, 7 +206, myirc::IrcCommand::RPL_TRACESERVER, 8, 8 +208, myirc::IrcCommand::RPL_TRACENEWTYPE, 4, 4 +209, myirc::IrcCommand::RPL_TRACECLASS, 4, 4 +211, myirc::IrcCommand::RPL_STATSLINKINFO +212, myirc::IrcCommand::RPL_STATSCOMMANDS, 5, 5 +213, myirc::IrcCommand::RPL_STATSCLINE, 8, 8 +214, myirc::IrcCommand::RPL_STATSNLINE +215, myirc::IrcCommand::RPL_STATSILINE, 8, 8 +216, myirc::IrcCommand::RPL_STATSKLINE, 6, 6 +217, myirc::IrcCommand::RPL_STATSQLINE, 5, 5 +218, myirc::IrcCommand::RPL_STATSYLINE, 10, 10 +219, myirc::IrcCommand::RPL_ENDOFSTATS, 3, 3 +220, myirc::IrcCommand::RPL_STATSPLINE, 6, 6 +221, myirc::IrcCommand::RPL_UMODEIS, 2, 2 +224, myirc::IrcCommand::RPL_STATSFLINE +225, myirc::IrcCommand::RPL_STATSDLINE, 4, 4 +234, myirc::IrcCommand::RPL_SERVLIST +235, myirc::IrcCommand::RPL_SERVLISTEND +241, myirc::IrcCommand::RPL_STATSLLINE, 7, 7 +242, myirc::IrcCommand::RPL_STATSUPTIME, 2, 2 +243, myirc::IrcCommand::RPL_STATSOLINE, 7, 7 +244, myirc::IrcCommand::RPL_STATSHLINE, 7, 7 +245, myirc::IrcCommand::RPL_STATSSLINE +247, myirc::IrcCommand::RPL_STATSXLINE, 5, 5 +248, myirc::IrcCommand::RPL_STATSULINE, 5, 5 +249, myirc::IrcCommand::RPL_STATSDEBUG, 3, 3 +250, myirc::IrcCommand::RPL_STATSCONN, 2, 2 +251, myirc::IrcCommand::RPL_LUSERCLIENT, 2, 2 +252, myirc::IrcCommand::RPL_LUSEROP, 3, 3 +253, myirc::IrcCommand::RPL_LUSERUNKNOWN, 3, 3 +254, myirc::IrcCommand::RPL_LUSERCHANNELS, 3, 3 +255, myirc::IrcCommand::RPL_LUSERME, 2, 2 +256, myirc::IrcCommand::RPL_ADMINME, 3, 3 +257, myirc::IrcCommand::RPL_ADMINLOC1, 2, 2 +258, myirc::IrcCommand::RPL_ADMINLOC2, 2, 2 +259, myirc::IrcCommand::RPL_ADMINEMAIL, 2, 2 +261, myirc::IrcCommand::RPL_TRACELOG +262, myirc::IrcCommand::RPL_ENDOFTRACE, 3, 3 +263, myirc::IrcCommand::RPL_LOAD2HI, 3, 3 +265, myirc::IrcCommand::RPL_LOCALUSERS, 4, 4 +266, myirc::IrcCommand::RPL_GLOBALUSERS, 4, 4 +270, myirc::IrcCommand::RPL_PRIVS, 3, 3 +276, myirc::IrcCommand::RPL_WHOISCERTFP, 3, 3 +281, myirc::IrcCommand::RPL_ACCEPTLIST, 1, 15 +282, myirc::IrcCommand::RPL_ENDOFACCEPT, 2, 2 +300, myirc::IrcCommand::RPL_NONE +301, myirc::IrcCommand::RPL_AWAY, 3, 3 +302, myirc::IrcCommand::RPL_USERHOST, 2, 2 +303, myirc::IrcCommand::RPL_ISON, 2, 2 +304, myirc::IrcCommand::RPL_TEXT +305, myirc::IrcCommand::RPL_UNAWAY, 2, 2 +306, myirc::IrcCommand::RPL_NOWAWAY, 2, 2 +310, myirc::IrcCommand::RPL_WHOISHELPOP, 3, 3 +311, myirc::IrcCommand::RPL_WHOISUSER, 6, 6 +312, myirc::IrcCommand::RPL_WHOISSERVER, 4, 4 +313, myirc::IrcCommand::RPL_WHOISOPERATOR, 3, 3 +314, myirc::IrcCommand::RPL_WHOWASUSER, 6, 6 +369, myirc::IrcCommand::RPL_ENDOFWHOWAS, 3, 3 +316, myirc::IrcCommand::RPL_WHOISCHANOP +317, myirc::IrcCommand::RPL_WHOISIDLE, 5, 5 +318, myirc::IrcCommand::RPL_ENDOFWHOIS, 3, 3 +319, myirc::IrcCommand::RPL_WHOISCHANNELS, 3, 3 +320, myirc::IrcCommand::RPL_WHOISSPECIAL, 3, 3 +321, myirc::IrcCommand::RPL_LISTSTART, 3, 3 +322, myirc::IrcCommand::RPL_LIST, 4, 4 +323, myirc::IrcCommand::RPL_LISTEND, 2, 2 +324, myirc::IrcCommand::RPL_CHANNELMODEIS, 3, 3 +325, myirc::IrcCommand::RPL_CHANNELMLOCK, 4, 4 +328, myirc::IrcCommand::RPL_CHANNELURL +329, myirc::IrcCommand::RPL_CREATIONTIME, 3, 3 +330, myirc::IrcCommand::RPL_WHOISLOGGEDIN, 4, 4 +331, myirc::IrcCommand::RPL_NOTOPIC, 3, 3 +332, myirc::IrcCommand::RPL_TOPIC, 3, 3 +333, myirc::IrcCommand::RPL_TOPICWHOTIME, 4, 4 +338, myirc::IrcCommand::RPL_WHOISACTUALLY, 4, 4 +341, myirc::IrcCommand::RPL_INVITING, 3, 3 +342, myirc::IrcCommand::RPL_SUMMONING +346, myirc::IrcCommand::RPL_INVITELIST, 5, 5 +347, myirc::IrcCommand::RPL_ENDOFINVITELIST, 3, 3 +348, myirc::IrcCommand::RPL_EXCEPTLIST, 5, 5 +349, myirc::IrcCommand::RPL_ENDOFEXCEPTLIST, 3, 3 +351, myirc::IrcCommand::RPL_VERSION, 4, 4 +352, myirc::IrcCommand::RPL_WHOREPLY, 8, 8 +354, myirc::IrcCommand::RPL_WHOSPCRPL +315, myirc::IrcCommand::RPL_ENDOFWHO, 3, 3 +353, myirc::IrcCommand::RPL_NAMREPLY, 4, 4 +360, myirc::IrcCommand::RPL_WHOWASREAL, 3, 3 +366, myirc::IrcCommand::RPL_ENDOFNAMES, 3, 3 +361, myirc::IrcCommand::RPL_KILLDONE +362, myirc::IrcCommand::RPL_CLOSING, 3, 3 +363, myirc::IrcCommand::RPL_CLOSEEND, 3, 3 +364, myirc::IrcCommand::RPL_LINKS, 4, 4 +365, myirc::IrcCommand::RPL_ENDOFLINKS, 3, 3 +367, myirc::IrcCommand::RPL_BANLIST, 5, 5 +368, myirc::IrcCommand::RPL_ENDOFBANLIST, 3, 3 +371, myirc::IrcCommand::RPL_INFO, 2, 2 +372, myirc::IrcCommand::RPL_MOTD, 2, 2 +373, myirc::IrcCommand::RPL_INFOSTART +374, myirc::IrcCommand::RPL_ENDOFINFO, 2, 2 +375, myirc::IrcCommand::RPL_MOTDSTART, 2, 2 +376, myirc::IrcCommand::RPL_ENDOFMOTD, 2, 2 +378, myirc::IrcCommand::RPL_WHOISHOST, 3, 3 +381, myirc::IrcCommand::RPL_YOUREOPER, 2, 2 +382, myirc::IrcCommand::RPL_REHASHING, 3, 3 +384, myirc::IrcCommand::RPL_MYPORTIS +385, myirc::IrcCommand::RPL_NOTOPERANYMORE +386, myirc::IrcCommand::RPL_RSACHALLENGE, 2, 2 +391, myirc::IrcCommand::RPL_TIME, 3, 3 +392, myirc::IrcCommand::RPL_USERSSTART +393, myirc::IrcCommand::RPL_USERS +394, myirc::IrcCommand::RPL_ENDOFUSERS +395, myirc::IrcCommand::RPL_NOUSERS +396, myirc::IrcCommand::RPL_HOSTHIDDEN +401, myirc::IrcCommand::ERR_NOSUCHNICK, 3, 3 +402, myirc::IrcCommand::ERR_NOSUCHSERVER, 3, 3 +403, myirc::IrcCommand::ERR_NOSUCHCHANNEL, 3, 3 +404, myirc::IrcCommand::ERR_CANNOTSENDTOCHAN, 3, 3 +405, myirc::IrcCommand::ERR_TOOMANYCHANNELS, 3, 3 +406, myirc::IrcCommand::ERR_WASNOSUCHNICK, 3, 3 +407, myirc::IrcCommand::ERR_TOOMANYTARGETS, 3, 3 +409, myirc::IrcCommand::ERR_NOORIGIN, 2, 2 +410, myirc::IrcCommand::ERR_INVALIDCAPCMD, 3, 3 +411, myirc::IrcCommand::ERR_NORECIPIENT, 2, 2 +412, myirc::IrcCommand::ERR_NOTEXTTOSEND, 2, 2 +413, myirc::IrcCommand::ERR_NOTOPLEVEL, 3, 3 +414, myirc::IrcCommand::ERR_WILDTOPLEVEL, 3, 3 +415, myirc::IrcCommand::ERR_MSGNEEDREGGEDNICK, 3, 3 +416, myirc::IrcCommand::ERR_TOOMANYMATCHES, 3, 3 +421, myirc::IrcCommand::ERR_UNKNOWNCOMMAND, 3, 3 +422, myirc::IrcCommand::ERR_NOMOTD, 2, 2 +423, myirc::IrcCommand::ERR_NOADMININFO +424, myirc::IrcCommand::ERR_FILEERROR +431, myirc::IrcCommand::ERR_NONICKNAMEGIVEN, 2, 2 +432, myirc::IrcCommand::ERR_ERRONEUSNICKNAME, 3, 3 +433, myirc::IrcCommand::ERR_NICKNAMEINUSE, 3, 3 +435, myirc::IrcCommand::ERR_BANNICKCHANGE, 3, 3 +436, myirc::IrcCommand::ERR_NICKCOLLISION, 3, 3 +437, myirc::IrcCommand::ERR_UNAVAILRESOURCE, 3, 3 +438, myirc::IrcCommand::ERR_NICKTOOFAST, 4, 4 +440, myirc::IrcCommand::ERR_SERVICESDOWN, 3, 3 +441, myirc::IrcCommand::ERR_USERNOTINCHANNEL, 4, 4 +442, myirc::IrcCommand::ERR_NOTONCHANNEL, 3, 3 +443, myirc::IrcCommand::ERR_USERONCHANNEL, 4, 4 +444, myirc::IrcCommand::ERR_NOLOGIN +445, myirc::IrcCommand::ERR_SUMMONDISABLED +446, myirc::IrcCommand::ERR_USERSDISABLED +451, myirc::IrcCommand::ERR_NOTREGISTERED, 2, 2 +456, myirc::IrcCommand::ERR_ACCEPTFULL, 2, 2 +457, myirc::IrcCommand::ERR_ACCEPTEXIST, 3, 3 +458, myirc::IrcCommand::ERR_ACCEPTNOT, 3, 3 +461, myirc::IrcCommand::ERR_NEEDMOREPARAMS, 3, 3 +462, myirc::IrcCommand::ERR_ALREADYREGISTRED, 2, 2 +463, myirc::IrcCommand::ERR_NOPERMFORHOST +464, myirc::IrcCommand::ERR_PASSWDMISMATCH, 2, 2 +465, myirc::IrcCommand::ERR_YOUREBANNEDCREEP, 2, 2 +466, myirc::IrcCommand::ERR_YOUWILLBEBANNED +467, myirc::IrcCommand::ERR_KEYSET +470, myirc::IrcCommand::ERR_LINKCHANNEL, 4, 4 +471, myirc::IrcCommand::ERR_CHANNELISFULL, 3, 3 +472, myirc::IrcCommand::ERR_UNKNOWNMODE, 3, 3 +473, myirc::IrcCommand::ERR_INVITEONLYCHAN, 3, 3 +474, myirc::IrcCommand::ERR_BANNEDFROMCHAN, 3, 3 +475, myirc::IrcCommand::ERR_BADCHANNELKEY, 3, 3 +476, myirc::IrcCommand::ERR_BADCHANMASK +477, myirc::IrcCommand::ERR_NEEDREGGEDNICK, 3, 3 +478, myirc::IrcCommand::ERR_BANLISTFULL, 4, 4 +479, myirc::IrcCommand::ERR_BADCHANNAME, 3, 3 +480, myirc::IrcCommand::ERR_THROTTLE, 3, 3 +481, myirc::IrcCommand::ERR_NOPRIVILEGES, 2, 2 +482, myirc::IrcCommand::ERR_CHANOPRIVSNEEDED, 3, 3 +483, myirc::IrcCommand::ERR_CANTKILLSERVER, 2, 2 +484, myirc::IrcCommand::ERR_ISCHANSERVICE, 4, 4 +485, myirc::IrcCommand::ERR_BANNEDNICK +486, myirc::IrcCommand::ERR_NONONREG, 3, 3 +489, myirc::IrcCommand::ERR_VOICENEEDED, 3, 3 +491, myirc::IrcCommand::ERR_NOOPERHOST, 2, 2 +492, myirc::IrcCommand::ERR_CANNOTSENDTOUSER, 2, 2 +494, myirc::IrcCommand::ERR_OWNMODE, 3, 3 +501, myirc::IrcCommand::ERR_UMODEUNKNOWNFLAG, 2, 2 +502, myirc::IrcCommand::ERR_USERSDONTMATCH, 2, 2 +503, myirc::IrcCommand::ERR_GHOSTEDCLIENT +504, myirc::IrcCommand::ERR_USERNOTONSERV, 3, 3 +513, myirc::IrcCommand::ERR_WRONGPONG, 2, 2 +517, myirc::IrcCommand::ERR_DISABLED, 3, 3 +524, myirc::IrcCommand::ERR_HELPNOTFOUND, 3, 3 +670, myirc::IrcCommand::RPL_STARTTLS, 2, 2 +671, myirc::IrcCommand::RPL_WHOISSECURE, 3, 3 +691, myirc::IrcCommand::ERR_STARTTLS, 2, 2 +702, myirc::IrcCommand::RPL_MODLIST, 5, 5 +703, myirc::IrcCommand::RPL_ENDOFMODLIST, 2, 2 +704, myirc::IrcCommand::RPL_HELPSTART, 3, 3 +705, myirc::IrcCommand::RPL_HELPTXT, 3, 3 +706, myirc::IrcCommand::RPL_ENDOFHELP, 3, 3 +707, myirc::IrcCommand::ERR_TARGCHANGE, 3, 3 +708, myirc::IrcCommand::RPL_ETRACEFULL, 10, 10 +709, myirc::IrcCommand::RPL_ETRACE, 8, 8 +710, myirc::IrcCommand::RPL_KNOCK, 4, 4 +711, myirc::IrcCommand::RPL_KNOCKDLVR, 3, 3 +712, myirc::IrcCommand::ERR_TOOMANYKNOCK, 3, 3 +713, myirc::IrcCommand::ERR_CHANOPEN, 3, 3 +714, myirc::IrcCommand::ERR_KNOCKONCHAN, 3, 3 +715, myirc::IrcCommand::ERR_KNOCKDISABLED, 2, 2 +716, myirc::IrcCommand::ERR_TARGUMODEG, 3, 3 +717, myirc::IrcCommand::RPL_TARGNOTIFY +718, myirc::IrcCommand::RPL_UMODEGMSG, 4, 4 +720, myirc::IrcCommand::RPL_OMOTDSTART, 2, 2 +721, myirc::IrcCommand::RPL_OMOTD, 2, 2 +722, myirc::IrcCommand::RPL_ENDOFOMOTD, 2, 2 +723, myirc::IrcCommand::ERR_NOPRIVS, 3, 3 +724, myirc::IrcCommand::RPL_TESTMASK +725, myirc::IrcCommand::RPL_TESTLINE, 5, 5 +726, myirc::IrcCommand::RPL_NOTESTLINE +727, myirc::IrcCommand::RPL_TESTMASKGECO, 6, 6 +728, myirc::IrcCommand::RPL_QUIETLIST, 6, 6 +729, myirc::IrcCommand::RPL_ENDOFQUIETLIS, 4, 4 +730, myirc::IrcCommand::RPL_MONONLINE, 2, 2 +731, myirc::IrcCommand::RPL_MONOFFLINE, 2, 2 +732, myirc::IrcCommand::RPL_MONLIST, 2, 2 +733, myirc::IrcCommand::RPL_ENDOFMONLIS, 2, 2 +734, myirc::IrcCommand::ERR_MONLISTFULL, 4, 4 +740, myirc::IrcCommand::RPL_RSACHALLENGE2, 2, 2 +741, myirc::IrcCommand::RPL_ENDOFRSACHALLENGE2, 2, 2 +742, myirc::IrcCommand::ERR_MLOCKRESTRICTE, 5, 5 +743, myirc::IrcCommand::ERR_INVALIDBAN, 5, 5 +744, myirc::IrcCommand::ERR_TOPICLOCK +750, myirc::IrcCommand::RPL_SCANMATCHED, 3, 3 +751, myirc::IrcCommand::RPL_SCANUMODES, 8, 8 +900, myirc::IrcCommand::RPL_LOGGEDIN, 4, 4 +901, myirc::IrcCommand::RPL_LOGGEDOUT, 3, 3 +902, myirc::IrcCommand::ERR_NICKLOCKED, 2, 2 +903, myirc::IrcCommand::RPL_SASLSUCCESS, 2, 2 +904, myirc::IrcCommand::ERR_SASLFAIL, 2, 2 +905, myirc::IrcCommand::ERR_SASLTOOLONG, 2, 2 +906, myirc::IrcCommand::ERR_SASLABORTED, 2, 2 +907, myirc::IrcCommand::ERR_SASLALREADY, 2, 2 +908, myirc::IrcCommand::RPL_SASLMECHS, 3, 3 +ACCOUNT, myirc::IrcCommand::ACCOUNT, 1, 1 +AUTHENTICATE, myirc::IrcCommand::AUTHENTICATE, 1, 1 +AWAY, myirc::IrcCommand::AWAY, 0, 1 +BATCH, myirc::IrcCommand::BATCH +BOUNCER, myirc::IrcCommand::BOUNCER +CAP, myirc::IrcCommand::CAP, 1, 15 +CHGHOST, myirc::IrcCommand::CHGHOST, 2, 2 +ERROR, myirc::IrcCommand::ERROR, 1, 1 +INVITE, myirc::IrcCommand::INVITE, 2, 2 +JOIN, myirc::IrcCommand::JOIN, 1, 3 +KICK, myirc::IrcCommand::KICK, 3, 3 +KILL, myirc::IrcCommand::KILL, 2, 2 +MODE, myirc::IrcCommand::MODE, 2, 15 +NICK, myirc::IrcCommand::NICK, 1, 1 +NOTICE, myirc::IrcCommand::NOTICE, 2, 2 +PART, myirc::IrcCommand::PART, 1, 2 +PING, myirc::IrcCommand::PING, 1, 1 +PONG, myirc::IrcCommand::PONG, 1, 2 +PRIVMSG, myirc::IrcCommand::PRIVMSG, 2, 2 +QUIT, myirc::IrcCommand::QUIT, 1, 1 +SETNAME, myirc::IrcCommand::SETNAME, 1, 1 +TAGMSG, myirc::IrcCommand::TAGMSG, 1, 1 +TOPIC, myirc::IrcCommand::TOPIC, 2, 2 +WALLOPS, myirc::IrcCommand::WALLOPS, 1, 1 diff --git a/myirc/ircmsg.cpp b/myirc/ircmsg.cpp index 1c21f4d..b6866a4 100644 --- a/myirc/ircmsg.cpp +++ b/myirc/ircmsg.cpp @@ -1,8 +1,8 @@ +#include "myirc/ircmsg.hpp" + #include #include -#include "ircmsg.hpp" - namespace { class Parser { @@ -104,6 +104,8 @@ std::string_view unescape_tag_value(char *const val) } // namespace +namespace myirc { + auto parse_irc_tags(char *str) -> std::vector { std::vector tags; @@ -184,3 +186,5 @@ auto operator<<(std::ostream &out, irc_error_code code) -> std::ostream & return out; } } + +} // namespace myirc diff --git a/myirc/openssl_utils.cpp b/myirc/openssl_utils.cpp index d656e9a..d2b5c0c 100644 --- a/myirc/openssl_utils.cpp +++ b/myirc/openssl_utils.cpp @@ -1,6 +1,6 @@ -#include "openssl_utils.hpp" +#include "myirc/openssl_utils.hpp" -#include "c_callback.hpp" +#include "myirc/c_callback.hpp" #include #include @@ -11,6 +11,8 @@ using namespace std::literals; +namespace myirc { + auto log_openssl_errors(const std::string_view prefix) -> void { auto err_cb = [prefix](const char *str, size_t len) -> int { @@ -65,3 +67,5 @@ auto key_from_file(const std::string &filename, const std::string_view password) } return key; } + +} // namespace myirc diff --git a/myirc/ratelimit.cpp b/myirc/ratelimit.cpp index 2f25813..ed86221 100644 --- a/myirc/ratelimit.cpp +++ b/myirc/ratelimit.cpp @@ -1,6 +1,9 @@ -#include "ratelimit.hpp" +#include "myirc/ratelimit.hpp" + #include +namespace myirc { + using namespace std::literals; using ms = std::chrono::milliseconds; @@ -21,3 +24,5 @@ auto Rfc1459RateLimit::query(size_t want_to_send) -> std::pair return {cost_ - gap, 1}; } } + +} // namespace myirc diff --git a/myirc/registration.cpp b/myirc/registration.cpp index 196cb6d..7bba57e 100644 --- a/myirc/registration.cpp +++ b/myirc/registration.cpp @@ -1,12 +1,14 @@ -#include "registration.hpp" +#include "myirc/registration.hpp" -#include "connection.hpp" -#include "ircmsg.hpp" +#include "myirc/connection.hpp" +#include "myirc/ircmsg.hpp" #include #include #include +namespace myirc { + Registration::Registration( Settings settings, std::shared_ptr client @@ -142,3 +144,5 @@ auto Registration::on_ircmsg(const IrcCommand cmd, const IrcMsg &msg) -> void break; } } + +} // namespace myirc diff --git a/myirc/sasl_mechanism.cpp b/myirc/sasl_mechanism.cpp index 71b65e9..a263cf8 100644 --- a/myirc/sasl_mechanism.cpp +++ b/myirc/sasl_mechanism.cpp @@ -1,8 +1,11 @@ -#include "sasl_mechanism.hpp" -#include "openssl_utils.hpp" +#include "myirc/sasl_mechanism.hpp" + +#include "myirc/openssl_utils.hpp" #include +namespace myirc { + auto SaslPlain::step(std::string_view msg) -> StepResult { if (complete_) { return Failure{}; @@ -72,3 +75,5 @@ auto SaslEcdsa::step(std::string_view msg) -> StepResult { return Failure{}; } } + +} // namespace myirc diff --git a/myirc/snote.cpp b/myirc/snote.cpp index 6ec158e..bfbee3a 100644 --- a/myirc/snote.cpp +++ b/myirc/snote.cpp @@ -1,6 +1,6 @@ -#include "snote.hpp" +#include "myirc/snote.hpp" -#include "c_callback.hpp" +#include "myirc/c_callback.hpp" #include @@ -13,6 +13,9 @@ #include #include + +namespace myirc { + namespace { struct SnotePattern @@ -278,3 +281,5 @@ auto SnoteCore::ScratchDeleter::operator()(hs_scratch_t *scratch) const -> void } SnoteCore snoteCore; + +} // namespace myirc