aboutsummaryrefslogtreecommitdiffstats
path: root/include/s_serv.h
blob: 7d1561694fdc7a939b18f3b752fb7f0a72749ba2 (about) (plain) (blame)
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
/*
 *  ircd-ratbox: A slightly useful ircd.
 *  s_serv.h: A header for the server functions.
 *
 *  Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
 *  Copyright (C) 1996-2002 Hybrid Development Team
 *  Copyright (C) 2002-2004 ircd-ratbox development team
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
 *  USA
 */

#ifndef INCLUDED_serv_h
#define INCLUDED_serv_h

#include "defaults.h"
#include "capability.h"

/*
 * The number of seconds between calls to try_connections(). Fiddle with
 * this ONLY if you KNOW what you're doing!
 */
#define TRY_CONNECTIONS_TIME	60

/*
 * number of seconds to wait after server starts up, before
 * starting try_connections()
 * TOO SOON and you can nick collide like crazy.
 */
#define STARTUP_CONNECTIONS_TIME 60

struct Client;
struct server_conf;
struct Channel;

/* Capabilities */
extern struct CapabilityIndex *serv_capindex;
extern struct CapabilityIndex *cli_capindex;

/* register client capabilities with this structure for 3.2 enhanced capability negotiation */
#define CLICAP_FLAGS_STICKY    0x001
#define CLICAP_FLAGS_PRIORITY  0x002

struct ClientCapability {
	bool (*visible)(struct Client *);		/* whether or not to display the capability.  set to NULL or true return value = displayed */
	const char *(*data)(struct Client *);		/* any custom data for the capability.  set to NULL or return NULL = no data */
	unsigned int flags;
};

/* builtin client capabilities */
extern unsigned int CLICAP_MULTI_PREFIX;
extern unsigned int CLICAP_ACCOUNT_NOTIFY;
extern unsigned int CLICAP_EXTENDED_JOIN;
extern unsigned int CLICAP_AWAY_NOTIFY;
extern unsigned int CLICAP_USERHOST_IN_NAMES;
extern unsigned int CLICAP_CAP_NOTIFY;
extern unsigned int CLICAP_CHGHOST;
extern unsigned int CLICAP_ECHO_MESSAGE;
extern unsigned int CLICAP_MESSAGE_TAGS;
extern unsigned int CLICAP_BATCH;

/*
 * XXX: this is kind of ugly, but this allows us to have backwards
 * API-compatibility.
 */
extern unsigned int CAP_CAP;			/* received a CAP to begin with */
extern unsigned int CAP_QS;			/* Can handle quit storm removal */
extern unsigned int CAP_EX;			/* Can do channel +e exemptions */
extern unsigned int CAP_CHW;			/* Can do channel wall @# */
extern unsigned int CAP_IE;			/* Can do invite exceptions */
extern unsigned int CAP_KLN;			/* Can do KLINE message */
extern unsigned int CAP_KNOCK;			/* supports KNOCK */
extern unsigned int CAP_TB;			/* supports TBURST */
extern unsigned int CAP_UNKLN;			/* supports remote unkline */
extern unsigned int CAP_CLUSTER;		/* supports cluster stuff */
extern unsigned int CAP_ENCAP;			/* supports ENCAP */
extern unsigned int CAP_TS6;			/* supports TS6 or above */
extern unsigned int CAP_SERVICE;		/* supports services */
extern unsigned int CAP_RSFNC;			/* rserv FNC */
extern unsigned int CAP_SAVE;			/* supports SAVE (nick collision FNC) */
extern unsigned int CAP_EUID;			/* supports EUID (ext UID + nonencap CHGHOST) */
extern unsigned int CAP_EOPMOD;			/* supports EOPMOD (ext +z + ext topic) */
extern unsigned int CAP_BAN;			/* supports propagated bans */
extern unsigned int CAP_MLOCK;			/* supports MLOCK messages */
extern unsigned int CAP_EBMASK;			/* supports sending BMASK set by/at metadata */
extern unsigned int CAP_STAG;			/* supports s2s tags and TAGMSG */

/* XXX: added for backwards compatibility. --nenolod */
#define CAP_MASK	(capability_index_mask(serv_capindex) & ~(CAP_TS6 | CAP_CAP))

/*
 * Capability macros.
 */
#define IsCapable(x, cap)       (((x)->localClient->caps & (cap)) == cap)
#define NotCapable(x, cap)	(((x)->localClient->caps & (cap)) == 0)
#define ClearCap(x, cap)        ((x)->localClient->caps &= ~(cap))

/*
 * Globals
 *
 *
 * list of recognized server capabilities.  "TS" is not on the list
 * because all servers that we talk to already do TS, and the kludged
 * extra argument to "PASS" takes care of checking that.  -orabidoo
 */
extern int MaxClientCount;	/* GLOBAL - highest number of clients */
extern int MaxConnectionCount;	/* GLOBAL - highest number of connections */

extern int refresh_user_links;

/*
 * return values for hunt_server()
 */
#define HUNTED_NOSUCH   (-1)	/* if the hunted server is not found */
#define HUNTED_ISME     0	/* if this server should execute the command */
#define HUNTED_PASS     1	/* if message passed onwards successfully */

extern void init_builtin_capabs(void);

extern int hunt_server(struct Client *client_pt,
		       struct Client *source_pt,
		       const char *command, int server, int parc, const char **parv);
extern void send_capabilities(struct Client *, unsigned int);
extern const char *show_capabilities(struct Client *client);
extern void try_connections(void *unused);

extern int check_server(const char *name, struct Client *server);
extern int server_estab(struct Client *client_p);

extern int serv_connect(struct server_conf *, struct Client *);

#endif /* INCLUDED_s_serv_h */