X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/c511e1f925da3e735fb494d522ae3ae0f17ab9ce..24952f96a3f853e9c37e2c501dd04ae6ee2a552e:/server/tripe.h diff --git a/server/tripe.h b/server/tripe.h index a9a785dc..66fb091d 100644 --- a/server/tripe.h +++ b/server/tripe.h @@ -68,6 +68,7 @@ #include #include #include +#include #include #include #include @@ -82,6 +83,7 @@ #include #include #include +#include #include @@ -391,7 +393,36 @@ typedef struct admin_pingop { admin_bgop bg; /* Background operation header */ ping ping; /* Ping pending response */ struct timeval pingtime; /* Time last ping was sent */ -} admin_pingop; +} admin_pingop; + +typedef struct admin_service { + sym_base _b; /* Hash table base structure */ + char *version; /* The provided version */ + struct admin *prov; /* Which client provides me */ + struct admin_service *next, *prev; /* Client's list of services */ +} admin_service; + +typedef struct admin_svcop { + admin_bgop bg; /* Background operation header */ + struct admin *prov; /* Client servicing this job */ + unsigned short index; /* This job's index */ + struct admin_svcop *next, *prev; /* Links for provider's jobs */ +} admin_svcop; + +typedef struct admin_jobentry { + unsigned short seq; /* Zero if unused */ + union { + admin_svcop *op; /* Operation, if slot in use, ... */ + uint32 next; /* ... or index of next free slot */ + } u; +} admin_jobentry; + +typedef struct admin_jobtable { + uint32 n, sz; /* Used slots and table size */ + admin_svcop *active; /* List of active jobs */ + uint32 free; /* Index of first free slot */ + admin_jobentry *v; /* And the big array of entries */ +} admin_jobtable; typedef struct admin { struct admin *next, *prev; /* Links to next and previous */ @@ -403,6 +434,8 @@ typedef struct admin { oqueue out; /* Output buffer list */ oqueue delay; /* Delayed output buffer list */ admin_bgop *bg; /* Backgrounded operations */ + admin_service *svcs; /* Which services I provide */ + admin_jobtable j; /* Table of outstanding jobs */ selbuf b; /* Line buffer for commands */ sel_file w; /* Selector for write buffering */ } admin;