- if (!u)
- {
- log(DEFAULT,"*** BUG *** WriteCommon was given an invalid parameter");
- return;
- }
-
- if (u->registered != 7) {
- log(DEFAULT,"*** BUG *** WriteCommon on an unregistered user");
- return;
- }
-
- memset(&already_sent,0,MAX_DESCRIPTORS);
-
- unsigned int y = u->chans.size();
- for (unsigned int i = 0; i < y; i++)
- {
- if (u->chans[i].channel)
- {
- std::map<char*,char*> *ulist= u->chans[i].channel->GetUsers();
- for (std::map<char*,char*>::iterator i = ulist->begin(); i != ulist->end(); i++)
- {
- char* o = i->second;
- userrec* otheruser = (userrec*)o;
- if (u != otheruser)
- {
- if ((otheruser->fd > -1) && (!already_sent[otheruser->fd]))
- {
- already_sent[otheruser->fd] = 1;
- WriteFrom_NoFormat(otheruser->fd,u,text);
- }
- }
- }
- }
- }
+ unsigned int y;
+
+ if (!u)
+ {
+ log(DEFAULT,"*** BUG *** WriteCommon was given an invalid parameter");
+ return;
+ }
+
+ if (u->registered != 7)
+ {
+ log(DEFAULT,"*** BUG *** WriteCommon on an unregistered user");
+ return;
+ }
+
+ memset(&already_sent,0,MAX_DESCRIPTORS);
+ y = u->chans.size();
+
+ for (unsigned int i = 0; i < y; i++)
+ {
+ if (u->chans[i].channel)
+ {
+ CUList *ulist= u->chans[i].channel->GetUsers();
+
+ for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
+ {
+ if (u != i->second)
+ {
+ if ((i->second->fd > -1) && (!already_sent[i->second->fd]))
+ {
+ already_sent[i->second->fd] = 1;
+ WriteFrom_NoFormat(i->second->fd,u,text);
+ }
+ }
+ }
+ }
+ }
+}
+
+
+/* XXX - We don't use WriteMode for this because WriteMode is very slow and
+ * this isnt. Basically WriteMode has to iterate ALL the users 'n' times for
+ * the number of modes provided, e.g. if you send WriteMode 'og' to write to
+ * opers with globops, and you have 2000 users, thats 4000 iterations. WriteOpers
+ * uses the oper list, which means if you have 2000 users but only 5 opers,
+ * it iterates 5 times.
+ */
+void WriteOpers(char* text, ...)
+{
+ char textbuffer[MAXBUF];
+ va_list argsPtr;
+
+ if (!text)
+ {
+ log(DEFAULT,"*** BUG *** WriteOpers was given an invalid parameter");
+ return;
+ }
+
+ va_start(argsPtr, text);
+ vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ va_end(argsPtr);
+
+ for (std::vector<userrec*>::iterator i = all_opers.begin(); i != all_opers.end(); i++)
+ {
+ userrec* a = *i;
+
+ if (IS_LOCAL(a))
+ {
+ if (strchr(a->modes,'s'))
+ {
+ // send server notices to all with +s
+ WriteServ(a->fd,"NOTICE %s :%s",a->nick,textbuffer);
+ }
+ }
+ }
+}
+
+void ServerNoticeAll(char* text, ...)
+{
+ if (!text)
+ return;
+
+ char textbuffer[MAXBUF];
+ va_list argsPtr;
+ va_start (argsPtr, text);
+ vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ va_end(argsPtr);
+
+ for (std::vector<userrec*>::const_iterator i = local_users.begin(); i != local_users.end(); i++)
+ {
+ userrec* t = (userrec*)(*i);
+ WriteServ(t->fd,"NOTICE $%s :%s",Config->ServerName,textbuffer);
+ }
+}
+
+void ServerPrivmsgAll(char* text, ...)
+{
+ if (!text)
+ return;
+
+ char textbuffer[MAXBUF];
+ va_list argsPtr;
+ va_start (argsPtr, text);
+ vsnprintf(textbuffer, MAXBUF, text, argsPtr);
+ va_end(argsPtr);
+
+ for (std::vector<userrec*>::const_iterator i = local_users.begin(); i != local_users.end(); i++)
+ {
+ userrec* t = (userrec*)(*i);
+ WriteServ(t->fd,"PRIVMSG $%s :%s",Config->ServerName,textbuffer);
+ }