]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/numeric.c
Announce IRC services in the network.
[ngircd-alex.git] / src / ngircd / numeric.c
index af1ac027927f5215aa0070f0ca3b1c804f0125e3..ab6476654bc08c25a84f2e1789324bd0b633b03a 100644 (file)
@@ -100,8 +100,17 @@ Announce_User(CLIENT * Client, CLIENT * User)
                }
                return CONNECTED;
        } else {
-               /* RFC 2813 mode: one combined NICK command */
-               return IRC_WriteStrClient(Client, "NICK %s %d %s %s %d +%s :%s",
+               /* RFC 2813 mode: one combined NICK or SERVICE command */
+               if (Client_Type(User) == CLIENT_SERVICE
+                   && strchr(Client_Flags(Client), 'S'))
+                       return 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));
+               else
+                       return 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)),
@@ -252,7 +261,8 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req)
        /* Announce all the users to the new server */
        c = Client_First();
        while (c) {
-               if (Client_Type(c) == CLIENT_USER) {
+               if (Client_Type(c) == CLIENT_USER ||
+                   Client_Type(c) == CLIENT_SERVICE) {
                        if (!Announce_User(Client, c))
                                return DISCONNECTED;
                }