aboutsummaryrefslogtreecommitdiff
path: root/docs/examples/threaded-ssl.c
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/threaded-ssl.c')
-rw-r--r--docs/examples/threaded-ssl.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/docs/examples/threaded-ssl.c b/docs/examples/threaded-ssl.c
index e49443d40..c3455369b 100644
--- a/docs/examples/threaded-ssl.c
+++ b/docs/examples/threaded-ssl.c
@@ -8,20 +8,26 @@
* $Id$
*
* A multi-threaded example that uses pthreads and fetches 4 remote files at
- * once over HTTPS. The lock callbacks and stuff assume OpenSSL so far.
- * Should be expanded to do optional GnuTLS style locking.
+ * once over HTTPS. The lock callbacks and stuff assume OpenSSL or GnuTLS
+ * (libgcrypt) so far.
*
- * OpenSSL docs for this: http://www.openssl.org/docs/crypto/threads.html
+ * OpenSSL docs for this:
+ * http://www.openssl.org/docs/crypto/threads.html
+ * gcrypt docs for this:
+ * http://gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html
*/
+#define USE_OPENSSL /* or USE_GNUTLS accordingly */
+
#include <stdio.h>
#include <pthread.h>
#include <curl/curl.h>
-#include <openssl/crypto.h>
/* we have this global to let the callback get easy access to it */
static pthread_mutex_t *lockarray;
+#ifdef USE_OPENSSL
+#include <openssl/crypto.h>
static void lock_callback(int mode, int type, char *file, int line)
{
(void)file;
@@ -66,6 +72,21 @@ static void kill_locks(void)
OPENSSL_free(lockarray);
}
+#endif
+
+#ifdef USE_GNUTLS
+#include <gcrypt.h>
+#include <errno.h>
+
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+
+void init_locks(void)
+{
+ gcry_control(GCRYCTL_SET_THREAD_CBS);
+}
+
+#define kill_locks()
+#endif
/* List of URLs to fetch.*/
const char *urls[]= {