server/: Build a proper interface for handling tunnel classes.
[tripe] / server / admin.c
index 05cd168..78188f5 100644 (file)
@@ -553,23 +553,6 @@ void a_notify(const char *fmt, ...)
   va_end(ap);
 }
 
-/* --- @a_quit@ --- *
- *
- * Arguments:  ---
- *
- * Returns:    ---
- *
- * Use:                Shuts things down nicely.
- */
-
-void a_quit(void)
-{
-  a_unlisten();
-  p_destroyall();
-  ps_quit();
-  exit(0);
-}
-
 /* --- @a_sigdie@ --- *
  *
  * Arguments:  @int sig@ = signal number
@@ -594,7 +577,7 @@ static void a_sigdie(int sig, void *v)
       break;
   }
   a_warn("SERVER", "quit", "signal", "%s", p, A_END);
-  a_quit();
+  lp_end();
 }
 
 /* --- @a_sighup@ --- *
@@ -1445,6 +1428,7 @@ static void acmd_add(admin *a, unsigned ac, char *av[])
 {
   const char *tag = 0;
   admin_addop *add;
+  const tunnel_ops *tops;
 
   /* --- Set stuff up --- */
 
@@ -1454,7 +1438,7 @@ static void acmd_add(admin *a, unsigned ac, char *av[])
   add->peer.privtag = 0;
   add->peer.knock = 0;
   add->peer.t_ka = 0;
-  add->peer.tops = tun_default;
+  add->peer.tops = p_dflttun();
   add->peer.f = 0;
 
   /* --- Parse options --- */
@@ -1462,17 +1446,9 @@ static void acmd_add(admin *a, unsigned ac, char *av[])
   OPTIONS(ac, av, {
     OPTARG("-background", arg, { tag = arg; })
     OPTARG("-tunnel", arg, {
-      unsigned i;
-      for (i = 0;; i++) {
-       if (!tunnels[i]) {
-         a_fail(a, "unknown-tunnel", "%s", arg, A_END);
-         goto fail;
-       }
-       if (mystrieq(arg, tunnels[i]->name)) {
-         add->peer.tops = tunnels[i];
-         break;
-       }
-      }
+      if ((tops = p_findtun(arg)) == 0)
+       { a_fail(a, "unknown-tunnel", "%s", arg, A_END); goto fail; }
+      add->peer.tops = tops;
     })
     OPTTIME("-keepalive", t, { add->peer.t_ka = t; })
     OPT("-cork", { add->peer.f |= KXF_CORK; })
@@ -2150,7 +2126,7 @@ static void acmd_quit(admin *a, unsigned ac, char *av[])
 {
   a_warn("SERVER", "quit", "admin-request", A_END);
   a_ok(a);
-  a_quit();
+  lp_end();
 }
 
 static void acmd_version(admin *a, unsigned ac, char *av[])
@@ -2161,10 +2137,7 @@ static void acmd_version(admin *a, unsigned ac, char *av[])
 
 static void acmd_tunnels(admin *a, unsigned ac, char *av[])
 {
-  int i;
-
-  for (i = 0; tunnels[i]; i++)
-    a_info(a, "%s", tunnels[i]->name, A_END);
+  FOREACH_TUN(tops, { a_info(a, "%s", tops->name, A_END); });
   a_ok(a);
 }
 
@@ -2278,7 +2251,7 @@ static void a_destroypending(void)
       if (a->f & AF_FOREGROUND) {
        T( trace(T_ADMIN, "admin: foreground client quit: shutting down"); )
        a_warn("SERVER", "quit", "foreground-eof", A_END);
-       a_quit();
+       lp_end();
       }
 
       /* --- Abort any background jobs in progress --- */