added Channel Mode +S (SSL): Only allow SSL Users joining the channel
[ircu2.10.12-pk.git] / include / channel.h
index af416d922ae3aa0f9a1b4eb9079fcd168d298289..cad2de035ef81d6db02b0d4f65fea3f69f5fb434 100644 (file)
@@ -121,22 +121,25 @@ typedef signed long long long64;
 #define MODE_UPASS         0x100000
 #define MODE_APASS         0x200000
 #define MODE_WASDELJOINS   0x400000            /**< Not DELJOINS, but some joins  pending */
-#define MODE_EXCEPTION     0x800000            /**< ban exceptions */
+
 #define MODE_NOAMSGS      0x1000000            /**< No multi target messages */
 #define MODE_NONOTICE     0x2000000            /**< No channel notices */
 #define MODE_QUARANTINE   0x4000000            /**< No channel notices */
 #define MODE_ALTCHAN      0x8000000            /**< Alternative channel */
 #define MODE_DEL         0x20000000
 #define MODE_ADD         0x40000000
-#define MODE_ACCESS      0x100000000LLU        /**< ChanServ access */
+#define MODE_ACCESS     0x100000000LLU /**< ChanServ access */
+#define MODE_AUDITORIUM 0x200000000LLU /**< +u Auditorium */
+#define MODE_NOFLOOD    0x400000000LLU /**< +f NoFlood */
+#define MODE_SSLCHAN    0x800000000LLU /**< +S SSL Channel */
 /** mode flags which take another parameter (With PARAmeterS)
  */
-#define MODE_WPARAS     (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS|MODE_EXCEPTION|MODE_ALTCHAN|MODE_ACCESS)
+#define MODE_WPARAS     (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS|MODE_ALTCHAN|MODE_ACCESS|MODE_NOFLOOD)
 
 /** Available Channel modes */
-#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AcCbiklmMnNopstUvrDRzQ" : "cCbiklmMnNopstvrDRzQ"
+#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AcCbiklmMnNopsStuUvrDRzQu" : "cCbiklmMnNopsStuvrDRzQu"
 /** Available Channel modes that take parameters */
-#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUvFa" : "bklovFa"
+#define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbfkloUvFa" : "bfklovFa"
 
 #define HoldChannel(x)          (!(x))
 /** name invisible */
@@ -204,10 +207,20 @@ struct Membership {
   struct Membership* prev_member;      /**< The previous user on this channel*/
   struct Membership* next_channel;     /**< Next channel this user is on */
   struct Membership* prev_channel;     /**< Previous channel this user is on*/
+  struct MemberFlood* flood;        /**< count's how many times a user sent something (+f floodcontrol) */
   unsigned int       status;           /**< Flags for op'd, voice'd, etc */
   unsigned short     oplevel;          /**< Op level */
 };
 
+#define FLFL_CHANOP  0x01
+#define FLFL_VOICE   0x02
+#define FLFL_NOFLOOD  0x04
+
+struct MemberFlood {
+  struct MemberFlood* next_memberflood;
+  time_t time;
+};
+
 #define MAXOPLEVELDIGITS    3
 #define MAXOPLEVEL          999
 
@@ -250,6 +263,8 @@ struct Mode {
   ulong64 mode;
   unsigned int limit;
   unsigned int access;
+  char noflood[11]; //max [@+]999:9999
+  unsigned int noflood_value; //3bit for @+, 10bit  first field,  14bit second field  = 27bit of 32bit
   char key[KEYLEN + 1];
   char upass[KEYLEN + 1];
   char apass[KEYLEN + 1];
@@ -399,7 +414,7 @@ extern struct Client* find_chasing(struct Client* sptr, const char* user, int* c
 void add_invite(struct Client *cptr, struct Channel *chptr);
 int number_of_zombies(struct Channel *chptr);
 
-extern const char* find_no_nickchange_channel(struct Client* cptr);
+extern const char* find_no_nickchange_channel(struct Client* cptr, const char* new_nick);
 extern struct Membership* find_channel_member(struct Client* cptr, struct Channel* chptr);
 extern int member_can_send_to_channel(struct Membership* member, int reveal);
 extern int client_can_send_to_channel(struct Client *cptr, struct Channel *chptr, int reveal);
@@ -424,6 +439,7 @@ extern void list_set_default(void); /* this belongs elsewhere! */
 extern void RevealDelayedJoinIfNeeded(struct Client *sptr, struct Channel *chptr);
 extern void RevealDelayedJoin(struct Membership *member);
 extern void CheckDelayedJoins(struct Channel *chan);
+extern void CheckEnableDelayedJoins(struct Channel *chan);
 
 extern void modebuf_init(struct ModeBuf *mbuf, struct Client *source,
                         struct Client *connect, struct Channel *chan,
@@ -467,5 +483,6 @@ extern int apply_ban(struct Ban **banlist, struct Ban *newban, int free);
 extern void free_ban(struct Ban *ban);
 extern signed int destruct_nonpers_channel(struct Channel *chptr);
 extern int ext_amsg_block(struct Client *cptr, struct Channel *chptr, const char *msg);
+extern int ext_noflood_block(struct Client *cptr, struct Channel *chptr);
 
 #endif /* INCLUDED_channel_h */