summaryrefslogtreecommitdiff
path: root/include/services.h
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-02-14 15:13:27 -0500
committerAdam <Adam@anope.org>2012-02-14 15:13:27 -0500
commita9772cde21407c89abd161d51aff45267f87b1fb (patch)
tree9e57ba6c121d3843888917d968dd4f5d030b57cf /include/services.h
parent086790d6331357022f4da17c76b26b9fc6e2ad90 (diff)
Clean up and reorganize our header files
Diffstat (limited to 'include/services.h')
-rw-r--r--include/services.h913
1 files changed, 13 insertions, 900 deletions
diff --git a/include/services.h b/include/services.h
index 37b8df1ad..abe262cad 100644
--- a/include/services.h
+++ b/include/services.h
@@ -14,103 +14,24 @@
#ifndef SERVICES_H
#define SERVICES_H
-/*************************************************************************/
-
#include "sysconf.h"
#define BUFSIZE 1024
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstdarg>
#include <stdexcept>
-#include <string.h>
+#include <string.h>
#if HAVE_STRINGS_H
# include <strings.h>
#endif
-#include <signal.h>
-#include <time.h>
-#include <errno.h>
-#include <limits.h>
-
-#include <sys/stat.h> /* for umask() on some systems */
-#include <sys/types.h>
-#include <fcntl.h>
-#include <typeinfo>
-#include <ctype.h>
-
-#if GETTEXT_FOUND
-# include <libintl.h>
-#endif
-#define _(x) x
-
-#ifndef _WIN32
-# include <unistd.h>
-# include <grp.h>
-# include <netdb.h>
-# include <netinet/in.h>
-# include <arpa/inet.h>
-# include <sys/socket.h>
-# include <sys/time.h>
-# include <sys/wait.h>
-# include <dirent.h>
-# include <pthread.h>
-# define DllExport
-# define CoreExport
-# define MARK_DEPRECATED __attribute((deprecated))
-#else
-# include "anope_windows.h"
-#endif
-
-/* Telling compilers about printf()-like functions: */
-#ifdef __GNUC__
-# define FORMAT(type, fmt, start) __attribute__((format(type, fmt, start)))
-#else
-# define FORMAT(type, fmt, start)
-#endif
-
-/** This definition is used as shorthand for the various classes
- * and functions needed to make a module loadable by the OS.
- * It defines the class factory and external AnopeInit and AnopeFini functions.
- */
-#ifdef _WIN32
-# define MODULE_INIT(x) \
- extern "C" DllExport Module *AnopeInit(const Anope::string &, const Anope::string &); \
- extern "C" Module *AnopeInit(const Anope::string &modname, const Anope::string &creator) \
- { \
- return new x(modname, creator); \
- } \
- BOOLEAN WINAPI DllMain(HINSTANCE, DWORD nReason, LPVOID) \
- { \
- return TRUE; \
- } \
- extern "C" DllExport void AnopeFini(x *); \
- extern "C" void AnopeFini(x *m) \
- { \
- delete m; \
- }
-#else
-# define MODULE_INIT(x) \
- extern "C" DllExport Module *AnopeInit(const Anope::string &modname, const Anope::string &creator) \
- { \
- return new x(modname, creator); \
- } \
- extern "C" DllExport void AnopeFini(x *m) \
- { \
- delete m; \
- }
-#endif
-
-/* Miscellaneous definitions. */
-#include "hashcomp.h"
-
/* Pull in the various bits of STL */
#include <iostream>
#include <fstream>
#include <sstream>
-#include <string>
#include <map>
#include <exception>
#include <list>
@@ -118,616 +39,19 @@
#include <deque>
#include <bitset>
#include <set>
+#include <algorithm>
-#include "anope.h"
-
-/** This class can be used on its own to represent an exception, or derived to represent a module-specific exception.
- * When a module whishes to abort, e.g. within a constructor, it should throw an exception using ModuleException or
- * a class derived from ModuleException. If a module throws an exception during its constructor, the module will not
- * be loaded. If this happens, the error message returned by ModuleException::GetReason will be displayed to the user
- * attempting to load the module, or dumped to the console if the ircd is currently loading for the first time.
- */
-class CoreException : public std::exception
-{
- protected:
- /** Holds the error message to be displayed
- */
- Anope::string err;
- /** Source of the exception
- */
- Anope::string source;
- public:
- /** Default constructor, just uses the error mesage 'Core threw an exception'.
- */
- CoreException() : err("Core threw an exception"), source("The core") { }
- /** This constructor can be used to specify an error message before throwing.
- */
- CoreException(const Anope::string &message) : err(message), source("The core") { }
- /** This constructor can be used to specify an error message before throwing,
- * and to specify the source of the exception.
- */
- CoreException(const Anope::string &message, const Anope::string &src) : err(message), source(src) { }
- /** This destructor solves world hunger, cancels the world debt, and causes the world to end.
- * Actually no, it does nothing. Never mind.
- * @throws Nothing!
- */
- virtual ~CoreException() throw() { }
- /** Returns the reason for the exception.
- * The module should probably put something informative here as the user will see this upon failure.
- */
- virtual const Anope::string &GetReason() const
- {
- return err;
- }
-
- virtual const Anope::string &GetSource() const
- {
- return source;
- }
-};
-
-class FatalException : public CoreException
-{
- public:
- FatalException(const Anope::string &reason = "") : CoreException(reason) { }
+#include "defs.h"
- virtual ~FatalException() throw() { }
-};
-
-class ModuleException : public CoreException
-{
- public:
- /** Default constructor, just uses the error mesage 'Module threw an exception'.
- */
- ModuleException() : CoreException("Module threw an exception", "A Module") { }
-
- /** This constructor can be used to specify an error message before throwing.
- */
- ModuleException(const Anope::string &message) : CoreException(message, "A Module") { }
- /** This destructor solves world hunger, cancels the world debt, and causes the world to end.
- * Actually no, it does nothing. Never mind.
- * @throws Nothing!
- */
- virtual ~ModuleException() throw() { }
-};
+#define _(x) x
-/** Debug cast to be used instead of dynamic_cast, this uses dynamic_cast
- * for debug builds and static_cast on releass builds to speed up the program
- * because dynamic_cast relies on RTTI.
- */
-template<typename T, typename O> inline T debug_cast(O ptr)
-{
-#ifdef DEBUG_BUILD
- T ret = dynamic_cast<T>(ptr);
- if (ptr != NULL && ret == NULL)
- throw CoreException(Anope::string("debug_cast<") + typeid(T).name() + ">(" + typeid(O).name() + ") fail");
- return ret;
+#ifndef _WIN32
+# define DllExport
+# define CoreExport
+# define MARK_DEPRECATED __attribute((deprecated))
#else
- return static_cast<T>(ptr);
+# include "anope_windows.h"
#endif
-}
-
-/*************************************************************************/
-
-/** Class with the ability to keep flags on items, they should extend from this
- * where T is an enum.
- */
-template<typename T, size_t Size = 32> class Flags
-{
- protected:
- std::bitset<Size> Flag_Values;
- const Anope::string *Flag_Strings;
-
- public:
- Flags() : Flag_Strings(NULL) { }
- Flags(const Anope::string *flag_strings) : Flag_Strings(flag_strings) { }
-
- /** Add a flag to this item
- * @param Value The flag
- */
- void SetFlag(T Value)
- {
- Flag_Values[Value] = true;
- }
-
- /** Remove a flag from this item
- * @param Value The flag
- */
- void UnsetFlag(T Value)
- {
- Flag_Values[Value] = false;
- }
-
- /** Check if this item has a flag
- * @param Value The flag
- * @return true or false
- */
- bool HasFlag(T Value) const
- {
- return Flag_Values.test(Value);
- }
-
- /** Check how many flags are set
- * @return The number of flags set
- */
- size_t FlagCount() const
- {
- return Flag_Values.count();
- }
-
- /** Unset all of the flags
- */
- void ClearFlags()
- {
- Flag_Values.reset();
- }
-
- Anope::string ToString()
- {
- std::vector<Anope::string> v = ToVector();
- Anope::string flag_buf;
- for (unsigned i = 0; i < v.size(); ++i)
- flag_buf += v[i] + " ";
- flag_buf.trim();
- return flag_buf;
- }
-
- void FromString(const Anope::string &str)
- {
- spacesepstream sep(str);
- Anope::string buf;
- std::vector<Anope::string> v;
-
- while (sep.GetToken(buf))
- v.push_back(buf);
-
- FromVector(v);
- }
-
- std::vector<Anope::string> ToVector()
- {
- std::vector<Anope::string> ret;
- for (unsigned i = 0; this->Flag_Strings && !this->Flag_Strings[i].empty(); ++i)
- if (this->HasFlag(static_cast<T>(i)))
- ret.push_back(this->Flag_Strings[i]);
- return ret;
- }
-
- void FromVector(const std::vector<Anope::string> &strings)
- {
- this->ClearFlags();
-
- for (unsigned i = 0; this->Flag_Strings && !this->Flag_Strings[i].empty(); ++i)
- for (unsigned j = 0; j < strings.size(); ++j)
- if (this->Flag_Strings[i] == strings[j])
- this->SetFlag(static_cast<T>(i));
- }
-};
-
-class Module;
-
-class CoreExport Service : public Base
-{
- static Anope::map<Anope::map<Service *> > services;
- public:
- static Service *FindService(const Anope::string &t, const Anope::string &n)
- {
- Anope::map<Anope::map<Service *> >::iterator it = services.find(t);
- if (it != services.end())
- {
- Anope::map<Service *>::iterator it2 = it->second.find(n);
- if (it2 != it->second.end())
- return it2->second;
- }
-
- return NULL;
- }
-
- static std::vector<Anope::string> GetServiceKeys(const Anope::string &t)
- {
- std::vector<Anope::string> keys;
- Anope::map<Anope::map<Service *> >::iterator it = services.find(t);
- if (it != services.end())
- for (Anope::map<Service *>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2)
- keys.push_back(it2->first);
- return keys;
- }
-
- Module *owner;
- Anope::string type;
- Anope::string name;
-
- Service(Module *o, const Anope::string &t, const Anope::string &n) : owner(o), type(t), name(n)
- {
- this->Register();
- }
-
- virtual ~Service()
- {
- this->Unregister();
- }
-
- void Register()
- {
- Anope::map<Service *> &smap = services[this->type];
- if (smap.find(this->name) != smap.end())
- throw ModuleException("Service " + this->type + " with name " + this->name + " already exists");
- smap[this->name] = this;
- }
-
- void Unregister()
- {
- Anope::map<Service *> &smap = services[this->type];
- smap.erase(this->name);
- if (smap.empty())
- services.erase(this->type);
- }
-};
-
-#include "sockets.h"
-#include "socketengine.h"
-#include "extensible.h"
-#include "timers.h"
-#include "dns.h"
-
-/*************************************************************************/
-
-class Signal : public Pipe
-{
- static std::vector<Signal *> SignalHandlers;
- static void SignalHandler(int signal);
-
- struct sigaction action, old;
- public:
- int signal;
-
- Signal(int s);
- ~Signal();
-
- virtual void OnNotify() = 0;
-};
-
-class ConvertException : public CoreException
-{
- public:
- ConvertException(const Anope::string &reason = "") : CoreException(reason) { }
-
- virtual ~ConvertException() throw() { }
-};
-
-template<typename T> inline Anope::string stringify(const T &x)
-{
- std::ostringstream stream;
-
- if (!(stream << x))
- throw ConvertException("Stringify fail");
-
- return stream.str();
-}
-
-template<typename T> inline void convert(const Anope::string &s, T &x, Anope::string &leftover, bool failIfLeftoverChars = true)
-{
- leftover.clear();
- std::istringstream i(s.str());
- char c;
- bool res = i >> x;
- if (!res)
- throw ConvertException("Convert fail");
- if (failIfLeftoverChars)
- {
- if (i.get(c))
- throw ConvertException("Convert fail");
- }
- else
- {
- std::string left;
- getline(i, left);
- leftover = left;
- }
-}
-
-template<typename T> inline void convert(const Anope::string &s, T &x, bool failIfLeftoverChars = true)
-{
- Anope::string Unused;
- convert(s, x, Unused, failIfLeftoverChars);
-}
-
-template<typename T> inline T convertTo(const Anope::string &s, Anope::string &leftover, bool failIfLeftoverChars = true)
-{
- T x;
- convert(s, x, leftover, failIfLeftoverChars);
- return x;
-}
-
-template<typename T> inline T convertTo(const Anope::string &s, bool failIfLeftoverChars = true)
-{
- T x;
- convert(s, x, failIfLeftoverChars);
- return x;
-}
-
-/*************************************************************************/
-
-class User;
-class NickCore;
-class NickAlias;
-class BotInfo;
-class ChannelInfo;
-class Channel;
-class Server;
-class Entry;
-
-#include "threadengine.h"
-#include "opertype.h"
-#include "modes.h"
-#include "serialize.h"
-
-/*************************************************************************/
-
-/* Protocol tweaks */
-
-struct IRCDVar
-{
- const char *name; /* Name of the IRCd command */
- const char *pseudoclient_mode; /* Mode used by BotServ Bots */
- int svsnick; /* Supports SVSNICK */
- int vhost; /* Supports vhost */
- int snline; /* Supports SNline */
- int sqline; /* Supports SQline */
- int szline; /* Supports SZline */
- int join2msg; /* Join 2 Message */
- int chansqline; /* Supports Channel Sqlines */
- int quitonkill; /* IRCD sends QUIT when kill */
- int vident; /* Supports vidents */
- int svshold; /* Supports svshold */
- int tsonmode; /* Timestamp on mode changes */
- int omode; /* On the fly o:lines */
- int umode; /* change user modes */
- int knock_needs_i; /* Check if we needed +i when setting NOKNOCK */
- int svsmode_ucmode; /* Can remove User Channel Modes with SVSMODE */
- int sglineenforce;
- int ts6; /* ircd is TS6 */
- const char *globaltldprefix; /* TLD prefix used for Global */
- unsigned maxmodes; /* Max modes to send per line */
- int certfp; /* IRCd sends a SSL users certificate fingerprint */
-};
-
-/*************************************************************************/
-
-/** Memo Flags
- */
-enum MemoFlag
-{
- /* Memo is unread */
- MF_UNREAD,
- /* Sender requests a receipt */
- MF_RECEIPT
-};
-
-const Anope::string MemoFlagStrings[] = {
- "MF_UNREAD", "MF_RECEIPT", ""
-};
-
-/* Memo info structures. Since both nicknames and channels can have memos,
- * we encapsulate memo data in a MemoList to make it easier to handle. */
-class CoreExport Memo : public Flags<MemoFlag>, public Serializable
-{
- public:
- Memo();
-
- Anope::string serialize_name() const;
- serialized_data serialize();
- static void unserialize(serialized_data &);
-
- Anope::string owner;
- time_t time; /* When it was sent */
- Anope::string sender;
- Anope::string text;
-};
-
-struct CoreExport MemoInfo
-{
- int16_t memomax;
- std::vector<Memo *> memos;
- std::vector<Anope::string> ignores;
-
- unsigned GetIndex(Memo *m) const;
- void Del(unsigned index);
- void Del(Memo *m);
- bool HasIgnore(User *u);
-};
-
-struct Session
-{
- Anope::string host; /* Host of the session */
- unsigned count; /* Number of clients with this host */
- unsigned hits; /* Number of subsequent kills for a host */
-};
-
-struct Exception;
-
-/*************************************************************************/
-
-class CoreExport HostInfo
-{
- private:
- Anope::string Ident;
- Anope::string Host;
- Anope::string Creator;
- time_t Time;
-
- public:
- /** Set a vhost for the user
- * @param ident The ident
- * @param host The host
- * @param creator Who created the vhost
- * @param time When the vhost was craated
- */
- void SetVhost(const Anope::string &ident, const Anope::string &host, const Anope::string &creator, time_t created = Anope::CurTime);
-
- /** Remove a users vhost
- **/
- void RemoveVhost();
-
- /** Check if the user has a vhost
- * @return true or false
- */
- bool HasVhost() const;
-
- /** Retrieve the vhost ident
- * @return the ident
- */
- const Anope::string &GetIdent() const;
-
- /** Retrieve the vhost host
- * @return the host
- */
- const Anope::string &GetHost() const;
-
- /** Retrieve the vhost creator
- * @return the creator
- */
- const Anope::string &GetCreator() const;
-
- /** Retrieve when the vhost was crated
- * @return the time it was created
- */
- time_t GetTime() const;
-};
-
-/* BotServ SET flags */
-enum BotServFlag
-{
- BS_BEGIN,
- /* BotServ won't kick ops */
- BS_DONTKICKOPS,
- /* BotServ won't kick voices */
- BS_DONTKICKVOICES,
- /* BotServ bot accepts fantasy commands */
- BS_FANTASY,
- /* BotServ should show greets */
- BS_GREET,
- /* BotServ bots are not allowed to be in this channel */
- BS_NOBOT,
- /* BotServ kicks for bolds */
- BS_KICK_BOLDS,
- /* BotServ kicks for colors */
- BS_KICK_COLORS,
- /* BOtServ kicks for reverses */
- BS_KICK_REVERSES,
- /* BotServ kicks for underlines */
- BS_KICK_UNDERLINES,
- /* BotServ kicks for badwords */
- BS_KICK_BADWORDS,
- /* BotServ kicks for caps */
- BS_KICK_CAPS,
- /* BotServ kicks for flood */
- BS_KICK_FLOOD,
- /* BotServ kicks for repeating */
- BS_KICK_REPEAT,
- /* BotServ kicks for italics */
- BS_KICK_ITALICS,
- /* BotServ kicks for amsgs */
- BS_KICK_AMSGS,
- BS_END
-};
-
-const Anope::string BotServFlagStrings[] = {
- "BEGIN", "DONTKICKOPS", "DONTKICKVOICES", "FANTASY", "GREET", "NOBOT",
- "KICK_BOLDs", "KICK_COLORS", "KICK_REVERSES", "KICK_UNDERLINES", "KICK_BADWORDS", "KICK_CAPS",
- "KICK_FLOOD", "KICK_REPEAT", "KICK_ITALICS", "KICK_AMSGS", "MSG_PRIVMSG", "MSG_NOTICE",
- "MSG_NOTICEOPS", ""
-};
-
-/* Indices for TTB (Times To Ban) */
-enum
-{
- TTB_BOLDS,
- TTB_COLORS,
- TTB_REVERSES,
- TTB_UNDERLINES,
- TTB_BADWORDS,
- TTB_CAPS,
- TTB_FLOOD,
- TTB_REPEAT,
- TTB_ITALICS,
- TTB_AMSGS,
- TTB_SIZE
-};
-
-#include "access.h"
-#include "regchannel.h"
-
-/*************************************************************************/
-
-/* This structure stocks ban data since it must not be removed when
- * user is kicked.
- */
-
-#include "users.h"
-#include "account.h"
-#include "commands.h"
-#include "bots.h"
-#include "channels.h"
-
-/** Channelban type flags
- */
-enum EntryType
-{
- ENTRYTYPE_NONE,
- ENTRYTYPE_CIDR,
- ENTRYTYPE_NICK_WILD,
- ENTRYTYPE_NICK,
- ENTRYTYPE_USER_WILD,
- ENTRYTYPE_USER,
- ENTRYTYPE_HOST_WILD,
- ENTRYTYPE_HOST
-};
-
-class CoreExport Entry : public Flags<EntryType>
-{
- ChannelModeName modename;
-
- public:
- unsigned char cidr_len;
- Anope::string mask;
- Anope::string nick, user, host;
-
- /** Constructor
- * @param _host A full nick!ident@host/cidr mask
- * @param mode What mode this host is for - can be CMODE_BEGIN for unknown/no mode
- */
- Entry(ChannelModeName mode, const Anope::string &_host);
-
- /** Get the banned mask for this entry
- * @return The mask
- */
- const Anope::string GetMask();
-
- /** Check if this entry matches a user
- * @param u The user
- * @param full True to match against a users real host and IP
- * @return true on match
- */
- bool Matches(User *u, bool full = false) const;
-};
-
-/*************************************************************************/
-
-/* Mail data */
-
-struct MailInfo
-{
- FILE *pipe;
- User *sender;
- NickCore *recipient;
-};
-
-/*************************************************************************/
-
-/* Defcon */
-
-/*************************************************************************/
/**
* RFC: defination of a valid nick
@@ -738,215 +62,4 @@ struct MailInfo
**/
#define isvalidnick(c) (isalnum(c) || ((c) >= '\x5B' && (c) <= '\x60') || ((c) >= '\x7B' && (c) <= '\x7D') || (c) == '-')
-/*************************************************************************/
-
-/*
- * Forward declaration reqired, because the base IRCDProto class uses some crap from in here.
- */
-class IRCDProto;
-class IRCdMessage;
-struct Uplink;
-class ServerConfig;
-class ConfigurationFile;
-class XLine;
-
-#include "extern.h"
-#include "language.h"
-#include "mail.h"
-#include "servers.h"
-#include "logger.h"
-#include "config.h"
-
-class CoreExport IRCDProto
-{
- private:
- virtual void SendSVSKillInternal(const BotInfo *, const User *, const Anope::string &) = 0;
- virtual void SendModeInternal(const BotInfo *, const Channel *, const Anope::string &) = 0;
- virtual void SendModeInternal(const BotInfo *, const User *, const Anope::string &) = 0;
- virtual void SendKickInternal(const BotInfo *, const Channel *, const User *, const Anope::string &) = 0;
- virtual void SendMessageInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &buf);
- virtual void SendNoticeInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &msg);
- virtual void SendPrivmsgInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &buf);
- virtual void SendQuitInternal(const User *u, const Anope::string &buf);
- virtual void SendPartInternal(const BotInfo *bi, const Channel *chan, const Anope::string &buf);
- virtual void SendGlobopsInternal(const BotInfo *source, const Anope::string &buf);
- virtual void SendCTCPInternal(const BotInfo *bi, const Anope::string &dest, const Anope::string &buf);
- virtual void SendNumericInternal(const Anope::string &source, int numeric, const Anope::string &dest, const Anope::string &buf);
- public:
- virtual ~IRCDProto() { }
-
- virtual void SendSVSNOOP(const Server *, bool) { }
- virtual void SendTopic(BotInfo *, Channel *) = 0;
- virtual void SendVhostDel(User *) { }
- virtual void SendAkill(User *, const XLine *) = 0;
- virtual void SendAkillDel(const XLine *) = 0;
- virtual void SendSVSKill(const BotInfo *source, const User *user, const char *fmt, ...);
- virtual void SendMode(const BotInfo *bi, const Channel *dest, const char *fmt, ...);
- virtual void SendMode(const BotInfo *bi, const User *u, const char *fmt, ...);
- virtual void SendClientIntroduction(const User *u) = 0;
- virtual void SendKick(const BotInfo *bi, const Channel *chan, const User *user, const char *fmt, ...);
- virtual void SendMessage(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
- virtual void SendNotice(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
- virtual void SendAction(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
- virtual void SendPrivmsg(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
- virtual void SendGlobalNotice(const BotInfo *bi, const Server *dest, const Anope::string &msg);
- virtual void SendGlobalPrivmsg(const BotInfo *bi, const Server *desc, const Anope::string &msg);
-
- virtual void SendQuit(const User *u, const char *fmt, ...);
- virtual void SendPing(const Anope::string &servname, const Anope::string &who);
- virtual void SendPong(const Anope::string &servname, const Anope::string &who);
- virtual void SendJoin(User *, Channel *, const ChannelStatus *) = 0;
- virtual void SendSQLineDel(const XLine *x) { }
- virtual void SendInvite(const BotInfo *bi, const Anope::string &chan, const Anope::string &nick);
- virtual void SendPart(const BotInfo *bi, const Channel *chan, const char *fmt, ...);
- virtual void SendGlobops(const BotInfo *source, const char *fmt, ...);
- virtual void SendSQLine(User *, const XLine *x) { }
- virtual void SendSquit(Server *, const Anope::string &message);
- virtual void SendSVSO(const Anope::string &, const Anope::string &, const Anope::string &) { }
- virtual void SendChangeBotNick(const BotInfo *bi, const Anope::string &newnick);
- virtual void SendForceNickChange(const User *u, const Anope::string &newnick, time_t when);
- virtual void SendVhost(User *, const Anope::string &, const Anope::string &) { }
- virtual void SendConnect() = 0;
- virtual void SendSVSHold(const Anope::string &) { }
- virtual void SendSVSHoldDel(const Anope::string &) { }
- virtual void SendSGLineDel(const XLine *) { }
- virtual void SendSZLineDel(const XLine *) { }
- virtual void SendSZLine(User *u, const XLine *) { }
- virtual void SendSGLine(User *, const XLine *) { }
- virtual void SendCTCP(const BotInfo *bi, const Anope::string &dest, const char *fmt, ...);
- virtual void SendSVSJoin(const Anope::string &, const Anope::string &, const Anope::string &, const Anope::string &) { }
- virtual void SendSWhois(const Anope::string &, const Anope::string &, const Anope::string &) { }
- virtual void SendBOB() { }
- virtual void SendEOB() { }
- virtual void SendServer(const Server *) = 0;
- virtual bool IsNickValid(const Anope::string &) { return true; }
- virtual bool IsChannelValid(const Anope::string &);
- virtual void SendNumeric(const Anope::string &source, int numeric, const Anope::string &dest, const char *fmt, ...);
- virtual void SendLogin(User *u) = 0;
- virtual void SendLogout(User *u) = 0;
-
- /** Send a channel creation message to the uplink.
- * On most TS6 IRCds this is a SJOIN with no nick
- */
- virtual void SendChannel(Channel *c) { }
-};
-
-class CoreExport IRCdMessage
-{
- public:
- virtual bool On436(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnAway(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnJoin(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnKick(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnKill(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnMode(const Anope::string &, const std::vector<Anope::string> &) = 0;
- virtual bool OnUID(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnNick(const Anope::string &, const std::vector<Anope::string> &) = 0;
- virtual bool OnPart(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnPing(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnPrivmsg(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnQuit(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnServer(const Anope::string &, const std::vector<Anope::string> &) = 0;
- virtual bool OnSQuit(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnTopic(const Anope::string &, const std::vector<Anope::string> &) = 0;
- virtual bool OnWhois(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnCapab(const Anope::string &, const std::vector<Anope::string> &);
- virtual bool OnSJoin(const Anope::string &, const std::vector<Anope::string> &) = 0;
- virtual bool OnError(const Anope::string &, const std::vector<Anope::string> &);
-};
-
-/*************************************************************************/
-
-struct Uplink
-{
- Anope::string host;
- unsigned port;
- Anope::string password;
- bool ipv6;
-
- Uplink(const Anope::string &_host, int _port, const Anope::string &_password, bool _ipv6) : host(_host), port(_port), password(_password), ipv6(_ipv6) { }
- bool operator==(const Uplink &other) const
- {
- if (this->host != other.host)
- return false;
- if (this->port != other.port)
- return false;
- if (this->password != other.password)
- return false;
- if (this->ipv6 != other.ipv6)
- return false;
- return true;
- }
- inline bool operator!=(const Uplink &other) const { return !(*this == other); }
-};
-
-/** A class to process numbered lists (passed to most DEL/LIST/VIEW commands).
- * The function HandleNumber is called for every number in the list. Note that
- * if descending is true it gets called in descending order. This is so deleting
- * the index passed to the function from an array will not cause the other indexes
- * passed to the function to be incorrect. This keeps us from having to have an
- * 'in use' flag on everything.
- */
-class CoreExport NumberList
-{
- private:
- bool is_valid;
-
- std::set<unsigned> numbers;
-
- bool desc;
- public:
- /** Processes a numbered list
- * @param list The list
- * @param descending True to make HandleNumber get called with numbers in descending order
- */
- NumberList(const Anope::string &list, bool descending);
-
- /** Destructor, does nothing
- */
- virtual ~NumberList();
-
- /** Should be called after the constructors are done running. This calls the callbacks.
- */
- void Process();
-
- /** Called with a number from the list
- * @param Number The number
- */
- virtual void HandleNumber(unsigned Number);
-
- /** Called when there is an error with the numbered list
- * Return false to immediatly stop processing the list and return
- * This is all done before we start calling HandleNumber, so no numbers will have been processed yet
- * @param list The list
- * @return false to stop processing
- */
- virtual bool InvalidRange(const Anope::string &list);
-};
-
-class CoreExport ListFormatter
-{
- public:
- typedef std::map<Anope::string, Anope::string> ListEntry;
- private:
- std::vector<Anope::string> columns;
- std::vector<ListEntry> entries;
- public:
- ListFormatter &addColumn(const Anope::string &name);
- void addEntry(const ListEntry &entry);
- bool isEmpty() const;
- void Process(std::vector<Anope::string> &);
-};
-
-class CoreExport InfoFormatter
-{
- User *user;
- std::vector<std::pair<Anope::string, Anope::string> > replies;
- unsigned longest;
- public:
- InfoFormatter(User *u);
- void Process(std::vector<Anope::string> &);
- Anope::string &operator[](const Anope::string &key);
-};
-
-#endif /* SERVICES_H */
+#endif // SERVICES_H