Преглед изворни кода

workaround for multiple certificates problem

David Rose пре 23 година
родитељ
комит
456e33dca4
3 измењених фајлова са 23 додато и 11 уклоњено
  1. 0 10
      panda/src/downloader/httpClient.I
  2. 19 0
      panda/src/downloader/httpClient.cxx
  3. 4 1
      panda/src/downloader/httpClient.h

+ 0 - 10
panda/src/downloader/httpClient.I

@@ -47,16 +47,6 @@ operator = (const HTTPClient &copy) {
   _proxy = copy._proxy;
   _proxy = copy._proxy;
 }
 }
 
 
-////////////////////////////////////////////////////////////////////
-//     Function: HTTPClient::Destructor
-//       Access: Published
-//  Description:
-////////////////////////////////////////////////////////////////////
-INLINE HTTPClient::
-~HTTPClient() {
-  SSL_CTX_free(_ssl_ctx);
-}
-
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: HTTPClient::set_proxy
 //     Function: HTTPClient::set_proxy
 //       Access: Published
 //       Access: Published

+ 19 - 0
panda/src/downloader/httpClient.cxx

@@ -31,6 +31,19 @@
 #endif
 #endif
 
 
 bool HTTPClient::_ssl_initialized = false;
 bool HTTPClient::_ssl_initialized = false;
+SSL_CTX *HTTPClient::_ssl_ctx = NULL;
+
+
+////////////////////////////////////////////////////////////////////
+//     Function: HTTPClient::Destructor
+//       Access: Published
+//  Description:
+////////////////////////////////////////////////////////////////////
+HTTPClient::
+~HTTPClient() {
+  // Since the context is temporarily shared among all clients.
+  //  SSL_CTX_free(_ssl_ctx);
+}
 
 
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: HTTPClient::load_certificates
 //     Function: HTTPClient::load_certificates
@@ -112,6 +125,12 @@ make_ctx() {
   if (!_ssl_initialized) {
   if (!_ssl_initialized) {
     initialize_ssl();
     initialize_ssl();
   }
   }
+
+  if (_ssl_ctx != (SSL_CTX *)NULL) {
+    // Since the context is temporarily shared among all clients.
+    return;
+  }
+
   _ssl_ctx = SSL_CTX_new(SSLv23_client_method());
   _ssl_ctx = SSL_CTX_new(SSLv23_client_method());
 
 
 #if defined(SSL_097) && !defined(NDEBUG)
 #if defined(SSL_097) && !defined(NDEBUG)

+ 4 - 1
panda/src/downloader/httpClient.h

@@ -84,10 +84,13 @@ private:
 #endif
 #endif
 
 
   URLSpec _proxy;
   URLSpec _proxy;
-  SSL_CTX *_ssl_ctx;
   bool _verify_ssl;
   bool _verify_ssl;
 
 
   static bool _ssl_initialized;
   static bool _ssl_initialized;
+
+  // This is temporarily static, shared among all clients, to work
+  // around the loading certificates problem.
+  static SSL_CTX *_ssl_ctx;
 };
 };
 
 
 #include "httpClient.I"
 #include "httpClient.I"