]> jfr.im git - irc/quakenet/newserv.git/blobdiff - nick/nick.h
chanfix: Fix check for null pointer.
[irc/quakenet/newserv.git] / nick / nick.h
index f57cbc5f746e5df047f381a91fe9998632b0a107..4149a1aecbeeaef35840038a7d6fce86cd968748 100644 (file)
 #include "../server/server.h"
 #include "../lib/base64.h"
 #include "../lib/irc_ipv6.h"
-#include "../lib/patricia.h"
+#include "../patricia/patricia.h"
+
+#include "../authext/authext.h"
+
 #include <time.h>
 
-#define MAXNICKEXTS       6
-#define MAXAUTHNAMEEXTS   5
+#ifndef MAXNICKEXTS
+#define MAXNICKEXTS       10
+#endif
 
 #define UMODE_INV       0x0001
 #define UMODE_WALLOPS   0x0002
 #define UMODE_SETHOST   0x0400
 #define UMODE_REGPRIV   0x0800
 #define UMODE_HIDEIDLE  0x1000
+#define UMODE_PARANOID  0x2000
+#define UMODE_CLOAKED   0x4000
+
+#define UMODE_ALL       0x7FFF
 
-#define UMODE_ALL       0x1FFF
+#define AFLAG_STAFF     0x0001
+#define AFLAG_SUPPORT   0x0002
+#define AFLAG_OPER      0x0004
+#define AFLAG_ADMIN     0x0008
+#define AFLAG_DEVELOPER 0x0010
+
+#define AFLAG_ALL       0x001F
 
 #define IsInvisible(x)    ((x)->umodes & UMODE_INV)
 #define IsWallops(x)      ((x)->umodes & UMODE_WALLOPS)
@@ -45,6 +59,8 @@
 #define IsSetHost(x)      ((x)->umodes & UMODE_SETHOST)
 #define IsRegPriv(x)      ((x)->umodes & UMODE_REGPRIV)
 #define IsHideIdle(x)     ((x)->umodes & UMODE_HIDEIDLE)
+#define IsParanoid(x)     ((x)->umodes & UMODE_PARANOID)
+#define IsCloaked(x)      ((x)->umodes & UMODE_CLOAKED)
 
 #define SetInvisible(x)    ((x)->umodes |= UMODE_INV)
 #define SetWallops(x)      ((x)->umodes |= UMODE_WALLOPS)
@@ -59,6 +75,8 @@
 #define SetSetHost(x)      ((x)->umodes |= UMODE_SETHOST)
 #define SetRegPriv(x)      ((x)->umodes |= UMODE_REGPRIV)
 #define SetHideIdle(x)     ((x)->umodes |= UMODE_HIDEIDLE)
+#define SetParanoid(x)     ((x)->umodes |= UMODE_PARANOID)
+#define SetCloaked(x)      ((x)->umodes |= UMODE_CLOAKED)
 
 #define ClearInvisible(x)    ((x)->umodes &= ~UMODE_INV)
 #define ClearWallops(x)      ((x)->umodes &= ~UMODE_WALLOPS)
 #define ClearSetHost(x)      ((x)->umodes &= ~UMODE_SETHOST)
 #define ClearRegPriv(x)      ((x)->umodes &= ~UMODE_REGPRIV)
 #define ClearHideIdle(x)     ((x)->umodes &= ~UMODE_HIDEIDLE)
