ref: 4161df5fd7487feaf4758b93a8d8371bec433471
dir: /cmd.c/
#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);
}