Introduce_Client() => Client_Introduce(), and move it to client.c
This commit is contained in:
parent
67bd1bf34f
commit
ee362b3bd2
|
@ -37,6 +37,7 @@
|
||||||
#include "ngircd.h"
|
#include "ngircd.h"
|
||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
#include "conn-func.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "irc-write.h"
|
#include "irc-write.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
@ -69,6 +70,8 @@ static CLIENT *Init_New_Client PARAMS((CONN_ID Idx, CLIENT *Introducer,
|
||||||
static void Destroy_UserOrService PARAMS((CLIENT *Client,const char *Txt, const char *FwdMsg,
|
static void Destroy_UserOrService PARAMS((CLIENT *Client,const char *Txt, const char *FwdMsg,
|
||||||
bool SendQuit));
|
bool SendQuit));
|
||||||
|
|
||||||
|
static void cb_introduceClient PARAMS((CLIENT *Client, CLIENT *Prefix,
|
||||||
|
void *i));
|
||||||
|
|
||||||
GLOBAL void
|
GLOBAL void
|
||||||
Client_Init( void )
|
Client_Init( void )
|
||||||
|
@ -1142,6 +1145,46 @@ Client_Reject(CLIENT *Client, const char *Reason, bool InformClient)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Introduce a new user or service client in the network.
|
||||||
|
*
|
||||||
|
* @param From Remote server introducing the client or NULL (local).
|
||||||
|
* @param Client New client.
|
||||||
|
* @param Type Type of the client (CLIENT_USER or CLIENT_SERVICE).
|
||||||
|
*/
|
||||||
|
GLOBAL void
|
||||||
|
Client_Introduce(CLIENT *From, CLIENT *Client, int Type)
|
||||||
|
{
|
||||||
|
/* Set client type (user or service) */
|
||||||
|
Client_SetType(Client, Type);
|
||||||
|
|
||||||
|
if (From) {
|
||||||
|
if (Conf_IsService(Conf_GetServer(Client_Conn(From)),
|
||||||
|
Client_ID(Client)))
|
||||||
|
Client_SetType(Client, CLIENT_SERVICE);
|
||||||
|
LogDebug("%s \"%s\" (+%s) registered (via %s, on %s, %d hop%s).",
|
||||||
|
Client_TypeText(Client), Client_Mask(Client),
|
||||||
|
Client_Modes(Client), Client_ID(From),
|
||||||
|
Client_ID(Client_Introducer(Client)),
|
||||||
|
Client_Hops(Client), Client_Hops(Client) > 1 ? "s": "");
|
||||||
|
} else {
|
||||||
|
Log(LOG_NOTICE, "%s \"%s\" registered (connection %d).",
|
||||||
|
Client_TypeText(Client), Client_Mask(Client),
|
||||||
|
Client_Conn(Client));
|
||||||
|
Log_ServerNotice('c', "Client connecting: %s (%s@%s) [%s] - %s",
|
||||||
|
Client_ID(Client), Client_User(Client),
|
||||||
|
Client_Hostname(Client),
|
||||||
|
Conn_IPA(Client_Conn(Client)),
|
||||||
|
Client_TypeText(Client));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inform other servers */
|
||||||
|
IRC_WriteStrServersPrefixFlag_CB(From,
|
||||||
|
From != NULL ? From : Client_ThisServer(),
|
||||||
|
'\0', cb_introduceClient, (void *)Client);
|
||||||
|
} /* Client_Introduce */
|
||||||
|
|
||||||
|
|
||||||
static unsigned long
|
static unsigned long
|
||||||
Count( CLIENT_TYPE Type )
|
Count( CLIENT_TYPE Type )
|
||||||
{
|
{
|
||||||
|
@ -1361,6 +1404,59 @@ Destroy_UserOrService(CLIENT *Client, const char *Txt, const char *FwdMsg, bool
|
||||||
} /* Destroy_UserOrService */
|
} /* Destroy_UserOrService */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Introduce a new user or service client to a remote server.
|
||||||
|
*
|
||||||
|
* This function differentiates between RFC1459 and RFC2813 server links and
|
||||||
|
* generates the appropriate commands to register the new user or service.
|
||||||
|
*
|
||||||
|
* @param To The remote server to inform.
|
||||||
|
* @param Prefix Prefix for the generated commands.
|
||||||
|
* @param data CLIENT structure of the new client.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
cb_introduceClient(CLIENT *To, CLIENT *Prefix, void *data)
|
||||||
|
{
|
||||||
|
CLIENT *c = (CLIENT *)data;
|
||||||
|
CONN_ID conn;
|
||||||
|
char *modes, *user, *host;
|
||||||
|
|
||||||
|
modes = Client_Modes(c);
|
||||||
|
user = Client_User(c) ? Client_User(c) : "-";
|
||||||
|
host = Client_Hostname(c) ? Client_Hostname(c) : "-";
|
||||||
|
|
||||||
|
conn = Client_Conn(To);
|
||||||
|
if (Conn_Options(conn) & CONN_RFC1459) {
|
||||||
|
/* RFC 1459 mode: separate NICK and USER commands */
|
||||||
|
Conn_WriteStr(conn, "NICK %s :%d", Client_ID(c),
|
||||||
|
Client_Hops(c) + 1);
|
||||||
|
Conn_WriteStr(conn, ":%s USER %s %s %s :%s",
|
||||||
|
Client_ID(c), user, host,
|
||||||
|
Client_ID(Client_Introducer(c)), Client_Info(c));
|
||||||
|
if (modes[0])
|
||||||
|
Conn_WriteStr(conn, ":%s MODE %s +%s",
|
||||||
|
Client_ID(c), Client_ID(c), modes);
|
||||||
|
} else {
|
||||||
|
/* RFC 2813 mode: one combined NICK or SERVICE command */
|
||||||
|
if (Client_Type(c) == CLIENT_SERVICE
|
||||||
|
&& strchr(Client_Flags(To), 'S'))
|
||||||
|
IRC_WriteStrClientPrefix(To, Prefix,
|
||||||
|
"SERVICE %s %d * +%s %d :%s",
|
||||||
|
Client_Mask(c),
|
||||||
|
Client_MyToken(Client_Introducer(c)),
|
||||||
|
Client_Modes(c), Client_Hops(c) + 1,
|
||||||
|
Client_Info(c));
|
||||||
|
else
|
||||||
|
IRC_WriteStrClientPrefix(To, Prefix,
|
||||||
|
"NICK %s %d %s %s %d +%s :%s",
|
||||||
|
Client_ID(c), Client_Hops(c) + 1,
|
||||||
|
user, host,
|
||||||
|
Client_MyToken(Client_Introducer(c)),
|
||||||
|
modes, Client_Info(c));
|
||||||
|
}
|
||||||
|
} /* cb_introduceClient */
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
GLOBAL void
|
GLOBAL void
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* ngIRCd -- The Next Generation IRC Daemon
|
* ngIRCd -- The Next Generation IRC Daemon
|
||||||
* Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
|
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -165,6 +165,8 @@ GLOBAL const char *Client_TypeText PARAMS((CLIENT *Client));
|
||||||
|
|
||||||
GLOBAL void Client_Reject PARAMS((CLIENT *Client, const char *Reason,
|
GLOBAL void Client_Reject PARAMS((CLIENT *Client, const char *Reason,
|
||||||
bool InformClient));
|
bool InformClient));
|
||||||
|
GLOBAL void Client_Introduce PARAMS((CLIENT *From, CLIENT *Client, int Type));
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
GLOBAL void Client_DebugDump PARAMS((void));
|
GLOBAL void Client_DebugDump PARAMS((void));
|
||||||
|
|
|
@ -46,11 +46,6 @@
|
||||||
static bool Hello_User PARAMS(( CLIENT *Client ));
|
static bool Hello_User PARAMS(( CLIENT *Client ));
|
||||||
static bool Hello_User_PostAuth PARAMS(( CLIENT *Client ));
|
static bool Hello_User_PostAuth PARAMS(( CLIENT *Client ));
|
||||||
static void Kill_Nick PARAMS(( char *Nick, char *Reason ));
|
static void Kill_Nick PARAMS(( char *Nick, char *Reason ));
|
||||||
static void Introduce_Client PARAMS((CLIENT *To, CLIENT *Client, int Type));
|
|
||||||
|
|
||||||
static void cb_introduceClient PARAMS((CLIENT *Client, CLIENT *Prefix,
|
|
||||||
void *i));
|
|
||||||
|
|
||||||
#ifdef PAM
|
#ifdef PAM
|
||||||
static void cb_Read_Auth_Result PARAMS((int r_fd, UNUSED short events));
|
static void cb_Read_Auth_Result PARAMS((int r_fd, UNUSED short events));
|
||||||
#endif
|
#endif
|
||||||
|
@ -395,7 +390,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||||
Client_Mask(c));
|
Client_Mask(c));
|
||||||
Client_SetType(c, CLIENT_GOTNICK);
|
Client_SetType(c, CLIENT_GOTNICK);
|
||||||
} else
|
} else
|
||||||
Introduce_Client(Client, c, CLIENT_USER);
|
Client_Introduce(Client, c, CLIENT_USER);
|
||||||
|
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
}
|
}
|
||||||
|
@ -487,7 +482,7 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
|
||||||
/* RFC 1459 style user registration?
|
/* RFC 1459 style user registration?
|
||||||
* Introduce client to network: */
|
* Introduce client to network: */
|
||||||
if (Client_Type(c) == CLIENT_GOTNICK)
|
if (Client_Type(c) == CLIENT_GOTNICK)
|
||||||
Introduce_Client(Client, c, CLIENT_USER);
|
Client_Introduce(Client, c, CLIENT_USER);
|
||||||
|
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} else if (Client_Type(Client) == CLIENT_USER) {
|
} else if (Client_Type(Client) == CLIENT_USER) {
|
||||||
|
@ -601,7 +596,7 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req)
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
Introduce_Client(Client, c, CLIENT_SERVICE);
|
Client_Introduce(Client, c, CLIENT_SERVICE);
|
||||||
return CONNECTED;
|
return CONNECTED;
|
||||||
} /* IRC_SERVICE */
|
} /* IRC_SERVICE */
|
||||||
|
|
||||||
|
@ -1057,7 +1052,7 @@ Hello_User_PostAuth(CLIENT *Client)
|
||||||
if (Class_HandleServerBans(Client) != CONNECTED)
|
if (Class_HandleServerBans(Client) != CONNECTED)
|
||||||
return DISCONNECTED;
|
return DISCONNECTED;
|
||||||
|
|
||||||
Introduce_Client(NULL, Client, CLIENT_USER);
|
Client_Introduce(NULL, Client, CLIENT_USER);
|
||||||
|
|
||||||
if (!IRC_WriteStrClient
|
if (!IRC_WriteStrClient
|
||||||
(Client, RPL_WELCOME_MSG, Client_ID(Client), Client_Mask(Client)))
|
(Client, RPL_WELCOME_MSG, Client_ID(Client), Client_Mask(Client)))
|
||||||
|
@ -1119,97 +1114,4 @@ Kill_Nick(char *Nick, char *Reason)
|
||||||
} /* Kill_Nick */
|
} /* Kill_Nick */
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Introduce a new user or service client in the network.
|
|
||||||
*
|
|
||||||
* @param From Remote server introducing the client or NULL (local).
|
|
||||||
* @param Client New client.
|
|
||||||
* @param Type Type of the client (CLIENT_USER or CLIENT_SERVICE).
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
Introduce_Client(CLIENT *From, CLIENT *Client, int Type)
|
|
||||||
{
|
|
||||||
/* Set client type (user or service) */
|
|
||||||
Client_SetType(Client, Type);
|
|
||||||
|
|
||||||
if (From) {
|
|
||||||
if (Conf_IsService(Conf_GetServer(Client_Conn(From)),
|
|
||||||
Client_ID(Client)))
|
|
||||||
Client_SetType(Client, CLIENT_SERVICE);
|
|
||||||
LogDebug("%s \"%s\" (+%s) registered (via %s, on %s, %d hop%s).",
|
|
||||||
Client_TypeText(Client), Client_Mask(Client),
|
|
||||||
Client_Modes(Client), Client_ID(From),
|
|
||||||
Client_ID(Client_Introducer(Client)),
|
|
||||||
Client_Hops(Client), Client_Hops(Client) > 1 ? "s": "");
|
|
||||||
} else {
|
|
||||||
Log(LOG_NOTICE, "%s \"%s\" registered (connection %d).",
|
|
||||||
Client_TypeText(Client), Client_Mask(Client),
|
|
||||||
Client_Conn(Client));
|
|
||||||
Log_ServerNotice('c', "Client connecting: %s (%s@%s) [%s] - %s",
|
|
||||||
Client_ID(Client), Client_User(Client),
|
|
||||||
Client_Hostname(Client),
|
|
||||||
Conn_IPA(Client_Conn(Client)),
|
|
||||||
Client_TypeText(Client));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Inform other servers */
|
|
||||||
IRC_WriteStrServersPrefixFlag_CB(From,
|
|
||||||
From != NULL ? From : Client_ThisServer(),
|
|
||||||
'\0', cb_introduceClient, (void *)Client);
|
|
||||||
} /* Introduce_Client */
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Introduce a new user or service client to a remote server.
|
|
||||||
*
|
|
||||||
* This function differentiates between RFC1459 and RFC2813 server links and
|
|
||||||
* generates the appropriate commands to register the new user or service.
|
|
||||||
*
|
|
||||||
* @param To The remote server to inform.
|
|
||||||
* @param Prefix Prefix for the generated commands.
|
|
||||||
* @param data CLIENT structure of the new client.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
cb_introduceClient(CLIENT *To, CLIENT *Prefix, void *data)
|
|
||||||
{
|
|
||||||
CLIENT *c = (CLIENT *)data;
|
|
||||||
CONN_ID conn;
|
|
||||||
char *modes, *user, *host;
|
|
||||||
|
|
||||||
modes = Client_Modes(c);
|
|
||||||
user = Client_User(c) ? Client_User(c) : "-";
|
|
||||||
host = Client_Hostname(c) ? Client_Hostname(c) : "-";
|
|
||||||
|
|
||||||
conn = Client_Conn(To);
|
|
||||||
if (Conn_Options(conn) & CONN_RFC1459) {
|
|
||||||
/* RFC 1459 mode: separate NICK and USER commands */
|
|
||||||
Conn_WriteStr(conn, "NICK %s :%d", Client_ID(c),
|
|
||||||
Client_Hops(c) + 1);
|
|
||||||
Conn_WriteStr(conn, ":%s USER %s %s %s :%s",
|
|
||||||
Client_ID(c), user, host,
|
|
||||||
Client_ID(Client_Introducer(c)), Client_Info(c));
|
|
||||||
if (modes[0])
|
|
||||||
Conn_WriteStr(conn, ":%s MODE %s +%s",
|
|
||||||
Client_ID(c), Client_ID(c), modes);
|
|
||||||
} else {
|
|
||||||
/* RFC 2813 mode: one combined NICK or SERVICE command */
|
|
||||||
if (Client_Type(c) == CLIENT_SERVICE
|
|
||||||
&& strchr(Client_Flags(To), 'S'))
|
|
||||||
IRC_WriteStrClientPrefix(To, Prefix,
|
|
||||||
"SERVICE %s %d * +%s %d :%s",
|
|
||||||
Client_Mask(c),
|
|
||||||
Client_MyToken(Client_Introducer(c)),
|
|
||||||
Client_Modes(c), Client_Hops(c) + 1,
|
|
||||||
Client_Info(c));
|
|
||||||
else
|
|
||||||
IRC_WriteStrClientPrefix(To, Prefix,
|
|
||||||
"NICK %s %d %s %s %d +%s :%s",
|
|
||||||
Client_ID(c), Client_Hops(c) + 1,
|
|
||||||
user, host,
|
|
||||||
Client_MyToken(Client_Introducer(c)),
|
|
||||||
modes, Client_Info(c));
|
|
||||||
}
|
|
||||||
} /* cb_introduceClient */
|
|
||||||
|
|
||||||
|
|
||||||
/* -eof- */
|
/* -eof- */
|
||||||
|
|
Loading…
Reference in New Issue