Commit Diff


commit - 67bd1bf34fc3f7bebb304cdf84284523c8ea09f5
commit + ee362b3bd2e31db4cb6b7832ca01e64a643f9b96
blob - 7e28e8fb1035006d540e9f3e4b7ba7d720944662
blob + 1b356848090b835772db30921d8764c87da39869
--- src/ngircd/client.c
+++ src/ngircd/client.c
@@ -37,6 +37,7 @@
 #include "ngircd.h"
 #include "channel.h"
 #include "conf.h"
+#include "conn-func.h"
 #include "hash.h"
 #include "irc-write.h"
 #include "log.h"
@@ -69,6 +70,8 @@ static CLIENT *Init_New_Client PARAMS((CONN_ID Idx, CL
 static void Destroy_UserOrService PARAMS((CLIENT *Client,const char *Txt, const char *FwdMsg,
 					bool SendQuit));
 
+static void cb_introduceClient PARAMS((CLIENT *Client, CLIENT *Prefix,
+				       void *i));
 
 GLOBAL void
 Client_Init( void )
@@ -1140,8 +1143,48 @@ Client_Reject(CLIENT *Client, const char *Reason, bool
 	    Client_Mask(Client), Client_Conn(Client), Reason);
 	Conn_Close(Client_Conn(Client), Reason, info, true);
 }
+
+
+/**
+ * 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
 Count( CLIENT_TYPE Type )
 {
@@ -1359,8 +1402,61 @@ Destroy_UserOrService(CLIENT *Client, const char *Txt,
 	/* Register client in My_Whowas structure */
 	Client_RegisterWhowas(Client);
 } /* 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
 
 GLOBAL void
blob - 7bb230b49d23edcb0d02fd3ea29ed48dbbd368d1
blob + def0549c2e8b65a0335bbe3bb72b02a99c106159
--- src/ngircd/client.h
+++ src/ngircd/client.h
@@ -1,6 +1,6 @@
 /*
  * 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
  * it under the terms of the GNU General Public License as published by
@@ -165,7 +165,9 @@ GLOBAL const char *Client_TypeText PARAMS((CLIENT *Cli
 
 GLOBAL void Client_Reject PARAMS((CLIENT *Client, const char *Reason,
 				  bool InformClient));
+GLOBAL void Client_Introduce PARAMS((CLIENT *From, CLIENT *Client, int Type));
 
+
 #ifdef DEBUG
 GLOBAL void Client_DebugDump PARAMS((void));
 #endif
blob - 133a0e5fa79ed7cda29bdf46b5736047a5ac7809
blob + 53069f00ff24c7e749db0e18a53f0d65ccbfc1d4
--- src/ngircd/irc-login.c
+++ src/ngircd/irc-login.c
@@ -46,11 +46,6 @@
 static bool Hello_User PARAMS(( CLIENT *Client ));
 static bool Hello_User_PostAuth PARAMS(( CLIENT *Client ));
 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
 static void cb_Read_Auth_Result PARAMS((int r_fd, UNUSED short events));
 #endif
@@ -395,7 +390,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
 				 Client_Mask(c));
 			Client_SetType(c, CLIENT_GOTNICK);
 		} else
-			Introduce_Client(Client, c, CLIENT_USER);
+			Client_Introduce(Client, c, CLIENT_USER);
 
 		return CONNECTED;
 	}
@@ -487,7 +482,7 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
 		/* RFC 1459 style user registration?
 		 * Introduce client to network: */
 		if (Client_Type(c) == CLIENT_GOTNICK)
-			Introduce_Client(Client, c, CLIENT_USER);
+			Client_Introduce(Client, c, CLIENT_USER);
 
 		return CONNECTED;
 	} else if (Client_Type(Client) == CLIENT_USER) {
@@ -601,7 +596,7 @@ IRC_SERVICE(CLIENT *Client, REQUEST *Req)
 		return CONNECTED;
 	}
 
-	Introduce_Client(Client, c, CLIENT_SERVICE);
+	Client_Introduce(Client, c, CLIENT_SERVICE);
 	return CONNECTED;
 } /* IRC_SERVICE */
 
@@ -1057,7 +1052,7 @@ Hello_User_PostAuth(CLIENT *Client)
 	if (Class_HandleServerBans(Client) != CONNECTED)
 		return DISCONNECTED;
 
-	Introduce_Client(NULL, Client, CLIENT_USER);
+	Client_Introduce(NULL, Client, CLIENT_USER);
 
 	if (!IRC_WriteStrClient
 	    (Client, RPL_WELCOME_MSG, Client_ID(Client), Client_Mask(Client)))
@@ -1117,99 +1112,6 @@ Kill_Nick(char *Nick, char *Reason)
 
 	IRC_KILL(Client_ThisServer(), &r);
 } /* 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- */