bitchx/include/server.h

426 lines
12 KiB
C

/*
* server.h: header for server.c
*
* Written By Michael Sandrof
*
* Copyright(c) 1990
*
* See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT
*
* @(#)$Id$
*/
#ifndef __server_h_
#define __server_h_
/* for ChannelList */
#include "who.h"
#include "names.h"
#include "struct.h"
#include "ssl.h"
/*
* type definition to distinguish different
* server versions
*/
#define Server2_7 0
#define Server2_8 1
#define Server2_9 2
#define Server2_10 3
#define Server2_8ts4 4
#define Server2_8hybrid 5
#define Server2_8hybrid6 6
#define Server2_8comstud 7
#define Server_u2_8 10
#define Server_u2_9 11
#define Server_u2_10 12
#define Server_u3_0 13
struct notify_stru;
typedef struct _queued_send
{
struct _queued_send *next;
int server;
int des;
char *buffer;
} QueueSend;
typedef struct _sping_ {
struct _sping_ *next;
char *sname;
#ifdef HAVE_GETTIMEOFDAY
struct timeval in_sping;
#else
time_t in_sping;
#endif
} Sping;
/* Server: a structure for the server_list */
typedef struct
{
char *name; /* the name of the server */
char *itsname; /* the server's idea of its name */
char *password; /* password for that server */
char *snetwork;
char *cookie; /* TS4 op cookie */
int port; /* port number on that server */
char *nickname; /* nickname for this server */
char *s_nickname; /* last NICK command sent */
char *d_nickname; /* Default nickname to use */
char *userhost;
int fudge_factor; /* How much s_nickname's fudged */
int nickname_pending; /* Is a NICK command pending? */
int orignick_pending; /* Is a ORIGNICK command pending? */
int server_change_pending; /* We are waiting for a server change */
char *away; /* away message for this server */
time_t awaytime;
int operator; /* true if operator */
int server2_8;
int version; /* the version of the server -
* defined above */
char *version_string; /* what is says */
int whois; /* true if server sends numeric 318 */
long flags; /* Various flags */
long flags2;
int login_flags; /* server login flags */
char *umodes;
char umode[80]; /* User Mode storage */
int connected; /* true if connection is assured */
int write; /* write descriptor */
int read; /* read descriptior */
int eof; /* eof flag for server */
int motd; /* motd flag (used in notice.c) */
int sent; /* set if something has been sent,
* used for redirect */
int lag; /* indication of lag from server CDE*/
time_t lag_time; /* time ping sent to server CDE */
time_t last_msg; /* last mesg recieved from the server CDE */
time_t last_sent; /* last mesg time sent */
QueueSend *queue; /* queue of lines to send to a server */
char *buffer; /* buffer of what dgets() doesn't get */
WhoEntry *who_queue; /* Who queue */
IsonEntry *ison_queue; /* Ison queue */
UserhostEntry *userhost_queue;/* Userhost queue */
NotifyList notify_list; /* Notify list for this server */
NotifyList watch_list; /* Watch list for this server */
int watch; /* dalnet watch. available */
int copy_from; /* server to copy the channels from
* when (re)connecting */
int ctcp_dropped; /* */
int ctcp_not_warned; /* */
time_t ctcp_last_reply_time; /* used to limit flooding */
struct sockaddr_foobar local_addr; /* ip address of this connection */
struct sockaddr_foobar uh_addr; /* ip address of this connection */
struct sockaddr_foobar local_sockname; /* sockname of this connection */
ChannelList *chan_list; /* list of channels for this server */
int in_delay_notify;
int link_look;
time_t link_look_time;
int trace_flags;
int in_who_kill;
int in_trace_kill;
int stats_flags;
int in_timed_server;
char *redirect;
irc_server *tmplink; /* list of linked servers */
irc_server *server_last;/* list of linked servers */
irc_server *split_link; /* list of linked servers */
void (*parse_server) (char *); /* pointer to parser for this server */
unsigned long ircop_flags;
Sping *in_sping;
int reconnects;
int reconnecting;
int reconnect;
int closing;
int retries;
int try_once;
int old_server;
int req_server;
int server_change_refnum;
#ifdef NON_BLOCKING_CONNECTS
int connect_wait;
int c_server;
int from_server;
#endif
char *orignick;
time_t connect_time;
#if defined(HAVE_SSL) && !defined(IN_MODULE)
SSL_CTX* ctx;
int enable_ssl;
int ssl_error;
SSL* ssl_fd;
#endif
} Server;
typedef struct ser_group_list
{
struct ser_group_list *next;
char *name;
int number;
} SGroup;
typedef unsigned short ServerType;
int find_server_group (char *, int);
char * find_server_group_name (int);
void BX_add_to_server_list (char *, int, char *, char *, char *, int, int);
int BX_build_server_list (char *);
int connect_to_server (char *, int, int);
void BX_get_connected (int, int);
void try_connect (int, int);
int BX_read_server_file (char *);
void BX_display_server_list (void);
void do_server (fd_set *, fd_set *);
int BX_connect_to_server_by_refnum (int, int);
int BX_find_server_refnum (char *, char **);
void BX_set_server_cookie (int, char *);
char *BX_get_server_cookie (int);
extern int attempting_to_connect;
/*extern int number_of_servers;*/
extern int connected_to_server;
extern int never_connected;
extern int primary_server;
extern int from_server;
extern int last_server;
extern int parsing_server_index;
extern SGroup *server_group_list;
void servercmd (char *, char *, char *, char *);
char *BX_get_server_nickname (int);
char *BX_get_server_name (int);
char *BX_get_server_itsname (int);
char *get_server_pass (int);
int BX_find_in_server_list (char *, int);
char *BX_create_server_list (char *);
void BX_set_server_motd (int, int);
int BX_get_server_motd (int);
int BX_get_server_operator (int);
int BX_get_server_version (int);
void BX_close_server (int, char *);
int BX_is_server_connected (int);
void BX_flush_server (void);
void BX_set_server_operator (int, int);
void BX_server_is_connected (int, int);
int BX_parse_server_index (char *);
void BX_parse_server_info (char *, char **, char **, char **, char **);
long set_server_bits (fd_set *, fd_set *);
void BX_set_server_itsname (int, char *);
void BX_set_server_version (int, int);
char *BX_get_possible_umodes(int);
int BX_is_server_open (int);
int BX_get_server_port (int);
int BX_get_server_lag (int);
void BX_set_server_lag (int, int);
time_t get_server_lagtime (int);
void set_server_lagtime (int, time_t);
char *BX_set_server_password (int, char *);
void BX_set_server_nickname (int, char *);
void BX_set_server2_8 (int , int);
int BX_get_server2_8 (int);
void BX_close_all_server (void);
void disconnectcmd (char *, char *, char *, char *);
char *BX_get_umode (int);
int BX_server_list_size (void);
void BX_set_server_away (int, char *, int);
char * BX_get_server_away (int);
time_t get_server_awaytime (int);
void set_server_awaytime (int, time_t);
void server_redirect (int, char *);
int BX_check_server_redirect (char *);
char * BX_get_server_network (int);
void BX_server_disconnect (int, char *);
void send_from_server_queue (void);
void clear_sent_to_server (int);
int sent_to_server (int);
void BX_set_server_flag (int, int, int);
int BX_get_server_flag (int, int);
char * get_server_userhost (int);
void got_my_userhost (UserhostItem *item, char *nick, char *stuff);
void BX_set_server_version (int, int);
int BX_get_server_version (int);
void set_server_version_string (int, const char *);
char * get_server_version_string (int);
void BX_set_server_redirect (int, const char *);
char * BX_get_server_redirect (int);
void change_server_nickname (int, char *);
void register_server (int, char *);
void BX_fudge_nickname (int, int);
char *BX_get_pending_nickname (int);
void accept_server_nickname (int, char *);
void BX_reset_nickname (int);
void nick_command_is_pending (int, int);
void orignick_is_pending (int, int);
int is_orignick_pending (int);
void set_server_ircop_flags (int, unsigned long);
unsigned long get_server_ircop_flags (int);
extern void start_identd (void);
void set_server_in_timed (int, int);
int get_server_in_timed (int);
time_t get_server_lastmsg (int);
int close_all_servers (char *);
void close_unattached_servers (void);
void close_unattached_server(int);
void set_server_orignick (int, char *);
char *get_server_orignick (int);
ChannelList *BX_get_server_channels (int);
void BX_set_server_channels (int, ChannelList *);
void BX_add_server_channels (int, ChannelList *);
void set_server_channels_server (int);
int get_server_channels_server (int);
int BX_get_server_trace_flag (int);
void BX_set_server_trace_flag (int, int);
int BX_get_server_stat_flag (int);
void BX_set_server_stat_flag (int, int);
void set_server_reconnect (int, int);
void set_server_reconnecting (int, int);
void set_server_old_server (int, int);
void set_server_req_server (int, int);
void set_server_retries (int, int);
void set_server_try_once (int, int);
void set_server_change_refnum (int, int);
int get_server_reconnect (int);
int get_server_reconnecting (int);
int get_server_change_pending (int);
#ifdef HAVE_SSL
void set_server_ssl(int, int);
int get_server_ssl(int);
#endif
int is_server_valid(char *name, int server);
#if 0
#ifdef HAVE_GETTIMEOFDAY
struct timeval get_server_sping (int);
void set_server_sping (int, struct timeval);
#else
time_t get_server_sping (int);
void set_server_sping (int, time_t);
#endif
#endif
Sping *get_server_sping (int, char *);
void clear_server_sping (int, char *);
void set_server_sping (int, Sping *);
int BX_get_server_trace_kill (int);
void BX_set_server_trace_kill (int, int);
void BX_set_server_last_ctcp_time (int, time_t);
time_t BX_get_server_last_ctcp_time (int);
int BX_get_server_linklook (int);
void BX_set_server_linklook (int, int);
time_t BX_get_server_linklook_time (int);
void BX_set_server_linklook_time (int, time_t);
int BX_get_server_read (int);
int get_server_watch (int);
void set_server_watch (int, int);
void set_userhost_queue_top (int, UserhostEntry *);
UserhostEntry *userhost_queue_top (int);
void set_ison_queue_top (int, IsonEntry *);
IsonEntry *ison_queue_top (int);
void set_who_queue_top (int, WhoEntry *);
WhoEntry *who_queue_top (int);
void reconnect_server(int *, int *, time_t *);
int finalize_server_connect(int, int, int);
int next_server(int);
void do_idle_server (void);
/* XXXXX ick, gross, bad. XXXXX */
void password_sendline (char *data, char *line);
Server *BX_get_server_list (void);
int get_server_local_port (int);
struct sockaddr_foobar get_server_local_addr (int);
struct sockaddr_foobar get_server_uh_addr (int);
NotifyItem *get_server_notify_list (int);
void BX_send_msg_to_nicks (ChannelList *, int, char *);
void BX_send_msg_to_channels (ChannelList *, int, char *);
int BX_is_server_queue (void);
int save_servers (FILE *);
void add_split_server (char *, char *, int);
irc_server *check_split_server (char *);
void remove_split_server (int, char *);
void clean_split_server_list (int, time_t);
void write_server_list(char *);
void write_server_file (char *);
#define USER_MODE 0x0001
#define USER_MODE_A USER_MODE << 0
#define USER_MODE_B USER_MODE << 1
#define USER_MODE_C USER_MODE << 2
#define USER_MODE_D USER_MODE << 3
#define USER_MODE_E USER_MODE << 4
#define USER_MODE_F USER_MODE << 5
#define USER_MODE_G USER_MODE << 6
#define USER_MODE_H USER_MODE << 7
#define USER_MODE_I USER_MODE << 8
#define USER_MODE_J USER_MODE << 9
#define USER_MODE_K USER_MODE << 10
#define USER_MODE_L USER_MODE << 11
#define USER_MODE_M USER_MODE << 12
#define USER_MODE_N USER_MODE << 13
#define USER_MODE_O USER_MODE << 14
#define USER_MODE_P USER_MODE << 15
#define USER_MODE_Q USER_MODE << 16
#define USER_MODE_R USER_MODE << 17
#define USER_MODE_S USER_MODE << 18
#define USER_MODE_T USER_MODE << 19
#define USER_MODE_U USER_MODE << 20
#define USER_MODE_V USER_MODE << 21
#define USER_MODE_W USER_MODE << 22
#define USER_MODE_X USER_MODE << 23
#define USER_MODE_Y USER_MODE << 24
#define USER_MODE_Z USER_MODE << 25
#define LOGGED_IN USER_MODE << 29
#define CLOSE_PENDING USER_MODE << 30
#define CLOSING_SERVER USER_MODE << 31
extern const char *umodes;
#define IMMED_SEND 0
#define QUEUE_SEND 1
#define LLOOK_SPLIT 0
#define CHAN_SPLIT 1
#endif /* __server_h_ */