+ *tsip = tsi;
+ tsi->backend = CURLSSLBACKEND_NONE;
+ tsi->internals = NULL;
+
+ if(!conn)
+ break;
+
+ /* Find the active ("in use") SSL connection, if any */
+ while((sockindex < sizeof(conn->ssl) / sizeof(conn->ssl[0])) &&
+ (!conn->ssl[sockindex].use))
+ sockindex++;
+
+ if(sockindex == sizeof(conn->ssl) / sizeof(conn->ssl[0]))
+ break; /* no SSL session found */
+
+ /* Return the TLS session information from the relevant backend */
+#ifdef USE_SSLEAY
+ tsi->backend = CURLSSLBACKEND_OPENSSL;
+ tsi->internals = conn->ssl[sockindex].ctx;
+#endif
+#ifdef USE_GNUTLS
+ tsi->backend = CURLSSLBACKEND_GNUTLS;
+ tsi->internals = conn->ssl[sockindex].session;
+#endif
+#ifdef USE_NSS
+ tsi->backend = CURLSSLBACKEND_NSS;
+ tsi->internals = conn->ssl[sockindex].handle;
+#endif
+#ifdef USE_QSOSSL
+ tsi->backend = CURLSSLBACKEND_QSOSSL;
+ tsi->internals = conn->ssl[sockindex].handle;
+#endif
+#ifdef USE_GSKIT
+ tsi->backend = CURLSSLBACKEND_GSKIT;
+ tsi->internals = conn->ssl[sockindex].handle;
+#endif
+ /* NOTE: For other SSL backends, it is not immediately clear what data
+ to return from 'struct ssl_connect_data'; thus, for now we keep the
+ backend as CURLSSLBACKEND_NONE in those cases, which should be
+ interpreted as "not supported" */
+ }
+ break;