chiark / gitweb /
doc: Fix distribution of generated manpages.
[tripe] / server / tripe.h
index e917ddb0b241afa306f5d328382e9536b8dfa148..5f00718db5ecdd40b7bb195893e8d06b4fb37477 100644 (file)
@@ -68,6 +68,7 @@
 #include <mLib/arena.h>
 #include <mLib/base64.h>
 #include <mLib/bres.h>
+#include <mLib/daemonize.h>
 #include <mLib/dstr.h>
 #include <mLib/env.h>
 #include <mLib/fdflags.h>
@@ -82,6 +83,7 @@
 #include <mLib/sub.h>
 #include <mLib/trace.h>
 #include <mLib/tv.h>
+#include <mLib/versioncmp.h>
 
 #include <catacomb/buf.h>
 
@@ -267,8 +269,10 @@ struct peer;
 typedef struct tunnel_ops {
   const char *name;                    /* Name of this tunnel driver */
   void (*init)(void);                  /* Initializes the system */
-  tunnel *(*create)(struct peer */*p*/); /* Initializes a new tunnel */
-  const char *(*ifname)(tunnel */*t*/);        /* Returns tunnel's interface name */
+  tunnel *(*create)(struct peer */*p*/, char **/*ifn*/);
+                                       /* Initializes a new tunnel */
+  void (*setifname)(tunnel */*t*/, const char */*ifn*/);
+                                       /*  Notifies ifname change */
   void (*inject)(tunnel */*t*/, buf */*b*/); /* Sends packet through if */
   void (*destroy)(tunnel */*t*/);      /* Destroys a tunnel */
 } tunnel_ops;
@@ -391,7 +395,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 +436,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;
@@ -1146,39 +1181,6 @@ extern void seq_reset(seqwin */*s*/);
 
 extern int seq_check(seqwin */*s*/, uint32 /*q*/, const char */*service*/);
 
-/* --- @versioncmp@ --- *
- *
- * Arguments:  @const char *va, *vb@ = two version strings
- *
- * Returns:    Less than, equal to, or greater than zero, according to
- *             whether @va@ is less than, equal to, or greater than @vb@.
- *
- * Use:                Compares version number strings.
- *
- *             The algorithm is an extension of the Debian version
- *             comparison algorithm.  A version number consists of three
- *             components:
- *
- *               [EPOCH :] MAIN [- SUB]
- *
- *             The MAIN part may contain colons or hyphens if there is an
- *             EPOCH or SUB, respectively.  Version strings are compared
- *             componentwise: first epochs, then main parts, and finally
- *             subparts.
- *
- *             The component comparison is done as follows.  First, the
- *             initial subsequence of nondigit characters is extracted from
- *             each string, and these are compared lexicographically, using
- *             ASCII ordering, except that letters precede non-letters.  If
- *             both are the same, an initial sequence of digits is extracted
- *             from the remaining parts of the version strings, and these
- *             are compared numerically (an empty sequence being considered
- *             to have the value zero).  This process is repeated until we
- *             have a winner or until both strings are exhausted.
- */
-
-extern int versioncmp(const char */*va*/, const char */*vb*/);
-
 /*----- That's all, folks -------------------------------------------------*/
 
 #ifdef __cplusplus