Example #1
0
static void notice(u_user *u, const char *fmt, ...)
{
	char buf[512];
	va_list va;

	va_start(va, fmt);
	vsnf(FMT_USER, buf, 512, fmt, va);
	va_end(va);

	if (u == NULL) {
		/* ?? */
		u_log(LG_INFO, "notice: %s", buf);
	} else {
		u_link_f(u->link, ":%S NOTICE %U :%s", &me, u, buf);
	}
}
Example #2
0
void u_link_vnum(u_link *link, const char *tgt, int num, va_list va)
{
	char buf[4096];
	char *fmt;

	if (!link)
		return;

	fmt = u_numeric_fmt[num];

	if (fmt == NULL) {
		u_log(LG_SEVERE, "Attempted to use NULL numeric %d", num);
		return;
	}

	/* numerics are ALWAYS FMT_USER */
	vsnf(FMT_USER, buf, 4096, fmt, va);

	u_link_f(link, ":%S %03d %s %s", &me, num, tgt, buf);
}
Example #3
0
int u_log(int level, char* fmt, ...)
{
	static bool logging = false;
	struct tm *tm;
	char tmbuf[512];
	char buf[BUFSIZE];
	va_list va;

	if (level > u_log_level)
		return 0;

	if (logging)
		return 0;
	logging = true;

	va_start(va, fmt);
	vsnf(FMT_LOG, buf, BUFSIZE, fmt, va);
	va_end(va);

	tm = localtime(&NOW.tv_sec);
	snf(FMT_LOG, tmbuf, 512, "%04d/%02d/%02d %02d:%02d:%02d",
	    tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
	    tm->tm_hour, tm->tm_min, tm->tm_sec);

	struct hook_log hook;
	hook.level = level;
	hook.time = tmbuf;
	hook.line = buf;
	if (log_hook == NULL)
		log_hook = u_hook_get(HOOK_LOG);
	u_hook_call(log_hook, &hook);

	logging = false;

	return u_log_handler(level, tmbuf, buf);
}
Example #4
0
void u_link_vf(u_link *link, const char *fmt, va_list va)
{
	uchar *buf;
	size_t sz;
	int type;

	if (!link)
		return;

	if (link->sendq > 0 && link->conn->sendq.size + 512 > link->sendq) {
		on_sendq_full(link->conn);
		return;
	}

	buf = u_conn_get_send_buffer(link->conn, 512);

	if (buf == NULL) {
		on_sendq_full(link->conn);
		return;
	}

	type = FMT_USER;
	if (link->type == LINK_SERVER)
		type = FMT_SERVER;

	sz = vsnf(type, (char*)buf, 510, fmt, va);

	buf[sz] = '\0';

	u_log(LG_DEBUG, "[%G] <- %s", link, buf);

	buf[sz++] = '\r';
	buf[sz++] = '\n';

	u_conn_end_send_buffer(link->conn, sz);
}