+#define ClearParanoid(x)     ((x)->umodes &= ~UMODE_PARANOID)
+#define ClearCloaked(x)      ((x)->umodes &= ~UMODE_CLOAKED)
+
+#define IsStaff(x)           ((x)->flags & AFLAG_STAFF)
+#define IsDeveloper(x)       ((x)->flags & AFLAG_DEVELOPER)
+#define IsSupport(x)         ((x)->flags & AFLAG_SUPPORT)
+#define IsAdmin(x)           ((x)->flags & AFLAG_ADMIN)
+#define IsOperFlag(x)        ((x)->flags & AFLAG_OPER)
+
+#define SetStaff(x)          ((x)->flags |= AFLAG_STAFF)
+#define SetDeveloper(x)      ((x)->flags |= AFLAG_DEVELOPER)
+#define SetSupport(x)        ((x)->flags |= AFLAG_SUPPORT)
+#define SetAdmin(x)          ((x)->flags |= AFLAG_ADMIN)
+#define SetOperFlag(x)       ((x)->flags |= AFLAG_OPER)
+
+#define ClearStaff(x)        ((x)->flags &= ~AFLAG_STAFF)
+#define ClearDeveloper(x)    ((x)->flags &= ~AFLAG_DEVELOPER)
+#define ClearSupport(x)      ((x)->flags &= ~AFLAG_SUPPORT)
+#define ClearAdmin(x)        ((x)->flags &= ~AFLAG_ADMIN)
+#define ClearOperFlag(x)     ((x)->flags &= ~AFLAG_OPER)
+
+#define NickOnServiceServer(target)   SIsService(&serverlist[homeserver((target)->numeric)])
 
 typedef struct host {
   sstring *name;
@@ -90,16 +130,6 @@ typedef struct realname {
   struct realname *next;
 } realname;
 
-typedef struct authname {
-  unsigned long userid;
-  int usercount;
-  unsigned int marker;
-  struct nick *nicks;
-  struct authname *next;
-  /* These are extensions only used by other modules */
-  void *exts[MAXAUTHNAMEEXTS];
-} authname;
-
 typedef struct nick {
   char nick[NICKLEN+1];
   long numeric;
@@ -108,12 +138,17 @@ typedef struct nick {
   realname *realname;
   sstring *shident;  /* +h users: fake ident/host goes here */
   sstring *sethost;
+  sstring *opername;
   flag_t umodes;
-  char authname[ACCOUNTLEN+1];
+  char *authname;
   authname *auth; /* This requires User ID numbers to work */
   time_t timestamp;
   time_t accountts;
+  sstring *away;
+  struct irc_in_addr ipaddress;
   patricia_node_t *ipnode;
+  unsigned int cloak_count;
+  struct nick *cloak_extra;
   unsigned int marker;
   struct nick *next;
   struct nick *nextbyhost;
@@ -124,20 +159,17 @@ typedef struct nick {
   void *exts[MAXNICKEXTS];
 } nick;
 
-#define p_ipaddr ipnode->prefix->sin
-
 #define NICKHASHSIZE      60000
 #define HOSTHASHSIZE      40000
 #define REALNAMEHASHSIZE  40000
-#define AUTHNAMEHASHSIZE  60000
 
 extern nick *nicktable[NICKHASHSIZE];
 extern nick **servernicks[MAXSERVERS];
 extern host *hosttable[HOSTHASHSIZE];
 extern realname *realnametable[REALNAMEHASHSIZE];
-extern authname *authnametable[AUTHNAMEHASHSIZE];
 extern const flag umodeflags[];
-extern patricia_tree_t *iptree;
+extern const flag accountflags[];
+extern char *NULLAUTHNAME;
 
 #define MAXNUMERIC 0x3FFFFFFF
 
@@ -152,15 +184,12 @@ extern patricia_tree_t *iptree;
                                   (((*gethandlebynumeric(x))->numeric==(x&MAXNUMERIC))?(*gethandlebynumeric(x)):NULL)))
 
 /* nickalloc.c functions */
-void initnickalloc();
 realname *newrealname();
 void freerealname(realname *rn);
 nick *newnick();
-void freenick (nick *np);
+void freenick(nick *np);
 host *newhost();
-void freehost (host *hp);
-authname *newauthname();
-void freeauthname (authname *hp);
+void freehost(host *hp);
 
 /* nick.c functions */
 void handleserverchange(int hooknum, void *arg);
@@ -171,22 +200,23 @@ nick *getnickbynick(const char *nick);
 int registernickext(const char *name);
 int findnickext(const char *name);
 void releasenickext(int index);
-int registerauthnameext(const char *name);
-int findauthnameext(const char *name);
-void releaseauthnameext(int index);
 char *visiblehostmask(nick *np, char *buf);
-int registernodeext(const char *name);
-int findnodeext(const char *name);
-void releasenodeext(int index);
+char *visibleuserhost(nick *np, char *buf);
+int canseeuser(nick *np, nick *cloaked);
+void addcloaktarget(nick *cloaked, nick *target);
+void removecloaktarget(nick *target);
+void clearcloaktargets(nick *cloaked);
 
 /* nickhandlers.c functions */
 int handlenickmsg(void *source, int cargc, char **cargv);
 int handlequitmsg(void *source, int cargc, char **cargv);
 int handlekillmsg(void *source, int cargc, char **cargv);
 int handleusermodemsg(void *source, int cargc, char **cargv);
-int handlewhoismsg(void *source, int cargc, char **cargv);
 int handleaccountmsg(void *source, int cargc, char **cargv);
-int handlestatsmsg(void *source, int cargc, char **cargv);
+int handleprivmsg(void *source, int cargc, char **cargv);
+int handleawaymsg(void *source, int cargc, char **cargv);
+int handleaddcloak(void *source, int cargc, char **cargv);
+int handleclearcloak(void *source, int cargc, char **cargv);
 
 /* These functions have been replaced by macros 
 nick **gethandlebynumeric(long numeric);
@@ -196,19 +226,16 @@ nick *getnickbynumericstr(char *numericstr);
                     
 /* nickhelpers.c functions */
 void initnickhelpers();
+void fininickhelpers();
 host *findhost(const char *hostname);
 host *findorcreatehost(const char *hostname);
 void releasehost(host *hp);
 realname *findrealname(const char *name);
 realname *findorcreaterealname(const char *name);
 void releaserealname(realname *rnp);
-authname *findauthname(unsigned long userid);
-authname *findorcreateauthname(unsigned long userid);
-void releaseauthname(authname *anp);
 
 unsigned int nexthostmarker();
 unsigned int nextrealnamemarker();
-unsigned int nextauthnamemarker();
 unsigned int nextnickmarker();
 
 #endif