Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / ircd_relay.c
index a6d771db39aad15c394dea49f302b2445c2ba9c8..0953568cccd7dfb76d3de6b5088b1e4fe6940627 100644 (file)
@@ -22,6 +22,8 @@
  *
  * $Id$
  */
+#include "config.h"
+
 #include "ircd_relay.h"
 #include "channel.h"
 #include "client.h"
@@ -73,7 +75,7 @@ void relay_channel_message(struct Client* sptr, const char* name, const char* te
       check_target_limit(sptr, chptr, chptr->chname, 0))
     return;
 
-  sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, sptr->from,
+  sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, cli_from(sptr),
                           SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
 }
 
@@ -96,7 +98,7 @@ void relay_channel_notice(struct Client* sptr, const char* name, const char* tex
       check_target_limit(sptr, chptr, chptr->chname, 0))
     return;  
 
-  sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, sptr->from,
+  sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, cli_from(sptr),
                           SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
 }
 
@@ -119,7 +121,7 @@ void server_relay_channel_message(struct Client* sptr, const char* name, const c
    * Servers may have channel services, need to check for it here
    */
   if (client_can_send_to_channel(sptr, chptr) || IsChannelService(sptr)) {
-    sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, sptr->from,
+    sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, cli_from(sptr),
                             SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
   }
   else
@@ -140,7 +142,7 @@ void server_relay_channel_notice(struct Client* sptr, const char* name, const ch
    * Servers may have channel services, need to check for it here
    */
   if (client_can_send_to_channel(sptr, chptr) || IsChannelService(sptr)) {
-    sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, sptr->from,
+    sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, cli_from(sptr),
                             SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
   }
 }
@@ -177,7 +179,7 @@ void relay_directed_message(struct Client* sptr, char* name, char* server, const
     *host++ = '\0';
 
   if (!(acptr = FindUser(name)) || !MyUser(acptr) ||
-      (!EmptyString(host) && 0 != match(host, acptr->user->host))) {
+      (!EmptyString(host) && 0 != match(host, cli_user(acptr)->host))) {
     send_reply(sptr, ERR_NOSUCHNICK, name);
     return;
   }
@@ -219,7 +221,7 @@ void relay_directed_notice(struct Client* sptr, char* name, char* server, const
     *host++ = '\0';
 
   if (!(acptr = FindUser(name)) || !MyUser(acptr) ||
-      (!EmptyString(host) && 0 != match(host, acptr->user->host)))
+      (!EmptyString(host) && 0 != match(host, cli_user(acptr)->host)))
     return;
 
   *server = '@';
@@ -242,15 +244,16 @@ void relay_private_message(struct Client* sptr, const char* name, const char* te
     send_reply(sptr, ERR_NOSUCHNICK, name);
     return;
   }
-  if (check_target_limit(sptr, acptr, acptr->name, 0) ||
+  if ((!IsChannelService(acptr) &&
+       check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
       is_silenced(sptr, acptr))
     return;
 
   /*
    * send away message if user away
    */
-  if (acptr->user && acptr->user->away)
-    send_reply(sptr, RPL_AWAY, acptr->name, acptr->user->away);
+  if (cli_user(acptr) && cli_user(acptr)->away)
+    send_reply(sptr, RPL_AWAY, cli_name(acptr), cli_user(acptr)->away);
   /*
    * deliver the message
    */
@@ -269,7 +272,8 @@ void relay_private_notice(struct Client* sptr, const char* name, const char* tex
 
   if (0 == (acptr = FindUser(name)))
     return;
-  if (check_target_limit(sptr, acptr, acptr->name, 0) ||
+  if ((!IsChannelService(acptr) && 
+       check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
       is_silenced(sptr, acptr))
     return;
   /*
@@ -291,7 +295,7 @@ void server_relay_private_message(struct Client* sptr, const char* name, const c
    * nickname addressed?
    */
   if (0 == (acptr = findNUser(name)) || !IsUser(acptr)) {
-    send_reply(sptr, RPL_EXPLICIT | ERR_NOSUCHNICK, "* :Target left UnderNet. "
+    send_reply(sptr, SND_EXPLICIT | ERR_NOSUCHNICK, "* :Target left UnderNet. "
               "Failed to deliver: [%.20s]", text);
     return;
   }
@@ -356,7 +360,7 @@ void relay_masked_message(struct Client* sptr, const char* mask, const char* tex
   }
 
   sendcmdto_match_butone(sptr, CMD_PRIVATE, s,
-                        IsServer(sptr->from) ? sptr->from : 0,
+                        IsServer(cli_from(sptr)) ? cli_from(sptr) : 0,
                         host_mask ? MATCH_HOST : MATCH_SERVER,
                         "%s :%s", mask, text);
 }
@@ -391,7 +395,7 @@ void relay_masked_notice(struct Client* sptr, const char* mask, const char* text
   }
 
   sendcmdto_match_butone(sptr, CMD_NOTICE, s,
-                        IsServer(sptr->from) ? sptr->from : 0,
+                        IsServer(cli_from(sptr)) ? cli_from(sptr) : 0,
                         host_mask ? MATCH_HOST : MATCH_SERVER,
                         "%s :%s", mask, text);
 }
@@ -409,7 +413,7 @@ void server_relay_masked_message(struct Client* sptr, const char* mask, const ch
     ++s;
   }
   sendcmdto_match_butone(sptr, CMD_PRIVATE, s,
-                        IsServer(sptr->from) ? sptr->from : 0,
+                        IsServer(cli_from(sptr)) ? cli_from(sptr) : 0,
                         host_mask ? MATCH_HOST : MATCH_SERVER,
                         "%s :%s", mask, text);
 }
@@ -427,7 +431,7 @@ void server_relay_masked_notice(struct Client* sptr, const char* mask, const cha
     ++s;
   }
   sendcmdto_match_butone(sptr, CMD_NOTICE, s,
-                        IsServer(sptr->from) ? sptr->from : 0,
+                        IsServer(cli_from(sptr)) ? cli_from(sptr) : 0,
                         host_mask ? MATCH_HOST : MATCH_SERVER,
                         "%s :%s", mask, text);
 }