summaryrefslogtreecommitdiff
path: root/lib9p/include
diff options
context:
space:
mode:
Diffstat (limited to 'lib9p/include')
-rw-r--r--lib9p/include/lib9p/srv.h64
1 files changed, 36 insertions, 28 deletions
diff --git a/lib9p/include/lib9p/srv.h b/lib9p/include/lib9p/srv.h
index 55bcba0..c56ee3f 100644
--- a/lib9p/include/lib9p/srv.h
+++ b/lib9p/include/lib9p/srv.h
@@ -7,26 +7,27 @@
#include <lib9p/9p.h>
-CR_RPC_DECLARE(_lib9p_srv_reqch, struct lib9p_req *, bool)
+/* context ********************************************************************/
+
CR_CHAN_DECLARE(_lib9p_srv_flushch, bool)
-struct lib9p_srv_reqctx {
- struct lib9p_ctx *base;
+struct lib9p_srv_ctx {
+ struct lib9p_ctx basectx;
uint32_t uid;
char *uname;
_lib9p_srv_flushch_t _flushch;
};
-static inline bool lib9p_srv_flush_requested(struct lib9p_srv_reqctx *ctx) {
+static inline bool lib9p_srv_flush_requested(struct lib9p_srv_ctx *ctx) {
assert(ctx);
return _lib9p_srv_flushch_can_send(&ctx->_flushch);
}
-static inline int lib9p_srv_acknowledge_flush(struct lib9p_srv_reqctx *ctx) {
+static inline int lib9p_srv_acknowledge_flush(struct lib9p_srv_ctx *ctx) {
assert(ctx);
assert(_lib9p_srv_flushch_can_send(&ctx->_flushch));
- lib9p_error(ctx->base, LINUX_ECANCELED, "request canceled by flush");
+ lib9p_error(&ctx->basectx, LINUX_ECANCELED, "request canceled by flush");
_lib9p_srv_flushch_send(&ctx->_flushch, true);
return -1;
}
@@ -35,31 +36,35 @@ static inline int lib9p_srv_acknowledge_flush(struct lib9p_srv_reqctx *ctx) {
struct lib9p_srv_file_vtable {
/* all */
- struct lib9p_srv_io (*io )(struct lib9p_srv_reqctx *ctx, void *impldata,
- lib9p_o_t flags);
- struct lib9p_stat (*stat )(struct lib9p_srv_reqctx *ctx, void *impldata);
- void (*wstat )(struct lib9p_srv_reqctx *ctx, void *impldata,
- struct lib9p_stat new);
- void (*remove )(struct lib9p_srv_reqctx *ctx, void *impldata);
- void (*free )(struct lib9p_srv_reqctx *ctx, void *impldata);
+ struct lib9p_srv_io (*io )(struct lib9p_srv_ctx *ctx, void *impl,
+ lib9p_o_t flags);
+ struct lib9p_stat (*stat )(struct lib9p_srv_ctx *ctx, void *impl);
+ void (*wstat )(struct lib9p_srv_ctx *ctx, void *impl,
+ struct lib9p_stat new);
+ void (*remove )(struct lib9p_srv_ctx *ctx, void *impl);
+ void (*free )(struct lib9p_srv_ctx *ctx, void *impl);
/* dir */
- struct lib9p_srv_file (*openchild )(struct lib9p_srv_reqctx *ctx, void *impldata,
- char *childname);
- struct lib9p_srv_file (*createchild)(struct lib9p_srv_reqctx *ctx, void *impldata,
- char *childname, lib9p_dm_t perm, lib9p_o_t flags);
+ struct lib9p_srv_file (*dopen )(struct lib9p_srv_ctx *ctx, void *impl,
+ char *childname);
+ struct lib9p_srv_file (*dcreate)(struct lib9p_srv_ctx *ctx, void *impl,
+ char *childname,
+ lib9p_dm_t perm, lib9p_o_t flags);
};
struct lib9p_srv_io_dir_vtable {
- size_t (*readdir )(struct lib9p_srv_reqctx *ctx, void *impldata,
- struct lib9p_stat *buf, size_t count, size_t offset);
+ size_t (*readdir)(struct lib9p_srv_ctx *ctx, void *impl,
+ struct lib9p_stat *buf, size_t count,
+ size_t offset);
};
struct lib9p_srv_io_file_vtable {
- uint32_t (*pread )(struct lib9p_srv_reqctx *ctx, void *impldata,
- void *buf, uint32_t count, uint64_t offset);
- uint32_t (*pwrite )(struct lib9p_srv_reqctx *ctx, void *impldata,
- void *buf, uint32_t count, uint64_t offset);
+ uint32_t (*pread )(struct lib9p_srv_ctx *ctx, void *impl,
+ void *buf, uint32_t count,
+ uint64_t offset);
+ uint32_t (*pwrite )(struct lib9p_srv_ctx *ctx, void *impl,
+ void *buf, uint32_t count,
+ uint64_t offset);
};
/* objects you'll deal with ***************************************************/
@@ -84,20 +89,23 @@ struct lib9p_srv_io {
void *impldata;
};
-/******************************************************************************/
+/* main server entrypoints ****************************************************/
+
+CR_RPC_DECLARE(_lib9p_srv_reqch, struct _lib9p_srv_req *, bool)
struct lib9p_srv {
/* Things you provide */
- int sockfd;
- void /*TODO*/ (*auth)(struct lib9p_srv_reqctx *ctx, char *treename);
- struct lib9p_srv_file (*rootdir)(struct lib9p_srv_reqctx *ctx, char *treename);
+ int sockfd;
+ void /*TODO*/ (*auth )(struct lib9p_srv_ctx *ctx, char *treename);
+ struct lib9p_srv_file (*rootdir)(struct lib9p_srv_ctx *ctx, char *treename);
/* For internal use */
- _lib9p_srv_reqch_t _reqch;
+ _lib9p_srv_reqch_t _reqch;
};
/**
* Will just close the connection if a T-message has a size[4] <7.
+ *
* @errno LINUX_EMSGSIZE T-message has size[4] bigger than max_msg_size
* @errno LINUX_EDOM Tversion specified an impossibly small max_msg_size
* @errno LINUX_EOPNOTSUPP T-message has an R-message type, or an unrecognized T-message type