make a myirc namespace

This commit is contained in:
Eric Mertens 2025-02-01 11:04:33 -08:00
parent 8324a496b6
commit 1a6ec835ed
32 changed files with 450 additions and 319 deletions

View File

@ -10,7 +10,7 @@ find_package(OpenSSL REQUIRED)
pkg_check_modules(LIBHS libhs REQUIRED IMPORTED_TARGET) 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) set(BOOST_ENABLE_CMAKE ON)
include(FetchContent) include(FetchContent)
FetchContent_Declare( FetchContent_Declare(

View File

@ -1,12 +1,13 @@
add_executable(xbot add_executable(xbot
main.cpp main.cpp
settings.cpp settings.cpp
web.cpp
) )
target_link_libraries(xbot PRIVATE target_link_libraries(xbot PRIVATE
myirc myirc
OpenSSL::SSL OpenSSL::SSL
Boost::signals2 Boost::log Boost::asio Boost::signals2 Boost::log Boost::asio Boost::beast
tomlplusplus_tomlplusplus tomlplusplus_tomlplusplus
PkgConfig::LIBHS PkgConfig::LIBHS
mysocks5 mybase64) mysocks5 mybase64)

View File

@ -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 "settings.hpp"
#include "ref.hpp" #include "web.hpp"
#include "irc_coroutine.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 <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
@ -19,6 +22,16 @@
#include <memory> #include <memory>
using namespace std::literals; 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<SaslMechanism> auto configure_sasl(const Settings &settings) -> std::unique_ptr<SaslMechanism>
{ {
@ -38,7 +51,7 @@ auto configure_sasl(const Settings &settings) -> std::unique_ptr<SaslMechanism>
not settings.sasl_authcid.empty() && not settings.sasl_authcid.empty() &&
not settings.sasl_key_file.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<SaslEcdsa>( return std::make_unique<SaslEcdsa>(
settings.sasl_authcid, settings.sasl_authcid,
settings.sasl_authzid, settings.sasl_authzid,
@ -52,13 +65,13 @@ static auto start(boost::asio::io_context &io, const Settings &settings) -> void
Ref<X509> tls_cert; Ref<X509> tls_cert;
if (settings.use_tls && not settings.tls_cert_file.empty()) 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<EVP_PKEY> tls_key; Ref<EVP_PKEY> tls_key;
if (settings.use_tls && not settings.tls_key_file.empty()) 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<Connection>(io); const auto connection = std::make_shared<Connection>(io);
@ -75,7 +88,7 @@ static auto start(boost::asio::io_context &io, const Settings &settings) -> void
// Configure CHALLENGE on registration if applicable // Configure CHALLENGE on registration if applicable
if (not settings.challenge_username.empty() && not settings.challenge_key_file.empty()) { 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)]() { client->sig_registered.connect([&settings, connection, key = std::move(key)]() {
Challenge::start(connection, settings.challenge_username, key); Challenge::start(connection, settings.challenge_username, key);
}); });

1
driver/web.cpp Normal file
View File

@ -0,0 +1 @@
#include "web.hpp"

1
driver/web.hpp Normal file
View File

@ -0,0 +1 @@
#pragma once

View File

@ -1,7 +1,9 @@
#include "bot.hpp" #include "myirc/bot.hpp"
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
namespace myirc {
auto Bot::start(std::shared_ptr<Client> self) -> std::shared_ptr<Bot> auto Bot::start(std::shared_ptr<Client> self) -> std::shared_ptr<Bot>
{ {
const auto thread = std::make_shared<Bot>(std::move(self)); const auto thread = std::make_shared<Bot>(std::move(self));
@ -77,3 +79,5 @@ auto Bot::shutdown() -> void
{ {
sig_command.disconnect_all_slots(); sig_command.disconnect_all_slots();
} }
} // namespace myirc

View File

@ -1,6 +1,6 @@
#include "challenge.hpp" #include "myirc/challenge.hpp"
#include "openssl_utils.hpp" #include "myirc/openssl_utils.hpp"
#include <mybase64.hpp> #include <mybase64.hpp>
@ -12,6 +12,8 @@
#include <memory> #include <memory>
#include <string> #include <string>
namespace myirc {
Challenge::Challenge(Ref<EVP_PKEY> key, std::shared_ptr<Connection> connection) Challenge::Challenge(Ref<EVP_PKEY> key, std::shared_ptr<Connection> connection)
: key_{std::move(key)} : key_{std::move(key)}
, connection_{std::move(connection)} , connection_{std::move(connection)}
@ -29,7 +31,7 @@ auto Challenge::on_ircmsg(IrcCommand cmd, const IrcMsg &msg) -> void {
break; break;
case IrcCommand::RPL_YOUREOPER: case IrcCommand::RPL_YOUREOPER:
slot_.disconnect(); slot_.disconnect();
connection_->send_ping("mitigation"); //connection_->send_ping("mitigation");
break; break;
case IrcCommand::RPL_ENDOFRSACHALLENGE2: case IrcCommand::RPL_ENDOFRSACHALLENGE2:
finish_challenge(); finish_challenge();
@ -89,3 +91,5 @@ auto Challenge::start(std::shared_ptr<Connection> connection, const std::string_
connection->send_challenge(user); connection->send_challenge(user);
return self; return self;
} }
} // namespace myirc

View File

@ -1,12 +1,15 @@
#include "client.hpp" #include "myirc/client.hpp"
#include "connection.hpp" #include "myirc/connection.hpp"
#include "myirc/sasl_mechanism.hpp"
#include <mybase64.hpp> #include <mybase64.hpp>
#include <boost/container/flat_map.hpp> #include <boost/container/flat_map.hpp>
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
namespace myirc {
using namespace std::literals; using namespace std::literals;
auto Client::on_welcome(const IrcMsg &irc) -> void auto Client::on_welcome(const IrcMsg &irc) -> void
@ -425,3 +428,5 @@ auto Client::on_cap(const IrcMsg &msg) -> void
); );
} }
} }
} // namespace myirc

View File

@ -1,10 +1,11 @@
#include "connection.hpp" #include "myirc/connection.hpp"
#include "boost/asio/steady_timer.hpp" #include "myirc/linebuffer.hpp"
#include "linebuffer.hpp" #include "myirc/snote.hpp"
#include <mybase64.hpp> #include <mybase64.hpp>
#include <boost/asio/steady_timer.hpp>
#include <boost/log/trivial.hpp> #include <boost/log/trivial.hpp>
namespace { namespace {
@ -14,6 +15,8 @@ using tcp_type = boost::asio::ip::tcp::socket;
using tls_type = boost::asio::ssl::stream<tcp_type>; using tls_type = boost::asio::ssl::stream<tcp_type>;
} // namespace } // namespace
namespace myirc {
using namespace std::literals; using namespace std::literals;
Connection::Connection(boost::asio::io_context &io) Connection::Connection(boost::asio::io_context &io)
@ -518,7 +521,10 @@ auto Connection::connect(
// Name resolution // Name resolution
auto resolver = boost::asio::ip::tcp::resolver{stream_.get_executor()}; 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); 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 // Connect to the IRC server
auto& socket = stream_.reset(); auto& socket = stream_.reset();
const auto endpoint = co_await boost::asio::async_connect(socket, endpoints, boost::asio::use_awaitable); 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(); self->sig_disconnect.disconnect_all_slots();
}); });
} }
} // namespace myirc

View File

