]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/send.c
Speed up /unresv. Rehash bans now only happens if explicitly requested.
[irc/rqf/shadowircd.git] / src / send.c
index bafeb0a53723fd57a0d43c84ff302717a6a14ef6..bd4adea8e457449c5efccd490a294a6e57ac5c74 100644 (file)
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: send.c 1379 2006-05-20 14:11:07Z jilles $
+ *  $Id: send.c 3520 2007-06-30 22:15:35Z jilles $
  */
 
 #include "stdinc.h"
@@ -43,6 +43,7 @@
 #include "s_log.h"
 #include "memory.h"
 #include "hook.h"
+#include "monitor.h"
 
 #define LOG_BUFSIZE 2048
 
@@ -371,6 +372,7 @@ sendto_one_notice(struct Client *target_p, const char *pattern, ...)
        struct Client *dest_p;
        va_list args;
        buf_head_t linebuf;
+       char *to;
 
        /* send remote if to->from non NULL */
        if(target_p->from != NULL)
@@ -391,7 +393,7 @@ sendto_one_notice(struct Client *target_p, const char *pattern, ...)
        va_start(args, pattern);
        linebuf_putmsg(&linebuf, pattern, &args,
                       ":%s NOTICE %s ",
-                      get_id(&me, target_p), get_id(target_p, target_p));
+                      get_id(&me, target_p), *(to = get_id(target_p, target_p)) != '\0' ? to : "*");
        va_end(args);
 
        _send_linebuf(dest_p, &linebuf);
@@ -411,6 +413,7 @@ sendto_one_numeric(struct Client *target_p, int numeric, const char *pattern, ..
        struct Client *dest_p;
        va_list args;
        buf_head_t linebuf;
+       char *to;
 
        /* send remote if to->from non NULL */
        if(target_p->from != NULL)
@@ -432,7 +435,7 @@ sendto_one_numeric(struct Client *target_p, int numeric, const char *pattern, ..
        linebuf_putmsg(&linebuf, pattern, &args,
                       ":%s %03d %s ",
                       get_id(&me, target_p),
-                      numeric, get_id(target_p, target_p));
+                      numeric, *(to = get_id(target_p, target_p)) != '\0' ? to : "*");
        va_end(args);
 
        _send_linebuf(dest_p, &linebuf);
@@ -926,6 +929,40 @@ sendto_match_servs(struct Client *source_p, const char *mask, int cap,
        linebuf_donebuf(&linebuf_name);
 }
 
+/* sendto_monitor()
+ *
+ * inputs      - monitor nick to send to, format, va_args
+ * outputs     - message to local users monitoring the given nick
+ * side effects -
+ */
+void
+sendto_monitor(struct monitor *monptr, const char *pattern, ...)
+{
+       va_list args;
+       buf_head_t linebuf;
+       struct Client *target_p;
+       dlink_node *ptr;
+       dlink_node *next_ptr;
+       
+       linebuf_newbuf(&linebuf); 
+       
+       va_start(args, pattern);
+       linebuf_putmsg(&linebuf, pattern, &args, NULL);
+       va_end(args);
+
+       DLINK_FOREACH_SAFE(ptr, next_ptr, monptr->users.head)
+       {
+               target_p = ptr->data;
+
+               if(IsIOError(target_p))
+                       continue;
+
+               _send_linebuf(target_p, &linebuf);
+       }
+
+       linebuf_donebuf(&linebuf);
+}
+
 /* sendto_anywhere()
  *
  * inputs      - target, source, va_args