]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/hash.h
Lots of style changes to user replies. added numeric access back
[irc/evilnet/x3.git] / src / hash.h
index 6048108a1c1e7f0a9066f568d5b61515055cb0c0..74555883823ecb99d005d6a49e8f164598487aa4 100644 (file)
@@ -1,7 +1,7 @@
 /* hash.h - IRC network state database
  * Copyright 2000-2004 srvx Development Team
  *
- * This file is part of srvx.
+ * This file is part of x3.
  *
  * srvx is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include "dict.h"
 #include "policer.h"
 
-#define MODE_CHANOP            0x0001 /* +o USER */
-#define MODE_VOICE             0x0002 /* +v USER */
-#define MODE_PRIVATE           0x0004 /* +p */
-#define MODE_SECRET            0x0008 /* +s */
-#define MODE_MODERATED         0x0010 /* +m */
-#define MODE_TOPICLIMIT                0x0020 /* +t */
-#define MODE_INVITEONLY                0x0040 /* +i */
-#define MODE_NOPRIVMSGS                0x0080 /* +n */
-#define MODE_KEY               0x0100 /* +k KEY */
-#define MODE_BAN               0x0200 /* +b BAN */
-#define MODE_LIMIT             0x0400 /* +l LIMIT */
-#define MODE_DELAYJOINS         0x0800 /* +D */
-#define MODE_REGONLY            0x1000 /* ircu +r, Bahamut +R */
-#define MODE_NOCOLORS           0x2000 /* +c */
-#define MODE_NOCTCPS            0x4000 /* +C */
-#define MODE_REGISTERED         0x8000 /* Bahamut +r */
+#define MODE_CHANOP            0x00000001 /* +o USER */
+#define MODE_VOICE             0x00000002 /* +v USER */
+#define MODE_PRIVATE           0x00000004 /* +p */
+#define MODE_SECRET            0x00000008 /* +s */
+#define MODE_MODERATED         0x00000010 /* +m */
+#define MODE_TOPICLIMIT                0x00000020 /* +t */
+#define MODE_INVITEONLY                0x00000040 /* +i */
+#define MODE_NOPRIVMSGS                0x00000080 /* +n */
+#define MODE_KEY               0x00000100 /* +k KEY */
+#define MODE_BAN               0x00000200 /* +b BAN */
+#define MODE_LIMIT             0x00000400 /* +l LIMIT */
+#define MODE_DELAYJOINS         0x00000800 /* +D */
+#define MODE_REGONLY            0x00001000 /* ircu +r, Bahamut +R */
+#define MODE_NOCOLORS           0x00002000 /* +c */
+#define MODE_NOCTCPS            0x00004000 /* +C */
+#define MODE_REGISTERED         0x00008000 /* Bahamut +r */
+#define MODE_STRIPCOLOR         0x00010000 /* +S Strip mirc color codes */
+#define MODE_MODUNREG           0x00020000 /* +M mod unregister */
+#define MODE_NONOTICE           0x00040000 /* +N no notices */
+#define MODE_OPERSONLY          0x00080000 /* +O Opers only */
+#define MODE_NOQUITMSGS         0x00100000 /* +Q suppress messages from quit notices */
+#define MODE_NOAMSG             0x00200000 /* +T no multi-target messages */
+#define MODE_SSLONLY            0x00400000 /* +z ssl only */
+#define MODE_HALFOP             0x00800000 /* +h USER */
+#define MODE_EXEMPT             0x01000000 /* +e exempt */
 #define MODE_REMOVE             0x80000000
 
 #define FLAGS_OPER             0x0001 /* Operator +O */
 #define NICKLEN         30
 #define USERLEN         10
 #define HOSTLEN         63
+#define ACCOUNTLEN     15
 #define REALLEN         50
 #define TOPICLEN        250
 #define CHANNELLEN      200
 
 #define MAXMODEPARAMS  6
 #define MAXBANS                45
+#define MAXEXEMPTS     45
 
 /* IDLEN is 6 because it takes 5.33 Base64 digits to store 32 bytes. */
 #define IDLEN           6
 DECLARE_LIST(userList, struct userNode*);
 DECLARE_LIST(modeList, struct modeNode*);
 DECLARE_LIST(banList, struct banNode*);
+DECLARE_LIST(exemptList, struct exemptNode*);
 DECLARE_LIST(channelList, struct chanNode*);
 DECLARE_LIST(serverList, struct server*);
 
@@ -144,6 +156,7 @@ struct chanNode {
 
     struct modeList members;
     struct banList banlist;
+    struct exemptList exemptlist;
     struct policer join_policer;
     unsigned int join_flooded : 1;
     unsigned int bad_channel : 1;
@@ -159,6 +172,12 @@ struct banNode {
     time_t set; /* time ban was set */
 };
 
+struct exemptNode {
+    char exempt[NICKLEN + USERLEN + HOSTLEN + 3]; /* 1 for '\0', 1 for ! and 1 for @ = 3 */
+    char who[NICKLEN + 1]; /* who set exempt */
+    time_t set; /* time exempt was set */
+};
+
 struct modeNode {
     struct chanNode *channel;
     struct userNode *user;
@@ -218,7 +237,7 @@ void NickChange(struct userNode* user, const char *new_nick, int no_announce);
 typedef void (*account_func_t) (struct userNode *user, const char *stamp);
 void reg_account_func(account_func_t handler);
 void call_account_func(struct userNode *user, const char *stamp);
-void StampUser(struct userNode *user, const char *stamp);
+void StampUser(struct userNode *user, const char *stamp, time_t timestamp);
 void assign_fakehost(struct userNode *user, const char *host, int announce);
 
 typedef void (*new_channel_func_t) (struct chanNode *chan);
@@ -228,7 +247,7 @@ void reg_join_func(join_func_t handler);
 typedef void (*del_channel_func_t) (struct chanNode *chan);
 void reg_del_channel_func(del_channel_func_t handler);
 
-struct chanNode* AddChannel(const char *name, time_t time_, const char *modes, char *banlist);
+struct chanNode* AddChannel(const char *name, time_t time_, const char *modes, char *banlist, char *exemptlist);
 void LockChannel(struct chanNode *channel);
 void UnlockChannel(struct chanNode *channel);
 
@@ -245,6 +264,7 @@ void reg_kick_func(kick_func_t handler);
 void ChannelUserKicked(struct userNode* kicker, struct userNode* victim, struct chanNode* channel);
 
 int ChannelBanExists(struct chanNode *channel, const char *ban);
+int ChannelExemptExists(struct chanNode *channel, const char *exempt);
 
 typedef int (*topic_func_t)(struct userNode *who, struct chanNode *chan, const char *old_topic);
 void reg_topic_func(topic_func_t handler);