diff --git a/wireguard.cpp b/wireguard.cpp index 7831cb1..84a8af5 100644 --- a/wireguard.cpp +++ b/wireguard.cpp @@ -621,6 +621,12 @@ void WireguardProcessor::RunAllMainThreadScheduled() { } } +void WireguardProcessor::ForceSendHandshakeInitiation(WgPeer *peer) { + peer->last_handshake_init_timestamp_ -= REKEY_TIMEOUT_MS; + peer->total_handshake_attempts_ = 0; + SendHandshakeInitiation(peer); +} + void WireguardProcessor::SendHandshakeInitiation(WgPeer *peer) { assert(dev_.IsMainThread()); diff --git a/wireguard.h b/wireguard.h index 869b3c0..c4c7c89 100644 --- a/wireguard.h +++ b/wireguard.h @@ -111,6 +111,9 @@ public: TunInterface::PrePostCommands &prepost() { return pre_post_; } const std::vector &addr() { return addresses_; } void RunAllMainThreadScheduled(); + + void ForceSendHandshakeInitiation(WgPeer *peer); + private: void DoWriteUdpPacket(Packet *packet); void WriteAndEncryptPacketToUdp_WillUnlock(WgPeer *peer, Packet *packet);