File: server.h

package info (click to toggle)
ircii-pana 75-2
  • links: PTS
  • area: main
  • in suites: slink
  • size: 4,448 kB
  • ctags: 7,556
  • sloc: ansic: 82,667; makefile: 989; tcl: 153; sh: 124
file content (257 lines) | stat: -rw-r--r-- 7,772 bytes parent folder | download
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
/*
 * server.h: header for server.c 
 *
 * Written By Michael Sandrof
 *
 * Copyright(c) 1990 
 *
 * See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT 
 *
 * @(#)$Id: server.h,v 1.30 1995/10/12 15:19:56 mrg Exp $
 */

#ifndef __server_h_
#define __server_h_
  
/* for ChannelList */
#include "who.h"
#include "names.h"
#include "struct.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 Server_u2_8     4
#define Server_u2_9     5
#define Server_u2_10	6
#define Server_u3_0     7
#define Server2_8ts4	8

struct notify_stru;


/* 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 */
	int     fudge_factor;           /* How much s_nickname's fudged */
	int     nickname_pending;       /* Is a NICK command pending? */

	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 */
	pid_t	pid;			/* process id of server */
	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 */

	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 */

	int	copy_from;		/* server to copy the channels from
					 * when (re)connecting */
	int	close_serv;		/* Server to close when we're LOGGED_IN */
	int	ctcp_dropped;		/* */
	int	ctcp_not_warned;	/* */
	time_t	ctcp_last_reply_time;	/* used to limit flooding */
	struct in_addr local_addr;	/* ip address 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;
	char	*redirect;

	struct	irc_server *tmplink;	/* list of linked servers */
	struct	irc_server *server_last;/* list of linked servers */
	struct	irc_server *split_link; /* list of linked servers */

	void	(*parse_server) (char *);	/* pointer to parser for this server */
	unsigned long ircop_flags;
#ifdef HAVE_GETTIMEOFDAY
	struct	timeval in_sping;
#else
	time_t	in_sping;
#endif
	int reconnects;
}	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	add_to_server_list (char *, int, char *, char *, char *, int);
	int	build_server_list (char *);
	int	connect_to_server (char *, int, int);
	void	get_connected (int, int);
	int	read_server_file (char *);
	void	display_server_list (void);
	void	do_server (fd_set *, fd_set *);
	int	connect_to_server_by_refnum (int, int);
	int	find_server_refnum (char *, char **);
	
	int	get_server_whois (int);

	void	set_server_cookie (int, char *);
	char	*get_server_cookie (int);
	
extern	int	save_chan_from;	/* to keep the channel list if all servers
				 * are lost */

extern	int	attempting_to_connect;
extern	int	number_of_servers;
extern	int	connected_to_server;
extern	int	never_connected;
extern	int	using_server_process;
extern	int	primary_server;
extern	int	from_server;
extern 	int	last_server;
extern	char	*connect_next_nick;
extern	char	*connect_next_password;
extern	int	parsing_server_index;
extern	SGroup	*server_group_list;

	void	servercmd (char *, char *, char *, char *);
	char	*get_server_nickname (int);
	char	*get_server_name (int);
	char	*get_server_itsname (int);
	void	set_server_flag (int, int, int);
	int	find_in_server_list (char *, int);
	char	*create_server_list (char *);
	void	set_server_motd (int, int);
	int	get_server_motd (int);
	int	get_server_operator (int);
	int	get_server_2_6_2 (int);
	int	get_server_version (int);
	void	close_server (int, char *);
	int	is_server_connected (int);
	void	flush_server (void);
	int	get_server_flag (int, int);
	void	set_server_operator (int, int);
	void	server_is_connected (int, int);
	int	parse_server_index (char *);
	void	parse_server_info (char *, char **, char **, char **, char **);
	void	set_server_bits (fd_set *, fd_set *);
	void	set_server_itsname (int, char *);
	void	set_server_version (int, int);
	char	*get_possible_umodes(int);
		
	int	is_server_open (int);
	int	get_server_port (int);
	
	int	get_server_lag (int);
	int	set_server_lag (int);
	
	char	*set_server_password (int, char *);
	void	set_server_nickname (int, char *);

	void	set_server2_8 (int , int);
	int	get_server2_8 (int);

	void	set_server_whois (int, int);
	void	close_all_server (void);
	void	disconnectcmd (char *, char *, char *, char *);
	char	*get_umode (int);
	int	server_list_size (void);
	void    set_server_away                 (int, char *);
	char *  get_server_away                 (int);
	void    server_redirect                 (int, char *);
	int     check_server_redirect           (char *);
	char *	get_server_network		(int);

extern        void    change_server_nickname  (int, char *);
extern        void    register_server         (int, char *);
extern        void    fudge_nickname          (int);
extern        char    *get_pending_nickname   (int);
extern        void    accept_server_nickname  (int, char *);
extern        void    reset_nickname          (void);

/* XXXXX ick, gross, bad.  XXXXX */
void password_sendline (char *data, char *line);
extern int user_changing_nickname;

		
/* server_list: the list of servers that the user can connect to,etc */
extern	Server	*server_list;

#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;

#endif /* __server_h_ */