summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/botserv/bot.cpp5
-rw-r--r--modules/botserv/main/botserv.cpp1
-rw-r--r--modules/chanserv/invite.cpp2
-rw-r--r--modules/chanserv/main/chanserv.cpp4
-rw-r--r--modules/chanserv/set.cpp2
-rw-r--r--modules/dnsbl.cpp2
-rw-r--r--modules/hostserv/main/hostserv.cpp6
-rw-r--r--modules/hostserv/off.cpp2
-rw-r--r--modules/hostserv/on.cpp2
-rw-r--r--modules/nickserv/ajoin.cpp6
-rw-r--r--modules/nickserv/logout.cpp2
-rw-r--r--modules/nickserv/main/nickserv.cpp14
-rw-r--r--modules/nickserv/recover.cpp6
-rw-r--r--modules/nickserv/register.cpp4
-rw-r--r--modules/nickserv/set.cpp2
-rw-r--r--modules/operserv/jupe.cpp4
-rw-r--r--modules/operserv/main/operserv.cpp12
-rw-r--r--modules/operserv/noop.cpp4
-rw-r--r--modules/operserv/svs.cpp6
-rw-r--r--modules/protocol/bahamut.cpp436
-rw-r--r--modules/protocol/charybdis.cpp204
-rw-r--r--modules/protocol/hybrid.cpp445
-rw-r--r--modules/protocol/inspircd20.cpp581
-rw-r--r--modules/protocol/ngircd.cpp188
-rw-r--r--modules/protocol/plexus.cpp219
-rw-r--r--modules/protocol/ratbox.cpp207
-rw-r--r--modules/protocol/rfc1459.cpp142
-rw-r--r--modules/protocol/ts6.cpp71
-rw-r--r--modules/protocol/unreal.cpp480
-rw-r--r--modules/sasl.cpp10
30 files changed, 1872 insertions, 1197 deletions
diff --git a/modules/botserv/bot.cpp b/modules/botserv/bot.cpp
index 30550df56..082bd6337 100644
--- a/modules/botserv/bot.cpp
+++ b/modules/botserv/bot.cpp
@@ -232,7 +232,10 @@ class CommandBSBot : public Command
bi->introduced = false;
}
else
- IRCD->SendNickChange(bi, nick);
+ {
+ IRCD->Send<messages::NickChange>(bi, nick, Anope::CurTime);
+ bi->timestamp = Anope::CurTime;
+ }
if (!nick.equals_cs(bi->nick))
{
diff --git a/modules/botserv/main/botserv.cpp b/modules/botserv/main/botserv.cpp
index 4f3d4c92b..4b0309b31 100644
--- a/modules/botserv/main/botserv.cpp
+++ b/modules/botserv/main/botserv.cpp
@@ -62,6 +62,7 @@ class BotServCore : public Module, public BotServ::BotServService
void OnBotAssign(User *sender, ChanServ::Channel *ci, ServiceBot *bi) override
{
+ printf("on bot assign !\n");
if (ci->c && ci->c->users.size() >= Config->GetModule(this)->Get<unsigned>("minusers"))
{
ChannelStatus status(Config->GetModule(this)->Get<Anope::string>("botmodes"));
diff --git a/modules/chanserv/invite.cpp b/modules/chanserv/invite.cpp
index b6d0f19c9..9c21bc704 100644
--- a/modules/chanserv/invite.cpp
+++ b/modules/chanserv/invite.cpp
@@ -78,7 +78,7 @@ class CommandCSInvite : public Command
bool override = !source.AccessFor(ci).HasPriv("INVITE");
- IRCD->SendInvite(ci->WhoSends(), c, u2);
+ IRCD->Send<messages::Invite>(ci->WhoSends(), c, u2);
if (u2 != u)
{
source.Reply(_("\002{0}\002 has been invited to \002{1}\002."), u2->nick, c->name);
diff --git a/modules/chanserv/main/chanserv.cpp b/modules/chanserv/main/chanserv.cpp
index b6aedb0dd..492f64459 100644
--- a/modules/chanserv/main/chanserv.cpp
+++ b/modules/chanserv/main/chanserv.cpp
@@ -471,7 +471,7 @@ class ChanServCore : public Module
if (ModeManager::FindChannelModeByName("PERM") != NULL)
{
if (c)
- IRCD->SendChannel(ci->c);
+ IRCD->Send<messages::MessageChannel>(ci->c);
ci->c->SetMode(NULL, "PERM");
}
else
@@ -513,7 +513,7 @@ class ChanServCore : public Module
{
::Log(LOG_DEBUG) << "Changing TS of " << c->name << " from " << c->creation_time << " to " << c->ci->GetTimeRegistered();
c->creation_time = c->ci->GetTimeRegistered();
- IRCD->SendChannel(c);
+ IRCD->Send<messages::MessageChannel>(c);
c->Reset();
}
}
diff --git a/modules/chanserv/set.cpp b/modules/chanserv/set.cpp
index 89eb4985a..833817cde 100644
--- a/modules/chanserv/set.cpp
+++ b/modules/chanserv/set.cpp
@@ -1242,7 +1242,7 @@ class CSSet : public Module
{
Log(LOG_DEBUG) << "Changing TS of " << c->name << " from " << c->creation_time << " to " << c->ci->GetTimeRegistered();
c->creation_time = c->ci->GetTimeRegistered();
- IRCD->SendChannel(c);
+ IRCD->Send<messages::MessageChannel>(c);
c->Reset();
}
}
diff --git a/modules/dnsbl.cpp b/modules/dnsbl.cpp
index a2c8a4380..f8d35bf71 100644
--- a/modules/dnsbl.cpp
+++ b/modules/dnsbl.cpp
@@ -107,7 +107,7 @@ class DNSBLResolver : public Request
}
else
{
- IRCD->SendAkill(NULL, x);
+ IRCD->Send<messages::Akill>(nullptr, x);
delete x;
}
}
diff --git a/modules/hostserv/main/hostserv.cpp b/modules/hostserv/main/hostserv.cpp
index 4ff348f2b..f7ba03418 100644
--- a/modules/hostserv/main/hostserv.cpp
+++ b/modules/hostserv/main/hostserv.cpp
@@ -76,7 +76,7 @@ class HostServCore : public Module
if (u->vhost.empty() || !u->vhost.equals_cs(vhost->GetHost()) || (!vhost->GetIdent().empty() && !u->GetVIdent().equals_cs(vhost->GetIdent())))
{
- IRCD->SendVhost(u, vhost->GetIdent(), vhost->GetHost());
+ IRCD->Send<messages::VhostSet>(u, vhost->GetIdent(), vhost->GetHost());
u->vhost = vhost->GetHost();
u->UpdateHost();
@@ -124,7 +124,7 @@ class HostServCore : public Module
if (vhost == nullptr)
return;
- IRCD->SendVhost(u, vhost->GetIdent(), vhost->GetHost());
+ IRCD->Send<messages::VhostSet>(u, vhost->GetIdent(), vhost->GetHost());
u->vhost = vhost->GetHost();
u->UpdateHost();
@@ -150,7 +150,7 @@ class HostServCore : public Module
User *u = User::Find(na->GetNick());
if (u && u->Account() == na->GetAccount())
- IRCD->SendVhostDel(u);
+ IRCD->Send<messages::VhostDel>(u);
}
}
diff --git a/modules/hostserv/off.cpp b/modules/hostserv/off.cpp
index 1d7d91876..e1af7def4 100644
--- a/modules/hostserv/off.cpp
+++ b/modules/hostserv/off.cpp
@@ -42,7 +42,7 @@ class CommandHSOff : public Command
// XXX vident?
u->vhost.clear();
- IRCD->SendVhostDel(u);
+ IRCD->Send<messages::VhostDel>(u);
Log(LOG_COMMAND, source, this) << "to disable their vhost";
source.Reply(_("Your vhost was removed and the normal cloaking restored."));
}
diff --git a/modules/hostserv/on.cpp b/modules/hostserv/on.cpp
index c8f4211de..3041f65a5 100644
--- a/modules/hostserv/on.cpp
+++ b/modules/hostserv/on.cpp
@@ -60,7 +60,7 @@ class CommandHSOn : public Command
source.Reply(_("Your vhost of \002{0}\002 is now activated."), vhost->Mask());
Log(LOG_COMMAND, source, this) << "to enable their vhost of " << vhost->Mask();
- IRCD->SendVhost(u, vhost->GetIdent(), vhost->GetHost());
+ IRCD->Send<messages::VhostSet>(u, vhost->GetIdent(), vhost->GetHost());
u->vhost = vhost->GetHost();
if (IRCD->CanSetVIdent && !vhost->GetIdent().empty())
u->SetVIdent(vhost->GetIdent());
diff --git a/modules/nickserv/ajoin.cpp b/modules/nickserv/ajoin.cpp
index 5973c95ac..0d708143c 100644
--- a/modules/nickserv/ajoin.cpp
+++ b/modules/nickserv/ajoin.cpp
@@ -371,7 +371,7 @@ class NSAJoin : public Module
{
try
{
- unsigned limit = convertTo<unsigned>(l);
+ unsigned int limit = convertTo<unsigned int>(l);
if (c->users.size() >= limit)
need_invite = true;
}
@@ -384,10 +384,10 @@ class NSAJoin : public Module
{
if (!u_access.HasPriv("INVITE"))
continue;
- IRCD->SendInvite(NickServ, c, u);
+ IRCD->Send<messages::Invite>(NickServ, c, u);
}
- IRCD->SendSVSJoin(NickServ, u, entry->GetChannel(), key);
+ IRCD->Send<messages::SVSJoin>(NickServ, u, entry->GetChannel(), key);
}
}
};
diff --git a/modules/nickserv/logout.cpp b/modules/nickserv/logout.cpp
index 6a9d119ad..0e6cdb46a 100644
--- a/modules/nickserv/logout.cpp
+++ b/modules/nickserv/logout.cpp
@@ -68,7 +68,7 @@ class CommandNSLogout : public Command
else
source.Reply(_("You have been logged out."));
- IRCD->SendLogout(u2);
+ IRCD->Send<messages::Logout>(u2);
u2->RemoveMode(source.service, "REGISTERED");
u2->Logout();
diff --git a/modules/nickserv/main/nickserv.cpp b/modules/nickserv/main/nickserv.cpp
index 60b136db1..3741d119b 100644
--- a/modules/nickserv/main/nickserv.cpp
+++ b/modules/nickserv/main/nickserv.cpp
@@ -115,7 +115,7 @@ class NickServRelease : public User, public Timer
NickServReleases.insert(std::make_pair(this->nick, this));
- IRCD->SendClientIntroduction(this);
+ IRCD->Send<messages::NickIntroduction>(this);
}
~NickServRelease()
@@ -168,7 +168,7 @@ class NickServCore : public Module, public NickServ::NickServService
new NickServHeld(this, na, Config->GetModule("nickserv/main")->Get<time_t>("releasetimeout", "1m"));
if (IRCD->CanSVSHold)
- IRCD->SendSVSHold(na->GetNick(), Config->GetModule("nickserv/main")->Get<time_t>("releasetimeout", "1m"));
+ IRCD->Send<messages::SVSHold>(na->GetNick(), Config->GetModule("nickserv/main")->Get<time_t>("releasetimeout", "1m"));
else
new NickServRelease(this, na, Config->GetModule("nickserv/main")->Get<time_t>("releasetimeout", "1m"));
}
@@ -324,7 +324,7 @@ class NickServCore : public Module, public NickServ::NickServService
else
{
u->SendMessage(*NickServ, _("Your nickname is now being changed to \002%s\002"), guestnick.c_str());
- IRCD->SendForceNickChange(u, guestnick, Anope::CurTime);
+ IRCD->Send<messages::SVSNick>(u, guestnick, Anope::CurTime);
}
}
else
@@ -338,7 +338,7 @@ class NickServCore : public Module, public NickServ::NickServService
if (held.HasExt(na))
{
if (IRCD->CanSVSHold)
- IRCD->SendSVSHoldDel(na->GetNick());
+ IRCD->Send<messages::SVSHoldDel>(na->GetNick());
else
{
User *u = User::Find(na->GetNick(), true);
@@ -418,7 +418,7 @@ class NickServCore : public Module, public NickServ::NickServService
User *u = User::Find(na->GetNick(), true);
if (u && u->Account() == na->GetAccount())
{
- IRCD->SendLogout(u);
+ IRCD->Send<messages::Logout>(u);
u->RemoveMode(NickServ, "REGISTERED");
u->Logout();
}
@@ -432,7 +432,7 @@ class NickServCore : public Module, public NickServ::NickServService
for (unsigned int i = nc->users.size(); i > 0; --i)
{
User *user = nc->users[i - 1];
- IRCD->SendLogout(user);
+ IRCD->Send<messages::Logout>(user);
user->RemoveMode(NickServ, "REGISTERED");
user->Logout();
EventManager::Get()->Dispatch(&Event::NickLogout::OnNickLogout, user);
@@ -552,7 +552,7 @@ class NickServCore : public Module, public NickServ::NickServService
else
{
/* Reset +r and re-send account (even though it really should be set at this point) */
- IRCD->SendLogin(u, na);
+ IRCD->Send<messages::Login>(u, na);
if (!Config->GetModule("nickserv/main")->Get<bool>("nonicknameownership") && na->GetAccount() == u->Account() && !na->GetAccount()->IsUnconfirmed())
u->SetMode(NickServ, "REGISTERED");
Log(u, "", NickServ) << u->GetMask() << " automatically identified for group " << u->Account()->GetDisplay();
diff --git a/modules/nickserv/recover.cpp b/modules/nickserv/recover.cpp
index f3fa24bb6..60a0bee2f 100644
--- a/modules/nickserv/recover.cpp
+++ b/modules/nickserv/recover.cpp
@@ -92,7 +92,7 @@ class NSRecoverRequestListener : public NickServ::IdentifyRequestListener
source.Reply(_("Ghost with your nick has been killed."));
if (IRCD->CanSVSNick)
- IRCD->SendForceNickChange(source.GetUser(), user, Anope::CurTime);
+ IRCD->Send<messages::SVSNick>(source.GetUser(), user, Anope::CurTime);
}
/* User is not identified or not identified to the same account as the person using this command */
else
@@ -266,7 +266,7 @@ class NSRecover : public Module
if (u->FindChannel(c))
this->OnJoinChannel(u, c);
else if (IRCD->CanSVSJoin)
- IRCD->SendSVSJoin(NickServ, u, cname, "");
+ IRCD->Send<messages::SVSJoin>(NickServ, u, cname, "");
}
}
@@ -276,7 +276,7 @@ class NSRecover : public Module
if (svs->from)
{
// svsnick from to to
- IRCD->SendForceNickChange(svs->from, svs->to, Anope::CurTime);
+ IRCD->Send<messages::SVSNick>(svs->from, svs->to, Anope::CurTime);
}
svsnick.Unset(u);
diff --git a/modules/nickserv/register.cpp b/modules/nickserv/register.cpp
index 4ceb3f113..b06e08075 100644
--- a/modules/nickserv/register.cpp
+++ b/modules/nickserv/register.cpp
@@ -59,7 +59,7 @@ class CommandNSConfirm : public Command
/* Login the users online already */
for (User *u : na->GetAccount()->users)
{
- IRCD->SendLogin(u, na);
+ IRCD->Send<messages::Login>(u, na);
NickServ::Nick *u_na = NickServ::FindNick(u->nick);
@@ -90,7 +90,7 @@ class CommandNSConfirm : public Command
NickServ::Nick *na = NickServ::FindNick(source.GetNick());
if (na)
{
- IRCD->SendLogin(source.GetUser(), na);
+ IRCD->Send<messages::Login>(source.GetUser(), na);
if (!Config->GetModule("nickserv/main")->Get<bool>("nonicknameownership") && na->GetAccount() == source.GetAccount() && !na->GetAccount()->IsUnconfirmed())
source.GetUser()->SetMode(source.service, "REGISTERED");
}
diff --git a/modules/nickserv/set.cpp b/modules/nickserv/set.cpp
index 136d43be8..c7d03f8d2 100644
--- a/modules/nickserv/set.cpp
+++ b/modules/nickserv/set.cpp
@@ -362,7 +362,7 @@ class CommandNSSetDisplay : public Command
for (User *u : user_na->GetAccount()->users)
{
- IRCD->SendLogin(u, user_na);
+ IRCD->Send<messages::Login>(u, user_na);
}
source.Reply(_("The new display is now \002{0}\002."), user_na->GetAccount()->GetDisplay());
diff --git a/modules/operserv/jupe.cpp b/modules/operserv/jupe.cpp
index 2f9386eda..882effa4f 100644
--- a/modules/operserv/jupe.cpp
+++ b/modules/operserv/jupe.cpp
@@ -57,11 +57,11 @@ class CommandOSJupe : public Command
Anope::string sid = IRCD->SID_Retrieve();
if (server)
{
- IRCD->SendSquit(server, rbuf);
+ IRCD->Send<messages::SQuit>(server, rbuf);
server->Delete(rbuf);
}
Server *juped_server = new Server(Me, jserver, 1, rbuf, sid, true);
- IRCD->SendServer(juped_server);
+ IRCD->Send<messages::MessageServer>(juped_server);
Log(LOG_ADMIN, source, this) << "on " << jserver << " (" << rbuf << ")";
}
diff --git a/modules/operserv/main/operserv.cpp b/modules/operserv/main/operserv.cpp
index 09dc3bbac..fc8dbf423 100644
--- a/modules/operserv/main/operserv.cpp
+++ b/modules/operserv/main/operserv.cpp
@@ -38,12 +38,12 @@ class SGLineManager : public XLineManager
void Send(User *u, XLine *x) override
{
- IRCD->SendAkill(u, x);
+ IRCD->Send<messages::Akill>(u, x);
}
void SendDel(XLine *x) override
{
- IRCD->SendAkillDel(x);
+ IRCD->Send<messages::AkillDel>(x);
}
bool Check(User *u, XLine *x) override
@@ -106,7 +106,7 @@ class SQLineManager : public XLineManager
}
else if (x->GetMask()[0] != '#' || IRCD->CanSQLineChannel)
{
- IRCD->SendSQLine(u, x);
+ IRCD->Send<messages::SQLine>(u, x);
/* If it is an oper, assume they're walking it, otherwise kill for good measure */
if (u && !u->HasMode("OPER"))
u->Kill(Config->GetClient("OperServ"), "Q-Lined: " + x->GetReason());
@@ -118,7 +118,7 @@ class SQLineManager : public XLineManager
if (!IRCD->CanSQLine || x->IsRegex())
;
else if (x->GetMask()[0] != '#' || IRCD->CanSQLineChannel)
- IRCD->SendSQLineDel(x);
+ IRCD->Send<messages::SQLineDel>(x);
}
bool Check(User *u, XLine *x) override
@@ -168,7 +168,7 @@ class SNLineManager : public XLineManager
void Send(User *u, XLine *x) override
{
if (IRCD->CanSNLine && !x->IsRegex())
- IRCD->SendSGLine(u, x);
+ IRCD->Send<messages::SGLine>(u, x);
if (u)
u->Kill(Config->GetClient("OperServ"), "SNLined: " + x->GetReason());
@@ -177,7 +177,7 @@ class SNLineManager : public XLineManager
void SendDel(XLine *x) override
{
if (IRCD->CanSNLine && !x->IsRegex())
- IRCD->SendSGLineDel(x);
+ IRCD->Send<messages::SGLineDel>(x);
}
bool Check(User *u, XLine *x) override
diff --git a/modules/operserv/noop.cpp b/modules/operserv/noop.cpp
index 2d813a0cc..329a6c338 100644
--- a/modules/operserv/noop.cpp
+++ b/modules/operserv/noop.cpp
@@ -50,7 +50,7 @@ class CommandOSNOOP : public Command
if (cmd.equals_ci("SET"))
{
/* Remove the O:lines */
- IRCD->SendSVSNOOP(s, true);
+ IRCD->Send<messages::NOOP>(s, true);
s->Extend<Anope::string>("noop", source.GetNick());
Log(LOG_ADMIN, source, this) << "SET on " << s->GetName();
@@ -69,7 +69,7 @@ class CommandOSNOOP : public Command
else if (cmd.equals_ci("REVOKE"))
{
s->Shrink<Anope::string>("noop");
- IRCD->SendSVSNOOP(s, false);
+ IRCD->Send<messages::NOOP>(s, false);
Log(LOG_ADMIN, source, this) << "REVOKE on " << s->GetName();
source.Reply(_("All O:lines of \002{0}\002 have been reset."), s->GetName());
}
diff --git a/modules/operserv/svs.cpp b/modules/operserv/svs.cpp
index 81138740f..ccba9d8d1 100644
--- a/modules/operserv/svs.cpp
+++ b/modules/operserv/svs.cpp
@@ -69,7 +69,7 @@ class CommandOSSVSNick : public Command
source.Reply(_("\002{0}\002 is now being changed to \002{1}\002."), nick, newnick);
Log(LOG_ADMIN, source, this) << "to change " << nick << " to " << newnick;
- IRCD->SendForceNickChange(u2, newnick, Anope::CurTime);
+ IRCD->Send<messages::SVSNick>(u2, newnick, Anope::CurTime);
}
bool OnHelp(CommandSource &source, const Anope::string &subcommand) override
@@ -122,7 +122,7 @@ class CommandOSSVSJoin : public Command
return;
}
- IRCD->SendSVSJoin(*source.service, target, params[1], "");
+ IRCD->Send<messages::SVSJoin>(*source.service, target, params[1], "");
Log(LOG_ADMIN, source, this) << "to force " << target->nick << " to join " << params[1];
source.Reply(_("\002{0}\002 has been joined to \002{1}\002."), target->nick, params[1]);
}
@@ -178,7 +178,7 @@ class CommandOSSVSPart : public Command
}
const Anope::string &reason = params.size() > 2 ? params[2] : "";
- IRCD->SendSVSPart(*source.service, target, params[1], reason);
+ IRCD->Send<messages::SVSPart>(*source.service, target, params[1], reason);
if (!reason.empty())
Log(LOG_ADMIN, source, this) << "to force " << target->nick << " to part " << c->name << " with reason " << reason;
else
diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp
index 46ffb3ea2..cdb05e7f7 100644
--- a/modules/protocol/bahamut.cpp
+++ b/modules/protocol/bahamut.cpp
@@ -23,103 +23,175 @@
#include "modules/protocol/rfc1459.h"
#include "modules/protocol/bahamut.h"
-class ChannelModeFlood : public ChannelModeParam
+void bahamut::senders::Akill::Send(User* u, XLine* x)
{
- public:
- ChannelModeFlood(char modeChar, bool minusNoArg) : ChannelModeParam("FLOOD", modeChar, minusNoArg) { }
-
- bool IsValid(Anope::string &value) const override
+ if (x->IsRegex() || x->HasNickOrReal())
{
- try
+ if (!u)
{
- Anope::string rest;
- if (!value.empty() && value[0] != ':' && convertTo<int>(value[0] == '*' ? value.substr(1) : value, rest, false) > 0 && rest[0] == ':' && rest.length() > 1 && convertTo<int>(rest.substr(1), rest, false) > 0 && rest.empty())
- return true;
+ /* No user (this akill was just added), and contains nick and/or realname. Find users that match and ban them */
+ for (user_map::const_iterator it = UserListByNick.begin(); it != UserListByNick.end(); ++it)
+ if (x->GetManager()->Check(it->second, x))
+ this->Send(it->second, x);
+ return;
}
- catch (const ConvertException &) { }
- return false;
+ XLine *old = x;
+
+ if (old->GetManager()->HasEntry("*@" + u->host))
+ return;
+
+ /* We can't akill x as it has a nick and/or realname included, so create a new akill for *@host */
+ x = Serialize::New<XLine *>();
+ x->SetMask("*@" + u->host);
+ x->SetBy(old->GetBy());
+ x->SetExpires(old->GetExpires());
+ x->SetReason(old->GetReason());
+ x->SetID(old->GetID());
+ old->GetManager()->AddXLine(x);
+
+ Log(Config->GetClient("OperServ"), "akill") << "AKILL: Added an akill for " << x->GetMask() << " because " << u->GetMask() << "#" << u->realname << " matches " << old->GetMask();
}
-};
-bahamut::Proto::Proto(Module *creator) : IRCDProto(creator, "Bahamut 1.8.x")
-{
- DefaultPseudoclientModes = "+";
- CanSVSNick = true;
- CanSNLine = true;
- CanSQLine = true;
- CanSQLineChannel = true;
- CanSZLine = true;
- CanSVSHold = true;
- MaxModes = 60;
+ /* ZLine if we can instead */
+ if (x->GetUser() == "*")
+ {
+ cidr a(x->GetHost());
+ if (a.valid())
+ {
+ IRCD->Send<messages::SZLine>(u, x);
+ return;
+ }
+ }
+
+ // Calculate the time left before this would expire, capping it at 2 days
+ time_t timeleft = x->GetExpires() - Anope::CurTime;
+ if (timeleft > 172800)
+ timeleft = 172800;
+
+ Uplink::Send("AKILL", x->GetHost(), x->GetUser(), timeleft, x->GetBy(), Anope::CurTime, x->GetReason());
}
-void bahamut::Proto::SendMode(const MessageSource &source, Channel *dest, const Anope::string &buf)
+void bahamut::senders::AkillDel::Send(XLine* x)
{
- if (Servers::Capab.count("TSMODE") > 0)
+ if (x->IsRegex() || x->HasNickOrReal())
+ return;
+
+ /* ZLine if we can instead */
+ if (x->GetUser() == "*")
{
- IRCMessage message(source, "MODE", dest->name, dest->creation_time);
- message.TokenizeAndPush(buf);
- Uplink::SendMessage(message);
+ cidr a(x->GetHost());
+ if (a.valid())
+ {
+ IRCD->Send<messages::SZLineDel>(x);
+ return;
+ }
}
- else
+
+ Uplink::Send("RAKKILL", x->GetHost(), x->GetUser());
+}
+
+void bahamut::senders::MessageChannel::Send(Channel* c)
+{
+ Anope::string modes = c->GetModes(true, true);
+ if (modes.empty())
+ modes = "+";
+ Uplink::Send("SJOIN", c->creation_time, c->name, modes, "");
+}
+
+void bahamut::senders::Join::Send(User* user, Channel* c, const ChannelStatus* status)
+{
+ Uplink::Send(user, "SJOIN", c->creation_time, c->name);
+
+ if (status)
{
- IRCDProto::SendMode(source, dest, buf);
+ /* First save the channel status incase uc->Status == status */
+ ChannelStatus cs = *status;
+ /* If the user is internally on the channel with flags, kill them so that
+ * the stacker will allow this.
+ */
+ ChanUserContainer *uc = c->FindUser(user);
+ if (uc != NULL)
+ uc->status.Clear();
+
+ ServiceBot *setter = ServiceBot::Find(user->GetUID());
+ for (size_t i = 0; i < cs.Modes().length(); ++i)
+ c->SetMode(setter, ModeManager::FindChannelModeByChar(cs.Modes()[i]), user->GetUID(), false);
+
+ if (uc != NULL)
+ uc->status = cs;
}
}
-void bahamut::Proto::SendMode(const MessageSource &source, User *u, const Anope::string &buf)
+void bahamut::senders::Kill::Send(const MessageSource &source, const Anope::string &target, const Anope::string &reason)
{
- IRCMessage message(source, "SVSMODE", u->nick, u->timestamp);
- message.TokenizeAndPush(buf);
- Uplink::SendMessage(message);
+ Uplink::Send(source, "SVSKILL", target, reason);
+}
+
+/*
+ Note: if the stamp is null 0, the below usage is correct of Bahamut
+*/
+void bahamut::senders::Kill::Send(const MessageSource &source, User *user, const Anope::string &reason)
+{
+ Uplink::Send(source, "SVSKILL", user->nick, reason);
}
-void bahamut::Proto::SendGlobalNotice(ServiceBot *bi, Server *dest, const Anope::string &msg)
+void bahamut::senders::Login::Send(User *u, NickServ::Nick *na)
{
- Uplink::Send(bi, "NOTICE", "$" + dest->GetName(), msg);
+ IRCD->SendMode(Config->GetClient("NickServ"), u, "+d {0}", u->signon);
}
-void bahamut::Proto::SendGlobalPrivmsg(ServiceBot *bi, Server *dest, const Anope::string &msg)
+void bahamut::senders::Logout::Send(User *u)
{
- Uplink::Send(bi, "PRIVMSG", "$" + dest->GetName(), msg);
+ IRCD->SendMode(Config->GetClient("NickServ"), u, "+d 1");
}
-/* SVSHOLD - set */
-void bahamut::Proto::SendSVSHold(const Anope::string &nick, time_t time)
+void bahamut::senders::ModeChannel::Send(const MessageSource &source, Channel *channel, const Anope::string &modes)
{
- Uplink::Send(Me, "SVSHOLD", nick, time, "Being held for registered user");
+ IRCMessage message(source, "MODE", channel->name, channel->creation_time);
+ message.TokenizeAndPush(modes);
+ Uplink::SendMessage(message);
}
-/* SVSHOLD - release */
-void bahamut::Proto::SendSVSHoldDel(const Anope::string &nick)
+void bahamut::senders::ModeUser::Send(const MessageSource &source, User *user, const Anope::string &modes)
{
- Uplink::Send(Me, "SVSHOLD", nick, 0);
+ IRCMessage message(source, "SVSMODE", user->nick, user->timestamp);
+ message.TokenizeAndPush(modes);
+ Uplink::SendMessage(message);
}
-/* SQLINE */
-void bahamut::Proto::SendSQLine(User *, XLine *x)
+void bahamut::senders::NickIntroduction::Send(User *user)
{
- Uplink::Send(Me, "SQLINE", x->GetMask(), x->GetReason());
+ Anope::string modes = "+" + user->GetModes();
+ Uplink::Send("NICK", user->nick, 1, user->timestamp, modes, user->GetIdent(), user->host, user->server->GetName(), 0, 0, user->realname);
+}
+
+void bahamut::senders::NOOP::Send(Server* server, bool set)
+{
+ Uplink::Send("SVSNOOP", server->GetSID(), set ? "+" : "-");
+}
+
+void bahamut::senders::SGLine::Send(User*, XLine* x)
+{
+ Uplink::Send("SGLINE", x->GetMask().length(), x->GetMask() + ":" + x->GetReason());
}
-/* UNSLINE */
-void bahamut::Proto::SendSGLineDel(XLine *x)
+void bahamut::senders::SGLineDel::Send(XLine* x)
{
Uplink::Send("UNSGLINE", 0, x->GetMask());
}
-/* UNSZLINE */
-void bahamut::Proto::SendSZLineDel(XLine *x)
+void bahamut::senders::SQLine::Send(User*, XLine* x)
{
- /* this will likely fail so its only here for legacy */
- Uplink::Send("UNSZLINE", 0, x->GetHost());
- /* this is how we are supposed to deal with it */
- Uplink::Send("RAKILL", x->GetHost(), "*");
+ Uplink::Send(Me, "SQLINE", x->GetMask(), x->GetReason());
+}
+
+void bahamut::senders::SQLineDel::Send(XLine* x)
+{
+ Uplink::Send("UNSQLINE", x->GetMask());
}
-/* SZLINE */
-void bahamut::Proto::SendSZLine(User *, XLine *x)
+void bahamut::senders::SZLine::Send(User*, XLine* x)
{
// Calculate the time left before this would expire, capping it at 2 days
time_t timeleft = x->GetExpires() - Anope::CurTime;
@@ -131,130 +203,69 @@ void bahamut::Proto::SendSZLine(User *, XLine *x)
Uplink::Send("AKILL", x->GetHost(), "*", timeleft, x->GetBy(), Anope::CurTime, x->GetReason());
}
-/* SVSNOOP */
-void bahamut::Proto::SendSVSNOOP(Server *server, bool set)
+void bahamut::senders::SZLineDel::Send(XLine* x)
{
- Uplink::Send("SVSNOOP", server->GetName(), set ? "+" : "-");
+ /* this will likely fail so its only here for legacy */
+ Uplink::Send("UNSZLINE", 0, x->GetHost());
+ /* this is how we are supposed to deal with it */
+ Uplink::Send("RAKILL", x->GetHost(), "*");
}
-/* SGLINE */
-void bahamut::Proto::SendSGLine(User *, XLine *x)
+void bahamut::senders::SVSHold::Send(const Anope::string& nick, time_t t)
{
- Uplink::Send("SGLINE", x->GetMask().length(), x->GetMask() + ":" + x->GetReason());
+ Uplink::Send(Me, "SVSHOLD", nick, t, "Being held for registered user");
}
-/* RAKILL */
-void bahamut::Proto::SendAkillDel(XLine *x)
+void bahamut::senders::SVSHoldDel::Send(const Anope::string& nick)
{
- if (x->IsRegex() || x->HasNickOrReal())
- return;
-
- /* ZLine if we can instead */
- if (x->GetUser() == "*")
- {
- cidr a(x->GetHost());
- if (a.valid())
- {
- IRCD->SendSZL