shithub: ircd

ref: eaf9a2c0694335ea7d5139f83b3824f6127fb310
dir: /reply.c/

View raw version
#include <u.h>
#include <libc.h>
#include <String.h>
#include "dat.h"
#include "fns.h"

char*
getreplies(Client *c)
{
	return s_to_c((String*)c->replies.reply);
}

void
flushreplies(Client *c)
{
	String *s;
	if (!c->replies.reply)
		return;
	s = c->replies.reply;
	s_reset(s);
}

void
reply(Client *c, Reply repl, ...)
{
	char buf[1024];
	int i;
	va_list arg;
	String *s;
	
	i = snprint(buf, sizeof buf, ":%s %03d ", sysnameb, repl.nr);
	
	va_start(arg, repl);
	i += vsnprint(&buf[i], sizeof(buf) - i, repl.msg, arg);
	va_end(arg);
	
	snprint(&buf[i], sizeof(buf) - i, "\r\n");
	
	if (debug > 1)
		fprint(2, "reply: '%s'\n", buf);
	qlock(&c->replies);
	s = c->replies.reply;
	s_append(s, buf);
	qunlock(&c->replies);
}

void
ircsend(Client *c, Client *sender, Reply repl, ...)
{
	char buf[1024];
	int i;
	va_list arg;
	String *s;
	
	if (sender) {
		i = snprint(buf, sizeof buf, ":%s!%s@%s ",
			sender->nick, sender->user->name,
			sender->user->host ? sender->user->host : sysnameb);
	} else {
		i = snprint(buf, sizeof buf, ":%s ", sysnameb);
	}
	
	va_start(arg, repl);
	i += vsnprint(&buf[i], sizeof(buf) - i, repl.msg, arg);
	va_end(arg);
	
	snprint(&buf[i], sizeof(buf) - i, "\r\n");
	
	if (debug > 1)
		fprint(2, "ircsend: '%s'\n", buf);
	
	qlock(&c->replies);
	s = c->replies.reply;
	s_append(s, buf);
	qunlock(&c->replies);
}

void
ircerror(Client *c, char *msg, ...)
{
	char buf[1024];
	int i;
	va_list arg;
	String *s;
	
	i = snprint(buf, sizeof buf, ":%s ERROR :", sysnameb);
	
	va_start(arg, msg);
	i += vsnprint(&buf[i], sizeof(buf) - i, msg, arg);
	va_end(arg);
	
	snprint(&buf[i], sizeof(buf) - i, "\r\n");
	
	if (debug > 1)
		fprint(2, "error: '%s'\n", buf);
	
	qlock(&c->replies);
	s = c->replies.reply;
	s_append(s, buf);
	qunlock(&c->replies);
}