Anope IRC Services  Version 2.0
charybdis.cpp
Go to the documentation of this file.
1 /* Charybdis IRCD functions
2  *
3  * (C) 2003-2014 Anope Team
4  * Contact us at team@anope.org
5  *
6  * Please read COPYING and README for further details.
7  *
8  * Based on the original code of Epona by Lara.
9  * Based on the original code of Services by Andy Church.
10  */
11 
12 #include "module.h"
13 #include "modules/cs_mode.h"
14 #include "modules/sasl.h"
15 
17 
18 static ServiceReference<IRCDProto> ratbox("IRCDProto", "ratbox");
19 
21 {
22  public:
23  ChannelModeLargeBan(const Anope::string &mname, char modeChar) : ChannelMode(mname, modeChar) { }
24 
25  bool CanSet(User *u) const anope_override
26  {
27  return u && u->HasMode("OPER");
28  }
29 };
30 
31 
32 class CharybdisProto : public IRCDProto
33 {
34  public:
35  CharybdisProto(Module *creator) : IRCDProto(creator, "Charybdis 3.4+")
36  {
37  DefaultPseudoclientModes = "+oiS";
38  CanCertFP = true;
39  CanSNLine = true;
40  CanSQLine = true;
41  CanSZLine = true;
42  CanSVSNick = true;
43  CanSVSHold = true;
44  CanSetVHost = true;
45  RequiresID = true;
46  MaxModes = 4;
47  }
48 
49  void SendSVSKillInternal(const MessageSource &source, User *targ, const Anope::string &reason) anope_override { ratbox->SendSVSKillInternal(source, targ, reason); }
50  void SendGlobalNotice(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override { ratbox->SendGlobalNotice(bi, dest, msg); }
51  void SendGlobalPrivmsg(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override { ratbox->SendGlobalPrivmsg(bi, dest, msg); }
52  void SendGlobopsInternal(const MessageSource &source, const Anope::string &buf) anope_override { ratbox->SendGlobopsInternal(source, buf); }
53  void SendSGLine(User *u, const XLine *x) anope_override { ratbox->SendSGLine(u, x); }
54  void SendSGLineDel(const XLine *x) anope_override { ratbox->SendSGLineDel(x); }
55  void SendAkill(User *u, XLine *x) anope_override { ratbox->SendAkill(u, x); }
56  void SendAkillDel(const XLine *x) anope_override { ratbox->SendAkillDel(x); }
57  void SendSQLineDel(const XLine *x) anope_override { ratbox->SendSQLineDel(x); }
58  void SendJoin(User *user, Channel *c, const ChannelStatus *status) anope_override { ratbox->SendJoin(user, c, status); }
59  void SendServer(const Server *server) anope_override { ratbox->SendServer(server); }
60  void SendChannel(Channel *c) anope_override { ratbox->SendChannel(c); }
61  void SendTopic(const MessageSource &source, Channel *c) anope_override { ratbox->SendTopic(source, c); }
62  bool IsIdentValid(const Anope::string &ident) anope_override { return ratbox->IsIdentValid(ident); }
63  void SendLogin(User *u, NickAlias *na) anope_override { ratbox->SendLogin(u, na); }
64  void SendLogout(User *u) anope_override { ratbox->SendLogout(u); }
65 
66  void SendSQLine(User *, const XLine *x) anope_override
67  {
68  UplinkSocket::Message(Me) << "RESV * " << x->mask << " :" << x->GetReason();
69  }
70 
72  {
73  UplinkSocket::Message() << "PASS " << Config->Uplinks[Anope::CurrentUplink].password << " TS 6 :" << Me->GetSID();
74  /*
75  * Received: CAPAB :BAN CHW CLUSTER ENCAP EOPMOD EUID EX IE KLN
76  * KNOCK MLOCK QS RSFNC SAVE SERVICES TB UNKLN
77  *
78  * BAN - Can do BAN message
79  * CHW - Can do channel wall @#
80  * CLUSTER - Supports umode +l, can send LOCOPS (encap only)
81  * ENCAP - Can do ENCAP message
82  * EOPMOD - Can do channel wall =# (for cmode +z)
83  * EUID - Can do EUID (its similar to UID but includes the ENCAP REALHOST and ENCAP LOGIN information)
84  * EX - Can do channel +e exemptions
85  * GLN - Can set G:Lines
86  * IE - Can do invite exceptions
87  * KLN - Can set K:Lines (encap only)
88  * KNOCK - Supports KNOCK
89  * MLOCK - Supports MLOCK
90  * RSFNC - Forces a nickname change and propagates it (encap only)
91  * SERVICES - Support channel mode +r (only registered users may join)
92  * SAVE - Resolve a nick collision by changing a nickname to the UID.
93  * TB - Supports topic burst
94  * UNKLN - Can do UNKLINE (encap only)
95  * QS - Can handle quit storm removal
96  */
97  UplinkSocket::Message() << "CAPAB :BAN CHW CLUSTER ENCAP EOPMOD EUID EX IE KLN KNOCK MLOCK QS RSFNC SERVICES TB UNKLN";
98 
99  /* Make myself known to myself in the serverlist */
100  SendServer(Me);
101 
102  /*
103  * Received: SVINFO 6 6 0 :1353235537
104  * arg[0] = current TS version
105  * arg[1] = minimum required TS version
106  * arg[2] = '0'
107  * arg[3] = server's idea of UTC time
108  */
109  UplinkSocket::Message() << "SVINFO 6 6 0 :" << Anope::CurTime;
110  }
111 
113  {
114  Anope::string modes = "+" + u->GetModes();
115  UplinkSocket::Message(Me) << "EUID " << u->nick << " 1 " << u->timestamp << " " << modes << " " << u->GetIdent() << " " << u->host << " 0 " << u->GetUID() << " * * :" << u->realname;
116  }
117 
118  void SendForceNickChange(User *u, const Anope::string &newnick, time_t when) anope_override
119  {
120  UplinkSocket::Message(Me) << "ENCAP " << u->server->GetName() << " RSFNC " << u->GetUID()
121  << " " << newnick << " " << when << " " << u->timestamp;
122  }
123 
124  void SendSVSHold(const Anope::string &nick, time_t delay) anope_override
125  {
126  UplinkSocket::Message(Me) << "ENCAP * NICKDELAY " << delay << " " << nick;
127  }
128 
130  {
131  UplinkSocket::Message(Me) << "ENCAP * NICKDELAY 0 " << nick;
132  }
133 
134  void SendVhost(User *u, const Anope::string &ident, const Anope::string &host) anope_override
135  {
136  UplinkSocket::Message(Me) << "ENCAP * CHGHOST " << u->GetUID() << " :" << host;
137  }
138 
140  {
141  this->SendVhost(u, "", u->host);
142  }
143 
145  {
146  Server *s = Server::Find(message.target.substr(0, 3));
147  UplinkSocket::Message(Me) << "ENCAP " << (s ? s->GetName() : message.target.substr(0, 3)) << " SASL " << message.source << " " << message.target << " " << message.type << " " << message.data << (message.ext.empty() ? "" : (" " + message.ext));
148  }
149 
151  {
152  Server *s = Server::Find(uid.substr(0, 3));
153  UplinkSocket::Message(Me) << "ENCAP " << (s ? s->GetName() : uid.substr(0, 3)) << " SVSLOGIN " << uid << " * * * " << acc;
154  }
155 };
156 
157 
159 {
160  IRCDMessageEncap(Module *creator) : IRCDMessage(creator, "ENCAP", 3) { SetFlag(IRCDMESSAGE_SOFT_LIMIT);}
161 
162  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
163  {
164  User *u = source.GetUser();
165 
166  // In a burst, states that the source user is logged in as the account.
167  if (params[1] == "LOGIN" || params[1] == "SU")
168  {
169  NickCore *nc = NickCore::Find(params[2]);
170  if (!nc)
171  return;
172  u->Login(nc);
173  }
174  // Received: :42XAAAAAE ENCAP * CERTFP :3f122a9cc7811dbad3566bf2cec3009007c0868f
175  if (params[1] == "CERTFP")
176  {
177  u->fingerprint = params[2];
178  FOREACH_MOD(OnFingerprint, (u));
179  }
180  /*
181  * Received: :42X ENCAP * SASL 42XAAAAAH * S PLAIN
182  * Received: :42X ENCAP * SASL 42XAAAAAC * D A
183  *
184  * Part of a SASL authentication exchange. The mode is 'C' to send some data
185  * (base64 encoded), or 'S' to end the exchange (data indicates type of
186  * termination: 'A' for abort, 'F' for authentication failure, 'S' for
187  * authentication success).
188  *
189  * Charybdis only accepts messages from SASL agents; these must have umode +S
190  */
191  if (params[1] == "SASL" && SASL::sasl && params.size() >= 6)
192  {
193  SASL::Message m;
194  m.source = params[2];
195  m.target = params[3];
196  m.type = params[4];
197  m.data = params[5];
198  m.ext = params.size() > 6 ? params[6] : "";
199 
200  SASL::sasl->ProcessMessage(m);
201  }
202  }
203 };
204 
206 {
207  IRCDMessageEUID(Module *creator) : IRCDMessage(creator, "EUID", 11) { SetFlag(IRCDMESSAGE_REQUIRE_SERVER); }
208 
209  /*
210  * :42X EUID DukePyrolator 1 1353240577 +Zi ~jens erft-5d80b00b.pool.mediaWays.net 93.128.176.11 42XAAAAAD * * :jens
211  * :<SID> EUID <NICK> <HOPS> <TS> +<UMODE> <USERNAME> <VHOST> <IP> <UID> <REALHOST> <ACCOUNT> :<GECOS>
212  * 0 1 2 3 4 5 6 7 8 9 10
213  *
214  * Introduces a user. The hostname field is now always the visible host.
215  * The realhost field is * if the real host is equal to the visible host.
216  * The account field is * if the login is not set.
217  * Note that even if both new fields are *, an EUID command still carries more
218  * information than a UID command (namely that real host is visible host and the
219  * user is not logged in with services). Hence a NICK or UID command received
220  * from a remote server should not be sent in EUID form to other servers.
221  */
222  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
223  {
224  NickAlias *na = NULL;
225  if (params[9] != "*")
226  na = NickAlias::Find(params[9]);
227 
228  User::OnIntroduce(params[0], params[4], params[8], params[5], params[6], source.GetServer(), params[10], params[2].is_pos_number_only() ? convertTo<time_t>(params[2]) : Anope::CurTime, params[3], params[7], na ? *na->nc : NULL);
229  }
230 };
231 
232 // we cant use this function from ratbox because we set a local variable here
234 {
236 
237  // SERVER dev.anope.de 1 :charybdis test server
238  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
239  {
240  // Servers other then our immediate uplink are introduced via SID
241  if (params[1] != "1")
242  return;
243  new Server(source.GetServer() == NULL ? Me : source.GetServer(), params[0], 1, params[2], UplinkSID);
244  IRCD->SendPing(Me->GetName(), params[0]);
245  }
246 };
247 
248 // we cant use this function from ratbox because we set a local variable here
250 {
252 
253  void Run(MessageSource &source, const std::vector<Anope::string> &params) anope_override
254  {
255  // UplinkSID is used in IRCDMessageServer
256  UplinkSID = params[3];
257  }
258 };
259 
260 class ProtoCharybdis : public Module
261 {
263 
265 
266  /* Core message handlers */
286 
287  /* Ratbox Message Handlers */
290 
291  /* Our message handlers */
296 
298 
299  void AddModes()
300  {
301  /* Add user modes */
302  ModeManager::AddUserMode(new UserMode("NOFORWARD", 'Q'));
303  ModeManager::AddUserMode(new UserMode("REGPRIV", 'R'));
304  ModeManager::AddUserMode(new UserModeOperOnly("OPERWALLS", 'z'));
305  ModeManager::AddUserMode(new UserModeNoone("SSL", 'Z'));
306 
307  /* b/e/I */
308  ModeManager::AddChannelMode(new ChannelModeList("QUIET", 'q'));
309 
310  /* Add channel modes */
311  ModeManager::AddChannelMode(new ChannelMode("BLOCKCOLOR", 'c'));
312  ModeManager::AddChannelMode(new ChannelMode("NOCTCP", 'C'));
313  ModeManager::AddChannelMode(new ChannelModeParam("REDIRECT", 'f'));
314  ModeManager::AddChannelMode(new ChannelMode("ALLOWFORWARD", 'F'));
315  ModeManager::AddChannelMode(new ChannelMode("ALLINVITE", 'g'));
316  ModeManager::AddChannelMode(new ChannelModeParam("JOINFLOOD", 'j'));
318  ModeManager::AddChannelMode(new ChannelMode("PERM", 'P'));
319  ModeManager::AddChannelMode(new ChannelMode("NOFORWARD", 'Q'));
320  ModeManager::AddChannelMode(new ChannelMode("OPMODERATED", 'z'));
321  }
322 
323  public:
324  ProtoCharybdis(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PROTOCOL | VENDOR),
325  ircd_proto(this),
326  message_away(this), message_capab(this), message_error(this), message_invite(this), message_kick(this),
327  message_kill(this), message_mode(this), message_motd(this), message_notice(this), message_part(this),
328  message_ping(this), message_privmsg(this), message_quit(this), message_squit(this), message_stats(this),
329  message_time(this), message_topic(this), message_version(this), message_whois(this),
330 
331  message_bmask("IRCDMessage", "charybdis/bmask", "ratbox/bmask"),
332  message_join("IRCDMessage", "charybdis/join", "ratbox/join"),
333  message_nick("IRCDMessage", "charybdis/nick", "ratbox/nick"),
334  message_pong("IRCDMessage", "charybdis/pong", "ratbox/pong"),
335  message_sid("IRCDMessage", "charybdis/sid", "ratbox/sid"),
336  message_sjoin("IRCDMessage", "charybdis/sjoin", "ratbox/sjoin"),
337  message_tb("IRCDMessage", "charybdis/tb", "ratbox/tb"),
338  message_tmode("IRCDMessage", "charybdis/tmode", "ratbox/tmode"),
339  message_uid("IRCDMessage", "charybdis/uid", "ratbox/uid"),
340 
341  message_encap(this), message_euid(this), message_pass(this), message_server(this)
342 
343  {
344 
345 
346  if (ModuleManager::LoadModule("ratbox", User::Find(creator)) != MOD_ERR_OK)
347  throw ModuleException("Unable to load ratbox");
348  m_ratbox = ModuleManager::FindModule("ratbox");
349  if (!m_ratbox)
350  throw ModuleException("Unable to find ratbox");
351  if (!ratbox)
352  throw ModuleException("No protocol interface for ratbox");
353 
354  this->AddModes();
355  }
356 
358  {
359  m_ratbox = ModuleManager::FindModule("ratbox");
360  ModuleManager::UnloadModule(m_ratbox, NULL);
361  }
362 
364  {
365  use_server_side_mlock = conf->GetModule(this)->Get<bool>("use_server_side_mlock");
366  }
367 
369  {
370  if (!c->ci)
371  return;
372 
373  ModeLocks *modelocks = c->ci->GetExt<ModeLocks>("modelocks");
374  if (use_server_side_mlock && modelocks && Servers::Capab.count("MLOCK") > 0)
375  {
376  Anope::string modes = modelocks->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", "");
377  UplinkSocket::Message(Me) << "MLOCK " << static_cast<long>(c->creation_time) << " " << c->ci->name << " " << modes;
378  }
379  }
380 
382  {
383  ModeLocks *modelocks = ci->GetExt<ModeLocks>("modelocks");
385  if (use_server_side_mlock && cm && ci->c && modelocks && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0)
386  {
387  Anope::string modes = modelocks->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", "") + cm->mchar;
388  UplinkSocket::Message(Me) << "MLOCK " << static_cast<long>(ci->c->creation_time) << " " << ci->name << " " << modes;
389  }
390 
391  return EVENT_CONTINUE;
392  }
393 
395  {
396  ModeLocks *modelocks = ci->GetExt<ModeLocks>("modelocks");
398  if (use_server_side_mlock && cm && modelocks && ci->c && (cm->type == MODE_REGULAR || cm->type == MODE_PARAM) && Servers::Capab.count("MLOCK") > 0)
399  {
400  Anope::string modes = modelocks->GetMLockAsString(false).replace_all_cs("+", "").replace_all_cs("-", "").replace_all_cs(cm->mchar, "");
401  UplinkSocket::Message(Me) << "MLOCK " << static_cast<long>(ci->c->creation_time) << " " << ci->name << " " << modes;
402  }
403 
404  return EVENT_CONTINUE;
405  }
406 };
407 
Serialize::Reference< NickCore > nc
Definition: account.h:47
Definition: bots.h:24
void SendSVSKillInternal(const MessageSource &source, User *targ, const Anope::string &reason) anope_override
Definition: charybdis.cpp:49
Message::Kill message_kill
Definition: charybdis.cpp:272
void SendClientIntroduction(User *u) anope_override
Definition: charybdis.cpp:112
bool CanSZLine
Definition: protocol.h:61
Anope::string target
Definition: sasl.h:14
static NickAlias * Find(const Anope::string &nick)
Definition: nickalias.cpp:121
IRCDMessageEUID message_euid
Definition: charybdis.cpp:293
Definition: servers.h:42
IRCDMessageServer(Module *creator)
Definition: charybdis.cpp:235
ChannelModeLargeBan(const Anope::string &mname, char modeChar)
Definition: charybdis.cpp:23
CharybdisProto ircd_proto
Definition: charybdis.cpp:264
bool CanSNLine
Definition: protocol.h:55
Message::Ping message_ping
Definition: charybdis.cpp:277
static Module * FindModule(const Anope::string &name)
void SendConnect() anope_override
Definition: charybdis.cpp:71
Message::Mode message_mode
Definition: charybdis.cpp:273
static ChannelMode * FindChannelModeByName(const Anope::string &name)
Definition: modes.cpp:542
Anope::string source
Definition: sasl.h:13
Message::Topic message_topic
Definition: charybdis.cpp:283
ServiceAlias message_tb
Definition: charybdis.cpp:288
Definition: hashcomp.h:84
ProtoCharybdis(const Anope::string &modname, const Anope::string &creator)
Definition: charybdis.cpp:324
void SendSQLine(User *, const XLine *x) anope_override
Definition: charybdis.cpp:66
Message::Part message_part
Definition: charybdis.cpp:276
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: charybdis.cpp:238
Anope::string fingerprint
Definition: users.h:73
CoreExport std::set< Anope::string > Capab
Definition: servers.cpp:29
static ModuleReturn UnloadModule(Module *m, User *u)
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: charybdis.cpp:162
const Anope::string & GetSID() const
Definition: servers.cpp:203
Message::Whois message_whois
Definition: charybdis.cpp:285
Anope::string data
Definition: sasl.h:16
ServiceAlias message_sid
Definition: charybdis.cpp:288
ServiceAlias message_nick
Definition: charybdis.cpp:288
void SendSGLine(User *u, const XLine *x) anope_override
Definition: charybdis.cpp:53
static User * OnIntroduce(const Anope::string &snick, const Anope::string &sident, const Anope::string &shost, const Anope::string &svhost, const Anope::string &sip, Server *sserver, const Anope::string &srealname, time_t ts, const Anope::string &smodes, const Anope::string &suid, NickCore *nc)
Definition: users.cpp:116
Definition: users.h:34
Anope::string DefaultPseudoclientModes
Definition: protocol.h:47
ServiceAlias message_join
Definition: charybdis.cpp:288
void SendSQLineDel(const XLine *x) anope_override
Definition: charybdis.cpp:57
void SendForceNickChange(User *u, const Anope::string &newnick, time_t when) anope_override
Definition: charybdis.cpp:118
void SendJoin(User *user, Channel *c, const ChannelStatus *status) anope_override
Definition: charybdis.cpp:58
void SendChannel(Channel *c) anope_override
Definition: charybdis.cpp:60
bool CanSetVHost
Definition: protocol.h:53
Message::Stats message_stats
Definition: charybdis.cpp:281
ServiceAlias message_sjoin
Definition: charybdis.cpp:288
bool RequiresID
Definition: protocol.h:69
static ServiceReference< IRCDProto > ratbox("IRCDProto","ratbox")
void SendLogin(User *u, NickAlias *na) anope_override
Definition: charybdis.cpp:63
CoreExport time_t CurTime
Definition: main.cpp:41
Message::Version message_version
Definition: charybdis.cpp:284
#define FOREACH_MOD(ename, args)
Definition: modules.h:62
IRCDMessagePass(Module *creator)
Definition: charybdis.cpp:251
string substr(size_type pos=0, size_type n=npos) const
Definition: anope.h:277
void SendGlobalNotice(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override
Definition: charybdis.cpp:50
void SendSASLMessage(const SASL::Message &message) anope_override
Definition: charybdis.cpp:144
virtual Anope::string GetMLockAsString(bool complete) const =0
ServiceAlias message_pong
Definition: charybdis.cpp:288
bool CanSQLine
Definition: protocol.h:57
Message::SQuit message_squit
Definition: charybdis.cpp:280
Definition: Config.cs:26
bool CanSVSNick
Definition: protocol.h:49
bool CanCertFP
Definition: protocol.h:67
Module * m_ratbox
Definition: charybdis.cpp:262
void SendSGLineDel(const XLine *x) anope_override
Definition: charybdis.cpp:54
Message::Time message_time
Definition: charybdis.cpp:282
unsigned MaxModes
Definition: protocol.h:73
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: charybdis.cpp:253
static bool AddUserMode(UserMode *um)
Definition: modes.cpp:391
void SetFlag(IRCDMessageFlag f)
Definition: protocol.h:282
static ServiceReference< SASL::Service > sasl("SASL::Service","sasl")
string replace_all_cs(const string &_orig, const string &_repl) const
Definition: anope.h:229
virtual void SendPing(const Anope::string &servname, const Anope::string &who)
Definition: protocol.cpp:262
void SendAkillDel(const XLine *x) anope_override
Definition: charybdis.cpp:56
static Anope::string UplinkSID
Definition: charybdis.cpp:16
Message::Error message_error
Definition: charybdis.cpp:269
void SendTopic(const MessageSource &source, Channel *c) anope_override
Definition: charybdis.cpp:61
Definition: modes.h:68
void SendLogout(User *u) anope_override
Definition: charybdis.cpp:64
Message::Privmsg message_privmsg
Definition: charybdis.cpp:278
static Anope::map< std::pair< bool, Anope::string > > modes
Definition: cs_mode.cpp:745
#define anope_override
Definition: services.h:56
EventReturn OnUnMLock(ChannelInfo *ci, ModeLock *lock) anope_override
Definition: charybdis.cpp:394
EventReturn OnMLock(ChannelInfo *ci, ModeLock *lock) anope_override
Definition: charybdis.cpp:381
bool IsIdentValid(const Anope::string &ident) anope_override
Definition: charybdis.cpp:62
static Server * Find(const Anope::string &name, bool name_only=false)
Definition: servers.cpp:337
void SendSVSHold(const Anope::string &nick, time_t delay) anope_override
Definition: charybdis.cpp:124
Anope::string ext
Definition: sasl.h:17
Message::MOTD message_motd
Definition: charybdis.cpp:274
CoreExport IRCDProto * IRCD
Definition: protocol.cpp:23
Message::Away message_away
Definition: charybdis.cpp:267
Message::Capab message_capab
Definition: charybdis.cpp:268
EventReturn
Definition: modules.h:129
#define MODULE_INIT(x)
Definition: modules.h:45
IRCDMessagePass message_pass
Definition: charybdis.cpp:294
Anope::string type
Definition: sasl.h:15
void OnChannelSync(Channel *c) anope_override
Definition: charybdis.cpp:368
bool CanSVSHold
Definition: protocol.h:63
void Login(NickCore *core)
Definition: users.cpp:391
ServiceAlias message_uid
Definition: charybdis.cpp:288
CoreExport int CurrentUplink
Definition: main.cpp:43
void SendGlobalPrivmsg(BotInfo *bi, const Server *dest, const Anope::string &msg) anope_override
Definition: charybdis.cpp:51
IRCDMessageEUID(Module *creator)
Definition: charybdis.cpp:207
CharybdisProto(Module *creator)
Definition: charybdis.cpp:35
Message::Quit message_quit
Definition: charybdis.cpp:279
void SendSVSLogin(const Anope::string &uid, const Anope::string &acc) anope_override
Definition: charybdis.cpp:150
static User * Find(const Anope::string &name, bool nick_only=false)
Definition: users.cpp:815
const Anope::string & GetName() const
Definition: servers.cpp:175
static bool AddChannelMode(ChannelMode *cm)
Definition: modes.cpp:418
static ModuleReturn LoadModule(const Anope::string &modname, User *u)
ServiceAlias message_tmode
Definition: charybdis.cpp:288
Definition: xline.h:18
bool CanSet(User *u) const anope_override
Definition: charybdis.cpp:25
CoreExport Server * Me
Definition: servers.cpp:24
void SendSVSHoldDel(const Anope::string &nick) anope_override
Definition: charybdis.cpp:129
Message::Invite message_invite
Definition: charybdis.cpp:270
Message::Kick message_kick
Definition: charybdis.cpp:271
void SendServer(const Server *server) anope_override
Definition: charybdis.cpp:59
void SendVhost(User *u, const Anope::string &ident, const Anope::string &host) anope_override
Definition: charybdis.cpp:134
void OnReload(Configuration::Conf *conf) anope_override
Definition: charybdis.cpp:363
bool use_server_side_mlock
Definition: charybdis.cpp:297
Message::Notice message_notice
Definition: charybdis.cpp:275
IRCDMessageEncap(Module *creator)
Definition: charybdis.cpp:160
void SendGlobopsInternal(const MessageSource &source, const Anope::string &buf) anope_override
Definition: charybdis.cpp:52
static NickCore * Find(const Anope::string &nick)
Definition: nickcore.cpp:258
void SendAkill(User *u, XLine *x) anope_override
Definition: charybdis.cpp:55
void SendVhostDel(User *u) anope_override
Definition: charybdis.cpp:139
void Run(MessageSource &source, const std::vector< Anope::string > &params) anope_override
Definition: charybdis.cpp:222
ServiceAlias message_bmask
Definition: charybdis.cpp:288
IRCDMessageServer message_server
Definition: charybdis.cpp:295
IRCDMessageEncap message_encap
Definition: charybdis.cpp:292