-/**
- * 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 */