Commit d300cf4d authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

T. Bharath's comments about SSL cleanup incorporated, and the two new

curl_global_* functions
parent a9d0a858
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -73,16 +73,30 @@
#include "urldata.h"
#include <curl/curl.h>
#include "transfer.h"
#include <curl/types.h>
#include "ssluse.h"

#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>

CURLcode curl_global_init(void)
{
  Curl_SSL_init();
  return CURLE_OK;
}

void curl_global_cleanup(void)
{
  Curl_SSL_cleanup();
}

CURL *curl_easy_init(void)
{
  CURLcode res;
  struct UrlData *data;

  /* Make sure we inited the global SSL stuff */
  Curl_SSL_init();

  /* We use curl_open() with undefined URL so far */
  res = Curl_open((CURL **)&data, NULL);
  if(res != CURLE_OK)
+34 −6
Original line number Diff line number Diff line
@@ -235,6 +235,40 @@ int cert_verify_callback(int ok, X509_STORE_CTX *ctx)

#endif

/* Global init */
void Curl_SSL_init(void)
{
#ifdef USE_SSLEAY
  static int only_once=0;

  /* make sure this is only done once */
  if(0 != only_once)
    return;

  only_once++; /* never again */

  /* Lets get nice error messages */
  SSL_load_error_strings();

  /* Setup all the global SSL stuff */
  SSLeay_add_ssl_algorithms();
#endif
}

/* Global cleanup */
void Curl_SSL_cleanup(void)
{
#ifdef USE_SSLEAY
  /* Free the SSL error strings */
  ERR_free_strings();
  
  /* EVP_cleanup() removes all ciphers and digests from the
     table. */
  EVP_cleanup();
#endif  
}


/* ====================================================== */
CURLcode
Curl_SSLConnect(struct connectdata *conn)
@@ -250,15 +284,9 @@ Curl_SSLConnect(struct connectdata *conn)
  /* mark this is being ssl enabled from here on out. */
  conn->ssl.use = TRUE;

  /* Lets get nice error messages */
  SSL_load_error_strings();

  /* Make funny stuff to get random input */
  random_the_seed(conn);
    
  /* Setup all the global SSL stuff */
  SSLeay_add_ssl_algorithms();

  switch(data->ssl.version) {
  default:
    req_method = SSLv23_client_method();
+4 −0
Original line number Diff line number Diff line
@@ -24,4 +24,8 @@
 *****************************************************************************/
#include "urldata.h"
CURLcode Curl_SSLConnect(struct connectdata *conn);
/* Global SSL init */
void Curl_SSL_init(void);
/* Global SSL cleanup */
void Curl_SSL_cleanup(void);
#endif
+11 −0
Original line number Diff line number Diff line
@@ -833,6 +833,17 @@ CURLcode Curl_disconnect(struct connectdata *conn)

#ifdef USE_SSLEAY
  if (conn->ssl.use) {
    /*
      ERR_remove_state() frees the error queue associated with
      thread pid.  If pid == 0, the current thread will have its
      error queue removed.

      Since error queue data structures are allocated
      automatically for new threads, they must be freed when
      threads are terminated in oder to avoid memory leaks.
    */
    ERR_remove_state(0);

    if(conn->ssl.handle) {
      (void)SSL_shutdown(conn->ssl.handle);
      SSL_set_connect_state(conn->ssl.handle);