@ -6,6 +6,8 @@
#include <memory> #include <memory>
namespace myirc {
struct Bot : std::enable_shared_from_this<Bot> struct Bot : std::enable_shared_from_this<Bot>
{ {
struct Command struct Command
@ -34,3 +36,5 @@ struct Bot : std::enable_shared_from_this<Bot>
auto shutdown() -> void; auto shutdown() -> void;
}; };
} // namespace myirc

View File

@ -1,5 +1,7 @@
#pragma once #pragma once
namespace myirc {
template <typename> struct CCallback_; template <typename> struct CCallback_;
template <typename F, typename R, typename... Ts> template <typename F, typename R, typename... Ts>
struct CCallback_<R (F::*) (Ts...) const> struct CCallback_<R (F::*) (Ts...) const>
@ -14,3 +16,5 @@ struct CCallback_<R (F::*) (Ts...) const>
/// @tparam F Type of the closure /// @tparam F Type of the closure
template <typename F> template <typename F>
using CCallback = CCallback_<decltype(&F::operator())>; using CCallback = CCallback_<decltype(&F::operator())>;
} // namespace myirc

View File

@ -8,6 +8,8 @@
#include <memory> #include <memory>
#include <string> #include <string>
namespace myirc {
/// @brief Implements the CHALLENGE command protocol to identify as an operator. /// @brief Implements the CHALLENGE command protocol to identify as an operator.
class Challenge : std::enable_shared_from_this<Challenge> class Challenge : std::enable_shared_from_this<Challenge>
{ {
@ -29,3 +31,5 @@ public:
/// @return Handle to the challenge object. /// @return Handle to the challenge object.
static auto start(std::shared_ptr<Connection>, std::string_view user, Ref<EVP_PKEY> key) -> std::shared_ptr<Challenge>; static auto start(std::shared_ptr<Connection>, std::string_view user, Ref<EVP_PKEY> key) -> std::shared_ptr<Challenge>;
}; };
} // namespace myirc

View File

@ -1,13 +1,14 @@
#pragma once #pragma once
#include "connection.hpp" #include "myirc/connection.hpp"
#include "sasl_mechanism.hpp" #include "myirc/sasl_mechanism.hpp"
#include <string> #include <string>
#include <unordered_set> #include <unordered_set>
#include <span> #include <span>
struct Connection; namespace myirc {
struct IrcMsg; struct IrcMsg;
enum class Casemap enum class Casemap
@ -101,3 +102,5 @@ public:
auto shutdown() -> void; auto shutdown() -> void;
}; };
} // namespace myirc

View File

@ -4,7 +4,6 @@
#include "ircmsg.hpp" #include "ircmsg.hpp"
#include "ratelimit.hpp" #include "ratelimit.hpp"
#include "ref.hpp" #include "ref.hpp"
#include "snote.hpp"
#include "stream.hpp" #include "stream.hpp"
#include <boost/asio.hpp> #include <boost/asio.hpp>
@ -14,6 +13,10 @@
#include <memory> #include <memory>
#include <string> #include <string>
namespace myirc {
struct SnoteMatch;
class Connection : public std::enable_shared_from_this<Connection> class Connection : public std::enable_shared_from_this<Connection>
{ {
public: public:
@ -136,3 +139,5 @@ auto Connection::write_irc(std::string front, std::string_view next, Args... res
front += next; front += next;
write_irc(std::move(front), rest...); write_irc(std::move(front), rest...);
} }
} // namespace myirc

View File

@ -1,3 +1,7 @@
#pragma once
namespace myirc {
enum class IrcCommand enum class IrcCommand
{ {
UNKNOWN, UNKNOWN,
@ -280,3 +284,5 @@ enum class IrcCommand
TOPIC, TOPIC,
WALLOPS, WALLOPS,
}; };
} // namespace myirc

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "connection.hpp" #include "myirc/connection.hpp"
#include "myirc/snote.hpp"
#include <chrono> #include <chrono>
#include <coroutine> #include <coroutine>
@ -8,6 +9,8 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
namespace myirc {
struct irc_promise; struct irc_promise;
/// A coroutine that can co_await on various IRC events /// 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_; return promise().exception_;
} }
} // namespace myirc

View File

