shithub: ircd

ref: 4161df5fd7487feaf4758b93a8d8371bec433471
dir: /cmd.c/

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

static void
cversion(User *u, Request *r)
{
	if (r->args[0]) {
		fprint(2, "get version of '%s' (not implemented yet!)\n", r->args[0]);
		reply(u, Enosuchserver, r->args[0]);
		return;
	}
	reply(u, Rversion, getversion());
}

static void
cuser(User *u, Request *r)
{
	// TODO: how to respond without knowing the user?
	if (!r->args[3]) {
		fprint(2, "user without enough args%R\n", *r);
		// reply(u, Eneedmoreparams, r->cmd.name);
		return;
	}
	u = finduser(r->args[0]);
	if (u) {
		fprint(2, "user already registered%R\n", *r);
		// reply(u, Ealreadyregistered);
		return;
	}
	u = adduser(r->args[0]);
	setuser(u);
}

static Command commands[] = {
	{ "version", cversion },
	{ "user", cuser },
};
int ncommands = sizeof(commands) / sizeof(Command);

Command*
findcommand(char *s)
{
	for (int i = 0; i < ncommands; i++) {
		if (cistrcmp(commands[i].name, s) == 0)
			return &commands[i];
	}
	return nil;
}

Command*
findcommandn(int n)
{
	return nil;
}

void
execrequest(User *u, Request r)
{
	if (!(r.cmd && r.cmd->func)) {
		fprint(2, "cannot execute request: no command\n");
		return;
	}
	if (debug)
		fprint(2, "run command '%s'\n", r.cmd->name);
	r.cmd->func(u, &r);
}