From 704a614c52c2e5e93a14dc4db4f50a47932cf7be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Tue, 17 Apr 2018 12:28:55 -0400
Subject: [PATCH] p2p: do not close current connection if already ready

6f15399ef628922a3a34d2d5d9bc0dd2df551987 broke the multi-transfer
with the same contact because it closes previous transfers. We need
to keep correct turn connections.

Change-Id: I0cb9942417b10cc1aaa7d6879613c685dc5de2ad
Reviewed-by: Philippe Gorley <philippe.gorley@savoirfairelinux.com>
---
 src/ringdht/p2p.cpp | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/ringdht/p2p.cpp b/src/ringdht/p2p.cpp
index 9d09b05145..2180a3214d 100644
--- a/src/ringdht/p2p.cpp
+++ b/src/ringdht/p2p.cpp
@@ -425,11 +425,16 @@ DhtPeerConnector::Impl::turnConnect()
     if (turnAuthv6_ && !turnAuthv6_->isReady())
         turnAuthv6_.release();
 
-    turn_param_v4.authorized_family = PJ_AF_INET;
-    turnAuthv4_ = std::make_unique<TurnTransport>(turn_param_v4);
-    auto turn_param_v6 = turn_param_v4;
-    turn_param_v6.authorized_family = PJ_AF_INET6;
-    turnAuthv6_ = std::make_unique<TurnTransport>(turn_param_v6);
+    if (!turnAuthv4_ || !turnAuthv4_->isReady()) {
+        turn_param_v4.authorized_family = PJ_AF_INET;
+        turnAuthv4_ = std::make_unique<TurnTransport>(turn_param_v4);
+    }
+
+    if (!turnAuthv6_ || !turnAuthv6_->isReady()) {
+        auto turn_param_v6 = turn_param_v4;
+        turn_param_v6.authorized_family = PJ_AF_INET6;
+        turnAuthv6_ = std::make_unique<TurnTransport>(turn_param_v6);
+    }
 
     // Wait until TURN server READY state (or timeout)
     Timeout<Clock> timeout {NET_CONNECTION_TIMEOUT};
-- 
GitLab