]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Fix connection retry and fallback after failed server TLS connections
authorChristos Tsantilas <chtsanti@users.sourceforge.net>
Fri, 18 Dec 2015 12:44:01 +0000 (01:44 +1300)
committerAmos Jeffries <squid3@treenet.co.nz>
Fri, 18 Dec 2015 12:44:01 +0000 (01:44 +1300)
FwdState should retry connect to the next ip after a Ssl::PeerConnector failure

When the Ssl::PeerConnector fails to establish an SSL connection FwdState does
not retry to connect to the next destination server ip address, but instead
returns an error.

This is a Measurement Factory project

src/FwdState.cc

index 73f27aaf7448c6a5d7bffbf70b924c254aabf4bc..18ae41c7a41bedcb2934382ab2be04c5c2142361 100644 (file)
@@ -672,15 +672,10 @@ FwdState::connectDone(const Comm::ConnectionPointer &conn, Comm::Flag status, in
     }
 
     serverConn = conn;
-    flags.connected_okay = true;
-
     debugs(17, 3, HERE << serverConnection() << ": '" << entry->url() << "'" );
 
     comm_add_close_handler(serverConnection()->fd, fwdServerClosedWrapper, this);
 
-    if (serverConnection()->getPeer())
-        peerConnectSucceded(serverConnection()->getPeer());
-
 #if USE_OPENSSL
     if (!request->flags.pinned) {
         const CachePeer *p = serverConnection()->getPeer();
@@ -719,10 +714,16 @@ FwdState::connectedToPeer(Ssl::PeerConnectorAnswer &answer)
     if (ErrorState *error = answer.error.get()) {
         fail(error);
         answer.error.clear(); // preserve error for errorSendComplete()
-        self = NULL;
+        if (CachePeer *p = serverConnection()->getPeer())
+            peerConnectFailed(p);
+        retryOrBail();
         return;
     }
 
+    if (serverConnection()->getPeer())
+        peerConnectSucceded(serverConnection()->getPeer());
+
+    flags.connected_okay = true;
     dispatch();
 }
 #endif