[SCM] gpac packaging branch, master, updated. debian/0.4.5-1-7-g2220fe3
ceros-guest at users.alioth.debian.org
ceros-guest at users.alioth.debian.org
Fri Aug 6 02:14:27 UTC 2010
The following commit has been merged in the master branch:
commit 212eff980670e893f22a73dacb99653662200fa5
Author: Andres Mejia <mcitadel at gmail.com>
Date: Thu Aug 5 22:05:14 2010 -0400
Supply patch to converts gpac from using openssl to using gnutls.
Currently builds but untested otherwise and thus remains disabled during build.
diff --git a/debian/patches/gnutls-conversion.patch b/debian/patches/gnutls-conversion.patch
new file mode 100644
index 0000000..5ecdc71
--- /dev/null
+++ b/debian/patches/gnutls-conversion.patch
@@ -0,0 +1,484 @@
+Patch to convert from OpenSSL to GnuTLS.
+==========================================================================
+diff --git a/applications/mp4box/Makefile b/applications/mp4box/Makefile
+index d3c03fa..9d1ddfa 100644
+--- a/applications/mp4box/Makefile
++++ b/applications/mp4box/Makefile
+@@ -36,7 +36,7 @@ else
+ EXT=
+ PROG=MP4Box
+ #LINKFLAGS+=-lgpac_static $(EXTRALIBS) $(GPAC_SH_FLAGS) -lz
+-LINKFLAGS+=-lgpac -lz $(OGL_LIBS)
++LINKFLAGS+=-lgpac -lz $(OGL_LIBS) $(GNUTLS_LIBS)
+ endif
+
+
+diff --git a/applications/mp4client/Makefile b/applications/mp4client/Makefile
+index 688d328..67a910c 100644
+--- a/applications/mp4client/Makefile
++++ b/applications/mp4client/Makefile
+@@ -4,7 +4,7 @@ vpath %.c $(SRC_PATH)/applications/mp4client
+
+ CFLAGS= $(OPTFLAGS) -I$(SRC_PATH)/include
+
+-LINKLIBS=$(OGL_LIBS)
++LINKLIBS=$(OGL_LIBS) $(GNUTLS_LIBS)
+
+ ifeq ($(DEBUGBUILD), yes)
+ CFLAGS+=-g
+diff --git a/applications/osmo4_wx/Makefile b/applications/osmo4_wx/Makefile
+index a0841d7..3430c2d 100644
+--- a/applications/osmo4_wx/Makefile
++++ b/applications/osmo4_wx/Makefile
+@@ -41,7 +41,7 @@ SRCS := $(OBJS:.o=.cpp)
+ all: $(PROG)
+
+ Osmo4$(EXE): $(OBJS)
+- $(CC) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(WX_LFLAGS) -lz
++ $(CC) $(LDFLAGS) -o ../../bin/gcc/$@ $(OBJS) -L../../bin/gcc -lgpac $(WX_LFLAGS) -lz $(GNUTLS_LIBS)
+
+ %.o: %.cpp
+ $(CXX) $(CFLAGS) $(INSTALL_FLAGS) $(WX_CFLAGS) -c -o $@ $<
+diff --git a/applications/testapps/mp42ts/Makefile b/applications/testapps/mp42ts/Makefile
+index 53c5fb1..9b2b9f8 100644
+--- a/applications/testapps/mp42ts/Makefile
++++ b/applications/testapps/mp42ts/Makefile
+@@ -27,7 +27,7 @@ else
+ EXT=
+ PROG=mp42ts
+ #LINKFLAGS+=-lgpac_static $(EXTRALIBS) $(GPAC_SH_FLAGS) -lz $(OGL_LIBS)
+-LINKFLAGS+=-lgpac $(OGL_LIBS)
++LINKFLAGS+=-lgpac $(OGL_LIBS) $(GNUTLS_LIBS)
+ endif
+
+
+diff --git a/applications/testapps/mp4_streamer/Makefile b/applications/testapps/mp4_streamer/Makefile
+index 2628096..25af208 100644
+--- a/applications/testapps/mp4_streamer/Makefile
++++ b/applications/testapps/mp4_streamer/Makefile
+@@ -27,7 +27,7 @@ else
+ EXT=
+ PROG=mp4_streamer
+ #LINKFLAGS+=-lgpac_static $(EXTRALIBS) $(GPAC_SH_FLAGS) -lz $(OGL_LIBS)
+-LINKFLAGS+=-lgpac $(OGL_LIBS)
++LINKFLAGS+=-lgpac $(OGL_LIBS) $(GNUTLS_LIBS)
+ endif
+
+
+diff --git a/configure b/configure
+index 3dce906..397e60c 100755
+--- a/configure
++++ b/configure
+@@ -77,7 +77,7 @@ has_opengl="no"
+ disable_opengl="no"
+ has_tinygl="no"
+ enable_tinygl="no"
+-has_ssl="no"
++has_gnutls="no"
+ has_ipv6="no"
+ has_dvb4linux="no"
+ has_xmlrpc="no"
+@@ -162,7 +162,7 @@ echo " --disable-opengl disable OpenGL support"
+ echo " --enable-tinygl enable TinyGL support"
+ echo " --enable-joystick enable joystick support"
+ echo " --enable-renoir enable renoir 3D support"
+-echo " --disable-ssl disable OpenSSL support"
++echo " --disable-gnutls disable GnuTLS support"
+ echo " --enable-amr-nb-fixed enable AMR NB fixed-point decoder"
+ echo " --enable-amr-nb enable AMR NB library"
+ echo " --enable-amr-wb enable AMR WB library"
+@@ -559,23 +559,18 @@ fi
+
+
+
+-#look for OpenSSL support
++#look for GnuTLS support
+ cat > $TMPC << EOF
+-#include <openssl/ssl.h>
+-#include <openssl/x509.h>
+-#include <openssl/err.h>
+-#include <openssl/rand.h>
++#include <gnutls/gnutls.h>
++#include <gnutls/x509.h>
++#include <gcrypt.h>
+ int main( void ) { return 0; }
+ EOF
+
+-if test "$win32" = "yes" ; then
+-LINK_SSL="-lssleay32 -leay32"
+-else
+-LINK_SSL="-lssl -lcrypto"
+-fi
++LINK_GNUTLS="-lgnutls"
+
+-if $cc -o $TMPO $TMPC $LINK_SSL 2> /dev/null ; then
+-has_ssl="yes"
++if $cc -o $TMPO $TMPC $LINK_GNUTLS 2> /dev/null ; then
++has_gnutls="yes"
+ fi
+
+
+@@ -1044,7 +1039,7 @@ for opt do
+ ;;
+ --enable-tinygl) enable_tinygl="yes"
+ ;;
+- --disable-ssl) has_ssl="no"
++ --disable-gnutls) has_gnutls="no"
+ ;;
+ --use-faad=*) has_faad=${opt#--use-faad=}
+ ;;
+@@ -1347,7 +1342,7 @@ echo "SDL Version too old - please upgrade for SDL support"
+ fi
+ echo "OpenGL support: $has_opengl"
+ echo "TinyGL support: $has_tinygl"
+-echo "OpenSSL support: $has_ssl"
++echo "GnuTLS support: $has_gnutls"
+
+ echo "Mozilla XUL/GECKO support: $has_xul"
+
+@@ -1598,10 +1593,10 @@ if test "$has_tinygl" = "yes" ; then
+ echo "#define GPAC_USE_TINYGL" >> $TMPH
+ fi
+
+-echo "HAS_OPENSSL=$has_ssl" >> config.mak
+-if test "$has_ssl" = "yes" ; then
+- echo "SSL_LIBS=$LINK_SSL" >> config.mak
+- echo "#define GPAC_HAS_SSL" >> $TMPH
++echo "HAS_GNUTLS=$has_gnutls" >> config.mak
++if test "$has_gnutls" = "yes" ; then
++ echo "GNUTLS_LIBS=$LINK_GNUTLS" >> config.mak
++ echo "#define GPAC_HAS_GNUTLS" >> $TMPH
+ fi
+
+ echo "CONFIG_SDL=$has_sdl" >> config.mak
+diff --git a/include/gpac/download.h b/include/gpac/download.h
+index 89ccf6e..cb4dd76 100644
+--- a/include/gpac/download.h
++++ b/include/gpac/download.h
+@@ -36,7 +36,7 @@
+ * \brief File Downloader objects
+ *
+ * This section documents the file downloading tools the GPAC framework. Currently HTTP is supported, HTTPS is under testing but may not be supported
+- *depending on GPAC compilation options (HTTPS in GPAC needs OpenSSL installed on the system).
++ *depending on GPAC compilation options (HTTPS in GPAC needs GnuTLS installed on the system).
+ *
+ * @{
+ */
+diff --git a/include/gpac/network.h b/include/gpac/network.h
+index 0e2bb23..65c6765 100644
+--- a/include/gpac/network.h
++++ b/include/gpac/network.h
+@@ -348,7 +348,7 @@ GF_Err gf_sk_receive_wait(GF_Socket *sock, char *buffer, u32 length, u32 start_f
+ /*!
+ *\brief gets socket handle
+ *
+- *Gets the socket low-level handle as used by OpenSSL.
++ *Gets the socket low-level handle as used by GnuTLS.
+ *\param sock the socket object
+ *\return the socket handle
+ */
+diff --git a/src/utils/downloader.c b/src/utils/downloader.c
+index dcb8b13..9692853 100644
+--- a/src/utils/downloader.c
++++ b/src/utils/downloader.c
+@@ -33,11 +33,13 @@
+ #include <gpac/crypt.h>
+
+
+-#ifdef GPAC_HAS_SSL
+-#include <openssl/ssl.h>
+-#include <openssl/x509.h>
+-#include <openssl/err.h>
+-#include <openssl/rand.h>
++#ifdef GPAC_HAS_GNUTLS
++#include <gnutls/gnutls.h>
++#include <gnutls/x509.h>
++#include <gcrypt.h>
++#include <errno.h>
++#include <pthread.h>
++GCRY_THREAD_OPTION_PTHREAD_IMPL;
+ #endif
+
+
+@@ -49,7 +51,7 @@ static void gf_dm_connect(GF_DownloadSession *sess);
+ /*internal flags*/
+ enum
+ {
+- GF_DOWNLOAD_SESSION_USE_SSL = 1<<10,
++ GF_DOWNLOAD_SESSION_USE_GNUTLS = 1<<10,
+ GF_DOWNLOAD_SESSION_THREAD_DEAD = 1<<11,
+ GF_DOWNLOAD_IS_ICY = 1<<12,
+ };
+@@ -99,8 +101,8 @@ struct __gf_download_session
+ char *init_data;
+ u32 init_data_size;
+
+-#ifdef GPAC_HAS_SSL
+- SSL *ssl;
++#ifdef GPAC_HAS_GNUTLS
++ gnutls_session_t gnutls_session;
+ #endif
+
+ void (*do_requests)(struct __gf_download_session *);
+@@ -124,86 +126,29 @@ struct __gf_download_manager
+ GF_Config *cfg;
+ GF_List *sessions;
+
+-#ifdef GPAC_HAS_SSL
+- SSL_CTX *ssl_ctx;
++#ifdef GPAC_HAS_GNUTLS
++ int gnutls_initialized;
+ #endif
+
+ };
+
+-#ifdef GPAC_HAS_SSL
++#ifdef GPAC_HAS_GNUTLS
+
+-static void init_prng (void)
++static int gnutls_lib_init(GF_DownloadManager *dm, u32 mode)
+ {
+- char namebuf[256];
+- const char *random_file;
+-
+- if (RAND_status ()) return;
++ if (!dm) return 0;
+
+- namebuf[0] = '\0';
+- random_file = RAND_file_name (namebuf, sizeof (namebuf));
++ /* The GnuTLS library has already been initialized. */
++ if (dm->gnutls_initialized) return 1;
+
+- if (random_file && *random_file)
+- RAND_load_file(random_file, 16384);
+-
+- if (RAND_status ()) return;
++ /* Activate multi-thread support in libgcrypt via pthread */
++ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+
+-#ifdef WIN32
+- RAND_screen ();
+- if (RAND_status ())
+- return;
+-#endif
+-}
++ /* Initialize the library */
++ gnutls_global_init();
++ dm->gnutls_initialized = 1;
+
+-static int ssl_init(GF_DownloadManager *dm, u32 mode)
+-{
+- SSL_METHOD *meth;
+-
+- if (!dm) return 0;
+- /* The SSL has already been initialized. */
+- if (dm->ssl_ctx) return 1;
+- /* Init the PRNG. If that fails, bail out. */
+- init_prng();
+- if (RAND_status() != 1) goto error;
+- SSL_library_init();
+- SSL_load_error_strings();
+- SSLeay_add_all_algorithms();
+- SSLeay_add_ssl_algorithms();
+-
+- switch (mode) {
+- case 0:
+- meth = SSLv23_client_method();
+- break;
+- case 1:
+- meth = SSLv2_client_method();
+- break;
+- case 2:
+- meth = SSLv3_client_method();
+- break;
+- case 3:
+- meth = TLSv1_client_method();
+- break;
+- default:
+- goto error;
+- }
+-
+- dm->ssl_ctx = SSL_CTX_new(meth);
+- if (!dm->ssl_ctx) goto error;
+- SSL_CTX_set_default_verify_paths(dm->ssl_ctx);
+- SSL_CTX_load_verify_locations (dm->ssl_ctx, NULL, NULL);
+- /* SSL_VERIFY_NONE instructs OpenSSL not to abort SSL_connect if the
+- certificate is invalid. We verify the certificate separately in
+- ssl_check_certificate, which provides much better diagnostics
+- than examining the error stack after a failed SSL_connect. */
+- SSL_CTX_set_verify(dm->ssl_ctx, SSL_VERIFY_NONE, NULL);
+-
+- /* Since fd_write unconditionally assumes partial writes (and handles them correctly),
+- allow them in OpenSSL. */
+- SSL_CTX_set_mode(dm->ssl_ctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
+ return 1;
+-error:
+- if (dm->ssl_ctx) SSL_CTX_free(dm->ssl_ctx);
+- dm->ssl_ctx = NULL;
+- return 0;
+ }
+
+ #endif
+@@ -220,7 +165,7 @@ static Bool gf_dm_is_local(GF_DownloadManager *dm, const char *url)
+ static Bool gf_dm_can_handle_url(GF_DownloadManager *dm, const char *url)
+ {
+ if (!strnicmp(url, "http://", 7)) return 1;
+-#ifdef GPAC_HAS_SSL
++#ifdef GPAC_HAS_GNUTLS
+ if (!strnicmp(url, "https://", 8)) return 1;
+ #endif
+ return 0;
+@@ -292,11 +237,10 @@ void gf_dm_configure_cache(GF_DownloadSession *sess)
+
+ static void gf_dm_disconnect(GF_DownloadSession *sess)
+ {
+-#ifdef GPAC_HAS_SSL
+- if (sess->ssl) {
+- SSL_shutdown(sess->ssl);
+- SSL_free(sess->ssl);
+- sess->ssl = NULL;
++#ifdef GPAC_HAS_GNUTLS
++ if (sess->gnutls_session) {
++ gnutls_bye(sess->gnutls_session, GNUTLS_SHUT_RDWR);
++ sess->gnutls_session = NULL;
+ }
+ #endif
+ if (sess->sock) {
+@@ -385,10 +329,10 @@ static GF_Err gf_dm_setup_from_url(GF_DownloadSession *sess, char *url)
+ else if (!strnicmp(url, "https://", 8)) {
+ url += 8;
+ sess->port = 443;
+-#ifndef GPAC_HAS_SSL
++#ifndef GPAC_HAS_GNUTLS
+ return GF_NOT_SUPPORTED;
+ #endif
+- sess->flags |= GF_DOWNLOAD_SESSION_USE_SSL;
++ sess->flags |= GF_DOWNLOAD_SESSION_USE_GNUTLS;
+ sess->do_requests = http_do_requests;
+ }
+ else if (!strnicmp(url, "ftp://", 6)) {
+@@ -539,9 +483,9 @@ static GF_Err gf_dm_read_data(GF_DownloadSession *sess, char *data, u32 data_siz
+ {
+ GF_Err e;
+
+-#ifdef GPAC_HAS_SSL
+- if (sess->ssl) {
+- u32 size = SSL_read(sess->ssl, data, data_size);
++#ifdef GPAC_HAS_GNUTLS
++ if (sess->gnutls_session) {
++ u32 size = gnutls_record_recv(sess->gnutls_session, data, data_size);
+ e = GF_OK;
+ data[size] = 0;
+ if (!size) e = GF_IP_NETWORK_EMPTY;
+@@ -554,7 +498,7 @@ static GF_Err gf_dm_read_data(GF_DownloadSession *sess, char *data, u32 data_siz
+ }
+
+
+-#ifdef GPAC_HAS_SSL
++#ifdef GPAC_HAS_GNUTLS
+ /*pattern comp taken from wget*/
+ #define ASTERISK_EXCLUDES_DOT /* mandated by rfc2818 */
+
+@@ -650,32 +594,30 @@ static void gf_dm_connect(GF_DownloadSession *sess)
+ gf_sk_set_buffer_size(sess->sock, 0, GF_DOWNLOAD_BUFFER_SIZE);
+ gf_dm_configure_cache(sess);
+
+-#ifdef GPAC_HAS_SSL
++#ifdef GPAC_HAS_GNUTLS
+ /*socket is connected, configure SSL layer*/
+- if (!sess->ssl && sess->dm->ssl_ctx && (sess->flags & GF_DOWNLOAD_SESSION_USE_SSL)) {
++ if (!sess->gnutls_session && sess->dm->gnutls_initialized &&
++ (sess->flags & GF_DOWNLOAD_SESSION_USE_GNUTLS)) {
+ int ret;
+ long vresult;
+- char common_name[256];
+- X509 *cert;
+ Bool success = 1;
+-
+- sess->ssl = SSL_new(sess->dm->ssl_ctx);
+- SSL_set_fd(sess->ssl, gf_sk_get_handle(sess->sock));
+- SSL_set_connect_state(sess->ssl);
+- ret = SSL_connect(sess->ssl);
++ const gnutls_datum_t *cert_list;
++ int cert_list_size = 0;
++ gnutls_x509_crt_t x509_cert;
++ gnutls_x509_dn_t *x509_dn;
++
++ gnutls_init(sess->gnutls_session, GNUTLS_CLIENT);
++ gnutls_transport_set_ptr(sess->gnutls_session, gf_sk_get_handle(sess->sock));
++ ret = gnutls_handshake(sess->gnutls_session);
+ assert(ret>0);
+
+- cert = SSL_get_peer_certificate(sess->ssl);
++ cert_list = gnutls_certificate_get_peers(sess->gnutls_session, &cert_list_size);
+ /*if we have a cert, check it*/
+- if (cert) {
+- vresult = SSL_get_verify_result(sess->ssl);
+- if (vresult != X509_V_OK) success = 0;
+- else {
+- common_name[0] = 0;
+- X509_NAME_get_text_by_NID(X509_get_subject_name(cert), NID_commonName, common_name, sizeof (common_name));
+- if (!pattern_match(common_name, sess->server_name)) success = 0;
+- }
+- X509_free(cert);
++ if (cert_list) {
++ gnutls_x509_crt_init(&x509_cert);
++ gnutls_x509_crt_import(x509_cert, &cert_list[0], GNUTLS_X509_FMT_DER);
++ if (!gnutls_x509_crt_check_hostname(x509_cert, sess->server_name)) success = 0;
++ gnutls_x509_crt_deinit(x509_cert);
+
+ if (!success) {
+ gf_dm_disconnect(sess);
+@@ -741,8 +683,8 @@ GF_DownloadManager *gf_dm_new(GF_Config *cfg)
+ dm->cache_directory = strdup(opt);
+ }
+ }
+-#ifdef GPAC_HAS_SSL
+- ssl_init(dm, 0);
++#ifdef GPAC_HAS_GNUTLS
++ gnutls_lib_init(dm, 0);
+ #endif
+ return dm;
+ }
+@@ -768,8 +710,11 @@ void gf_dm_del(GF_DownloadManager *dm)
+
+ free(dm->cache_directory);
+
+-#ifdef GPAC_HAS_SSL
+- if (dm->ssl_ctx) SSL_CTX_free(dm->ssl_ctx);
++#ifdef GPAC_HAS_GNUTLS
++ if (dm->gnutls_initialized) {
++ gnutls_global_deinit;
++ dm->gnutls_initialized = 0;
++ }
+ #endif
+
+ free(dm);
+@@ -1162,10 +1107,10 @@ void http_do_requests(GF_DownloadSession *sess)
+ fclose(profile);
+ }
+
+-#ifdef GPAC_HAS_SSL
+- if (sess->ssl) {
++#ifdef GPAC_HAS_GNUTLS
++ if (sess->gnutls_session) {
+ e = GF_IP_NETWORK_FAILURE;
+- if (!SSL_write(sess->ssl, tmp_buf, len+par.size)) e = GF_OK;
++ if (!gnutls_record_send(sess->gnutls_session, tmp_buf, len+par.size)) e = GF_OK;
+ } else
+ #endif
+ e = gf_sk_send(sess->sock, tmp_buf, len+par.size);
+@@ -1174,10 +1119,10 @@ void http_do_requests(GF_DownloadSession *sess)
+ free(tmp_buf);
+ } else {
+
+-#ifdef GPAC_HAS_SSL
+- if (sess->ssl) {
++#ifdef GPAC_HAS_GNUTLS
++ if (sess->gnutls_session) {
+ e = GF_IP_NETWORK_FAILURE;
+- if (!SSL_write(sess->ssl, sHTTP, strlen(sHTTP))) e = GF_OK;
++ if (!gnutls_record_send(sess->gnutls_session, sHTTP, strlen(sHTTP))) e = GF_OK;
+ } else
+ #endif
+ e = gf_sk_send(sess->sock, sHTTP, strlen(sHTTP));
--
gpac packaging
More information about the pkg-multimedia-commits
mailing list