Send a new key when we receive packets from a node we don't have a valid key for.
authorGuus Sliepen <guus@tinc-vpn.org>
Sat, 18 May 2013 14:11:30 +0000 (16:11 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sat, 18 May 2013 14:11:30 +0000 (16:11 +0200)
src/net_packet.c

index 9024f262cafc4734fb070cc9c5673763a840bb53..26e4907140556c49025c24750cfd0113a71b1e9f 100644 (file)
@@ -332,13 +332,21 @@ static void receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
        size_t outlen;
 
        if(n->status.sptps) {
+               if(!n->sptps.state) {
+                       if(!n->status.waitingforkey) {
+                               logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but we haven't exchanged keys yet", n->name, n->hostname);
+                               send_req_key(n);
+                       } else {
+                               logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet", n->name, n->hostname);
+                       }
+                       return;
+               }
                sptps_receive_data(&n->sptps, (char *)&inpkt->seqno, inpkt->len);
                return;
        }
 
        if(!cipher_active(n->incipher)) {
-               logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet",
-                                       n->name, n->hostname);
+               logger(DEBUG_TRAFFIC, LOG_DEBUG, "Got packet from %s (%s) but he hasn't got our key yet", n->name, n->hostname);
                return;
        }