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
|
/*
* server.h: header for server.c
*
* Written By Michael Sandrof
*
* Copyright (c) 1990 Michael Sandrof.
* Copyright (c) 1991, 1992 Troy Rollo.
* Copyright (c) 1992-2024 Matthew R. Green.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)$eterna: server.h,v 1.97 2024/08/03 06:41:43 mrg Exp $
*/
#ifndef irc__server_h_
#define irc__server_h_
#include "names.h" /* for ChannelList */
#include "ctcp.h" /* for CtcpFlood */
#include "whois.h" /* for WhoisQueue */
#include "edit.h" /* for WhoInfo */
/*
* type definition to distinguish different
* server versions
*/
#define ServerICB -5
#define Server2_6 1
#define Server2_7 2
#define Server2_8 3
#define Server2_9 4
#define Server2_10 5
#define Server2_11 6
typedef unsigned short ServerType;
typedef enum server_ssl_level {
SSL_UNKNOWN, /* use the default */
SSL_OFF, /* don't do ssl */
SSL_ON, /* do ssl, but don't worry about
veryfing if certificates are
valid */
SSL_VERIFY, /* do ssl, and check certificates are
valid */
} server_ssl_level;
typedef void (*server_private_cb_type)(void **);
int find_server_group(u_char *, int);
u_char *find_server_group_name(int);
void add_to_server_list(u_char *, int, u_char *, int,
u_char *, u_char *, int, int, int);
/* flags for add_to_server_list() */
#define SL_ADD_OVERWRITE 0x1
#define SL_ADD_DO_SSL 0x2
#define SL_ADD_DO_SSL_VERIFY 0x4
void build_server_list(u_char *);
int connect_to_server(u_char *, int, u_char *, int);
void get_connected(int);
int read_server_file(void);
void display_server_list(void);
void do_server(fd_set *, fd_set *);
void send_to_server(const char *, ...)
__attribute__((__format__ (__printf__, 1, 2)));
int server_get_whois(int);
WhoisStuff *server_get_whois_stuff(int);
WhoisQueue *server_get_qhead(int);
WhoisQueue *server_get_qtail(int);
void add_server_to_server_group(int, u_char *);
void servercmd(u_char *, u_char *, u_char *);
u_char *server_get_nickname(int);
u_char *server_get_name(int);
u_char *server_get_itsname(int);
void server_set_flag(int, int, int);
int find_in_server_list(u_char *, int, u_char *);
u_char *create_server_list(void);
void remove_from_server_list(int);
void server_set_motd(int, int);
int server_get_motd(int);
int server_get_operator(int);
int server_get_2_6_2(int);
int server_get_version(int);
u_char *server_get_password(int);
u_char *server_get_icbgroup(int);
u_char *server_get_icbmode(int);
void close_server(int, u_char *);
void mark_all_away(u_char *, u_char *);
int is_server_connected(int);
void flush_server(void);
int server_get_flag(int, int);
void server_set_operator(int, int);
void server_is_connected(int, int);
int parse_server_index(u_char *);
void parse_server_info(u_char **, u_char **, u_char **,
u_char **, u_char **, u_char **,
int *, server_ssl_level *,
u_char **, int *);
void server_set_bits(fd_set *, fd_set *);
void server_set_itsname(int, u_char *);
void server_set_version(int, int);
int is_server_open(int);
int server_get_port(int);
u_char *server_set_password(int, u_char *);
void server_set_nickname(int, u_char *);
void server_set_2_6_2(int, int);
void server_set_qhead(int, WhoisQueue *);
void server_set_qtail(int, WhoisQueue *);
void server_set_whois(int, int);
void server_set_icbgroup(int, u_char *);
void server_set_icbmode(int, u_char *);
int server_get_server_group(int);
void server_set_server_group(int, int);
void close_all_server(void);
void disconnectcmd(u_char *, u_char *, u_char *);
void ctcp_reply_backlog_change(int);
int active_server_group(int sgroup);
void server_set_version_string(int, u_char *);
u_char *server_get_version_string(int);
void server_set_away(int, u_char *);
u_char *server_get_away(int);
void server_get_local_ip_info(int, SOCKADDR_STORAGE **, socklen_t *);
void server_set_chan_list(int, ChannelList *);
ChannelList *server_get_chan_list(int);
void server_set_attempting_to_connect(int, int);
int server_get_attempting_to_connect(int);
void server_set_sent(int, int);
int server_get_sent(int);
CtcpFlood *server_get_ctcp_flood(int);
int number_of_servers(void);
void unset_never_connected(void);
int never_connected(void);
void set_connected_to_server(int);
int connected_to_server(void);
WhoInfo *server_get_who_info(void);
int server_get_oper_command(void);
void server_set_oper_command(int);
int parsing_server(void);
int get_primary_server(void);
void set_primary_server(int);
int get_from_server(void);
int set_from_server(int);
server_ssl_level server_do_ssl(int);
int server_default_encryption(u_char *, u_char *);
void *server_get_server_private(int);
void server_set_server_private(int, void *, server_private_cb_type);
int server_get_proxy_port(int, int);
u_char *server_get_proxy_name(int, int);
void server_set_default_proxy(u_char *);
int ssl_level_to_sa_flags(server_ssl_level level);
#define USER_MODE_I 0x0001
#define USER_MODE_W 0x0002
#define USER_MODE_S 0x0004 /* obsolete */
#define USER_MODE_R 0x0008
#define USER_MODE_A 0x0010 /* away status, not really used */
#define USER_MODE_Z 0x0020
#define CONNECTED 0x0040
#define SSL_DONE 0x0080 /* SSL is initialised */
#define SERVER_2_6_2 0x0100
#define CLOSE_PENDING 0x0200 /* set for servers who are being switched
away from, but have not yet connected. */
#define LOGGED_IN 0x0400
#define CLEAR_PENDING 0x0800 /* set for servers whose channels are to be
removed when a connect has been established. */
#define SERVER_FAKE 0x1000 /* server is fake entry; not connected to yet.
will be GCed after connect_to_server_*(). */
#define PROXY_CONNECT 0x2000 /* have sent CONNECT to proxy. */
#define PROXY_REPLY 0x4000 /* got "200" from proxy. */
#define PROXY_DONE 0x8000 /* got blank line from proxy - done. */
/* pick the default port if none is given. */
#define CHOOSE_PORT(type) \
(((type) == ServerICB || ((type) == -1 && client_default_is_icb())) \
? icb_port() : irc_port())
#endif /* irc__server_h_ */
|