kuro/srv.c

105 lines
1.8 KiB
C
Raw Permalink Normal View History

2024-01-22 07:50:23 +00:00
#include "dat.h"
#include "fns.h"
2024-01-31 05:53:42 +00:00
static Node* node;
2024-01-22 07:50:23 +00:00
Aux* create_aux(FileType t) {
Aux* self = (Aux*)malloc(sizeof(Aux));
self->type = t;
self->data = nil;
self->count = 0;
return self;
}
void fs_destroy_file(File* f) {
Aux* a = (Aux*)f->aux;
if(a && a->data) {
free(a->data);
}
if (a) {
free (a);
}
}
void kuro_read(Req* r) {
Aux* a = (Aux*)r->fid->file->aux;
switch (a->type) {
case CTL:
2024-01-31 05:53:42 +00:00
case MEMORY:
2024-01-22 07:50:23 +00:00
default:
respond(r, nil);
break;
}
}
void write_ctl(Req* r) {
char cmd[16] = {0};
char* c = r->ifcall.data;
int i;
for (i = 0; i < r->ifcall.count && *c != ' ' && *c != '\n'; i++) {
strncat(cmd, c, 1);
c++;
}
if (*c == ' ') {
c++;
}
/* maybe don't do this... */
strcsw(c, '\n', 0);
/* diagnostics for now */
print("cmd: %s\n", cmd);
print("arg: %s\n", c);
2024-01-31 05:53:42 +00:00
2024-01-22 07:50:23 +00:00
print("unknown command...\n");
2024-01-31 05:53:42 +00:00
r->ofcall.count = r->ifcall.count;
2024-01-22 07:50:23 +00:00
respond(r, nil);
2024-01-31 05:53:42 +00:00
2024-01-22 07:50:23 +00:00
}
void kuro_write(Req* r) {
Aux* a = (Aux*)r->fid->file->aux;
switch (a->type) {
case CTL:
write_ctl(r);
break;
2024-01-31 05:53:42 +00:00
case CPU:
2024-01-22 07:50:23 +00:00
default:
respond(r, nil);
break;
}
}
2024-01-27 05:39:39 +00:00
char* mk_mtpt(char* parent, char* buf) {
int pid = getpid();
sprintf(buf, "%s/%d", parent, pid);
return buf;
}
2024-01-31 05:53:42 +00:00
void start_9p(Node* n) {
node = n;
2024-01-27 05:39:39 +00:00
char* mtpt_base = getenv("KURO_MTPT");
2024-01-31 05:53:42 +00:00
if (mtpt_base && n) {
char mtpt[256] = {0};
2024-01-27 05:39:39 +00:00
mk_mtpt(mtpt_base, mtpt);
2024-01-31 05:53:42 +00:00
if (ensure(mtpt)) {
print("kuro fsys: %s\n", mtpt);
} else {
sysfatal("couldn't create fsys at %s\n", mtpt);
}
2024-01-22 07:50:23 +00:00
Srv srv = { .read = kuro_read, .write = kuro_write };
Tree* tree = alloctree(nil, nil, DMDIR | 0777, fs_destroy_file);
srv.tree = tree;
2024-01-31 05:53:42 +00:00
closefile(createfile(tree->root, "ctl", nil, 0600, create_aux(CTL)));
2024-01-22 07:50:23 +00:00
threadpostmountsrv(&srv, nil, mtpt, MREPL | MCREATE);
2024-01-27 05:39:39 +00:00
threadexits(0);
2024-01-22 07:50:23 +00:00
}
}