chiark / gitweb /
server: Fix some bad warning messages.
[tripe] / server / peer.c
index c9198924327c9068d7c0cbc42e4dec91673b6dfb..1e5d0766af274f023053ceae1084861f8520ddee 100644 (file)
@@ -247,7 +247,7 @@ found:
          buf_init(&bb, buf_t, sizeof(buf_t));
          if (ksl_decrypt(&p->ks, ch, &b, &bb)) {
            p->st.n_reject++;
-           a_warn("PEER", "?PEER", "decrypt-failed", A_END);
+           a_warn("PEER", "?PEER", p, "decrypt-failed", A_END);
            return;
          }
          if (BOK(&bb)) {
@@ -567,7 +567,12 @@ const char *p_ifname(peer *p) { return (p->ifname); }
  */
 
 void p_setifname(peer *p, const char *name)
-  { if (p->ifname) xfree(p->ifname); p->ifname = xstrdup(name); }
+{
+  xfree(p->ifname);
+  p->ifname = xstrdup(name);
+  if (p->spec.tops->setifname)
+    p->spec.tops->setifname(p->t, name);
+}
 
 /* --- @p_addr@ --- *
  *
@@ -700,12 +705,11 @@ peer *p_create(peerspec *spec)
   p->ifname = 0;
   memset(&p->st, 0, sizeof(stats));
   p->st.t_start = time(0);
-  if ((p->t = spec->tops->create(p)) == 0)
+  if ((p->t = spec->tops->create(p, &p->ifname)) == 0)
     goto tidy_0;
   p_setkatimer(p);
   if (kx_init(&p->kx, p, &p->ks))
     goto tidy_1;
-  p_setifname(p, spec->tops->ifname(p->t));
   p->next = peers;
   if (peers)
     peers->prev = p;
@@ -722,6 +726,7 @@ peer *p_create(peerspec *spec)
 tidy_1:
   if (spec->t_ka)
     sel_rmtimer(&p->tka);
+  xfree(p->ifname);
   p->t->ops->destroy(p->t);
 tidy_0:
   xfree(p->spec.name);
@@ -788,7 +793,6 @@ void p_destroy(peer *p)
   p->t->ops->destroy(p->t);
   if (p->spec.t_ka)
     sel_rmtimer(&p->tka);
-  xfree(p->spec.name);
   for (pg = p->pings; pg; pg = ppg) {
     ppg = pg->next;
     p_pingdone(pg, PING_PEERDIED);