make a myirc namespace
This commit is contained in:
parent
8324a496b6
commit
1a6ec835ed
@ -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(
|
||||||
|
@ -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)
|
||||||
|
@ -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
1
driver/web.cpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "web.hpp"
|
1
driver/web.hpp
Normal file
1
driver/web.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
#pragma once
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user