Backgrounded commands and RELOAD.
[tripe] / peer.c
diff --git a/peer.c b/peer.c
index 1542b35..0e2664b 100644 (file)
--- a/peer.c
+++ b/peer.c
@@ -226,7 +226,7 @@ found:
            buf_flip(&bb);
            if (ksl_encrypt(&p->ks, MSG_MISC | MISC_EPONG, &bb,
                            p_txstart(p, MSG_MISC | MISC_EPONG)))
-             kx_start(&p->kx);
+             kx_start(&p->kx, 0);
            p_txend(p);
          }
          break;
@@ -389,8 +389,6 @@ int p_pingsend(peer *p, ping *pg, unsigned type,
   buf *b, bb;
   struct timeval tv;
 
-  assert(!pg->p);
-
   switch (type) {
     case MISC_PING:
       pg->msg = MISC_PONG;
@@ -405,7 +403,7 @@ int p_pingsend(peer *p, ping *pg, unsigned type,
       p_pingwrite(pg, &bb);
       buf_flip(&bb);
       if (ksl_encrypt(&p->ks, MSG_MISC | MISC_EPING, &bb, b))
-       kx_start(&p->kx);
+       kx_start(&p->kx, 0);
       if (!BOK(b))
        return (-1);
       p_txend(p);
@@ -445,7 +443,7 @@ void p_tun(peer *p, buf *b)
 
   TIMER;
   if (ksl_encrypt(&p->ks, MSG_PACKET, b, bb))
-    kx_start(&p->kx);
+    kx_start(&p->kx, 0);
   if (BOK(bb) && BLEN(bb)) {
     p->st.n_ipout++;
     p->st.sz_ipout += BLEN(bb);
@@ -453,6 +451,25 @@ void p_tun(peer *p, buf *b)
   }
 }
 
+/* --- @p_keyreload@ --- *
+ *
+ * Arguments:  ---
+ *
+ * Returns:    ---
+ *
+ * Use:                Forces a check of the daemon's keyring files.
+ */
+
+void p_keyreload(void)
+{
+  peer *p;
+
+  if (km_reload()) {
+    for (p = peers; p; p = p->next)
+      kx_newkeys(&p->kx);
+  }
+}
+
 /* --- @p_interval@ --- *
  *
  * Arguments:  ---
@@ -464,16 +481,11 @@ void p_tun(peer *p, buf *b)
 
 void p_interval(void)
 {
-  peer *p, *pp;
-  int reload;
+  peer *p;
 
-  reload = km_interval();
-  for (p = peers; p; p = pp) {
-    pp = p->next;
-    if (reload)
-      kx_newkeys(&p->kx);
+  p_keyreload();
+  for (p = peers; p; p = p->next)
     ksl_prune(&p->ks);
-  }
 }
 
 /* --- @p_stats@ --- *