/* * inputs - flag privmsg or notice * - pointer to command "PRIVMSG" or "NOTICE" * - pointer to client_p * - pointer to source_p * - pointer to channel */ static void m_message(int p_or_n, char *command, struct Client *client_p, struct Client *source_p, int parc, char *parv[]) { int i; if (parc < 2 || *parv[1] == '\0') { if (p_or_n != NOTICE) sendto_one(source_p, form_str(source_p,ERR_NORECIPIENT), me.name, source_p->name, command); return; } if (parc < 3 || *parv[2] == '\0') { if (p_or_n != NOTICE) sendto_one(source_p, form_str(source_p,ERR_NOTEXTTOSEND), me.name, source_p->name); return; } /* Finish the flood grace period... */ if(MyClient(source_p) && !IsFloodDone(source_p)) flood_endgrace(source_p); if (build_target_list(p_or_n, command, client_p, source_p, parv[1], parv[2]) < 0) { /* Sigh. We need to relay this command to the hub */ if (!ServerInfo.hub && (uplink != NULL)) sendto_one(uplink, ":%s %s %s :%s", source_p->name, command, parv[1], parv[2]); return; } for (i = 0; i < ntargets; i++) { switch (targets[i].type) { case ENTITY_CHANNEL: msg_channel(p_or_n, command, client_p, source_p, (struct Channel *)targets[i].ptr, parv[2]); break; case ENTITY_CHANOPS_ON_CHANNEL: msg_channel_flags(p_or_n, command, client_p, source_p, (struct Channel *)targets[i].ptr, targets[i].flags, parv[2]); break; case ENTITY_CLIENT: msg_client(p_or_n, command, source_p, (struct Client *)targets[i].ptr, parv[2]); break; } } }
/* * inputs - flag privmsg or notice * - pointer to command "PRIVMSG" or "NOTICE" * - pointer to source_p * - pointer to channel */ static void m_message(int p_or_n, const char *command, struct Client *source_p, int parc, char *parv[]) { if (parc < 2 || EmptyString(parv[1])) { if (p_or_n != NOTICE) sendto_one_numeric(source_p, &me, ERR_NORECIPIENT, command); return; } if (parc < 3 || EmptyString(parv[2])) { if (p_or_n != NOTICE) sendto_one_numeric(source_p, &me, ERR_NOTEXTTOSEND); return; } /* Finish the flood grace period... */ if (MyClient(source_p) && !IsFloodDone(source_p)) flood_endgrace(source_p); if (build_target_list(p_or_n, command, source_p, parv[1], parv[2]) < 0) return; for (unsigned int i = 0; i < ntargets; ++i) { switch (targets[i].type) { case ENTITY_CLIENT: msg_client(p_or_n, command, source_p, targets[i].ptr, parv[2]); break; case ENTITY_CHANNEL: msg_channel(p_or_n, command, source_p, targets[i].ptr, parv[2]); break; case ENTITY_CHANOPS_ON_CHANNEL: msg_channel_flags(p_or_n, command, source_p, targets[i].ptr, targets[i].flags, parv[2]); break; } } }
/* * inputs - flag privmsg or notice * - pointer to command "PRIVMSG" or "NOTICE" * - pointer to client_p * - pointer to source_p * - pointer to channel */ static void m_message(int p_or_n, const char *command, struct Client *client_p, struct Client *source_p, int parc, char *parv[]) { int i; if(parc < 2 || EmptyString(parv[1])) { if(p_or_n != NOTICE) sendto_one(source_p, form_str(ERR_NORECIPIENT), ID_or_name(&me, client_p), ID_or_name(source_p, client_p), command); return; } if(parc < 3 || EmptyString(parv[2])) { if(p_or_n != NOTICE) sendto_one(source_p, form_str(ERR_NOTEXTTOSEND), ID_or_name(&me, client_p), ID_or_name(source_p, client_p)); return; } /* Finish the flood grace period... */ if(MyClient(source_p) && !IsFloodDone(source_p)) #if 0 &&irccmp(source_p->name, parv[1]) != 0) /* some dumb clients msg/notice themself to determine lag to the server BEFORE sending JOIN commands, and then flood off because they left gracemode. -wiz */ /* * Not our problem if they do this. -Michael */ #endif flood_endgrace(source_p); if(build_target_list(p_or_n, command, client_p, source_p, parv[1], parv[2]) < 0) { /* Sigh. We need to relay this command to the hub */ if(!ServerInfo.hub && (uplink != NULL)) sendto_one(uplink, ":%s %s %s :%s", source_p->name, command, parv[1], parv[2]); return; } for(i = 0; i < ntargets; i++) { switch (targets[i].type) { case ENTITY_CHANNEL: msg_channel(p_or_n, command, client_p, source_p, (struct Channel *) targets[i].ptr, parv[2]); break; case ENTITY_CHANOPS_ON_CHANNEL: msg_channel_flags(p_or_n, command, client_p, source_p, (struct Channel *) targets[i].ptr, targets[i].flags, parv[2]); break; case ENTITY_CLIENT: msg_client(p_or_n, command, source_p, (struct Client *) targets[i].ptr, parv[2]); break; } } }