Esempio n. 1
0
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);
	}
}
Esempio n. 2
0
/*
 * 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);
}
Esempio n. 3
0
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);
			}
	}
}
Esempio n. 4
0
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);

}
Esempio n. 5
0
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);
}