@ -4,6 +4,8 @@
#include <string_view> #include <string_view>
#include <vector> #include <vector>
namespace myirc {
struct irctag struct irctag
{ {
std::string_view key; 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_message(char *msg) -> IrcMsg;
auto parse_irc_tags(char *msg) -> std::vector<irctag>; auto parse_irc_tags(char *msg) -> std::vector<irctag>;
} // namespace myirc

View File

@ -16,6 +16,8 @@
#include <concepts> #include <concepts>
#include <vector> #include <vector>
namespace myirc {
/** /**
* @brief Fixed-size buffer with line-oriented dispatch * @brief Fixed-size buffer with line-oriented dispatch
* *
@ -99,3 +101,5 @@ public:
} }
} }
}; };
} // namespace myirc

View File

@ -4,6 +4,10 @@
#include <string_view> #include <string_view>
namespace myirc {
auto log_openssl_errors(const std::string_view prefix) -> void; auto log_openssl_errors(const std::string_view prefix) -> void;
auto key_from_file(const std::string &filename, const std::string_view password) -> Ref<EVP_PKEY>; auto key_from_file(const std::string &filename, const std::string_view password) -> Ref<EVP_PKEY>;
auto cert_from_file(const std::string &filename) -> Ref<X509>; auto cert_from_file(const std::string &filename) -> Ref<X509>;
} // namespace myirc

View File

@ -3,6 +3,8 @@
#include <chrono> #include <chrono>
#include <utility> #include <utility>
namespace myirc {
struct RateLimit { struct RateLimit {
virtual ~RateLimit(); virtual ~RateLimit();
auto virtual query(size_t want_to_send) -> std::pair<std::chrono::milliseconds, size_t> = 0; auto virtual query(size_t want_to_send) -> std::pair<std::chrono::milliseconds, size_t> = 0;
@ -18,3 +20,5 @@ struct Rfc1459RateLimit final : RateLimit
auto query(size_t want_to_send) -> std::pair<std::chrono::milliseconds, size_t> override; auto query(size_t want_to_send) -> std::pair<std::chrono::milliseconds, size_t> override;
}; };
} // namespace myirc

View File

@ -5,6 +5,8 @@
#include <memory> #include <memory>
namespace myirc {
// Specializations must Free to release a reference // Specializations must Free to release a reference
// Specializations can implement UpRef to increase a reference count on copy // Specializations can implement UpRef to increase a reference count on copy
template <typename> struct RefTraits {}; template <typename> struct RefTraits {};
@ -56,3 +58,5 @@ struct Ref : std::unique_ptr<T, RefDeleter<T>>
return *this; return *this;
} }
}; };
} // namespace myirc

View File

@ -7,6 +7,8 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
namespace myirc {
class Registration : public std::enable_shared_from_this<Registration> class Registration : public std::enable_shared_from_this<Registration>
{ {
public: public:
@ -44,3 +46,5 @@ public:
std::shared_ptr<Client> std::shared_ptr<Client>
) -> std::shared_ptr<Registration>; ) -> std::shared_ptr<Registration>;
}; };
} // namespace myirc

View File

@ -10,6 +10,8 @@
#include <string_view> #include <string_view>
#include <variant> #include <variant>
namespace myirc {
class SaslMechanism class SaslMechanism
{ {
public: public:
@ -108,3 +110,5 @@ public:
return stage_ == 2;; return stage_ == 2;;
} }
}; };
} // namespace myirc

View File

@ -12,6 +12,8 @@
struct hs_database; struct hs_database;
struct hs_scratch; struct hs_scratch;
namespace myirc {
enum class SnoteTag enum class SnoteTag
{ {
ClientConnecting, ClientConnecting,
@ -95,3 +97,5 @@ struct SnoteCore
}; };
extern SnoteCore snoteCore; extern SnoteCore snoteCore;
} // namespace myirc

View File

@ -6,6 +6,8 @@
#include <cstddef> #include <cstddef>
#include <variant> #include <variant>
namespace myirc {
/// @brief Abstraction over plain-text and TLS streams. /// @brief Abstraction over plain-text and TLS streams.
class Stream : private class Stream : private
std::variant< std::variant<
@ -112,3 +114,5 @@ public:
socket.lowest_layer().close(err); socket.lowest_layer().close(err);
} }
}; };
} // namespace myirc

View File

@ -1,283 +1,283 @@
struct RecognizedCommand { struct RecognizedCommand {
char const* text; char const* text;
IrcCommand command; myirc::IrcCommand command;
std::size_t min_args; std::size_t min_args;
std::size_t max_args; std::size_t max_args;
}; };
%% %%
001, IrcCommand::RPL_WELCOME, 2, 2 001, myirc::IrcCommand::RPL_WELCOME, 2, 2
002, IrcCommand::RPL_YOURHOST, 2, 2 002, myirc::IrcCommand::RPL_YOURHOST, 2, 2
003, IrcCommand::RPL_CREATED, 2, 2 003, myirc::IrcCommand::RPL_CREATED, 2, 2
004, IrcCommand::RPL_MYINFO, 5, 6 004, myirc::IrcCommand::RPL_MYINFO, 5, 6
005, IrcCommand::RPL_ISUPPORT, 2, 15 005, myirc::IrcCommand::RPL_ISUPPORT, 2, 15
008, IrcCommand::RPL_SNOMASK, 3, 3 008, myirc::IrcCommand::RPL_SNOMASK, 3, 3
010, IrcCommand::RPL_REDIR, 4, 4 010, myirc::IrcCommand::RPL_REDIR, 4, 4
015, IrcCommand::RPL_MAP, 2, 2 015, myirc::IrcCommand::RPL_MAP, 2, 2
017, IrcCommand::RPL_MAPEND, 2, 2 017, myirc::IrcCommand::RPL_MAPEND, 2, 2
043, IrcCommand::RPL_SAVENICK, 3, 3 043, myirc::IrcCommand::RPL_SAVENICK, 3, 3
200, IrcCommand::RPL_TRACELINK, 5, 5 200, myirc::IrcCommand::RPL_TRACELINK, 5, 5
201, IrcCommand::RPL_TRACECONNECTING, 4, 4 201, myirc::IrcCommand::RPL_TRACECONNECTING, 4, 4
202, IrcCommand::RPL_TRACEHANDSHAKE, 4, 4 202, myirc::IrcCommand::RPL_TRACEHANDSHAKE, 4, 4
203, IrcCommand::RPL_TRACEUNKNOWN, 6, 6 203, myirc::IrcCommand::RPL_TRACEUNKNOWN, 6, 6
204, IrcCommand::RPL_TRACEOPERATOR, 7, 7 204, myirc::IrcCommand::RPL_TRACEOPERATOR, 7, 7
205, IrcCommand::RPL_TRACEUSER, 7, 7 205, myirc::IrcCommand::RPL_TRACEUSER, 7, 7
206, IrcCommand::RPL_TRACESERVER, 8, 8 206, myirc::IrcCommand::RPL_TRACESERVER, 8, 8
208, IrcCommand::RPL_TRACENEWTYPE, 4, 4 208, myirc::IrcCommand::RPL_TRACENEWTYPE, 4, 4
209, IrcCommand::RPL_TRACECLASS, 4, 4 209, myirc::IrcCommand::RPL_TRACECLASS, 4, 4
211, IrcCommand::RPL_STATSLINKINFO 211, myirc::IrcCommand::RPL_STATSLINKINFO
212, IrcCommand::RPL_STATSCOMMANDS, 5, 5 212, myirc::IrcCommand::RPL_STATSCOMMANDS, 5, 5
213, IrcCommand::RPL_STATSCLINE, 8, 8 213, myirc::IrcCommand::RPL_STATSCLINE, 8, 8
214, IrcCommand::RPL_STATSNLINE 214, myirc::IrcCommand::RPL_STATSNLINE
215, IrcCommand::RPL_STATSILINE, 8, 8 215, myirc::IrcCommand::RPL_STATSILINE, 8, 8
216, IrcCommand::RPL_STATSKLINE, 6, 6 216, myirc::IrcCommand::RPL_STATSKLINE, 6, 6
217, IrcCommand::RPL_STATSQLINE, 5, 5 217, myirc::IrcCommand::RPL_STATSQLINE, 5, 5
218, IrcCommand::RPL_STATSYLINE, 10, 10 218, myirc::IrcCommand::RPL_STATSYLINE, 10, 10
219, IrcCommand::RPL_ENDOFSTATS, 3, 3 219, myirc::IrcCommand::RPL_ENDOFSTATS, 3, 3
220, IrcCommand::RPL_STATSPLINE, 6, 6 220, myirc::IrcCommand::RPL_STATSPLINE, 6, 6
221, IrcCommand::RPL_UMODEIS, 2, 2 221, myirc::IrcCommand::RPL_UMODEIS, 2, 2
224, IrcCommand::RPL_STATSFLINE 224, myirc::IrcCommand::RPL_STATSFLINE
225, IrcCommand::RPL_STATSDLINE, 4, 4 225, myirc::IrcCommand::RPL_STATSDLINE, 4, 4
234, IrcCommand::RPL_SERVLIST 234, myirc::IrcCommand::RPL_SERVLIST
235, IrcCommand::RPL_SERVLISTEND 235, myirc::IrcCommand::RPL_SERVLISTEND
241, IrcCommand::RPL_STATSLLINE, 7, 7 241, myirc::IrcCommand::RPL_STATSLLINE, 7, 7
242, IrcCommand::RPL_STATSUPTIME, 2, 2 242, myirc::IrcCommand::RPL_STATSUPTIME, 2, 2
243, IrcCommand::RPL_STATSOLINE, 7, 7 243, myirc::IrcCommand::RPL_STATSOLINE, 7, 7
244, IrcCommand::RPL_STATSHLINE, 7, 7 244, myirc::IrcCommand::RPL_STATSHLINE, 7, 7
245, IrcCommand::RPL_STATSSLINE 245, myirc::IrcCommand::RPL_STATSSLINE
247, IrcCommand::RPL_STATSXLINE, 5, 5 247, myirc::IrcCommand::RPL_STATSXLINE, 5, 5
248, IrcCommand::RPL_STATSULINE, 5, 5 248, myirc::IrcCommand::RPL_STATSULINE, 5, 5
249, IrcCommand::RPL_STATSDEBUG, 3, 3 249, myirc::IrcCommand::RPL_STATSDEBUG, 3, 3
250, IrcCommand::RPL_STATSCONN, 2, 2 250, myirc::IrcCommand::RPL_STATSCONN, 2, 2
251, IrcCommand::RPL_LUSERCLIENT, 2, 2 251, myirc::IrcCommand::RPL_LUSERCLIENT, 2, 2
252, IrcCommand::RPL_LUSEROP, 3, 3 252, myirc::IrcCommand::RPL_LUSEROP, 3, 3
253, IrcCommand::RPL_LUSERUNKNOWN, 3, 3 253, myirc::IrcCommand::RPL_LUSERUNKNOWN, 3, 3
254, IrcCommand::RPL_LUSERCHANNELS, 3, 3 254, myirc::IrcCommand::RPL_LUSERCHANNELS, 3, 3
255, IrcCommand::RPL_LUSERME, 2, 2 255, myirc::IrcCommand::RPL_LUSERME, 2, 2
256, IrcCommand::RPL_ADMINME, 3, 3 256, myirc::IrcCommand::RPL_ADMINME, 3, 3
257, IrcCommand::RPL_ADMINLOC1, 2, 2 257, myirc::IrcCommand::RPL_ADMINLOC1, 2, 2
258, IrcCommand::RPL_ADMINLOC2, 2, 2 258, myirc::IrcCommand::RPL_ADMINLOC2, 2, 2
259, IrcCommand::RPL_ADMINEMAIL, 2, 2 259, myirc::IrcCommand::RPL_ADMINEMAIL, 2, 2
261, IrcCommand::RPL_TRACELOG 261, myirc::IrcCommand::RPL_TRACELOG
262, IrcCommand::RPL_ENDOFTRACE, 3, 3 262, myirc::IrcCommand::RPL_ENDOFTRACE, 3, 3
263, IrcCommand::RPL_LOAD2HI, 3, 3 263, myirc::IrcCommand::RPL_LOAD2HI, 3, 3
265, IrcCommand::RPL_LOCALUSERS, 4, 4 265, myirc::IrcCommand::RPL_LOCALUSERS, 4, 4
266, IrcCommand::RPL_GLOBALUSERS, 4, 4 266, myirc::IrcCommand::RPL_GLOBALUSERS, 4, 4
270, IrcCommand::RPL_PRIVS, 3, 3 270, myirc::IrcCommand::RPL_PRIVS, 3, 3
276, IrcCommand::RPL_WHOISCERTFP, 3, 3 276, myirc::IrcCommand::RPL_WHOISCERTFP, 3, 3
281, IrcCommand::RPL_ACCEPTLIST, 1, 15 281, myirc::IrcCommand::RPL_ACCEPTLIST, 1, 15
282, IrcCommand::RPL_ENDOFACCEPT, 2, 2 282, myirc::IrcCommand::RPL_ENDOFACCEPT, 2, 2
300, IrcCommand::RPL_NONE 300, myirc::IrcCommand::RPL_NONE
301, IrcCommand::RPL_AWAY, 3, 3 301, myirc::IrcCommand::RPL_AWAY, 3, 3
302, IrcCommand::RPL_USERHOST, 2, 2 302, myirc::IrcCommand::RPL_USERHOST, 2, 2
303, IrcCommand::RPL_ISON, 2, 2 303, myirc::IrcCommand::RPL_ISON, 2, 2
304, IrcCommand::RPL_TEXT 304, myirc::IrcCommand::RPL_TEXT
305, IrcCommand::RPL_UNAWAY, 2, 2 305, myirc::IrcCommand::RPL_UNAWAY, 2, 2
306, IrcCommand::RPL_NOWAWAY, 2, 2 306, myirc::IrcCommand::RPL_NOWAWAY, 2, 2
310, IrcCommand::RPL_WHOISHELPOP, 3, 3 310, myirc::IrcCommand::RPL_WHOISHELPOP, 3, 3
311, IrcCommand::RPL_WHOISUSER, 6, 6 311, myirc::IrcCommand::RPL_WHOISUSER, 6, 6
312, IrcCommand::RPL_WHOISSERVER, 4, 4 312, myirc::IrcCommand::RPL_WHOISSERVER, 4, 4
313, IrcCommand::RPL_WHOISOPERATOR, 3, 3 313, myirc::IrcCommand::RPL_WHOISOPERATOR, 3, 3
314, IrcCommand::RPL_WHOWASUSER, 6, 6 314, myirc::IrcCommand::RPL_WHOWASUSER, 6, 6
369, IrcCommand::RPL_ENDOFWHOWAS, 3, 3 369, myirc::IrcCommand::RPL_ENDOFWHOWAS, 3, 3
316, IrcCommand::RPL_WHOISCHANOP 316, myirc::IrcCommand::RPL_WHOISCHANOP
317, IrcCommand::RPL_WHOISIDLE, 5, 5 317, myirc::IrcCommand::RPL_WHOISIDLE, 5, 5
318, IrcCommand::RPL_ENDOFWHOIS, 3, 3 318, myirc::IrcCommand::RPL_ENDOFWHOIS, 3, 3
319, IrcCommand::RPL_WHOISCHANNELS, 3, 3 319, myirc::IrcCommand::RPL_WHOISCHANNELS, 3, 3
320, IrcCommand::RPL_WHOISSPECIAL, 3, 3 320, myirc::IrcCommand::RPL_WHOISSPECIAL, 3, 3
321, IrcCommand::RPL_LISTSTART, 3, 3 321, myirc::IrcCommand::RPL_LISTSTART, 3, 3
322, IrcCommand::RPL_LIST, 4, 4 322, myirc::IrcCommand::RPL_LIST, 4, 4
323, IrcCommand::RPL_LISTEND, 2, 2 323, myirc::IrcCommand::RPL_LISTEND, 2, 2
324, IrcCommand::RPL_CHANNELMODEIS, 3, 3 324, myirc::IrcCommand::RPL_CHANNELMODEIS, 3, 3
325, IrcCommand::RPL_CHANNELMLOCK, 4, 4 325, myirc::IrcCommand::RPL_CHANNELMLOCK, 4, 4
328, IrcCommand::RPL_CHANNELURL 328, myirc::IrcCommand::RPL_CHANNELURL
329, IrcCommand::RPL_CREATIONTIME, 3, 3 329, myirc::IrcCommand::RPL_CREATIONTIME, 3, 3
330, IrcCommand::RPL_WHOISLOGGEDIN, 4, 4 330, myirc::IrcCommand::RPL_WHOISLOGGEDIN, 4, 4
331, IrcCommand::RPL_NOTOPIC, 3, 3 331, myirc::IrcCommand::RPL_NOTOPIC, 3, 3
332, IrcCommand::RPL_TOPIC, 3, 3 332, myirc::IrcCommand::RPL_TOPIC, 3, 3
333, IrcCommand::RPL_TOPICWHOTIME, 4, 4 333, myirc::IrcCommand::RPL_TOPICWHOTIME, 4, 4
338, IrcCommand::RPL_WHOISACTUALLY, 4, 4 338, myirc::IrcCommand::RPL_WHOISACTUALLY, 4, 4
341, IrcCommand::RPL_INVITING, 3, 3 341, myirc::IrcCommand::RPL_INVITING, 3, 3
342, IrcCommand::RPL_SUMMONING 342, myirc::IrcCommand::RPL_SUMMONING
346, IrcCommand::RPL_INVITELIST, 5, 5 346, myirc::IrcCommand::RPL_INVITELIST, 5, 5
347, IrcCommand::RPL_ENDOFINVITELIST, 3, 3 347, myirc::IrcCommand::RPL_ENDOFINVITELIST, 3, 3
348, IrcCommand::RPL_EXCEPTLIST, 5, 5 348, myirc::IrcCommand::RPL_EXCEPTLIST, 5, 5
349, IrcCommand::RPL_ENDOFEXCEPTLIST, 3, 3 349, myirc::IrcCommand::RPL_ENDOFEXCEPTLIST, 3, 3
351, IrcCommand::RPL_VERSION, 4, 4 351, myirc::IrcCommand::RPL_VERSION, 4, 4
352, IrcCommand::RPL_WHOREPLY, 8, 8 352, myirc::IrcCommand::RPL_WHOREPLY, 8, 8
354, IrcCommand::RPL_WHOSPCRPL 354, myirc::IrcCommand::RPL_WHOSPCRPL
315, IrcCommand::RPL_ENDOFWHO, 3, 3 315, myirc::IrcCommand::RPL_ENDOFWHO, 3, 3
353, IrcCommand::RPL_NAMREPLY, 4, 4 353, myirc::IrcCommand::RPL_NAMREPLY, 4, 4
360, IrcCommand::RPL_WHOWASREAL, 3, 3 360, myirc::IrcCommand::RPL_WHOWASREAL, 3, 3
366, IrcCommand::RPL_ENDOFNAMES, 3, 3 366, myirc::IrcCommand::RPL_ENDOFNAMES, 3, 3
361, IrcCommand::RPL_KILLDONE 361, myirc::IrcCommand::RPL_KILLDONE
362, IrcCommand::RPL_CLOSING, 3, 3 362, myirc::IrcCommand::RPL_CLOSING, 3, 3
363, IrcCommand::RPL_CLOSEEND, 3, 3 363, myirc::IrcCommand::RPL_CLOSEEND, 3, 3
364, IrcCommand::RPL_LINKS, 4, 4 364, myirc::IrcCommand::RPL_LINKS, 4, 4
365, IrcCommand::RPL_ENDOFLINKS, 3, 3 365, myirc::IrcCommand::RPL_ENDOFLINKS, 3, 3
367, IrcCommand::RPL_BANLIST, 5, 5 367, myirc::IrcCommand::RPL_BANLIST, 5, 5
368, IrcCommand::RPL_ENDOFBANLIST, 3, 3 368, myirc::IrcCommand::RPL_ENDOFBANLIST, 3, 3
371, IrcCommand::RPL_INFO, 2, 2 371, myirc::IrcCommand::RPL_INFO, 2, 2
372, IrcCommand::RPL_MOTD, 2, 2 372, myirc::IrcCommand::RPL_MOTD, 2, 2
373, IrcCommand::RPL_INFOSTART 373, myirc::IrcCommand::RPL_INFOSTART
374, IrcCommand::RPL_ENDOFINFO, 2, 2 374, myirc::IrcCommand::RPL_ENDOFINFO, 2, 2
375, IrcCommand::RPL_MOTDSTART, 2, 2 375, myirc::IrcCommand::RPL_MOTDSTART, 2, 2
376, IrcCommand::RPL_ENDOFMOTD, 2, 2 376, myirc::IrcCommand::RPL_ENDOFMOTD, 2, 2
378, IrcCommand::RPL_WHOISHOST, 3, 3 378, myirc::IrcCommand::RPL_WHOISHOST, 3, 3
381, IrcCommand::RPL_YOUREOPER, 2, 2 381, myirc::IrcCommand::RPL_YOUREOPER, 2, 2
382, IrcCommand::RPL_REHASHING, 3, 3 382, myirc::IrcCommand::RPL_REHASHING, 3, 3
384, IrcCommand::RPL_MYPORTIS 384, myirc::IrcCommand::RPL_MYPORTIS
385, IrcCommand::RPL_NOTOPERANYMORE 385, myirc::IrcCommand::RPL_NOTOPERANYMORE
386, IrcCommand::RPL_RSACHALLENGE, 2, 2 386, myirc::IrcCommand::RPL_RSACHALLENGE, 2, 2
391, IrcCommand::RPL_TIME, 3, 3 391, myirc::IrcCommand::RPL_TIME, 3, 3
392, IrcCommand::RPL_USERSSTART 392, myirc::IrcCommand::RPL_USERSSTART
393, IrcCommand::RPL_USERS 393, myirc::IrcCommand::RPL_USERS
394, IrcCommand::RPL_ENDOFUSERS 394, myirc::IrcCommand::RPL_ENDOFUSERS
395, IrcCommand::RPL_NOUSERS 395, myirc::IrcCommand::RPL_NOUSERS
396, IrcCommand::RPL_HOSTHIDDEN 396, myirc::IrcCommand::RPL_HOSTHIDDEN
401, IrcCommand::ERR_NOSUCHNICK, 3, 3 401, myirc::IrcCommand::ERR_NOSUCHNICK, 3, 3
402, IrcCommand::ERR_NOSUCHSERVER, 3, 3 402, myirc::IrcCommand::ERR_NOSUCHSERVER, 3, 3
403, IrcCommand::ERR_NOSUCHCHANNEL, 3, 3 403, myirc::IrcCommand::ERR_NOSUCHCHANNEL, 3, 3
404, IrcCommand::ERR_CANNOTSENDTOCHAN, 3, 3 404, myirc::IrcCommand::ERR_CANNOTSENDTOCHAN, 3, 3
405, IrcCommand::ERR_TOOMANYCHANNELS, 3, 3 405, myirc::IrcCommand::ERR_TOOMANYCHANNELS, 3, 3
406, IrcCommand::ERR_WASNOSUCHNICK, 3, 3 406, myirc::IrcCommand::ERR_WASNOSUCHNICK, 3, 3
407, IrcCommand::ERR_TOOMANYTARGETS, 3, 3 407, myirc::IrcCommand::ERR_TOOMANYTARGETS, 3, 3
409, IrcCommand::ERR_NOORIGIN, 2, 2 409, myirc::IrcCommand::ERR_NOORIGIN, 2, 2
410, IrcCommand::ERR_INVALIDCAPCMD, 3, 3 410, myirc::IrcCommand::ERR_INVALIDCAPCMD, 3, 3
411, IrcCommand::ERR_NORECIPIENT, 2, 2 411, myirc::IrcCommand::ERR_NORECIPIENT, 2, 2
412, IrcCommand::ERR_NOTEXTTOSEND, 2, 2 412, myirc::IrcCommand::ERR_NOTEXTTOSEND, 2, 2
413, IrcCommand::ERR_NOTOPLEVEL, 3, 3 413, myirc::IrcCommand::ERR_NOTOPLEVEL, 3, 3
414, IrcCommand::ERR_WILDTOPLEVEL, 3, 3 414, myirc::IrcCommand::ERR_WILDTOPLEVEL, 3, 3
415, IrcCommand::ERR_MSGNEEDREGGEDNICK, 3, 3 415, myirc::IrcCommand::ERR_MSGNEEDREGGEDNICK, 3, 3
416, IrcCommand::ERR_TOOMANYMATCHES, 3, 3 416, myirc::IrcCommand::ERR_TOOMANYMATCHES, 3, 3
421, IrcCommand::ERR_UNKNOWNCOMMAND, 3, 3 421, myirc::IrcCommand::ERR_UNKNOWNCOMMAND, 3, 3
422, IrcCommand::ERR_NOMOTD, 2, 2 422, myirc::IrcCommand::ERR_NOMOTD, 2, 2
423, IrcCommand::ERR_NOADMININFO 423, myirc::IrcCommand::ERR_NOADMININFO
424, IrcCommand::ERR_FILEERROR 424, myirc::IrcCommand::ERR_FILEERROR
431, IrcCommand::ERR_NONICKNAMEGIVEN, 2, 2 431, myirc::IrcCommand::ERR_NONICKNAMEGIVEN, 2, 2
432, IrcCommand::ERR_ERRONEUSNICKNAME, 3, 3 432, myirc::IrcCommand::ERR_ERRONEUSNICKNAME, 3, 3
433, IrcCommand::ERR_NICKNAMEINUSE, 3, 3 433, myirc::IrcCommand::ERR_NICKNAMEINUSE, 3, 3
435, IrcCommand::ERR_BANNICKCHANGE, 3, 3 435, myirc::IrcCommand::ERR_BANNICKCHANGE, 3, 3
436, IrcCommand::ERR_NICKCOLLISION, 3, 3 436, myirc::IrcCommand::ERR_NICKCOLLISION, 3, 3
437, IrcCommand::ERR_UNAVAILRESOURCE, 3, 3 437, myirc::IrcCommand::ERR_UNAVAILRESOURCE, 3, 3
438, IrcCommand::ERR_NICKTOOFAST, 4, 4 438, myirc::IrcCommand::ERR_NICKTOOFAST, 4, 4
440, IrcCommand::ERR_SERVICESDOWN, 3, 3 440, myirc::IrcCommand::ERR_SERVICESDOWN, 3, 3
441, IrcCommand::ERR_USERNOTINCHANNEL, 4, 4 441, myirc::IrcCommand::ERR_USERNOTINCHANNEL, 4, 4
442, IrcCommand::ERR_NOTONCHANNEL, 3, 3 442, myirc::IrcCommand::ERR_NOTONCHANNEL, 3, 3
443, IrcCommand::ERR_USERONCHANNEL, 4, 4 443, myirc::IrcCommand::ERR_USERONCHANNEL, 4, 4
444, IrcCommand::ERR_NOLOGIN 444, myirc::IrcCommand::ERR_NOLOGIN
445, IrcCommand::ERR_SUMMONDISABLED 445, myirc::IrcCommand::ERR_SUMMONDISABLED
446, IrcCommand::ERR_USERSDISABLED 446, myirc::IrcCommand::ERR_USERSDISABLED
451, IrcCommand::ERR_NOTREGISTERED, 2, 2 451, myirc::IrcCommand::ERR_NOTREGISTERED, 2, 2
456, IrcCommand::ERR_ACCEPTFULL, 2, 2 456, myirc::IrcCommand::ERR_ACCEPTFULL, 2, 2
457, IrcCommand::ERR_ACCEPTEXIST, 3, 3 457, myirc::IrcCommand::ERR_ACCEPTEXIST, 3, 3
458, IrcCommand::ERR_ACCEPTNOT, 3, 3 458, myirc::IrcCommand::ERR_ACCEPTNOT, 3, 3
461, IrcCommand::ERR_NEEDMOREPARAMS, 3, 3 461, myirc::IrcCommand::ERR_NEEDMOREPARAMS, 3, 3
462, IrcCommand::ERR_ALREADYREGISTRED, 2, 2 462, myirc::IrcCommand::ERR_ALREADYREGISTRED, 2, 2
463, IrcCommand::ERR_NOPERMFORHOST 463, myirc::IrcCommand::ERR_NOPERMFORHOST
464, IrcCommand::ERR_PASSWDMISMATCH, 2, 2 464, myirc::IrcCommand::ERR_PASSWDMISMATCH, 2, 2
465, IrcCommand::ERR_YOUREBANNEDCREEP, 2, 2 465, myirc::IrcCommand::ERR_YOUREBANNEDCREEP, 2, 2
466, IrcCommand::ERR_YOUWILLBEBANNED 466, myirc::IrcCommand::ERR_YOUWILLBEBANNED
467, IrcCommand::ERR_KEYSET 467, myirc::IrcCommand::ERR_KEYSET
470, IrcCommand::ERR_LINKCHANNEL, 4, 4 470, myirc::IrcCommand::ERR_LINKCHANNEL, 4, 4
471, IrcCommand::ERR_CHANNELISFULL, 3, 3 471, myirc::IrcCommand::ERR_CHANNELISFULL, 3, 3
472, IrcCommand::ERR_UNKNOWNMODE, 3, 3 472, myirc::IrcCommand::ERR_UNKNOWNMODE, 3, 3
473, IrcCommand::ERR_INVITEONLYCHAN, 3, 3 473, myirc::IrcCommand::ERR_INVITEONLYCHAN, 3, 3
474, IrcCommand::ERR_BANNEDFROMCHAN, 3, 3 474, myirc::IrcCommand::ERR_BANNEDFROMCHAN, 3, 3
475, IrcCommand::ERR_BADCHANNELKEY, 3, 3 475, myirc::IrcCommand::ERR_BADCHANNELKEY, 3, 3
476, IrcCommand::ERR_BADCHANMASK 476, myirc::IrcCommand::ERR_BADCHANMASK
477, IrcCommand::ERR_NEEDREGGEDNICK, 3, 3 477, myirc::IrcCommand::ERR_NEEDREGGEDNICK, 3, 3
478, IrcCommand::ERR_BANLISTFULL, 4, 4 478, myirc::IrcCommand::ERR_BANLISTFULL, 4, 4
479, IrcCommand::ERR_BADCHANNAME, 3, 3 479, myirc::IrcCommand::ERR_BADCHANNAME, 3, 3
480, IrcCommand::ERR_THROTTLE, 3, 3 480, myirc::IrcCommand::ERR_THROTTLE, 3, 3
481, IrcCommand::ERR_NOPRIVILEGES, 2, 2 481, myirc::IrcCommand::ERR_NOPRIVILEGES, 2, 2
482, IrcCommand::ERR_CHANOPRIVSNEEDED, 3, 3 482, myirc::IrcCommand::ERR_CHANOPRIVSNEEDED, 3, 3
483, IrcCommand::ERR_CANTKILLSERVER, 2, 2 483, myirc::IrcCommand::ERR_CANTKILLSERVER, 2, 2
484, IrcCommand::ERR_ISCHANSERVICE, 4, 4 484, myirc::IrcCommand::ERR_ISCHANSERVICE, 4, 4
485, IrcCommand::ERR_BANNEDNICK 485, myirc::IrcCommand::ERR_BANNEDNICK
486, IrcCommand::ERR_NONONREG, 3, 3 486, myirc::IrcCommand::ERR_NONONREG, 3, 3
489, IrcCommand::ERR_VOICENEEDED, 3, 3 489, myirc::IrcCommand::ERR_VOICENEEDED, 3, 3
491, IrcCommand::ERR_NOOPERHOST, 2, 2 491, myirc::IrcCommand::ERR_NOOPERHOST, 2, 2
492, IrcCommand::ERR_CANNOTSENDTOUSER, 2, 2 492, myirc::IrcCommand::ERR_CANNOTSENDTOUSER, 2, 2
494, IrcCommand::ERR_OWNMODE, 3, 3 494, myirc::IrcCommand::ERR_OWNMODE, 3, 3
501, IrcCommand::ERR_UMODEUNKNOWNFLAG, 2, 2 501, myirc::IrcCommand::ERR_UMODEUNKNOWNFLAG, 2, 2
502, IrcCommand::ERR_USERSDONTMATCH, 2, 2 502, myirc::IrcCommand::ERR_USERSDONTMATCH, 2, 2
503, IrcCommand::ERR_GHOSTEDCLIENT 503, myirc::IrcCommand::ERR_GHOSTEDCLIENT
504, IrcCommand::ERR_USERNOTONSERV, 3, 3 504, myirc::IrcCommand::ERR_USERNOTONSERV, 3, 3
513, IrcCommand::ERR_WRONGPONG, 2, 2 513, myirc::IrcCommand::ERR_WRONGPONG, 2, 2
517, IrcCommand::ERR_DISABLED, 3, 3 517, myirc::IrcCommand::ERR_DISABLED, 3, 3
524, IrcCommand::ERR_HELPNOTFOUND, 3, 3 524, myirc::IrcCommand::ERR_HELPNOTFOUND, 3, 3
670, IrcCommand::RPL_STARTTLS, 2, 2 670, myirc::IrcCommand::RPL_STARTTLS, 2, 2
671, IrcCommand::RPL_WHOISSECURE, 3, 3 671, myirc::IrcCommand::RPL_WHOISSECURE, 3, 3
691, IrcCommand::ERR_STARTTLS, 2, 2 691, myirc::IrcCommand::ERR_STARTTLS, 2, 2
702, IrcCommand::RPL_MODLIST, 5, 5 702, myirc::IrcCommand::RPL_MODLIST, 5, 5
703, IrcCommand::RPL_ENDOFMODLIST, 2, 2 703, myirc::IrcCommand::RPL_ENDOFMODLIST, 2, 2
704, IrcCommand::RPL_HELPSTART, 3, 3 704, myirc::IrcCommand::RPL_HELPSTART, 3, 3
705, IrcCommand::RPL_HELPTXT, 3, 3 705, myirc::IrcCommand::RPL_HELPTXT, 3, 3
706, IrcCommand::RPL_ENDOFHELP, 3, 3 706, myirc::IrcCommand::RPL_ENDOFHELP, 3, 3
707, IrcCommand::ERR_TARGCHANGE, 3, 3 707, myirc::IrcCommand::ERR_TARGCHANGE, 3, 3
708, IrcCommand::RPL_ETRACEFULL, 10, 10 708, myirc::IrcCommand::RPL_ETRACEFULL, 10, 10
709, IrcCommand::RPL_ETRACE, 8, 8 709, myirc::IrcCommand::RPL_ETRACE, 8, 8
710, IrcCommand::RPL_KNOCK, 4, 4 710, myirc::IrcCommand::RPL_KNOCK, 4, 4
711, IrcCommand::RPL_KNOCKDLVR, 3, 3 711, myirc::IrcCommand::RPL_KNOCKDLVR, 3, 3
712, IrcCommand::ERR_TOOMANYKNOCK, 3, 3 712, myirc::IrcCommand::ERR_TOOMANYKNOCK, 3, 3
713, IrcCommand::ERR_CHANOPEN, 3, 3 713, myirc::IrcCommand::ERR_CHANOPEN, 3, 3
714, IrcCommand::ERR_KNOCKONCHAN, 3, 3 714, myirc::IrcCommand::ERR_KNOCKONCHAN, 3, 3
715, IrcCommand::ERR_KNOCKDISABLED, 2, 2 715, myirc::IrcCommand::ERR_KNOCKDISABLED, 2, 2
716, IrcCommand::ERR_TARGUMODEG, 3, 3 716, myirc::IrcCommand::ERR_TARGUMODEG, 3, 3
717, IrcCommand::RPL_TARGNOTIFY 717, myirc::IrcCommand::RPL_TARGNOTIFY
718, IrcCommand::RPL_UMODEGMSG, 4, 4 718, myirc::IrcCommand::RPL_UMODEGMSG, 4, 4
720, IrcCommand::RPL_OMOTDSTART, 2, 2 720, myirc::IrcCommand::RPL_OMOTDSTART, 2, 2
721, IrcCommand::RPL_OMOTD, 2, 2 721, myirc::IrcCommand::RPL_OMOTD, 2, 2
722, IrcCommand::RPL_ENDOFOMOTD, 2, 2 722, myirc::IrcCommand::RPL_ENDOFOMOTD, 2, 2
723, IrcCommand::ERR_NOPRIVS, 3, 3 723, myirc::IrcCommand::ERR_NOPRIVS, 3, 3
724, IrcCommand::RPL_TESTMASK 724, myirc::IrcCommand::RPL_TESTMASK
725, IrcCommand::RPL_TESTLINE, 5, 5 725, myirc::IrcCommand::RPL_TESTLINE, 5, 5
726, IrcCommand::RPL_NOTESTLINE 726, myirc::IrcCommand::RPL_NOTESTLINE
727, IrcCommand::RPL_TESTMASKGECO, 6, 6 727, myirc::IrcCommand::RPL_TESTMASKGECO, 6, 6
728, IrcCommand::RPL_QUIETLIST, 6, 6 728, myirc::IrcCommand::RPL_QUIETLIST, 6, 6
729, IrcCommand::RPL_ENDOFQUIETLIS, 4, 4 729, myirc::IrcCommand::RPL_ENDOFQUIETLIS, 4, 4
730, IrcCommand::RPL_MONONLINE, 2, 2 730, myirc::IrcCommand::RPL_MONONLINE, 2, 2
731, IrcCommand::RPL_MONOFFLINE, 2, 2 731, myirc::IrcCommand::RPL_MONOFFLINE, 2, 2
732, IrcCommand::RPL_MONLIST, 2, 2 732, myirc::IrcCommand::RPL_MONLIST, 2, 2
733, IrcCommand::RPL_ENDOFMONLIS, 2, 2 733, myirc::IrcCommand::RPL_ENDOFMONLIS, 2, 2
734, IrcCommand::ERR_MONLISTFULL, 4, 4 734, myirc::IrcCommand::ERR_MONLISTFULL, 4, 4
740, IrcCommand::RPL_RSACHALLENGE2, 2, 2 740, myirc::IrcCommand::RPL_RSACHALLENGE2, 2, 2
741, IrcCommand::RPL_ENDOFRSACHALLENGE2, 2, 2 741, myirc::IrcCommand::RPL_ENDOFRSACHALLENGE2, 2, 2
742, IrcCommand::ERR_MLOCKRESTRICTE, 5, 5 742, myirc::IrcCommand::ERR_MLOCKRESTRICTE, 5, 5
743, IrcCommand::ERR_INVALIDBAN, 5, 5 743, myirc::IrcCommand::ERR_INVALIDBAN, 5, 5
744, IrcCommand::ERR_TOPICLOCK 744, myirc::IrcCommand::ERR_TOPICLOCK
750, IrcCommand::RPL_SCANMATCHED, 3, 3 750, myirc::IrcCommand::RPL_SCANMATCHED, 3, 3
751, IrcCommand::RPL_SCANUMODES, 8, 8 751, myirc::IrcCommand::RPL_SCANUMODES, 8, 8
900, IrcCommand::RPL_LOGGEDIN, 4, 4 900, myirc::IrcCommand::RPL_LOGGEDIN, 4, 4
901, IrcCommand::RPL_LOGGEDOUT, 3, 3 901, myirc::IrcCommand::RPL_LOGGEDOUT, 3, 3
902, IrcCommand::ERR_NICKLOCKED, 2, 2 902, myirc::IrcCommand::ERR_NICKLOCKED, 2, 2
903, IrcCommand::RPL_SASLSUCCESS, 2, 2 903, myirc::IrcCommand::RPL_SASLSUCCESS, 2, 2
904, IrcCommand::ERR_SASLFAIL, 2, 2 904, myirc::IrcCommand::ERR_SASLFAIL, 2, 2
905, IrcCommand::ERR_SASLTOOLONG, 2, 2 905, myirc::IrcCommand::ERR_SASLTOOLONG, 2, 2
906, IrcCommand::ERR_SASLABORTED, 2, 2 906, myirc::IrcCommand::ERR_SASLABORTED, 2, 2
907, IrcCommand::ERR_SASLALREADY, 2, 2 907, myirc::IrcCommand::ERR_SASLALREADY, 2, 2
908, IrcCommand::RPL_SASLMECHS, 3, 3 908, myirc::IrcCommand::RPL_SASLMECHS, 3, 3
ACCOUNT, IrcCommand::ACCOUNT, 1, 1 ACCOUNT, myirc::IrcCommand::ACCOUNT, 1, 1
AUTHENTICATE, IrcCommand::AUTHENTICATE, 1, 1 AUTHENTICATE, myirc::IrcCommand::AUTHENTICATE, 1, 1
AWAY, IrcCommand::AWAY, 0, 1 AWAY, myirc::IrcCommand::AWAY, 0, 1
BATCH, IrcCommand::BATCH BATCH, myirc::IrcCommand::BATCH
BOUNCER, IrcCommand::BOUNCER BOUNCER, myirc::IrcCommand::BOUNCER
CAP, IrcCommand::CAP, 1, 15 CAP, myirc::IrcCommand::CAP, 1, 15
CHGHOST, IrcCommand::CHGHOST, 2, 2 CHGHOST, myirc::IrcCommand::CHGHOST, 2, 2
ERROR, IrcCommand::ERROR, 1, 1 ERROR, myirc::IrcCommand::ERROR, 1, 1
INVITE, IrcCommand::INVITE, 2, 2 INVITE, myirc::IrcCommand::INVITE, 2, 2
JOIN, IrcCommand::JOIN, 1, 3 JOIN, myirc::IrcCommand::JOIN, 1, 3
KICK, IrcCommand::KICK, 3, 3 KICK, myirc::IrcCommand::KICK, 3, 3
KILL, IrcCommand::KILL, 2, 2 KILL, myirc::IrcCommand::KILL, 2, 2
MODE, IrcCommand::MODE, 2, 15 MODE, myirc::IrcCommand::MODE, 2, 15
NICK, IrcCommand::NICK, 1, 1 NICK, myirc::IrcCommand::NICK, 1, 1
NOTICE, IrcCommand::NOTICE, 2, 2 NOTICE, myirc::IrcCommand::NOTICE, 2, 2
PART, IrcCommand::PART, 1, 2 PART, myirc::IrcCommand::PART, 1, 2
PING, IrcCommand::PING, 1, 1 PING, myirc::IrcCommand::PING, 1, 1
PONG, IrcCommand::PONG, 1, 2 PONG, myirc::IrcCommand::PONG, 1, 2
PRIVMSG, IrcCommand::PRIVMSG, 2, 2 PRIVMSG, myirc::IrcCommand::PRIVMSG, 2, 2
QUIT, IrcCommand::QUIT, 1, 1 QUIT, myirc::IrcCommand::QUIT, 1, 1
SETNAME, IrcCommand::SETNAME, 1, 1 SETNAME, myirc::IrcCommand::SETNAME, 1, 1
TAGMSG, IrcCommand::TAGMSG, 1, 1 TAGMSG, myirc::IrcCommand::TAGMSG, 1, 1
TOPIC, IrcCommand::TOPIC, 2, 2 TOPIC, myirc::IrcCommand::TOPIC, 2, 2
WALLOPS, IrcCommand::WALLOPS, 1, 1 WALLOPS, myirc::IrcCommand::WALLOPS, 1, 1

View File

@ -1,8 +1,8 @@
#include "myirc/ircmsg.hpp"
#include <cstring> #include <cstring>
#include <optional> #include <optional>
#include "ircmsg.hpp"
namespace { namespace {
class Parser class Parser
{ {
@ -104,6 +104,8 @@ std::string_view unescape_tag_value(char *const val)
} // namespace } // namespace
namespace myirc {
auto parse_irc_tags(char *str) -> std::vector<irctag> auto parse_irc_tags(char *str) -> std::vector<irctag>
{ {
std::vector<irctag> tags; std::vector<irctag> tags;
@ -184,3 +186,5 @@ auto operator<<(std::ostream &out, irc_error_code code) -> std::ostream &
return out; return out;
} }
} }
} // namespace myirc

View File

@ -1,6 +1,6 @@
#include "openssl_utils.hpp" #include "myirc/openssl_utils.hpp"
#include "c_callback.hpp" #include "myirc/c_callback.hpp"
#include <openssl/err.h> #include <openssl/err.h>
#include <openssl/pem.h> #include <openssl/pem.h>
@ -11,6 +11,8 @@
using namespace std::literals; using namespace std::literals;
namespace myirc {
auto log_openssl_errors(const std::string_view prefix) -> void auto log_openssl_errors(const std::string_view prefix) -> void
{ {
auto err_cb = [prefix](const char *str, size_t len) -> int { 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; return key;
} }
} // namespace myirc

View File

@ -1,6 +1,9 @@
#include "ratelimit.hpp" #include "myirc/ratelimit.hpp"
#include <chrono> #include <chrono>
namespace myirc {
using namespace std::literals; using namespace std::literals;
using ms = std::chrono::milliseconds; using ms = std::chrono::milliseconds;
@ -21,3 +24,5 @@ auto Rfc1459RateLimit::query(size_t want_to_send) -> std::pair<ms, size_t>
return {cost_ - gap, 1}; return {cost_ - gap, 1};
} }
} }
} // namespace myirc

View File

@ -1,12 +1,14 @@
#include "registration.hpp" #include "myirc/registration.hpp"
#include "connection.hpp" #include "myirc/connection.hpp"
#include "ircmsg.hpp" #include "myirc/ircmsg.hpp"
#include <memory> #include <memory>
#include <random> #include <random>
#include <unordered_map> #include <unordered_map>
namespace myirc {
Registration::Registration( Registration::Registration(
Settings settings, Settings settings,
std::shared_ptr<Client> client std::shared_ptr<Client> client
@ -142,3 +144,5 @@ auto Registration::on_ircmsg(const IrcCommand cmd, const IrcMsg &msg) -> void
break; break;
} }
} }
} // namespace myirc

View File

@ -1,8 +1,11 @@
#include "sasl_mechanism.hpp" #include "myirc/sasl_mechanism.hpp"
#include "openssl_utils.hpp"
#include "myirc/openssl_utils.hpp"
#include <openssl/evp.h> #include <openssl/evp.h>
namespace myirc {
auto SaslPlain::step(std::string_view msg) -> StepResult { auto SaslPlain::step(std::string_view msg) -> StepResult {
if (complete_) { if (complete_) {
return Failure{}; return Failure{};
@ -72,3 +75,5 @@ auto SaslEcdsa::step(std::string_view msg) -> StepResult {
return Failure{}; return Failure{};
} }
} }
} // namespace myirc

View File

@ -1,6 +1,6 @@
#include "snote.hpp" #include "myirc/snote.hpp"
#include "c_callback.hpp" #include "myirc/c_callback.hpp"
#include <hs.h> #include <hs.h>
@ -13,6 +13,9 @@
#include <stdexcept> #include <stdexcept>
#include <utility> #include <utility>
namespace myirc {
namespace { namespace {
struct SnotePattern struct SnotePattern
@ -278,3 +281,5 @@ auto SnoteCore::ScratchDeleter::operator()(hs_scratch_t *scratch) const -> void
} }
SnoteCore snoteCore; SnoteCore snoteCore;
} // namespace myirc