Files
bitchx/include/struct.h
Kevin Easton 52b57d1576 Move the definition of the NotifyItem and NotifyList types from struct.h to notify.h
This change means that struct.h no longer needs to include alist.h, so it will be indirectly included in a lot
fewer other files.

As a consequence, server.h needs to include notify.h to get the definitions of those data types.
2017-05-04 23:50:47 +10:00

1204 lines
31 KiB
C

/*
* struct.h: header file for structures needed for prototypes
*
* Written by Scott Reynolds, based on code by Michael Sandrof
* Heavily modified by Colten Edwards for BitchX
*
* Copyright(c) 1997
*
*/
#ifndef STRUCT_H_
#define STRUCT_H_
#ifdef WINNT
#include <windows.h>
#endif
#include "hash.h"
#include "config.h"
#include "ssl.h"
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
/*
* struct sockaddr_storage isn't avaiable on all ipv6-ready-systems, bleh ;(
* and i'm too lazy to #ifdef every sockaddr declaration. --wojtekka
*/
struct sockaddr_foobar
{
union {
struct sockaddr_in sin;
#ifdef IPV6
struct sockaddr_in6 sin6;
#endif
} sins;
};
#define sf_family sins.sin.sin_family
#define sf_port sins.sin.sin_port
#define sf_addr sins.sin.sin_addr
#ifdef IPV6
# define sf_addr6 sins.sin6.sin6_addr
#endif
#ifdef GUI
typedef struct _menuref {
int refnum, menuid;
#if defined(__EMXPM__) || defined(WIN32)
HWND menuhandle;
#elif defined(GTK)
GtkWidget *menuhandle;
char *menutext;
int checked;
#endif
struct _menuref *next;
} MenuRef;
typedef struct _menu_item
{
struct _menu_item *next;
char *name;
char *alias;
char *submenu;
int menuid;
int menutype;
int refnum;
} MenuList;
typedef struct _menu_struct
{
struct _menu_struct *next;
char *name;
MenuList *menuorigin;
#if defined(__EMXPM__) || defined(WIN32)
HWND sharedhandle;
#elif defined(GTK)
GtkWidget *sharedhandle;
#endif
MenuRef *root;
} MenuStruct;
#endif
typedef struct
{
int is_read;
int is_write;
int port;
char *server;
unsigned long flags;
time_t time;
void (*func_read) (int);
void (*func_write) (int);
void (*cleanup) (int);
void *info;
#if defined(HAVE_LIBSSL) && !defined(IN_MODULE)
SSL_CTX* ctx;
int ssl_error;
SSL* ssl_fd;
#endif
} SocketList;
typedef char *(bf) (char *, char *);
typedef struct
{
char *name;
bf *func;
} BuiltInFunctions;
typedef struct _BuiltInDllFunctions
{
struct _BuiltInDllFunctions *next;
char *name;
char *module;
bf *func;
} BuiltInDllFunctions;
typedef enum NoiseEnum {
UNKNOWN = 0,
SILENT,
QUIET,
NORMAL,
NOISY
} Noise;
/* Hook: The structure of the entries of the hook functions lists */
typedef struct hook_stru
{
struct hook_stru *next;
char *nick; /* /on type NICK stuff */
char *stuff; /* /on type nick STUFF */
int not; /* /on type ^nick stuff */
Noise noisy; /* /on [^-+]type nick stuff */
int sernum; /* /on #type NUM nick stuff */
/* Default sernum is 0. */
int global; /* set if loaded from `global' */
int flexible; /* on type 'NICK' stuff */
int debug; /* turn debug on/off */
char *filename; /* Where it was loaded */
int (*hook_func) (char *, char *, char **);
int (*num_func) (int, char *, char **);
} Hook;
/* HookFunc: A little structure to keep track of the various hook functions */
typedef struct
{
char *name; /* name of the function */
Hook *list; /* pointer to head of the list for this
* function */
int params; /* number of parameters expected */
int mark;
unsigned flags;
} HookFunc;
typedef struct _NumericFunction
{
struct _NumericFunction *next;
char *name;
char *module;
int number;
Hook *list;
} NumericFunction;
typedef struct _RawFunction
{
struct _RawFunction *next;
char *name;
char *module;
int (*func) (char *, char *, char *, char **);
} RawDll;
/* UrlList: structure for the urls in your Url List */
typedef struct urllist_stru
{
struct urllist_stru *next; /* pointer to next url entry */
char *name; /* name */
} UrlList;
/* IrcCommand: structure for each command in the command table */
typedef struct
{
char *name; /* what the user types */
char *server_func; /* what gets sent to the server
* (if anything) */
void (*func) (char *, char *, char *, char *); /* function that is the command */
unsigned flags;
char *help;
} IrcCommand;
typedef struct _IrcCommandDll
{
struct _IrcCommandDll *next; /* pointer to next record. */
char *name; /* what the user types */
char *module;
char *server_func; /* what gets sent to the server
* (if anything) */
void (*func) (struct _IrcCommandDll *, char *, char *, char *, char *); /* function that is the command */
unsigned flags;
char *result;
char *help;
} IrcCommandDll;
typedef struct _WindowDll
{
struct _WindowDll *next;
char *name;
char *module;
struct WindowStru *(*func) (struct WindowStru *, char **, char *);
char *help;
} WindowDll;
typedef struct _last_msg_stru
{
struct _last_msg_stru *next;
char *from;
char *uh;
char *to;
char *last_msg;
char *time;
int count;
} LastMsg;
typedef struct userlist_stru
{
struct userlist_stru *next; /* pointer to next user entry */
char *nick; /* user's name in nick!user@host */
char *host;
char *comment;
char *channels; /* channel for list to take effect */
char *password; /* users password */
unsigned long flags; /* this users flags */
time_t time; /* time when put on list */
} UserList;
/* ShitList: structure proto for the shitlist */
typedef struct shitlist_stru
{
struct shitlist_stru *next; /* pointer to next shit entry */
char *filter; /* filter in nick!user@host */
int level; /* level of shitted */
char *channels; /* channel for list to take effect */
char *reason; /* Reason */
time_t time; /* time shit was put on */
} ShitList;
/* WordKickList: structure for your wordkick list */
typedef struct wordkicklist_stru
{
struct wordkicklist_stru *next; /* pointer to next user entry */
char *string; /* string */
char *channel; /* channel */
} WordKickList;
/* LameList: structure for the users on your LameNick Kick*/
typedef struct lamelist_stru
{
struct lamelist_stru *next; /* pointer to next lame entry */
char *nick; /* Lame Nick */
} LameList;
/* invitetoList: structure for the invitetolist list */
typedef struct invitetolist_stru
{
struct invitetolistlist_stru *next; /* pointer to next entry */
char *channel; /* channel */
int times; /* times I have been invited */
time_t time; /* time of last invite */
} InviteToList;
typedef struct server_split
{
struct server_split *next;
char *name; /* name of this server. */
char *link; /* linked to what server */
int status; /* split or not */
int count; /* number of times we have not found this one */
int hopcount; /* number of hops away */
time_t time; /* time of split */
} irc_server;
/*
* ctcp_entry: the format for each ctcp function. note that the function
* described takes 4 parameters, a pointer to the ctcp entry, who the message
* was from, who the message was to (nickname, channel, etc), and the rest of
* the ctcp message. it can return null, or it can return a malloced string
* that will be inserted into the oringal message at the point of the ctcp.
* if null is returned, nothing is added to the original message
*/
struct _CtcpEntry;
typedef char *((*CTCP_Handler) (struct _CtcpEntry *, char *, char *, char *));
typedef struct _CtcpEntry
{
char *name; /* name of ctcp datatag */
int id; /* index of this ctcp command */
int flag; /* Action modifiers */
char *desc; /* description returned by ctcp clientinfo */
CTCP_Handler func; /* function that does the dirty deed */
CTCP_Handler repl; /* Function that is called for reply */
} CtcpEntry;
struct _CtcpEntryDll;
typedef char *((*CTCP_DllHandler) (struct _CtcpEntryDll *, char *, char *, char *));
typedef struct _CtcpEntryDll
{
struct _CtcpEntryDll *next;
char *name; /* name of ctcp datatag */
char *module; /* name of module associated with */
int id; /* index of this ctcp command */
int flag; /* Action modifiers */
char *desc; /* description returned by ctcp clientinfo */
CTCP_DllHandler func; /* function that does the dirty deed */
CTCP_DllHandler repl; /* Function that is called for reply */
} CtcpEntryDll;
struct transfer_struct {
unsigned short packet_id;
unsigned char byteorder;
u_32int_t byteoffset;
};
typedef struct _File_Stat {
struct _File_Stat *next;
char *filename;
long filesize;
} FileStat;
typedef struct _File_List {
struct _File_List *next;
char * description;
char * notes;
FileStat *filename;
char * nick;
int packnumber;
int numberfiles;
double filesize;
double minspeed;
int gets;
time_t timequeue;
} FileList;
#if 0
typedef struct DCC_struct
{
struct DCC_struct *next;
char *user;
char *userhost;
unsigned int flags;
int read;
int write;
int file;
u_32int_t filesize;
int dccnum;
int eof;
char *description;
char *othername;
struct in_addr remote;
u_short remport;
u_short local_port;
u_32int_t bytes_read;
u_32int_t bytes_sent;
int window_sent;
int window_max;
int in_dcc_chat;
int echo;
int in_ftp;
int dcc_fast;
struct timeval lasttime;
struct timeval starttime;
char *buffer;
char *cksum;
char *encrypt;
char *dccbuffer;
u_32int_t packets_total;
u_32int_t packets_transfer;
struct transfer_struct transfer_orders;
void (*dcc_handler) (struct DCC_struct *, char *);
} DCC_list;
#endif
/* Hold: your general doubly-linked list type structure */
typedef struct HoldStru
{
char *str;
struct HoldStru *next;
struct HoldStru *prev;
int logged;
} Hold;
typedef struct lastlog_stru
{
int level;
char *msg;
time_t time;
struct lastlog_stru *next;
struct lastlog_stru *prev;
} Lastlog;
struct ScreenStru; /* ooh! */
#define NICK_CHANOP 0x0001
#define NICK_HALFOP 0x0002
#define NICK_AWAY 0x0004
#define NICK_VOICE 0x0008
#define NICK_IRCOP 0x0010
#define nick_isop(s) (s->flags & NICK_CHANOP)
#define nick_isvoice(s) (s->flags & NICK_VOICE)
#define nick_ishalfop(s) (s->flags & NICK_HALFOP)
#define nick_isaway(s) (s->flags & NICK_AWAY)
#define nick_isircop(s) (s->flags & NICK_IRCOP)
/* NickList: structure for the list of nicknames of people on a channel */
typedef struct nick_stru
{
struct nick_stru *next; /* pointer to next nickname entry */
char *nick; /* nickname of person on channel */
char *host;
char *ip;
char *server;
int serverhops;
unsigned ip_count;
UserList *userlist;
ShitList *shitlist;
unsigned flags;
time_t idle_time;
unsigned floodcount;
time_t floodtime;
unsigned nickcount;
time_t nicktime;
unsigned kickcount;
time_t kicktime;
unsigned joincount;
time_t jointime;
unsigned dopcount;
time_t doptime;
unsigned bancount;
time_t bantime;
time_t created;
unsigned stat_kicks; /* Total kicks done by user */
unsigned stat_dops; /* Total deops done by user */
unsigned stat_ops; /* Total ops done by user */
unsigned stat_hops;
unsigned stat_dhops;
unsigned stat_eban;
unsigned stat_uneban;
unsigned stat_bans; /* Total bans done by user */
unsigned stat_unbans; /* Total unbans done by user */
unsigned stat_nicks; /* Total nicks done by user */
unsigned stat_pub; /* Total publics sent by user */
unsigned stat_topics; /* Total topics set by user */
unsigned sent_reop;
time_t sent_reop_time;
unsigned sent_voice;
time_t sent_voice_time;
unsigned sent_deop;
time_t sent_deop_time;
unsigned need_userhost; /* on join we send a userhost for this nick */
unsigned check_clone; /* added for builtin clone detect */
} NickList;
typedef struct DisplayStru
{
char *line;
int linetype;
struct DisplayStru *next;
struct DisplayStru *prev;
} Display;
typedef struct WinSetStru
{
/* These are copied over from /set's */
char *status_mode;
char *status_topic;
char *status_umode;
char *status_hold_lines;
char *status_hold;
char *status_voice;
char *status_channel;
char *status_notify;
char *status_oper_kills;
char *status_lag;
char *status_mail;
char *status_query;
char *status_server;
char *status_clock;
char *status_users;
char *status_away;
char *status_dcccount;
char *status_cdcccount;
char *status_chanop;
char *status_cpu_saver;
char *status_msgcount;
char *status_nick;
char *status_flag;
char *status_halfop;
/* These are the various formats from a window make_status() creates these */
char *mode_format;
char *umode_format;
char *topic_format;
char *query_format;
char *clock_format;
char *hold_lines_format;
char *channel_format;
char *mail_format;
char *server_format;
char *notify_format;
char *kills_format;
char *status_users_format;
char *lag_format;
char *cpu_saver_format;
char *msgcount_format;
char *dcccount_format;
char *cdcc_format;
char *nick_format;
char *flag_format;
char *away_format;
#define MAX_FUNCTIONS 36
char *status_user_formats0;
char *status_user_formats1;
char *status_user_formats2;
char *status_user_formats3;
char *status_user_formats4;
char *status_user_formats5;
char *status_user_formats6;
char *status_user_formats7;
char *status_user_formats8;
char *status_user_formats9;
char *status_user_formats10;
char *status_user_formats11;
char *status_user_formats12;
char *status_user_formats13;
char *status_user_formats14;
char *status_user_formats15;
char *status_user_formats16;
char *status_user_formats17;
char *status_user_formats18;
char *status_user_formats19;
char *status_user_formats20;
char *status_user_formats21;
char *status_user_formats22;
char *status_user_formats23;
char *status_user_formats24;
char *status_user_formats25;
char *status_user_formats26;
char *status_user_formats27;
char *status_user_formats28;
char *status_user_formats29;
char *status_user_formats30;
char *status_user_formats31;
char *status_user_formats32;
char *status_user_formats33;
char *status_user_formats34;
char *status_user_formats35;
char *status_user_formats36;
char *status_user_formats37;
char *status_user_formats38;
char *status_user_formats39;
char *status_scrollback;
char *status_window;
char *status_line[3]; /* The status lines string current display */
char *status_format[4]; /* holds formated status info from build_status */
char *format_status[4]; /* holds raw format for window from /set */
char *window_special_format;
} WSet;
typedef struct WindowStru
{
char *name;
unsigned int refnum; /* the unique reference number,
* assigned by IRCII */
int server; /* server index */
int last_server; /* previous server index */
int top; /* The top line of the window, screen
* coordinates */
int bottom; /* The botton line of the window, screen
* coordinates */
int cursor; /* The cursor position in the window, window
* relative coordinates */
int line_cnt; /* counter of number of lines displayed in
* window */
int absolute_size;
int noscroll; /* true, window scrolls... false window wraps */
int scratch_line; /* True if a scratch window */
int old_size; /* if new_size != display_size, resize_display */
int visible; /* true, window ise, window is drawn... false window is hidden */
int update; /* window needs updating flag */
int repaint_start;
int repaint_end;
unsigned miscflags; /* Miscellaneous flags. */
int beep_always; /* should this window beep when hidden */
unsigned long notify_level;
unsigned long window_level; /* The LEVEL of the window, determines what
* messages go to it */
int skip;
int columns;
char *prompt; /* A prompt string, usually set by EXEC'd process */
int double_status; /* number of status lines */
int status_split; /* split status to top and bottom */
int status_lines; /* replacement for menu struct */
char *(*status_func[4][MAX_FUNCTIONS]) (struct WindowStru *);
int func_cnt[4];
WSet *wset;
Display *top_of_scrollback, /* Start of the scrollback buffer */
*top_of_display, /* Where the viewport starts */
*ceiling_of_display, /* the furthest top of display */
*display_ip, /* Where next line goes in rite() */
*scrollback_point,
*screen_hold; /* Where t_o_d was at start of sb */
int display_buffer_size; /* How big the scrollback buffer is */
int display_buffer_max; /* How big its supposed to be */
int display_size; /* How big the window is - status */
int lines_scrolled_back; /* Where window is relatively */
int hold_mode; /* True if we want to hold stuff */
int holding_something; /* True if we ARE holding something */
int held_displayed; /* lines displayed since last hold */
int lines_displayed; /* Lines held since last unhold */
int lines_held; /* Lines currently being held */
int last_lines_held; /* Last time we updated "lines held" */
int distance_from_display;
char *current_channel; /* Window's current channel */
char *waiting_channel;
char *bind_channel;
char *query_nick; /* User being QUERY'ied in this window */
char *query_host;
char *query_cmd;
NickList *nicks; /* List of nicks that will go to window */
/* lastlog stuff */
Lastlog *lastlog_head; /* pointer to top of lastlog list */
Lastlog *lastlog_tail; /* pointer to bottom of lastlog list */
unsigned long lastlog_level; /* The LASTLOG_LEVEL, determines what
* messages go to lastlog */
int lastlog_size; /* number of messages in lastlog */
int lastlog_max; /* Max number of msgs in lastlog */
char *logfile; /* window's logfile name */
/* window log stuff */
int log; /* true, file logging for window is on */
FILE *log_fp; /* file pointer for the log file */
int window_display; /* should we display to this window */
void (*output_func) (struct WindowStru *, const char *);
void (*status_output_func) (struct WindowStru *);
struct ScreenStru *screen;
struct WindowStru *next; /* pointer to next entry in window list (null
* is end) */
struct WindowStru *prev; /* pointer to previous entry in window list
* (null is end) */
int deceased; /* set when window is killed */
int in_more;
int save_hold_mode;
int mangler;
void (*update_status) (struct WindowStru *);
void (*update_input) (struct WindowStru *);
} Window;
/*
* WindowStack: The structure for the POP, PUSH, and STACK functions. A
* simple linked list with window refnums as the data
*/
typedef struct window_stack_stru
{
unsigned int refnum;
struct window_stack_stru *next;
} WindowStack;
typedef struct
{
int top;
int bottom;
int position;
} ShrinkInfo;
typedef struct PromptStru
{
char *prompt;
char *data;
int type;
int echo;
void (*func) (char *, char *);
struct PromptStru *next;
} WaitPrompt;
typedef struct ScreenStru
{
int screennum;
Window *current_window;
unsigned int last_window_refnum; /* reference number of the
* window that was last
* the current_window */
Window *window_list; /* List of all visible
* windows */
Window *window_list_end; /* end of visible window
* list */
Window *cursor_window; /* Last window to have
* something written to it */
int visible_windows; /* total number of windows */
WindowStack *window_stack; /* the windows here */
struct ScreenStru *prev; /* These are the Screen list */
struct ScreenStru *next; /* pointers */
FILE *fpin; /* These are the file pointers */
int fdin; /* and descriptions for the */
FILE *fpout; /* screen's input/output */
int fdout;
char input_buffer[INPUT_BUFFER_SIZE+2]; /* the input buffer */
int buffer_pos; /* and the positions for the */
int buffer_min_pos; /* screen */
int input_cursor;
char *input_prompt;
int input_visible;
int input_zone_len;
int input_start_zone;
int input_end_zone;
int input_prompt_len;
int input_prompt_malloc;
int input_line;
Lastlog *lastlog_hold;
char saved_input_buffer[INPUT_BUFFER_SIZE+2];
int saved_buffer_pos;
int saved_min_buffer_pos;
WaitPrompt *promptlist;
int meta_hit;
int quote_hit; /* true if a key bound to
* QUOTE_CHARACTER has been
* hit. */
int digraph_hit; /* A digraph key has been hit */
unsigned char digraph_first;
char *redirect_name;
char *redirect_token;
int redirect_server;
char *tty_name;
int co;
int li;
int old_co;
int old_li;
#ifdef WINNT
HANDLE hStdin;
HANDLE hStdout;
#endif
#ifdef GUI
int nicklist;
#endif
#if defined(__EMXPM__) || defined(WIN32)
#ifndef WIN32
HVPS hvps,
hvpsnick;
#endif
HWND hwndFrame,
hwndClient,
hwndMenu,
hwndLeft,
hwndRight,
hwndnickscroll,
hwndscroll;
int VIO_font_width,
VIO_font_height,
spos, mpos, codepage;
char aviokbdbuffer[256];
#elif defined(GTK)
GtkWidget *window,
*viewport,
*menubar,
*scroller,
*clist,
*scrolledwindow,
*box;
GdkFont *font;
char *fontname;
GtkAdjustment *adjust;
GtkNotebookPage *page;
gint gtkio;
int pipe[2];
int maxfontwidth,
maxfontheight;
#endif
char *menu; /* windows menu struct */
int alive;
} Screen;
/* BanList: structure for the list of bans on a channel */
typedef struct ban_stru
{
struct ban_stru *next; /* pointer to next ban entry */
char *ban; /* the ban */
char *setby; /* person who set the ban */
int sent_unban; /* flag if sent unban or not */
time_t sent_unban_time; /* sent unban's time */
time_t time; /* time ban was set */
int count;
} BanList;
typedef struct _cset_stru
{
struct _cset_stru *next;
char *channel;
int set_aop; /* channel specific /set */
int set_annoy_kick; /* channel specific /set */
int set_ainv; /* channel specific /set */
int set_auto_join_on_invite;
int set_auto_rejoin; /* channel specific /set */
int set_ctcp_flood_ban;
int set_deop_on_deopflood; /* channel specific /set */
int set_deop_on_kickflood; /* channel specific /set */
int set_deopflood; /* channel specific /set */
int set_deopflood_time; /* channel specific /set */
int set_hacking; /* channel specific /set */
int set_kick_on_deopflood; /* channel specific /set */
int set_kick_on_joinflood;
int set_kick_on_kickflood; /* channel specific /set */
int set_kick_on_nickflood; /* channel specific /set */
int set_kick_on_pubflood; /* channel specific /set */
int set_kickflood; /* channel specific /set */
int set_kickflood_time; /* channel specific /set */
int set_nickflood; /* channel specific /set */
int set_nickflood_time; /* channel specific /set */
int set_joinflood; /* channel specific /set */
int set_joinflood_time; /* channel specific /set */
int set_pubflood; /* channel specific /set */
int set_pubflood_ignore; /* channel ignore time val */
int set_pubflood_time; /* channel specific /set */
int set_userlist; /* channel specific /set */
int set_shitlist; /* channel specific /set */
int set_lame_ident; /* channel specific /set */
int set_lamelist; /* channel specific /set */
int set_kick_if_banned; /* channel specific /set */
int bitch_mode; /* channel specific /set */
int compress_modes; /* channel specific /set */
int set_kick_ops;
int set_auto_limit;
int channel_log;
int set_bantime;
char *channel_log_file;
char *chanmode;
unsigned long channel_log_level;
char *log_level;
} CSetList;
typedef struct chan_flags_stru {
unsigned int got_modes : 1;
unsigned int got_who : 1;
unsigned int got_bans : 1;
unsigned int got_exempt : 1;
} chan_flags;
/* ChannelList: structure for the list of channels you are current on */
typedef struct channel_stru
{
struct channel_stru *next; /* pointer to next channel entry */
char *channel; /* channel name */
Window *window; /* the window that the channel is "on" */
int refnum; /* window refnum */
int server; /* server index for this channel */
u_long mode; /* Current mode settings for channel */
u_long i_mode; /* channel mode for cached string */
char *s_mode; /* cached string version of modes */
char *topic;
int topic_lock;
char *modelock_key;
long modelock_val;
int limit; /* max users for the channel */
time_t limit_time; /* time of last limit set */
char *key; /* key for this channel */
char have_op; /* true if you are a channel op */
char hop; /* true if you are a half op */
char voice; /* true if you are voice */
char bound; /* true if channel is bound */
char *chanpass; /* if TS4 then this has the channel pass */
char connected; /* true if this channel is actually connected */
HashEntry NickListTable[NICKLIST_HASHSIZE];
chan_flags flags;
time_t max_idle; /* max idle time for this channel */
int tog_limit;
int check_idle; /* toggle idle check */
int do_scan; /* flag for checking auto stuff */
struct timeval channel_create; /* time for channel creation */
struct timeval join_time; /* time of last join */
int stats_ops; /* total ops I have seen in channel */
int stats_dops; /* total dops I have seen in channel */
int stats_bans; /* total bans I have seen in channel */
int stats_unbans; /* total unbans I have seen in channel */
int stats_sops; /* total server ops I have seen in channel */
int stats_sdops; /* total server dops I have seen in channel */
int stats_shops;
int stats_sdehops;
int stats_sebans;
int stats_sunebans;
int stats_sbans; /* total server bans I have seen in channel */
int stats_sunbans; /* total server unbans I have seen in channel */
int stats_topics; /* total topics I have seen in channel */
int stats_kicks; /* total kicks I have seen in channel */
int stats_pubs; /* total pubs I have seen in channel */
int stats_parts; /* total parts I have seen in channel */
int stats_signoffs; /* total signoffs I have seen in channel */
int stats_joins; /* total joins I have seen in channel */
int stats_ebans;
int stats_unebans;
int stats_chanpass;
int stats_hops;
int stats_dhops;
CSetList *csets; /* All Channel sets */
int msglog_on;
FILE *msglog_fp;
char *logfile;
int totalnicks; /* total number of users in channel */
int maxnicks; /* max number of users I have seen */
time_t maxnickstime; /* time of max users */
int totalbans; /* total numbers of bans on channel */
BanList *bans; /* pointer to list of bans on channel */
BanList *exemptbans; /* pointer to list of bans on channel */
int maxbans; /* max number of bans I have seen */
time_t maxbanstime; /* time of max bans */
struct {
char *op;
int type;
} cmode[4];
char *mode_buf;
int mode_len;
} ChannelList;
typedef struct list_stru
{
struct list_stru *next;
char *name;
} List;
typedef struct flood_stru
{
struct flood_stru *next;
char *name;
char *host;
char *channel;
unsigned flags;
char flood;
unsigned long cnt;
struct timeval start;
} Flooding;
typedef struct _ajoin_list
{
struct _ajoin_list *next;
char *name;
char *key;
char *group;
int server;
int window;
int ajoin_list;
} AJoinList;
/* a structure for the timer list */
typedef struct timerlist_stru
{
struct timerlist_stru *next;
char ref[REFNUM_MAX + 1];
unsigned long refno;
struct timeval time;
int (*callback) (void *, char *);
char *command;
char *subargs;
int events;
time_t interval;
int server;
int window;
char *whom;
int delete;
} TimerList;
typedef struct nicktab_stru
{
struct nicktab_stru *next;
char *nick;
char *type;
} NickTab;
typedef struct clonelist_stru
{
struct clonelist_stru *next;
char *number;
char *server;
int port;
int socket_num;
int warn;
} CloneList;
typedef struct IgnoreStru
{
struct IgnoreStru *next;
char *nick;
long type;
long dont;
long high;
long cgrep;
int num;
char *pre_msg_high;
char *pre_nick_high;
char *post_high;
struct IgnoreStru *looking;
struct IgnoreStru *except;
} Ignore;
/* IrcVariable: structure for each variable in the variable table */
typedef struct
{
char *name; /* what the user types */
u_32int_t hash;
int type; /* variable types, see below */
int integer; /* int value of variable */
char *string; /* string value of variable */
void (*func)(Window *, char *, int); /* function to do every time variable is set */
char int_flags; /* internal flags to the variable */
unsigned short flags; /* flags for this variable */
} IrcVariable;
/* IrcVariableDll: structure for each variable in the dll variable table */
typedef struct _ircvariable
{
struct _ircvariable *next;
char *name; /* what the user types */
char *module;
int type; /* variable types, see below */
int integer; /* int value of variable */
char *string; /* string value of variable */
void (*func)(Window *, char *, int); /* function to do every time variable is set */
char int_flags; /* internal flags to the variable */
unsigned short flags; /* flags for this variable */
} IrcVariableDll;
typedef struct _virtuals_struc
{
struct _virtuals_struc *next;
char *address; /* IPv4 or IPv6 address */
char *hostname;
} Virtuals;
#define ALIAS_MAXARGS 32
struct ArgListT {
char * vars[ALIAS_MAXARGS];
char * defaults[ALIAS_MAXARGS];
int void_flag;
int dot_flag;
};
typedef struct ArgListT ArgList;
typedef struct AliasItemStru
{
char *name; /* name of alias */
u_32int_t hash;
char *stuff; /* what the alias is */
char *stub; /* the file its stubbed to */
int global; /* set if loaded from global' */
int cache_revoked; /* Cache revocation index. */
int debug; /* debug invoke? */
ArgList *arglist;
} Alias;
typedef Window *(*window_func) (Window *, char **args, char *usage);
typedef struct window_ops_T {
char *command;
window_func func;
char *usage;
} window_ops;
typedef struct command_struct
{
IrcCommand *command_list;
window_ops *window_commands;
BuiltInFunctions *functions;
IrcVariable *variables;
IrcVariable *fsets;
/* CSetArray *csets;
WSetArray *wsets;*/
HashEntry *parse;
} CommandStruct;
typedef void (*dcc_function) (char *, char *);
typedef struct _DCC_dllcommands
{
struct _DCC_dllcommands *next;
char *name;
dcc_function function;
char *help;
char *module;
} DCC_dllcommands;
typedef struct _dcc_internal {
u_32int_t struct_type; /* type of socket */
char *user; /* user being dcc'd */
char *userhost; /* possible userhost */
int server; /* server from which this user came from */
char *encrypt; /* password used */
char *filename; /* filename without path or type*/
char *othername; /* possible other info */
u_32int_t bytes_read; /* number of bytes read */
u_32int_t bytes_sent; /* number of bytes sent */
struct timeval starttime; /* when did this dcc start */
struct timeval lasttime; /* last time of activity */
struct transfer_struct transfer_orders; /* structure for resending files */
int file; /* file handle open file */
u_32int_t filesize; /* the filesize to get */
u_32int_t packets; /* number of blocksize packets received */
int eof; /* in EOF condition. */
int blocksize; /* this dcc's blocksize */
int dcc_fast; /* set if non-blocking used */
short readwaiting; /* expect a data on the port */
unsigned short remport; /* the remport we are connected to */
unsigned short localport; /* the localport we are on */
struct in_addr remote; /* this dcc's remote address */
unsigned int dccnum; /* dcc number we are at */
UserList *ul; /* is this person on the userlist */
} DCC_int;
typedef struct _dcc_struct_type {
u_32int_t struct_type;
} dcc_struct_type;
#endif /* STRUCT_H_ */