1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
|
/*
* server.h: header for server.c
*
* Copyright 1990 Michael Sandrof
* Copyright 1997 EPIC Software Labs
* See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT
*/
#ifndef __server_h__
#define __server_h__
/* To get definition of Who, Ison, and Userhost queues. */
#include "who.h"
#ifdef NEED_SERVER_LIST
/* To get definition of Notify */
#include "notify.h"
#include "alist.h"
/* XXXX Ick. Gross. Bad. XXX */
struct notify_stru;
typedef array A005;
typedef struct
{
char *name;
u_32int_t hash;
char *value;
} A005_item;
typedef struct WaitCmdstru
{
char *stuff;
struct WaitCmdstru *next;
} WaitCmd;
/* 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 */
int port; /* port number on that server */
char *group; /* Server group it belongs to */
char *nickname; /* Authoritative nickname for us */
char *s_nickname; /* last NICK command sent */
char *d_nickname; /* Default nickname to use */
char *unique_id; /* Unique ID (for ircnet) */
size_t fudge_factor; /* How much s_nickname's fudged */
int nickname_pending; /* Is a NICK command pending? */
int resetting_nickname; /* Is a nickname reset in progress? */
int registration_pending; /* Is a registration going on ? */
int registered; /* true if registration is assured */
int rejoined_channels; /* Has we tried to auto-rejoin? */
char *userhost; /* my userhost on this server */
char *away; /* away message for this server */
int operator; /* true if operator */
int version; /* the version of the server -
* defined above */
int server2_8; /* defined if we get an 001 numeric */
char *version_string; /* what is says */
long flags; /* Various flags */
long flags2; /* More Various flags */
char *umodes; /* Possible user modes */
char umode[54]; /* Currently set user modes */
int s_takes_arg; /* Set to 1 if s user mode has arg */
int des; /* file descriptor to server */
int eof; /* eof flag for server */
int sent; /* set if something has been sent,
* used for redirect */
char *redirect; /* Who we're redirecting to here */
WhoEntry * who_queue; /* Who queue */
IsonEntry * ison_wait; /* Ison wait queue */
IsonEntry * ison_queue; /* Ison queue */
UserhostEntry * userhost_queue; /* Userhost queue */
SS local_sockname; /* sockname of this connection */
SS remote_sockname; /* sockname of this connection */
SS uh_addr; /* ip address the server sees */
NotifyList notify_list; /* Notify list for this server */
int reconnects; /* Number of reconnects done */
char *cookie; /* Erf/TS4 "cookie" value */
int save_channels; /* True if abnormal connection */
int line_length; /* How long a protocol command may be */
int max_cached_chan_size; /* Bigger channels won't cache U@H */
int closing; /* True if close_server called */
int reconnect_to; /* Server to connect to on EOF */
char *quit_message; /* Where we stash a quit message */
A005 a005; /* 005 settings kept kere. */
int funny_min; /* Funny stuff */
int funny_max;
int funny_flags;
char * funny_match;
#ifdef HAVE_SSL
SSL_CTX* ctx;
SSL_METHOD* meth;
#endif
void * ssl_fd;
int try_ssl; /* SSL requested on next connection. */
int ssl_enabled; /* Current SSL status. */
int doing_privmsg;
int doing_notice;
int doing_ctcp;
int waiting_in;
int waiting_out;
WaitCmd * start_wait_list;
WaitCmd * end_wait_list;
char * invite_channel;
char * last_notify_nick;
char * joined_nick;
char * public_nick;
char * recv_nick;
char * sent_nick;
char * sent_body;
int (*dgets) (char *, int, int, void *);
} Server;
extern Server **server_list;
#endif /* NEED_SERVER_LIST */
extern int number_of_servers;
extern int connected_to_server;
extern int primary_server;
extern int from_server;
extern int last_server;
extern int parsing_server_index;
#ifdef NEED_SERVER_LIST
static __inline__ Server * get_server (int server)
{
if (server == -1 && from_server >= 0)
server = from_server;
if (server < 0 || server >= number_of_servers)
return NULL;
return server_list[server];
}
/*
* These two macros do bounds checking on server refnums that are
* passed into various server functions
*/
#define CHECK_SERVER(x) \
{ \
if (!get_server(x)) \
return; \
}
#define CHECK_SERVER_RET(x, y) \
{ \
if (!get_server(x)) \
return (y); \
}
#define __FROMSERV get_server(from_server)
#define SERVER(x) get_server(x)
#endif /* NEED_SERVER_LIST */
#define NOSERV -2
#define FROMSERV -1
/*
* type definition to distinguish different
* server versions
*/
#define Server2_8 1
#define Server2_9 2
#define Server2_10 3
#define Server_u2_8 4
#define Server_u2_9 5
#define Server_u2_10 6
#define Server_u3_0 7
/* Funny stuff */
#define FUNNY_PUBLIC 1 << 0
#define FUNNY_PRIVATE 1 << 1
#define FUNNY_TOPIC 1 << 2
#define FUNNY_USERS 1 << 4
#define FUNNY_NAME 1 << 5
BUILT_IN_COMMAND(servercmd);
BUILT_IN_COMMAND(disconnectcmd);
void add_to_server_list (const char *, int,
const char *, const char *,
const char *, const char *,
int);
int find_in_server_list (const char *, int);
void destroy_server_list (void);
int find_server_refnum (char *, char **rest);
int parse_server_index (const char *, int);
void parse_server_info (char **, char **, char **,
char **, char **, char **);
void build_server_list (char *, char *);
int read_server_file (void);
void display_server_list (void);
char * create_server_list (void); /* MALLOC */
int server_list_size (void);
void do_server (fd_set *, fd_set *);
void flush_server (int);
void send_to_server (const char *, ...) __A(1);
void send_to_aserver (int, const char *, ...) __A(2);
void send_to_aserver_raw (int, size_t len, const char *buffer);
int connect_to_new_server (int, int, int);
int close_all_servers (const char *);
void close_server (int, const char *);
void set_server_away (int, const char *);
const char * get_server_away (int);
const char * get_possible_umodes (int);
void set_possible_umodes (int, const char *);
const char * get_umode (int);
void clear_user_modes (int);
void reinstate_user_modes (void);
void update_user_mode (const char *);
void set_server_flag (int, int, int);
int get_server_flag (int, int);
void set_server_version (int, int);
int get_server_version (int);
void set_server_name (int, const char *);
const char * get_server_name (int);
void set_server_itsname (int, const char *);
const char * get_server_itsname (int);
void set_server_group (int, const char *);
const char * get_server_group (int);
const char * get_server_type (int);
void set_server_version_string (int, const char *);
const char * get_server_version_string (int);
int get_server_isssl (int);
const char * get_server_cipher (int);
void register_server (int, const char *);
void server_registration_is_not_pending (int);
void password_sendline (char *, char *);
char * set_server_password (int, const char *);
int is_server_open (int);
int is_server_registered (int);
void server_is_registered (int, int);
int auto_reconnect_callback (void *);
int server_reconnects_to (int, int);
int reconnect (int, int);
int get_server_port (int);
int get_server_local_port (int);
SS get_server_local_addr (int);
SS get_server_uh_addr (int);
const char * get_server_userhost (int);
void got_my_userhost (int, UserhostItem *,
const char *, const char *);
int get_server_operator (int);
void set_server_operator (int, int);
void use_server_cookie (int);
const char * get_server_nickname (int);
int is_me (int, const char *);
void change_server_nickname (int, const char *);
const char * get_pending_nickname (int);
void accept_server_nickname (int, const char *);
void fudge_nickname (int);
void nickname_sendline (char *, char *);
void reset_nickname (int);
void set_server_redirect (int, const char *);
const char * get_server_redirect (int);
int check_server_redirect (int, const char *);
void save_servers (FILE *);
void server_did_rejoin_channels (int);
int did_server_rejoin_channels (int);
void clear_reconnect_counts (void);
int get_server_enable_ssl (int);
void set_server_enable_ssl (int, int);
void make_005 (int);
void destroy_005 (int);
const char* get_server_005 (int, const char *);
void set_server_005 (int, char*, char*);
void server_hard_wait (int);
void server_passive_wait (int, const char *);
int check_server_wait (int, const char *);
void set_server_doing_privmsg (int, int);
int get_server_doing_privmsg (int);
void set_server_doing_notice (int, int);
int get_server_doing_notice (int);
void set_server_doing_ctcp (int, int);
int get_server_doing_ctcp (int);
void set_server_nickname_pending (int, int);
int get_server_nickname_pending (int);
void set_server_sent (int, int);
int get_server_sent (int);
void set_server_try_ssl (int, int);
int get_server_try_ssl (int);
void set_server_ssl_enabled (int, int);
int get_server_ssl_enabled (int);
void set_server_save_channels (int, int);
int get_server_save_channels (int);
void set_server_protocol_state (int, int);
int get_server_protocol_state (int);
void set_server_line_length (int, int);
int get_server_line_length (int);
void set_server_max_cached_chan_size (int, int);
int get_server_max_cached_chan_size (int);
void set_server_invite_channel (int, const char *);
const char * get_server_invite_channel (int);
void set_server_last_notify (int, const char *);
const char * get_server_last_notify (int);
void set_server_joined_nick (int, const char *);
const char * get_server_joined_nick (int);
void set_server_public_nick (int, const char *);
const char * get_server_public_nick (int);
void set_server_recv_nick (int, const char *);
const char * get_server_recv_nick (int);
void set_server_sent_nick (int, const char *);
const char * get_server_sent_nick (int);
void set_server_sent_body (int, const char *);
const char * get_server_sent_body (int);
void set_server_quit_message (int, const char *message);
const char * get_server_quit_message (int);
void set_server_cookie (int, const char *);
const char * get_server_cookie (int);
void set_server_last_notify_nick (int, const char *);
const char * get_server_last_notify_nick (int);
void set_server_unique_id (int, const char *);
const char * get_server_unique_id (int);
void set_server_funny_min (int, int);
int get_server_funny_min (int);
void set_server_funny_max (int, int);
int get_server_funny_max (int);
void set_server_funny_flags (int, int);
int get_server_funny_flags (int);
void set_server_funny_match (int, const char *);
const char * get_server_funny_match (int);
void set_server_funny_stuff (int, int, int, int, const char *);
void set_server_window_count (int, int);
int get_server_window_count (int);
char * serverctl (char *);
#endif /* _SERVER_H_ */
|