* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
- *
- * $Id: s_serv.c 3550 2007-08-09 06:47:26Z nenolod $
*/
#include "stdinc.h"
#include "s_serv.h"
#include "class.h"
#include "client.h"
-#include "common.h"
#include "hash.h"
#include "match.h"
#include "ircd.h"
* extra argument to "PASS" takes care of checking that. -orabidoo
*/
struct CapabilityIndex *serv_capindex = NULL;
+struct CapabilityIndex *cli_capindex = NULL;
unsigned int CAP_CAP;
unsigned int CAP_QS;
unsigned int CAP_BAN;
unsigned int CAP_MLOCK;
+unsigned int CLICAP_MULTI_PREFIX;
+unsigned int CLICAP_ACCOUNT_NOTIFY;
+unsigned int CLICAP_EXTENDED_JOIN;
+unsigned int CLICAP_AWAY_NOTIFY;
+unsigned int CLICAP_USERHOST_IN_NAMES;
+unsigned int CLICAP_CAP_NOTIFY;
+unsigned int CLICAP_CHGHOST;
+unsigned int CLICAP_ECHO_MESSAGE;
+
/*
* initialize our builtin capability table. --nenolod
*/
CAP_CAP = capability_put_anonymous(serv_capindex);
CAP_TS6 = capability_put_anonymous(serv_capindex);
- CAP_QS = capability_put(serv_capindex, "QS");
- CAP_EX = capability_put(serv_capindex, "EX");
- CAP_CHW = capability_put(serv_capindex, "CHW");
- CAP_IE = capability_put(serv_capindex, "IE");
- CAP_KLN = capability_put(serv_capindex, "KLN");
- CAP_KNOCK = capability_put(serv_capindex, "KNOCK");
- CAP_ZIP = capability_put(serv_capindex, "ZIP");
- CAP_TB = capability_put(serv_capindex, "TB");
- CAP_UNKLN = capability_put(serv_capindex, "UNKLN");
- CAP_CLUSTER = capability_put(serv_capindex, "CLUSTER");
- CAP_ENCAP = capability_put(serv_capindex, "ENCAP");
- CAP_SERVICE = capability_put(serv_capindex, "SERVICES");
- CAP_RSFNC = capability_put(serv_capindex, "RSFNC");
- CAP_SAVE = capability_put(serv_capindex, "SAVE");
- CAP_EUID = capability_put(serv_capindex, "EUID");
- CAP_EOPMOD = capability_put(serv_capindex, "EOPMOD");
- CAP_BAN = capability_put(serv_capindex, "BAN");
- CAP_MLOCK = capability_put(serv_capindex, "MLOCK");
+ CAP_QS = capability_put(serv_capindex, "QS", NULL);
+ CAP_EX = capability_put(serv_capindex, "EX", NULL);
+ CAP_CHW = capability_put(serv_capindex, "CHW", NULL);
+ CAP_IE = capability_put(serv_capindex, "IE", NULL);
+ CAP_KLN = capability_put(serv_capindex, "KLN", NULL);
+ CAP_KNOCK = capability_put(serv_capindex, "KNOCK", NULL);
+ CAP_ZIP = capability_put(serv_capindex, "ZIP", NULL);
+ CAP_TB = capability_put(serv_capindex, "TB", NULL);
+ CAP_UNKLN = capability_put(serv_capindex, "UNKLN", NULL);
+ CAP_CLUSTER = capability_put(serv_capindex, "CLUSTER", NULL);
+ CAP_ENCAP = capability_put(serv_capindex, "ENCAP", NULL);
+ CAP_SERVICE = capability_put(serv_capindex, "SERVICES", NULL);
+ CAP_RSFNC = capability_put(serv_capindex, "RSFNC", NULL);
+ CAP_SAVE = capability_put(serv_capindex, "SAVE", NULL);
+ CAP_EUID = capability_put(serv_capindex, "EUID", NULL);
+ CAP_EOPMOD = capability_put(serv_capindex, "EOPMOD", NULL);
+ CAP_BAN = capability_put(serv_capindex, "BAN", NULL);
+ CAP_MLOCK = capability_put(serv_capindex, "MLOCK", NULL);
capability_require(serv_capindex, "QS");
capability_require(serv_capindex, "EX");
capability_require(serv_capindex, "IE");
capability_require(serv_capindex, "ENCAP");
+
+ cli_capindex = capability_index_create("client capabilities");
+
+ CLICAP_MULTI_PREFIX = capability_put(cli_capindex, "multi-prefix", NULL);
+ CLICAP_ACCOUNT_NOTIFY = capability_put(cli_capindex, "account-notify", NULL);
+ CLICAP_EXTENDED_JOIN = capability_put(cli_capindex, "extended-join", NULL);
+ CLICAP_AWAY_NOTIFY = capability_put(cli_capindex, "away-notify", NULL);
+ CLICAP_USERHOST_IN_NAMES = capability_put(cli_capindex, "userhost-in-names", NULL);
+ CLICAP_CAP_NOTIFY = capability_put(cli_capindex, "cap-notify", NULL);
+ CLICAP_CHGHOST = capability_put(cli_capindex, "chghost", NULL);
+ CLICAP_ECHO_MESSAGE = capability_put(cli_capindex, "echo-message", NULL);
}
static CNCB serv_connect_callback;
struct server_conf *tmp_p;
struct Class *cltmp;
rb_dlink_node *ptr;
- int connecting = FALSE;
+ bool connecting = false;
int confrq = 0;
time_t next = 0;
continue;
/* don't allow ssl connections if ssl isn't setup */
- if(ServerConfSSL(tmp_p) && (!ssl_ok || !get_ssld_count()))
+ if(ServerConfSSL(tmp_p) && (!ircd_ssl_ok || !get_ssld_count()))
continue;
cltmp = tmp_p->class;
server_p = tmp_p;
/* We connect only one at time... */
- connecting = TRUE;
+ connecting = true;
}
if((next > tmp_p->hold) || (next == 0))
* - int flag of capabilities that this server has
* output - NONE
* side effects - send the CAPAB line to a server -orabidoo
- *
*/
void
send_capabilities(struct Client *client_p, unsigned int cap_can_send)
/* Its got identd , since its a server */
SetGotId(client_p);
- /* If there is something in the serv_list, it might be this
- * connecting server..
- */
- if(!ServerInfo.hub && serv_list.head)
- {
- if(client_p != serv_list.head->data || serv_list.head->next)
- {
- ServerStats.is_ref++;
- sendto_one(client_p, "ERROR :I'm a leaf not a hub");
- return exit_client(client_p, client_p, client_p, "I'm a leaf");
- }
- }
-
if(IsUnknown(client_p))
{
/* the server may be linking based on certificate fingerprint now. --nenolod */
rb_strlcpy(client_p->host, server_p->host, sizeof(client_p->host));
rb_strlcpy(client_p->sockhost, buf, sizeof(client_p->sockhost));
client_p->localClient->F = F;
- add_to_cli_connid_hash(client_p);
/* shove the port number into the sockaddr */
#ifdef RB_IPV6
if(GET_SS_FAMILY(&server_p->my_ipnum) == AF_INET6)
return;
}
- del_from_cli_connid_hash(client_p);
client_p->localClient->F = xF[0];
- add_to_cli_connid_hash(client_p);
- client_p->localClient->ssl_ctl = start_ssld_connect(F, xF[1], rb_get_fd(xF[0]));
+ client_p->localClient->ssl_ctl = start_ssld_connect(F, xF[1], connid_get(client_p));
if(!client_p->localClient->ssl_ctl)
{
serv_connect_callback(client_p->localClient->F, RB_ERROR, data);