summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAdam <Adam@Anope.org>2010-05-24 23:36:40 -0500
committerAdam <Adam@anope.org>2010-06-18 21:04:05 -0400
commit2fba686904e6f78ebab35df171c5757afeebf05d (patch)
tree523782bccc479606206f271cd6708b2f70fe8278 /include
parent3a2c2a916a26f4fa1844e71a9f1c2fc25337fd2b (diff)
Burned slist, rewrote operservs XLine code
Diffstat (limited to 'include')
-rw-r--r--include/Makefile3
-rw-r--r--include/account.h2
-rw-r--r--include/config.h16
-rw-r--r--include/extern.h59
-rw-r--r--include/modules.h26
-rw-r--r--include/operserv.h231
-rw-r--r--include/services.h71
-rw-r--r--include/slist.h49
8 files changed, 278 insertions, 179 deletions
diff --git a/include/Makefile b/include/Makefile
index 4c20fa502..de32199d3 100644
--- a/include/Makefile
+++ b/include/Makefile
@@ -7,9 +7,6 @@ version.h: Makefile version.sh services.h $(SRCS)
services.h: sysconf.h config.h extern.h
touch $@
-extern.h: slist.h
- touch $@
-
clean:
(rm -f language.h)
diff --git a/include/account.h b/include/account.h
index 1a567c317..e44880c29 100644
--- a/include/account.h
+++ b/include/account.h
@@ -161,7 +161,7 @@ class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag>
/* Unsaved data */
time_t lastmail; /* Last time this nick record got a mail */
- SList aliases; /* List of aliases */
+ std::list<NickAlias *> aliases; /* List of aliases */
/** Check whether this opertype has access to run the given command string.
* @param cmdstr The string to check, e.g. botserv/set/private.
diff --git a/include/config.h b/include/config.h
index c6dbbefb8..dacf3db06 100644
--- a/include/config.h
+++ b/include/config.h
@@ -623,16 +623,16 @@ class ServerConfig
time_t AutokillExpiry;
/* Default expiry time for chan kills */
time_t ChankillExpiry;
- /* Default expiry time for SGLine Expire */
- time_t SGLineExpiry;
+ /* Default expiry time for SNLine Expire */
+ time_t SNLineExpiry;
/* Default expiry time for SQLines */
time_t SQLineExpiry;
/* Default expiry time for SZLine */
time_t SZLineExpiry;
/* Actually akill the user when the akill is added */
bool AkillOnAdd;
- /* Kill users on SGline */
- bool KillonSGline;
+ /* Kill users on SNLine */
+ bool KillonSNline;
/* Kill users on SQline */
bool KillonSQline;
/* Send a WALLOPS/GLOBOPS when a user opers */
@@ -649,8 +649,8 @@ class ServerConfig
bool WallOSKick;
/* Send a WALLOPS/GLOBOPS when someone uses the AKILL command */
bool WallOSAkill;
- /* Send a WALLOPS/GLOBOPS when someone uses the SGLINE command */
- bool WallOSSGLine;
+ /* Send a WALLOPS/GLOBOPS when someone uses the SNLINE command */
+ bool WallOSSNLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SQLINE command */
bool WallOSSQLine;
/* Send a WALLOPS/GLOBOPS when someone uses the SZLINE command */
@@ -661,8 +661,8 @@ class ServerConfig
bool WallOSJupe;
/* Send a WALLOPS/GLOBOPS when an akill expires */
bool WallAkillExpire;
- /* Send a WALLOPS/GLOBOPS when SGLines expire */
- bool WallSGLineExpire;
+ /* Send a WALLOPS/GLOBOPS when SNLines expire */
+ bool WallSNLineExpire;
/* Send a WALLOPS/GLOBOPS when SQLines expire */
bool WallSQLineExpire;
/* Send a WALLOPS/GLOBOPS when SZLines expire */
diff --git a/include/extern.h b/include/extern.h
index 6f41c3977..1e88561e3 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -17,7 +17,6 @@
#define E extern CoreExport
#define EI extern DllExport
-#include "slist.h"
#include "hashcomp.h"
E void ModuleRunTimeDirCleanUp();
@@ -33,7 +32,6 @@ E IRCDProto *ircdproto;
E void kill_user(const std::string &source, const std::string &user, const std::string &reason);
E bool bad_password(User *u);
-E void sqline(const std::string &mask, const std::string &reason);
E void common_unban(ChannelInfo *ci, const std::string &nick);
E BotInfo *BotServ;
@@ -372,50 +370,6 @@ E NickCore *findcore(const std::string &nick);
E NickCore *findcore(const ci::string &nick);
E bool is_on_access(User *u, NickCore *nc);
-/**** operserv.c ****/
-
-E SList akills, sglines, sqlines, szlines;
-
-E int DefConModesSet;
-E Flags<ChannelModeName> DefConModesOn;
-E Flags<ChannelModeName> DefConModesOff;
-E std::map<ChannelModeName, std::string> DefConModesOnParams;
-E bool SetDefConParam(ChannelModeName, std::string &);
-E bool GetDefConParam(ChannelModeName, std::string *);
-E void UnsetDefConParam(ChannelModeName);
-
-E void operserv(User *u, char *buf);
-E void os_init();
-
-E int add_akill(User *u, const char *mask, const char *by, const time_t expires, const char *reason);
-E int check_akill(const char *nick, const char *username, const char *host, const char *vhost, const char *ip);
-E void expire_akills();
-E void oper_global(char *nick, const char *fmt, ...);
-
-E int add_sgline(User *u, const char *mask, const char *by, time_t expires, const char *reason);
-E int check_sgline(const char *nick, const char *realname);
-E void expire_sglines();
-
-E int add_sqline(User *u, const char *mask, const char *by, time_t expires, const char *reason);
-E int check_sqline(const char *nick, int nick_change);
-E void expire_sqlines();
-E int check_chan_sqline(const char *chan);
-
-E int add_szline(User * u, const char *mask, const char *by,
- time_t expires, const char *reason);
-E void expire_szlines();
-E int check_szline(const char *nick, char *ip);
-
-E void server_global(Server *s, const std::string &message);
-
-E std::vector<NewsItem *> News;
-
-E bool CheckDefCon(DefconLevel Level);
-E bool CheckDefCon(int level, DefconLevel Level);
-E void AddDefCon(int level, DefconLevel Level);
-E void DelDefCon(int level, DefconLevel Level);
-E std::vector<std::bitset<32> > DefCon;
-
/**** process.c ****/
E int allow_ignore;
@@ -463,19 +417,6 @@ E int exception_add(User * u, const char *mask, const int limit,
const char *reason, const char *who,
const time_t expires);
-/**** slist.c ****/
-E int slist_add(SList *slist, void *item);
-E void slist_clear(SList *slist, int free);
-E int slist_delete(SList *slist, int index);
-E int slist_delete_range(SList *slist, const char *range, slist_delcheckcb_t cb, ...);
-E int slist_enum(SList *slist, const char *range, slist_enumcb_t cb, ...);
-E int slist_full(SList *slist);
-E int slist_indexof(SList *slist, void *item);
-E void slist_init(SList *slist);
-E void slist_pack(SList *slist);
-E int slist_remove(SList *slist, void *item);
-E int slist_setcapacity(SList *slist, int16 capacity);
-
/**** sockets.cpp ****/
E SocketEngine socketEngine;
E int32 TotalRead;
diff --git a/include/modules.h b/include/modules.h
index 98dfd6d3e..963e07a4c 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -713,13 +713,13 @@ class CoreExport Module
* @param ak The akill
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
- virtual EventReturn OnAddAkill(User *u, Akill *ak) { return EVENT_CONTINUE; }
+ virtual EventReturn OnAddAkill(User *u, XLine *ak) { return EVENT_CONTINUE; }
/** Called before an akill is deleted
* @param u The user removing the akill
* @param ak The akill, can be NULL for all akills!
*/
- virtual void OnDelAkill(User *u, Akill *ak) { }
+ virtual void OnDelAkill(User *u, XLine *ak) { }
/** Called after an exception has been added
* @param u The user who added it
@@ -734,20 +734,20 @@ class CoreExport Module
*/
virtual void OnExceptionDel(User *u, Exception *ex) { }
- /** Called before a SXLine is added
- * @param u The user adding the SXLine
- * @param sx The SXLine
- * @param Type The type of SXLine this is
+ /** Called before a XLine is added
+ * @param u The user adding the XLine
+ * @param sx The XLine
+ * @param Type The type of XLine this is
* @return EVENT_CONTINUE to let other modules decide, EVENT_STOP to halt the command and not process it
*/
- virtual EventReturn OnAddSXLine(User *u, SXLine *sx, SXLineType Type) { return EVENT_CONTINUE; }
+ virtual EventReturn OnAddXLine(User *u, XLine *x, XLineType Type) { return EVENT_CONTINUE; }
- /** Called before a SXLine is deleted
- * @param u The user deleting the SXLine
- * @param sx The SXLine, can be NULL for all SXLines
- * @param Type The type of SXLine this is
+ /** Called before a XLine is deleted
+ * @param u The user deleting the XLine
+ * @param sx The XLine, can be NULL for all XLines
+ * @param Type The type of XLine this is
*/
- virtual void OnDelSXLine(User *u, SXLine *sx, SXLineType Type) { }
+ virtual void OnDelXLine(User *u, XLine *x, XLineType Type) { }
/** Called when a server quits
* @param server The server
@@ -1118,7 +1118,7 @@ enum Implementation
/* OperServ */
I_OnOperServHelp, I_OnDefconLevel, I_OnAddAkill, I_OnDelAkill, I_OnExceptionAdd, I_OnExceptionDel,
- I_OnAddSXLine, I_OnDelSXLine,
+ I_OnAddXLine, I_OnDelXLine,
/* Database */
I_OnPostLoadDatabases, I_OnSaveDatabase, I_OnLoadDatabase,
diff --git a/include/operserv.h b/include/operserv.h
new file mode 100644
index 000000000..ff2149372
--- /dev/null
+++ b/include/operserv.h
@@ -0,0 +1,231 @@
+/* OperServ support
+ *
+ * (C) 2008-2010 Anope Team
+ * Contact us at team@anope.org
+ *
+ * Please read COPYING and README for further details.
+ *
+ * $Id$
+ *
+ */
+
+extern CoreExport std::vector<NewsItem *> News;
+extern CoreExport std::vector<std::bitset<32> > DefCon;
+extern CoreExport bool DefConModesSet;
+extern CoreExport Flags<ChannelModeName> DefConModesOn;
+extern CoreExport Flags<ChannelModeName> DefConModesOff;
+extern CoreExport std::map<ChannelModeName, std::string> DefConModesOnParams;
+
+class XLineManager;
+extern CoreExport XLineManager *SGLine;
+extern CoreExport XLineManager *SZLine;
+extern CoreExport XLineManager *SQLine;
+extern CoreExport XLineManager *SNLine;
+
+extern CoreExport bool SetDefConParam(ChannelModeName, std::string &);
+extern CoreExport bool GetDefConParam(ChannelModeName, std::string &);
+extern CoreExport void UnsetDefConParam(ChannelModeName);
+extern CoreExport bool CheckDefCon(DefconLevel Level);
+extern CoreExport bool CheckDefCon(int level, DefconLevel Level);
+extern CoreExport void AddDefCon(int level, DefconLevel Level);
+extern CoreExport void DelDefCon(int level, DefconLevel Level);
+
+extern CoreExport void operserv(User *u, char *buf);
+extern CoreExport void os_init();
+
+extern CoreExport void oper_global(char *nick, const char *fmt, ...);
+extern CoreExport void server_global(Server *s, const std::string &message);
+
+enum XLineType
+{
+ X_SNLINE,
+ X_SQLINE,
+ X_SZLINE
+};
+
+struct XLine
+{
+ ci::string Mask;
+ ci::string By;
+ time_t Created;
+ time_t Expires;
+ std::string Reason;
+
+ XLine(const ci::string &mask, const std::string &reason = "");
+
+ XLine(const ci::string &mask, const ci::string &by, const time_t expires, const std::string &reason);
+
+ ci::string GetNick() const;
+ ci::string GetUser() const;
+ ci::string GetHost() const;
+};
+
+class CoreExport XLineManager
+{
+ private:
+ /* List of XLine managers we check users against in XLineManager::CheckAll */
+ static std::list<XLineManager *> XLineManagers;
+
+ protected:
+ /* List of XLines in this XLineManager */
+ std::deque<XLine *> XLines;
+ public:
+ /** Constructor
+ */
+ XLineManager();
+
+ /** Destructor
+ */
+ virtual ~XLineManager();
+
+ /** Register a XLineManager, places it in XLineManagers for use in XLineManager::CheckAll
+ * It is important XLineManagers are registered in the proper order. Eg, if you had one akilling
+ * clients and one handing them free olines, you would want the akilling one first. This way if a client
+ * matches an entry on both of the XLineManagers, they would be akilled.
+ * @param xlm THe XLineManager
+ */
+ static void RegisterXLineManager(XLineManager *xlm);
+
+ /** Unregister a XLineManager
+ * @param xlm The XLineManager
+ */
+ static void UnregisterXLineManager(XLineManager *xlm);
+
+ /** Check a user against all known XLineManagers
+ * Wparam u The user
+ * @return A pair of the XLineManager the user was found in and the XLine they matched, both may be NULL for no match
+ */
+ static std::pair<XLineManager *, XLine *> CheckAll(User *u);
+
+ /** Get the number of XLines in this XLineManager
+ * @return The number of XLines
+ */
+ const size_t GetCount() const;
+
+ /** Get the XLine list
+ * @return The list
+ */
+ const std::deque<XLine *>& GetList() const;
+
+ /** Add an entry to this XLineManager
+ * @param x The entry
+ */
+ void AddXLine(XLine *x);
+
+ /** Delete an entry from this XLineManager
+ * @param x The entry
+ * @return true if the entry was found and deleted, else false
+ */
+ bool DelXLine(XLine *x);
+
+ /** Gets an entry by index
+ * @param index The index
+ * @return The XLine, or NULL if the index is out of bounds
+ */
+ XLine *GetEntry(unsigned index) const;
+
+ /** Clear the XLine list
+ */
+ void Clear();
+
+ /** Add an entry to this XLine Manager
+ * @param bi The bot error replies should be sent from
+ * @param u The user adding the XLine
+ * @param mask The mask of the XLine
+ * @param expires When this should expire
+ * @param reaosn The reason
+ * @return A pointer to the XLine
+ */
+ virtual XLine *Add(BotInfo *bi, User *u, const ci::string &mask, time_t expires, const std::string &reason);
+
+ /** Delete an XLine, eg, remove it from the IRCd.
+ * @param x The xline
+ */
+ virtual void Del(XLine *x);
+
+ /** Checks if a mask can/should be added to the XLineManager
+ * @param mask The mask
+ * @param expires When the mask would expire
+ * @return A pair of int and XLine*.
+ * 1 - Mask already exists
+ * 2 - Mask already exists, but the expiry time was changed
+ * 3 - Mask is already covered by another mask
+ * In each case the XLine it matches/is covered by is returned in XLine*
+ */
+ std::pair<int, XLine *> CanAdd(const ci::string &mask, time_t expires);
+
+ /** Checks if this list has an entry
+ * @param mask The mask
+ * @return The XLine the user matches, or NULL
+ */
+ XLine *HasEntry(const ci::string &mask) const;
+
+ /** Check a user against all of the xlines in this XLineManager
+ * @param u The user
+ * @return The xline the user marches, if any. Also calls OnMatch()
+ */
+ virtual XLine *Check(User *u);
+
+ /** Called when a user matches a xline in this XLineManager
+ * @param u The user
+ * @param x The XLine they match
+ */
+ virtual void OnMatch(User *u, XLine *x);
+
+ /** Called when an XLine expires
+ * @param x The xline
+ */
+ virtual void OnExpire(XLine *x);
+};
+
+/* This is for AKILLS */
+class SGLineManager : public XLineManager
+{
+ public:
+ XLine *Add(BotInfo *bi, User *u, const ci::string &mask, time_t expires, const std::string &reason);
+
+ void Del(XLine *x);
+
+ void OnMatch(User *u, XLine *x);
+
+ void OnExpire(XLine *x);
+};
+
+class SNLineManager : public XLineManager
+{
+ public:
+ XLine *Add(BotInfo *bi, User *u, const ci::string &mask, time_t expires, const std::string &reason);
+
+ void Del(XLine *x);
+
+ void OnMatch(User *u, XLine *x);
+
+ void OnExpire(XLine *x);
+};
+
+class SQLineManager : public XLineManager
+{
+ public:
+ XLine *Add(BotInfo *bi, User *u, const ci::string &mask, time_t expires, const std::string &reason);
+
+ void Del(XLine *x);
+
+ void OnMatch(User *u, XLine *x);
+
+ void OnExpire(XLine *x);
+
+ static bool Check(Channel *c);
+};
+
+class SZLineManager : public XLineManager
+{
+ public:
+ XLine *Add(BotInfo *bi, User *u, const ci::string &mask, time_t expires, const std::string &reason);
+
+ void Del(XLine *x);
+
+ void OnMatch(User *u, XLine *x);
+
+ void OnExpire(XLine *x);
+};
+
diff --git a/include/services.h b/include/services.h
index 0a4648105..a84e6ae8c 100644
--- a/include/services.h
+++ b/include/services.h
@@ -202,7 +202,6 @@ extern int strncasecmp(const char *, const char *, size_t);
/* Miscellaneous definitions. */
#include "hashcomp.h"
-#include "slist.h"
/* Pull in the various bits of STL */
#include <iostream>
@@ -359,7 +358,6 @@ struct Session;
typedef struct bandata_ BanData;
typedef struct mailinfo_ MailInfo;
-typedef struct akill_ Akill;
typedef struct exception_ Exception;
#include "extensible.h"
@@ -381,7 +379,7 @@ struct ircdvars_ {
const char *botchanumode; /* Modes set when botserv joins a channel */
int svsnick; /* Supports SVSNICK */
int vhost; /* Supports vhost */
- int sgline; /* Supports SGline */
+ int snline; /* Supports SNline */
int sqline; /* Supports SQline */
int szline; /* Supports SZline */
int numservargs; /* Number of Server Args */
@@ -780,39 +778,6 @@ struct mailinfo_ {
/*************************************************************************/
-struct akill_ {
- char *user; /* User part of the AKILL */
- char *host; /* Host part of the AKILL */
-
- char *by; /* Who set the akill */
- char *reason; /* Why they got akilled */
-
- time_t seton; /* When it was set */
- time_t expires; /* When it expires */
-};
-
-/*************************************************************************/
-
-/* Structure for OperServ SGLINE and SZLINE commands */
-
-enum SXLineType
-{
- SX_SGLINE,
- SX_SQLINE,
- SX_SZLINE
-};
-
-struct SXLine {
- char *mask;
- char *by;
- char *reason;
- time_t seton;
- time_t expires;
-};
-
-
-/************************************************************************/
-
struct exception_ {
char *mask; /* Hosts to which this exception applies */
int limit; /* Session limit for exception */
@@ -906,6 +871,7 @@ struct Uplink;
class ServerConfig;
#include "extern.h"
+#include "operserv.h"
#include "mail.h"
#include "servers.h"
#include "config.h"
@@ -933,8 +899,8 @@ class CoreExport IRCDProto
virtual void SendSVSNOOP(const char *, int) { }
virtual void SendTopic(BotInfo *, Channel *, const char *, const char *) = 0;
virtual void SendVhostDel(User *) { }
- virtual void SendAkill(Akill *) = 0;
- virtual void SendAkillDel(Akill *) = 0;
+ virtual void SendAkill(XLine *) = 0;
+ virtual void SendAkillDel(XLine *) = 0;
virtual void SendSVSKill(BotInfo *source, User *user, const char *fmt, ...);
virtual void SendSVSMode(User *, int, const char **) = 0;
virtual void SendMode(BotInfo *bi, Channel *dest, const char *fmt, ...);
@@ -959,11 +925,11 @@ class CoreExport IRCDProto
virtual void SendPing(const char *servname, const char *who);
virtual void SendPong(const char *servname, const char *who);
virtual void SendJoin(BotInfo *bi, const char *, time_t) = 0;
- virtual void SendSQLineDel(const std::string &) = 0;
+ virtual void SendSQLineDel(XLine *x) = 0;
virtual void SendInvite(BotInfo *bi, const char *chan, const char *nick);
virtual void SendPart(BotInfo *bi, Channel *chan, const char *fmt, ...);
virtual void SendGlobops(BotInfo *source, const char *fmt, ...);
- virtual void SendSQLine(const std::string &, const std::string &) = 0;
+ virtual void SendSQLine(XLine *x) = 0;
virtual void SendSquit(const char *servname, const char *message);
virtual void SendSVSO(const char *, const char *, const char *) { }
virtual void SendChangeBotNick(BotInfo *bi, const char *newnick);
@@ -972,10 +938,10 @@ class CoreExport IRCDProto
virtual void SendConnect() = 0;
virtual void SendSVSHold(const char *) { }
virtual void SendSVSHoldDel(const char *) { }
- virtual void SendSGLineDel(SXLine *) { }
- virtual void SendSZLineDel(SXLine *) { }
- virtual void SendSZLine(SXLine *) { }
- virtual void SendSGLine(SXLine *) { }
+ virtual void SendSGLineDel(XLine *) { }
+ virtual void SendSZLineDel(XLine *) { }
+ virtual void SendSZLine(XLine *) { }
+ virtual void SendSGLine(XLine *) { }
virtual void SendBanDel(Channel *, const std::string &) { }
virtual void SendSVSModeChan(Channel *, const char *, const char *) { }
virtual void SendUnregisteredNick(User *) { }
@@ -1064,8 +1030,8 @@ class CoreExport Anope
{
public:
/** Check whether two strings match.
- * @param mask The pattern to check (e.g. foo*bar)
* @param str The string to check against the pattern (e.g. foobar)
+ * @param mask The pattern to check (e.g. foo*bar)
* @param case_sensitive Whether or not the match is case sensitive, default false.
*/
static bool Match(const std::string &str, const std::string &mask, bool case_sensitive = false);
@@ -1162,7 +1128,7 @@ class ChanServTimer : public Timer
void Tick(time_t);
};
-/** A class to process numbered lists (passed to most DEL commands).
+/** 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
* it *always* 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
@@ -1178,12 +1144,25 @@ class NumberList
*/
NumberList(const std::string &list);
+ /** 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 The list
+ * @return false to stop processing
+ */
virtual bool InvalidRange(const std::string &list);
};
diff --git a/include/slist.h b/include/slist.h
deleted file mode 100644
index 3377cd48f..000000000
--- a/include/slist.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Header for Services list handler.
- *
- * (C) 2003-2010 Anope Team
- * Contact us at team@anope.org
- *
- * Please read COPYING and README for furhter details.
- *
- * Based on the original code of Epona by Lara.
- * Based on the original code of Services by Andy Church.
- *
- *
- */
-
-#ifndef SLIST_H
-#define SLIST_H
-
-typedef struct slist_ SList;
-typedef struct slistopts_ SListOpts;
-
-struct slist_ {
- void **list;
-
- int16 count; /* Total entries of the list */
- int16 capacity; /* Capacity of the list */
- int16 limit; /* Maximum possible entries on the list */
-
- SListOpts *opts;
-};
-
-struct slistopts_ {
- int32 flags; /* Flags for the list. See below. */
-
- int (*compareitem) (SList *slist, void *item1, void *item2); /* Called to compare two items */
- int (*isequal) (SList *slist, void *item1, void *item2); /* Called by slist_indexof. item1 can be an arbitrary pointer. */
- void (*freeitem) (SList *slist, void *item); /* Called when an item is removed */
-};
-
-#define SLIST_DEFAULT_LIMIT 32767
-
-#define SLISTF_NODUP 0x00000001 /* No duplicates in the list. */
-#define SLISTF_SORT 0x00000002 /* Automatically sort the list. Used with compareitem member. */
-
-/* Note that number is the index in the array + 1 */
-typedef int (*slist_enumcb_t) (SList *slist, int number, void *item, va_list args);
-/* Callback to know whether we can delete the entry. */
-typedef int (*slist_delcheckcb_t) (SList *slist, void *item, va_list args);
-
-#endif /* SLIST_H */
-