#include "match.h"
#include "messages.h"
#include "parse.h"
+#include "tool.h"
#include "exp.h"
#include "irc.h"
/* handle msgtarget = msgto *("," msgto) */
currentTarget = strtok_r(currentTarget, ",", &lastCurrentTarget);
+ ngt_UpperStr(Req->command);
while (currentTarget) {
/* Check for and handle valid <msgto> of form:
}
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 &&
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 */
Req->command, Client_ID(cl),
Req->argv[1]))
return DISCONNECTED;
- } else if (strchr("$#", currentTarget[0])
+ } else if (ForceType != CLIENT_SERVICE
+ && strchr("$#", currentTarget[0])
&& strchr(currentTarget, '.')) {
/* targetmask */
if (!Send_Message_Mask(from, Req->command, currentTarget,
Req->argv[1], SendErrors))
return DISCONNECTED;
- } else if ((chan = Channel_Search(currentTarget))) {
+ } else if (ForceType != CLIENT_SERVICE
+ && (chan = Channel_Search(currentTarget))) {
/* channel */
- if (!Channel_Write(chan, from, Client, Req->argv[1]))
- return DISCONNECTED;
+ if (!Channel_Write(chan, from, Client, Req->command,
+ SendErrors, Req->argv[1]))
+ return DISCONNECTED;
} else {
if (!SendErrors)
return CONNECTED;