X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fnumeric.c;h=a43739f18bf4dec9b44183396526c157d408b84b;hp=9b8240bdca0227f7e9862d4fb6d5e0646d36ce7a;hb=4102e8fdfea33a5d8c398c98db90914c5dc29610;hpb=35e2dcff88e29617db0e5af1d016ab76a31ab677 diff --git a/src/ngircd/numeric.c b/src/ngircd/numeric.c index 9b8240bd..a43739f1 100644 --- a/src/ngircd/numeric.c +++ b/src/ngircd/numeric.c @@ -52,7 +52,7 @@ Announce_Channel(CLIENT *Client, CHANNEL *Chan) /* Check features of remote server */ njoin = Conn_Options(Client_Conn(Client)) & CONN_RFC1459 ? false : true; - xop = strchr(Client_Flags(Client), 'X') ? true : false; + xop = Client_HasFlag(Client, 'X') ? true : false; /* Get all the members of this channel */ cl2chan = Channel_FirstMember(Chan); @@ -68,15 +68,15 @@ Announce_Channel(CLIENT *Client, CHANNEL *Chan) strlcat(str, ",", sizeof(str)); /* Prepare user prefix (ChanOp, voiced, ...) */ - if (xop && strchr(Channel_UserModes(Chan, cl), 'q')) + if (xop && Channel_UserHasMode(Chan, cl, 'q')) strlcat(str, "~", sizeof(str)); - if (xop && strchr(Channel_UserModes(Chan, cl), 'a')) + if (xop && Channel_UserHasMode(Chan, cl, 'a')) strlcat(str, "&", sizeof(str)); - if (strchr(Channel_UserModes(Chan, cl), 'o')) + if (Channel_UserHasMode(Chan, cl, 'o')) strlcat(str, "@", sizeof(str)); - if (xop && strchr(Channel_UserModes(Chan, cl), 'h')) + if (xop && Channel_UserHasMode(Chan, cl, 'h')) strlcat(str, "%", sizeof(str)); - if (strchr(Channel_UserModes(Chan, cl), 'v')) + if (Channel_UserHasMode(Chan, cl, 'v')) strlcat(str, "+", sizeof(str)); strlcat(str, Client_ID(cl), sizeof(str)); @@ -150,72 +150,6 @@ Announce_Server(CLIENT * Client, CLIENT * Server) } /* Announce_Server */ -/** - * Announce existing user to a new server - * @param Client New server - * @param User Existing user in the network - */ -static bool -Announce_User(CLIENT * Client, CLIENT * User) -{ - CONN_ID conn; - char *modes; - - conn = Client_Conn(Client); - if (Conn_Options(conn) & CONN_RFC1459) { - /* RFC 1459 mode: separate NICK and USER commands */ - if (! Conn_WriteStr(conn, "NICK %s :%d", - Client_ID(User), Client_Hops(User) + 1)) - return DISCONNECTED; - if (! Conn_WriteStr(conn, ":%s USER %s %s %s :%s", - Client_ID(User), Client_User(User), - Client_Hostname(User), - Client_ID(Client_Introducer(User)), - Client_Info(User))) - return DISCONNECTED; - modes = Client_Modes(User); - if (modes[0]) { - return Conn_WriteStr(conn, ":%s MODE %s +%s", - Client_ID(User), Client_ID(User), - modes); - } - } else { - /* RFC 2813 mode: one combined NICK or SERVICE command */ - if (Client_Type(User) == CLIENT_SERVICE - && strchr(Client_Flags(Client), 'S')) { - if (!IRC_WriteStrClient(Client, - "SERVICE %s %d * +%s %d :%s", - Client_Mask(User), - Client_MyToken(Client_Introducer(User)), - Client_Modes(User), Client_Hops(User) + 1, - Client_Info(User))) - return DISCONNECTED; - } else { - if (!IRC_WriteStrClient(Client, - "NICK %s %d %s %s %d +%s :%s", - Client_ID(User), Client_Hops(User) + 1, - Client_User(User), Client_Hostname(User), - Client_MyToken(Client_Introducer(User)), - Client_Modes(User), Client_Info(User))) - return DISCONNECTED; - } - } - - if (strchr(Client_Flags(Client), 'M')) { - /* Synchronize metadata */ - if (Client_HostnameCloaked(User)) { - if (!IRC_WriteStrClient(Client, - "METADATA %s cloakhost :%s", - Client_ID(User), - Client_HostnameCloaked(User))) - return DISCONNECTED; - } - } - - return CONNECTED; -} /* Announce_User */ - - #ifdef IRCPLUS /** @@ -298,8 +232,8 @@ Send_CHANINFO(CLIENT * Client, CHANNEL * Chan) if (!*modes && !*topic) return CONNECTED; - has_k = strchr(modes, 'k') != NULL; - has_l = strchr(modes, 'l') != NULL; + has_k = Channel_HasMode(Chan, 'k'); + has_l = Channel_HasMode(Chan, 'l'); /* send CHANINFO */ if (!has_k && !has_l) { @@ -372,7 +306,7 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req) while (c) { if (Client_Type(c) == CLIENT_USER || Client_Type(c) == CLIENT_SERVICE) { - if (!Announce_User(Client, c)) + if (!Client_Announce(Client, Client_ThisServer(), c)) return DISCONNECTED; } c = Client_Next(c); @@ -387,7 +321,7 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req) } #ifdef IRCPLUS /* Send CHANINFO if the peer supports it */ - if (strchr(Client_Flags(Client), 'C')) { + if (Client_HasFlag(Client, 'C')) { if (!Send_CHANINFO(Client, chan)) return DISCONNECTED; } @@ -401,7 +335,7 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req) } #ifdef IRCPLUS - if (strchr(Client_Flags(Client), 'L')) { + if (Client_HasFlag(Client, 'L')) { LogDebug("Synchronizing INVITE- and BAN-lists ..."); if (!Synchronize_Lists(Client)) return DISCONNECTED;