diff options
Diffstat (limited to '9p/srv.c')
-rw-r--r-- | 9p/srv.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/9p/srv.c b/9p/srv.c new file mode 100644 index 0000000..f7c8195 --- /dev/null +++ b/9p/srv.c @@ -0,0 +1,44 @@ +#include "net9p.h" +#include "net9p_defs.h" +#include "netio.h" + +#define MAX_MSG_SIZE 1024 + +int read_msg(int conn, uint16_t *out_tag, void **out_body) { + uint8_t buf[MAX_MSG_SIZE]; + size_t todo = 7, done = 0; + + while (done < todo) { + ssize_t r = netio_read(conn, buf, 7); + if (r < 0) + return r; + done += r; + } + todo = docode_u32le(buf); + if (todo < 7) + return -EINVAL; + while (done < todo) { + ssize_t r = netio_read(conn, buf, 7); + if (r < 0) + return r; + done += r; + } + return v9fs_unmarshal_msg(buf, out_tag, out_body); +} + +void net9p_cr(void *_arg) { + int sock = *((int *)_arg); + cr_begin(); + + for (;;) { + int conn = netio_accept(sock); + if (conn < 0) { + error(0, -conn, "netio_accept"); + continue; + } + + + } + + cr_end(); +} |