]> granicus.if.org Git - curl/commitdiff
now builds and runs with GnuTLS-built libcurls too
authorDaniel Stenberg <daniel@haxx.se>
Sat, 23 Feb 2008 23:00:24 +0000 (23:00 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 23 Feb 2008 23:00:24 +0000 (23:00 +0000)
docs/examples/threaded-ssl.c

index e49443d40f4c676066b65f611d9e1cd3b3495c87..c3455369b616c38b25161590989ccfbf078ffe9e 100644 (file)
@@ -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[]= {