server/admin.c: Add `-quiet' options to `forcekx' and `kill'.
[tripe] / server / admin.c
index 221b249..4bab440 100644 (file)
@@ -2101,21 +2101,40 @@ static void acmd_stats(admin *a, unsigned ac, char *av[])
 static void acmd_kill(admin *a, unsigned ac, char *av[])
 {
   peer *p;
+  int bye = 1;
 
+  OPTIONS(ac, av, {
+    OPT("-quiet", { bye = 0; })
+  });
+  if (!*av || av[1]) goto bad_syntax;
   if ((p = a_findpeer(a, av[0])) != 0) {
-    p_destroy(p, 1);
+    p_destroy(p, bye);
     a_ok(a);
   }
+  return;
+
+bad_syntax:
+  a_fail(a, "bad-syntax", "kill", "[OPTIONS] PEER", A_END);
 }
 
 static void acmd_forcekx(admin *a, unsigned ac, char *av[])
 {
   peer *p;
+  int quiet = 0;
 
+  OPTIONS(ac, av, {
+    OPT("-quiet", { quiet = 1; })
+  });
+  if (!*av || av[1]) goto bad_syntax;
   if ((p = a_findpeer(a, av[0])) != 0) {
-    kx_start(&p->kx, 1);
+    if (!quiet) kx_start(&p->kx, 1);
+    else { p->kx.t_valid = time(0) - T_VALID - 1; }
     a_ok(a);
   }
+  return;
+
+bad_syntax:
+  a_fail(a, "bad-syntax", "forcekx", "[OPTIONS] PEER", A_END);
 }
 
 static void acmd_reload(admin *a, unsigned ac, char *av[])
@@ -2159,13 +2178,13 @@ static const acmd acmdtab[] = {
   { "checkchal", "CHAL",               1,      1,      acmd_checkchal },
   { "daemon",  0,                      0,      0,      acmd_daemon },
   { "eping",   "[OPTIONS] PEER",       1,      0xffff, acmd_eping },
-  { "forcekx", "PEER",                 1,      1,      acmd_forcekx },
+  { "forcekx", "[OPTIONS] PEER",       1,      0xffff, acmd_forcekx },
   { "getchal", 0,                      0,      0,      acmd_getchal },
   { "greet",   "PEER CHAL",            2,      2,      acmd_greet },
   { "help",    0,                      0,      0,      acmd_help },
   { "ifname",  "PEER",                 1,      1,      acmd_ifname },
   { "jobs",    0,                      0,      0,      acmd_jobs },
-  { "kill",    "PEER",                 1,      1,      acmd_kill },
+  { "kill",    "[OPTIONS] PEER",       1,      0xffff, acmd_kill },
   { "list",    0,                      0,      0,      acmd_list },
   { "notify",  "MESSAGE ...",          1,      0xffff, acmd_notify },
   { "peerinfo",        "PEER",                 1,      1,      acmd_peerinfo },