]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc.c
Implement the IRC command "SERVLIST"
[ngircd-alex.git] / src / ngircd / irc.c
index b88d5d7db7cc7a1320eb94027ca6835518c9a4cc..47f86528004d24a009504076108ded7fc7b2f8c6 100644 (file)
@@ -400,7 +400,8 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                        }
 
                        for (cl = Client_First(); cl != NULL; cl = Client_Next(cl)) {
-                               if (Client_Type(cl) != CLIENT_USER)
+                               if (Client_Type(cl) != CLIENT_USER &&
+                                   Client_Type(cl) != CLIENT_SERVICE)
                                        continue;
                                if (nick != NULL && host != NULL) {
                                        if (strcmp(nick, Client_ID(cl)) == 0 &&
@@ -438,6 +439,17 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
                                                          Client_ID(from),
                                                          currentTarget);
                        }
+
+#ifndef STRICT_RFC
+                       if (ForceType == CLIENT_SERVICE &&
+                           (Conn_Options(Client_Conn(Client_NextHop(cl)))
+                            & CONN_RFC1459)) {
+                               /* SQUERY command but RFC 1459 link: convert
+                                * request to PRIVMSG command */
+                               Req->command = "PRIVMSG";
+                       }
+#endif
+
                        if (SendErrors && (Client_Type(Client) != CLIENT_SERVER)
                            && strchr(Client_Modes(cl), 'a')) {
                                /* Target is away */