void inet::send(int who, const char *lst, ...) { va_list ap; int i; for(i=0; i<max_conns; ++i) { if(conn[i].fd > 0 && conn[i].status & STATUS_REGISTERED && conn[i].checkFlag(who) && !(conn[i].status & STATUS_REDIR)) { va_start(ap, lst); conn[i].va_send(ap, lst); va_end(ap); } } //owners if(who == HAS_N && config.bottype != BOT_MAIN) { int len; va_start(ap, lst); len = va_getlen(ap, lst); va_end(ap); va_start(ap, lst); char *str = va_push(NULL, ap, lst, len + 1); va_end(ap); sendOwner("*", str, NULL); free(str); } }
/* * Parse a comma delimited set of arguments into an array */ void parse_tags(va_t *tags, char *arg) { char *argstr = strdup(arg); char *s = strtok(argstr,","); while (s) { va_push(tags,strdup(s)); s = strtok(NULL,","); } free(argstr); }
void inet::sendOwner(const char *who, const char *lst, ...) { va_list ap; if(!who) return; if(config.bottype != BOT_MAIN) { HANDLE *h; if(!userlist.first) return; if(!userlist.first->next) return; h = userlist.first->next->next; while(h) { if(userlist.isMain(h)) { inetconn *c = findConn(h); if(c) { int len; va_start(ap, lst); len = va_getlen(ap, lst); va_end(ap); char *str; va_start(ap, lst); str = va_push(NULL, ap, lst, len + 1); va_end(ap); c->send(S_OREDIR, " ", userlist.first->next->name, " ", who, " ", str, NULL); free(str); } } h = h->next; } } else { for(int i=0; i<max_conns; ++i) if(conn[i].isRegOwner() && match(who, net.conn[i].handle->name)) { va_start(ap, lst); conn[i].va_send(ap, lst); va_end(ap); } } }
void inet::propagate(inetconn *from, const char *str, ...) { va_list ap; int len; char *p = push(NULL, S_FORWARD, " ", from ? from->handle->name : (const char *) config.handle, " * ", NULL); va_start(ap, str); len = va_getlen(ap, str); va_end(ap); va_start(ap, str); p = va_push(p, ap, str, len + 1); va_end(ap); net.sendexcept(from ? from->fd : 0, HAS_B, p, NULL); free(p); }
void inet::sendCmd(const char *from, const char *lst, ...) { if(!from) return; va_list ap; int len; int i; char buf[MAX_LEN], *a; strftime(buf, MAX_LEN, "[\002%H\002:\002%M\002] ", localtime(&NOW)); a = push(NULL, buf, "\002#\002", from, "\002#\002", " ", NULL); va_start(ap, lst); len = va_getlen(ap, lst); va_end(ap); va_start(ap, lst); a = va_push(a, ap, lst, len + 1); va_end(ap); for(i=0; i<max_conns; ++i) if(conn[i].fd && conn[i].isRegOwner()) conn[i].send(a, NULL); free(a); }