mirror of https://github.com/aria2/aria2
2006-03-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* configure.in: Added gnutls support. Added several CPP macros. * m4/openssl.m4: Added. * src/SocketCore.{h,cc}: Drop const quarifier from writeData(), readData(), peekData(). Added gnutls support. * src/HttpDownloadCommand.cc: Removed SleepCommand.h * src/TrackerWatcherCommand.{h,cc}: Added. This command creates TrackerInitCommand periodicaly(TorrentMan::minInterval). * src/TorrentMan.cc: Remove downloadedSize == 0 check from save(). Instead, added a check for whether setup method has executed successfully. * src/TorrentMan.h: Added member vaiable setupComplete. Updated DEFAULT_ANNOUNCE_INTERVAL and DEFAULT_ANNOUNCE_MIN_INTERVAL to 300. * src/Makefile.am: Updated. * src/messageDigest.h: Added. This is a macro calculating SHA1 digest using whether OpenSSL or gcrypt, depending on the result of configure script. * src/ShaVisitor.{h,cc}: Removed direct dependency on OpenSSL by using messageDigest.h. * src/TorrentAutoSaveCommand.h: Removed unused variable cuid. * src/PeerListenCommand.cc: Added log about port binded successfully. Fixed memory leak. * src/main.cc: Added gnutls support. Replaced LIB_SSL with ENABLE_BITTORRENT where they are not related to OpenSSL but BitTorrent. Removed instantiation of TrackerInitCommand. Instead, TrackerWatcherCommand is instantiated and pushed to the command queue. * src/InitiateConnectionCommandFactory.cc: Replaced HAVE_LIBSSL with ENABLE_SSL. * src/Request.cc: Replaced HAVE_LIBSSL with ENABLE_SSL. * src/RequestSlotMan.cc: (deleteCompletedRequestSlot) If a piece is already acquired by another command, delete the request slots for the piece. * src/TrackerUpdateCommand.cc: (execute) Changed log level of MSG_TRACKER_WARNING_MESSAGE from info to warn. Added a check whether peer list is null. Fixed the bug that causes sending completed event to the tracker several times. * src/TrackerInitCommand.cc: (execute) Fixed the bug that causes sending completed event to the tracker several times. * src/AbstractDiskWriter.{h,cc}: Removed direct dependency on OpenSSL by using messageDigest.h. 2006-03-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> * PeerConnection.cc: Replaced log message "keep-alive" with "keep alive". * PeerInteractionCommand.{h,cc}: Close connection if peer is choking localhost long time. * TorrentMan.cc: When adding new peer with duplicate = true, if the number of peer list is equal to or grater than MAX_PEER_LIST, delete at most 100 failure entry from the list. If with duplicate = false, MAX_PEER_LIST is not checked. * PeerListenCommand.cc: Fixed the argument order of log message. 2006-03-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com> * Logger.h: Moved enum LEVEL from SimpleLogger.h to here. Added warn(). * SimpleLogger.h: Moved enum LEVEL to Logger.h. Implemented warn(). Defined 2 macros(WRITE_LOG, WRITE_LOG_EX) to avoid duplicated code.pull/1/head
parent
2065b049ab
commit
40cb1ca9ce
68
ChangeLog
68
ChangeLog
|
@ -1,3 +1,71 @@
|
||||||
|
2006-03-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
* configure.in: Added gnutls support. Added several CPP macros.
|
||||||
|
* m4/openssl.m4: Added.
|
||||||
|
* src/SocketCore.{h,cc}: Drop const quarifier from writeData(),
|
||||||
|
readData(), peekData(). Added gnutls support.
|
||||||
|
* src/HttpDownloadCommand.cc: Removed SleepCommand.h
|
||||||
|
* src/TrackerWatcherCommand.{h,cc}: Added. This command creates
|
||||||
|
TrackerInitCommand periodicaly(TorrentMan::minInterval).
|
||||||
|
* src/TorrentMan.cc: Remove downloadedSize == 0 check from save().
|
||||||
|
Instead, added a check for whether setup method has executed
|
||||||
|
successfully.
|
||||||
|
* src/TorrentMan.h: Added member vaiable setupComplete. Updated
|
||||||
|
DEFAULT_ANNOUNCE_INTERVAL and DEFAULT_ANNOUNCE_MIN_INTERVAL to 300.
|
||||||
|
* src/Makefile.am: Updated.
|
||||||
|
* src/messageDigest.h: Added. This is a macro calculating SHA1 digest
|
||||||
|
using whether OpenSSL or gcrypt, depending on the result of configure
|
||||||
|
script.
|
||||||
|
* src/ShaVisitor.{h,cc}: Removed direct dependency on OpenSSL by using
|
||||||
|
messageDigest.h.
|
||||||
|
* src/TorrentAutoSaveCommand.h: Removed unused variable cuid.
|
||||||
|
* src/PeerListenCommand.cc: Added log about port binded successfully.
|
||||||
|
Fixed memory leak.
|
||||||
|
* src/main.cc: Added gnutls support. Replaced LIB_SSL with
|
||||||
|
ENABLE_BITTORRENT where they are not related to OpenSSL but BitTorrent.
|
||||||
|
Removed instantiation of TrackerInitCommand. Instead,
|
||||||
|
TrackerWatcherCommand is instantiated and pushed to the command queue.
|
||||||
|
* src/InitiateConnectionCommandFactory.cc: Replaced HAVE_LIBSSL with
|
||||||
|
ENABLE_SSL.
|
||||||
|
* src/Request.cc: Replaced HAVE_LIBSSL with ENABLE_SSL.
|
||||||
|
* src/RequestSlotMan.cc:
|
||||||
|
(deleteCompletedRequestSlot)
|
||||||
|
If a piece is already acquired by another command, delete the request
|
||||||
|
slots for the piece.
|
||||||
|
* src/TrackerUpdateCommand.cc:
|
||||||
|
(execute)
|
||||||
|
Changed log level of MSG_TRACKER_WARNING_MESSAGE from info to warn.
|
||||||
|
Added a check whether peer list is null.
|
||||||
|
Fixed the bug that causes sending completed event to the tracker
|
||||||
|
several times.
|
||||||
|
* src/TrackerInitCommand.cc:
|
||||||
|
(execute)
|
||||||
|
Fixed the bug that causes sending completed event to the tracker
|
||||||
|
several times.
|
||||||
|
* src/AbstractDiskWriter.{h,cc}: Removed direct dependency on OpenSSL
|
||||||
|
by using messageDigest.h.
|
||||||
|
|
||||||
|
|
||||||
|
2006-03-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
* PeerConnection.cc: Replaced log message "keep-alive" with
|
||||||
|
"keep alive".
|
||||||
|
* PeerInteractionCommand.{h,cc}: Close connection if peer is choking
|
||||||
|
localhost long time.
|
||||||
|
* TorrentMan.cc: When adding new peer with duplicate = true, if the
|
||||||
|
number of peer list is equal to or grater than MAX_PEER_LIST, delete
|
||||||
|
at most 100 failure entry from the list. If with duplicate = false,
|
||||||
|
MAX_PEER_LIST is not checked.
|
||||||
|
* PeerListenCommand.cc: Fixed the argument order of log message.
|
||||||
|
|
||||||
|
2006-03-25 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
* Logger.h: Moved enum LEVEL from SimpleLogger.h to here.
|
||||||
|
Added warn().
|
||||||
|
* SimpleLogger.h: Moved enum LEVEL to Logger.h.
|
||||||
|
Implemented warn().
|
||||||
|
Defined 2 macros(WRITE_LOG, WRITE_LOG_EX) to avoid duplicated code.
|
||||||
|
|
||||||
2006-03-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2006-03-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
* Request.h: Added AFTER_COMPLETED event.
|
* Request.h: Added AFTER_COMPLETED event.
|
||||||
|
|
15
Makefile.in
15
Makefile.in
|
@ -50,9 +50,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
|
||||||
$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \
|
$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
|
||||||
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
|
$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/po.m4 \
|
||||||
$(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \
|
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
|
||||||
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.in
|
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
|
||||||
|
$(top_srcdir)/configure.in
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
|
@ -126,6 +127,12 @@ INTLLIBS = @INTLLIBS@
|
||||||
INTLOBJS = @INTLOBJS@
|
INTLOBJS = @INTLOBJS@
|
||||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
|
||||||
|
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
|
||||||
|
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
|
||||||
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
||||||
|
LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
|
||||||
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
LIBINTL = @LIBINTL@
|
LIBINTL = @LIBINTL@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
|
@ -138,6 +145,8 @@ MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
MSGFMT = @MSGFMT@
|
MSGFMT = @MSGFMT@
|
||||||
MSGMERGE = @MSGMERGE@
|
MSGMERGE = @MSGMERGE@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
|
OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
|
||||||
|
OPENSSL_LIBS = @OPENSSL_LIBS@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
PACKAGE_NAME = @PACKAGE_NAME@
|
PACKAGE_NAME = @PACKAGE_NAME@
|
||||||
|
|
13
README
13
README
|
@ -29,10 +29,13 @@ $ make
|
||||||
|
|
||||||
The executable is aria2c in src directory.
|
The executable is aria2c in src directory.
|
||||||
|
|
||||||
4. SSL
|
4. Dependency
|
||||||
------
|
-------------
|
||||||
You need OpenSSL library(0.9.7b or higher) to enable HTTPS and BitTorrent
|
In order to enable HTTPS support, you need GNUTLS or OpenSSL.
|
||||||
support.
|
In order to enable BitTorrent support, you need GCRYPT(if you choose GNUTLS)
|
||||||
|
or OpenSSL.
|
||||||
|
|
||||||
|
GNUTLS has precedence over OpenSSL if both libraries are installed.
|
||||||
|
|
||||||
5. BitTorrrent
|
5. BitTorrrent
|
||||||
--------------
|
--------------
|
||||||
|
@ -57,4 +60,4 @@ Note:
|
||||||
* -o option is used to change the filename of downloaded .torrent file.
|
* -o option is used to change the filename of downloaded .torrent file.
|
||||||
* This version only supports compact peers list format.
|
* This version only supports compact peers list format.
|
||||||
* The ports aria2c uses are 6881-6999.
|
* The ports aria2c uses are 6881-6999.
|
||||||
* The maxmum number of peers are 55.
|
* The maximum number of peers is 55.
|
||||||
|
|
|
@ -92,6 +92,276 @@ AC_ARG_WITH(cppunit-exec-prefix,[ --with-cppunit-exec-prefix=PFX Exec prefix w
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dnl Autoconf macros for libgcrypt
|
||||||
|
dnl Copyright (C) 2002, 2004 Free Software Foundation, Inc.
|
||||||
|
dnl
|
||||||
|
dnl This file is free software; as a special exception the author gives
|
||||||
|
dnl unlimited permission to copy and/or distribute it, with or without
|
||||||
|
dnl modifications, as long as this notice is preserved.
|
||||||
|
dnl
|
||||||
|
dnl This file is distributed in the hope that it will be useful, but
|
||||||
|
dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
||||||
|
dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
|
dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
|
||||||
|
dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
|
||||||
|
dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
|
||||||
|
dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
|
||||||
|
dnl with the API version to also check the API compatibility. Example:
|
||||||
|
dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed
|
||||||
|
dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using
|
||||||
|
dnl this features allows to prevent build against newer versions of libgcrypt
|
||||||
|
dnl with a changed API.
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([AM_PATH_LIBGCRYPT],
|
||||||
|
[ AC_ARG_WITH(libgcrypt-prefix,
|
||||||
|
AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
|
||||||
|
[prefix where LIBGCRYPT is installed (optional)]),
|
||||||
|
libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
|
||||||
|
if test x$libgcrypt_config_prefix != x ; then
|
||||||
|
if test x${LIBGCRYPT_CONFIG+set} != xset ; then
|
||||||
|
LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
|
||||||
|
tmp=ifelse([$1], ,1:1.2.0,$1)
|
||||||
|
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
|
||||||
|
req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
|
||||||
|
min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
|
||||||
|
else
|
||||||
|
req_libgcrypt_api=0
|
||||||
|
min_libgcrypt_version="$tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
|
||||||
|
ok=no
|
||||||
|
if test "$LIBGCRYPT_CONFIG" != "no" ; then
|
||||||
|
req_major=`echo $min_libgcrypt_version | \
|
||||||
|
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
|
||||||
|
req_minor=`echo $min_libgcrypt_version | \
|
||||||
|
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
|
||||||
|
req_micro=`echo $min_libgcrypt_version | \
|
||||||
|
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
|
||||||
|
libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
|
||||||
|
major=`echo $libgcrypt_config_version | \
|
||||||
|
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
|
||||||
|
minor=`echo $libgcrypt_config_version | \
|
||||||
|
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
|
||||||
|
micro=`echo $libgcrypt_config_version | \
|
||||||
|
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
|
||||||
|
if test "$major" -gt "$req_major"; then
|
||||||
|
ok=yes
|
||||||
|
else
|
||||||
|
if test "$major" -eq "$req_major"; then
|
||||||
|
if test "$minor" -gt "$req_minor"; then
|
||||||
|
ok=yes
|
||||||
|
else
|
||||||
|
if test "$minor" -eq "$req_minor"; then
|
||||||
|
if test "$micro" -ge "$req_micro"; then
|
||||||
|
ok=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $ok = yes; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
if test $ok = yes; then
|
||||||
|
# If we have a recent libgcrypt, we should also check that the
|
||||||
|
# API is compatible
|
||||||
|
if test "$req_libgcrypt_api" -gt 0 ; then
|
||||||
|
tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
|
||||||
|
if test "$tmp" -gt 0 ; then
|
||||||
|
AC_MSG_CHECKING([LIBGCRYPT API version])
|
||||||
|
if test "$req_libgcrypt_api" -eq "$tmp" ; then
|
||||||
|
AC_MSG_RESULT(okay)
|
||||||
|
else
|
||||||
|
ok=no
|
||||||
|
AC_MSG_RESULT([does not match (want=$req_libgcrypt_api got=$tmp)])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $ok = yes; then
|
||||||
|
LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
|
||||||
|
LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
|
||||||
|
ifelse([$2], , :, [$2])
|
||||||
|
else
|
||||||
|
LIBGCRYPT_CFLAGS=""
|
||||||
|
LIBGCRYPT_LIBS=""
|
||||||
|
ifelse([$3], , :, [$3])
|
||||||
|
fi
|
||||||
|
AC_SUBST(LIBGCRYPT_CFLAGS)
|
||||||
|
AC_SUBST(LIBGCRYPT_LIBS)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Autoconf macros for libgnutls
|
||||||
|
dnl $id$
|
||||||
|
|
||||||
|
# Modified for LIBGNUTLS -- nmav
|
||||||
|
# Configure paths for LIBGCRYPT
|
||||||
|
# Shamelessly stolen from the one of XDELTA by Owen Taylor
|
||||||
|
# Werner Koch 99-12-09
|
||||||
|
|
||||||
|
dnl AM_PATH_LIBGNUTLS([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
|
||||||
|
dnl Test for libgnutls, and define LIBGNUTLS_CFLAGS and LIBGNUTLS_LIBS
|
||||||
|
dnl
|
||||||
|
AC_DEFUN([AM_PATH_LIBGNUTLS],
|
||||||
|
[dnl
|
||||||
|
dnl Get the cflags and libraries from the libgnutls-config script
|
||||||
|
dnl
|
||||||
|
AC_ARG_WITH(libgnutls-prefix,
|
||||||
|
[ --with-libgnutls-prefix=PFX Prefix where libgnutls is installed (optional)],
|
||||||
|
libgnutls_config_prefix="$withval", libgnutls_config_prefix="")
|
||||||
|
|
||||||
|
if test x$libgnutls_config_prefix != x ; then
|
||||||
|
if test x${LIBGNUTLS_CONFIG+set} != xset ; then
|
||||||
|
LIBGNUTLS_CONFIG=$libgnutls_config_prefix/bin/libgnutls-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PATH_PROG(LIBGNUTLS_CONFIG, libgnutls-config, no)
|
||||||
|
min_libgnutls_version=ifelse([$1], ,0.1.0,$1)
|
||||||
|
AC_MSG_CHECKING(for libgnutls - version >= $min_libgnutls_version)
|
||||||
|
no_libgnutls=""
|
||||||
|
if test "$LIBGNUTLS_CONFIG" = "no" ; then
|
||||||
|
no_libgnutls=yes
|
||||||
|
else
|
||||||
|
LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags`
|
||||||
|
LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs`
|
||||||
|
libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version`
|
||||||
|
|
||||||
|
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
ac_save_LIBS="$LIBS"
|
||||||
|
CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
|
||||||
|
LIBS="$LIBS $LIBGNUTLS_LIBS"
|
||||||
|
dnl
|
||||||
|
dnl Now check if the installed libgnutls is sufficiently new. Also sanity
|
||||||
|
dnl checks the results of libgnutls-config to some extent
|
||||||
|
dnl
|
||||||
|
rm -f conf.libgnutlstest
|
||||||
|
AC_TRY_RUN([
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
system ("touch conf.libgnutlstest");
|
||||||
|
|
||||||
|
if( strcmp( gnutls_check_version(NULL), "$libgnutls_config_version" ) )
|
||||||
|
{
|
||||||
|
printf("\n*** 'libgnutls-config --version' returned %s, but LIBGNUTLS (%s)\n",
|
||||||
|
"$libgnutls_config_version", gnutls_check_version(NULL) );
|
||||||
|
printf("*** was found! If libgnutls-config was correct, then it is best\n");
|
||||||
|
printf("*** to remove the old version of LIBGNUTLS. You may also be able to fix the error\n");
|
||||||
|
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
|
||||||
|
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
|
||||||
|
printf("*** required on your system.\n");
|
||||||
|
printf("*** If libgnutls-config was wrong, set the environment variable LIBGNUTLS_CONFIG\n");
|
||||||
|
printf("*** to point to the correct copy of libgnutls-config, and remove the file config.cache\n");
|
||||||
|
printf("*** before re-running configure\n");
|
||||||
|
}
|
||||||
|
else if ( strcmp(gnutls_check_version(NULL), LIBGNUTLS_VERSION ) )
|
||||||
|
{
|
||||||
|
printf("\n*** LIBGNUTLS header file (version %s) does not match\n", LIBGNUTLS_VERSION);
|
||||||
|
printf("*** library (version %s)\n", gnutls_check_version(NULL) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( gnutls_check_version( "$min_libgnutls_version" ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("no\n*** An old version of LIBGNUTLS (%s) was found.\n",
|
||||||
|
gnutls_check_version(NULL) );
|
||||||
|
printf("*** You need a version of LIBGNUTLS newer than %s. The latest version of\n",
|
||||||
|
"$min_libgnutls_version" );
|
||||||
|
printf("*** LIBGNUTLS is always available from ftp://gnutls.hellug.gr/pub/gnutls.\n");
|
||||||
|
printf("*** \n");
|
||||||
|
printf("*** If you have already installed a sufficiently new version, this error\n");
|
||||||
|
printf("*** probably means that the wrong copy of the libgnutls-config shell script is\n");
|
||||||
|
printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
||||||
|
printf("*** of LIBGNUTLS, but you can also set the LIBGNUTLS_CONFIG environment to point to the\n");
|
||||||
|
printf("*** correct copy of libgnutls-config. (In this case, you will have to\n");
|
||||||
|
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
||||||
|
printf("*** so that the correct libraries are found at run-time))\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
],, no_libgnutls=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$no_libgnutls" = x ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
ifelse([$2], , :, [$2])
|
||||||
|
else
|
||||||
|
if test -f conf.libgnutlstest ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
if test "$LIBGNUTLS_CONFIG" = "no" ; then
|
||||||
|
echo "*** The libgnutls-config script installed by LIBGNUTLS could not be found"
|
||||||
|
echo "*** If LIBGNUTLS was installed in PREFIX, make sure PREFIX/bin is in"
|
||||||
|
echo "*** your path, or set the LIBGNUTLS_CONFIG environment variable to the"
|
||||||
|
echo "*** full path to libgnutls-config."
|
||||||
|
else
|
||||||
|
if test -f conf.libgnutlstest ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "*** Could not run libgnutls test program, checking why..."
|
||||||
|
CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
|
||||||
|
LIBS="$LIBS $LIBGNUTLS_LIBS"
|
||||||
|
AC_TRY_LINK([
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
], [ return !!gnutls_check_version(NULL); ],
|
||||||
|
[ echo "*** The test program compiled, but did not run. This usually means"
|
||||||
|
echo "*** that the run-time linker is not finding LIBGNUTLS or finding the wrong"
|
||||||
|
echo "*** version of LIBGNUTLS. If it is not finding LIBGNUTLS, you'll need to set your"
|
||||||
|
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||||
|
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||||
|
echo "*** is required on your system"
|
||||||
|
echo "***"
|
||||||
|
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||||
|
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
|
||||||
|
echo "***" ],
|
||||||
|
[ echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||||
|
echo "*** exact error that occured. This usually means LIBGNUTLS was incorrectly installed"
|
||||||
|
echo "*** or that you have moved LIBGNUTLS since it was installed. In the latter case, you"
|
||||||
|
echo "*** may want to edit the libgnutls-config script: $LIBGNUTLS_CONFIG" ])
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
LIBGNUTLS_CFLAGS=""
|
||||||
|
LIBGNUTLS_LIBS=""
|
||||||
|
ifelse([$3], , :, [$3])
|
||||||
|
fi
|
||||||
|
rm -f conf.libgnutlstest
|
||||||
|
AC_SUBST(LIBGNUTLS_CFLAGS)
|
||||||
|
AC_SUBST(LIBGNUTLS_LIBS)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl *-*wedit:notab*-* Please keep this as the last line.
|
||||||
|
|
||||||
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
|
@ -942,6 +1212,7 @@ m4_include([m4/lib-ld.m4])
|
||||||
m4_include([m4/lib-link.m4])
|
m4_include([m4/lib-link.m4])
|
||||||
m4_include([m4/lib-prefix.m4])
|
m4_include([m4/lib-prefix.m4])
|
||||||
m4_include([m4/nls.m4])
|
m4_include([m4/nls.m4])
|
||||||
|
m4_include([m4/openssl.m4])
|
||||||
m4_include([m4/po.m4])
|
m4_include([m4/po.m4])
|
||||||
m4_include([m4/progtest.m4])
|
m4_include([m4/progtest.m4])
|
||||||
m4_include([m4/stdint_h.m4])
|
m4_include([m4/stdint_h.m4])
|
||||||
|
|
17
config.h.in
17
config.h.in
|
@ -8,10 +8,19 @@
|
||||||
/* Define to 1 if using `alloca.c'. */
|
/* Define to 1 if using `alloca.c'. */
|
||||||
#undef C_ALLOCA
|
#undef C_ALLOCA
|
||||||
|
|
||||||
|
/* Define to 1 if BitTorrent support is enabled. */
|
||||||
|
#undef ENABLE_BITTORRENT
|
||||||
|
|
||||||
/* Define to 1 if translation of program messages to the user's native
|
/* Define to 1 if translation of program messages to the user's native
|
||||||
language is requested. */
|
language is requested. */
|
||||||
#undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
|
|
||||||
|
/* Define to 1 if SHA1 Digest support is enabled. */
|
||||||
|
#undef ENABLE_SHA1DIGEST
|
||||||
|
|
||||||
|
/* Define to 1 if ssl support is enabled. */
|
||||||
|
#undef ENABLE_SSL
|
||||||
|
|
||||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||||
#undef HAVE_ALLOCA
|
#undef HAVE_ALLOCA
|
||||||
|
|
||||||
|
@ -90,10 +99,16 @@
|
||||||
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
||||||
#undef HAVE_LC_MESSAGES
|
#undef HAVE_LC_MESSAGES
|
||||||
|
|
||||||
|
/* Define to 1 if you have libgcrypt. */
|
||||||
|
#undef HAVE_LIBGCRYPT
|
||||||
|
|
||||||
|
/* Define to 1 if you have libgnutls. */
|
||||||
|
#undef HAVE_LIBGNUTLS
|
||||||
|
|
||||||
/* Define to 1 if you have the <libintl.h> header file. */
|
/* Define to 1 if you have the <libintl.h> header file. */
|
||||||
#undef HAVE_LIBINTL_H
|
#undef HAVE_LIBINTL_H
|
||||||
|
|
||||||
/* Define to 1 if you have the `ssl' library (-lssl). */
|
/* Define to 1 if you have openssl. */
|
||||||
#undef HAVE_LIBSSL
|
#undef HAVE_LIBSSL
|
||||||
|
|
||||||
/* Define to 1 if you have the <limits.h> header file. */
|
/* Define to 1 if you have the <limits.h> header file. */
|
||||||
|
|
|
@ -311,7 +311,7 @@ ac_includes_default="\
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif"
|
#endif"
|
||||||
|
|
||||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CPPUNIT_CONFIG CPPUNIT_CFLAGS CPPUNIT_LIBS localedir CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB ac_ct_RANLIB YACC ALLOCA CPP EGREP MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os GLIBC21 LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB LIBOBJS LTLIBOBJS'
|
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CPPUNIT_CONFIG CPPUNIT_CFLAGS CPPUNIT_LIBS localedir CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB ac_ct_RANLIB YACC LIBGNUTLS_CONFIG LIBGNUTLS_CFLAGS LIBGNUTLS_LIBS LIBGCRYPT_CONFIG LIBGCRYPT_CFLAGS LIBGCRYPT_LIBS OPENSSL_LIBS OPENSSL_CFLAGS ALLOCA CPP EGREP MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE build build_cpu build_vendor build_os host host_cpu host_vendor host_os GLIBC21 LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB LIBOBJS LTLIBOBJS'
|
||||||
ac_subst_files=''
|
ac_subst_files=''
|
||||||
|
|
||||||
# Initialize some variables set by options.
|
# Initialize some variables set by options.
|
||||||
|
@ -861,7 +861,6 @@ if test -n "$ac_init_help"; then
|
||||||
Optional Features:
|
Optional Features:
|
||||||
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
||||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||||
--enable-ssl enalbe SSL support if libssl is installed. Default: yes
|
|
||||||
--disable-dependency-tracking speeds up one-time build
|
--disable-dependency-tracking speeds up one-time build
|
||||||
--enable-dependency-tracking do not reject slow dependency extractors
|
--enable-dependency-tracking do not reject slow dependency extractors
|
||||||
--disable-nls do not use Native Language Support
|
--disable-nls do not use Native Language Support
|
||||||
|
@ -872,6 +871,12 @@ Optional Packages:
|
||||||
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
|
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
|
||||||
--with-cppunit-prefix=PFX Prefix where CppUnit is installed (optional)
|
--with-cppunit-prefix=PFX Prefix where CppUnit is installed (optional)
|
||||||
--with-cppunit-exec-prefix=PFX Exec prefix where CppUnit is installed (optional)
|
--with-cppunit-exec-prefix=PFX Exec prefix where CppUnit is installed (optional)
|
||||||
|
--with-gnutls use gnutls library if installed. Default: yes
|
||||||
|
--with-openssl use openssl library if installed. Default: yes
|
||||||
|
--with-libgnutls-prefix=PFX Prefix where libgnutls is installed (optional)
|
||||||
|
--with-libgcrypt-prefix=PFX
|
||||||
|
prefix where LIBGCRYPT is installed (optional)
|
||||||
|
--with-openssl-prefix=PREFIX Prefix where OpenSSL installed (optional)
|
||||||
--with-gnu-ld assume the C compiler uses GNU ld default=no
|
--with-gnu-ld assume the C compiler uses GNU ld default=no
|
||||||
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
|
--with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
|
||||||
--without-libiconv-prefix don't search for libiconv in includedir and libdir
|
--without-libiconv-prefix don't search for libiconv in includedir and libdir
|
||||||
|
@ -1912,14 +1917,25 @@ localedir=${datadir}/locale
|
||||||
|
|
||||||
|
|
||||||
# Checks for arguments.
|
# Checks for arguments.
|
||||||
# Check whether --enable-ssl or --disable-ssl was given.
|
#AC_ARG_ENABLE([ssl], [ --enable-ssl enalbe SSL support if libssl is installed. Default: yes], [enable_ssl=$enableval], [enable_ssl=yes])
|
||||||
if test "${enable_ssl+set}" = set; then
|
|
||||||
enableval="$enable_ssl"
|
# Check whether --with-gnutls or --without-gnutls was given.
|
||||||
enable_ssl=$enableval
|
if test "${with_gnutls+set}" = set; then
|
||||||
|
withval="$with_gnutls"
|
||||||
|
with_gnutls=$enableval
|
||||||
else
|
else
|
||||||
enable_ssl=yes
|
with_gnutls=yes
|
||||||
fi;
|
fi;
|
||||||
|
|
||||||
|
# Check whether --with-openssl or --without-openssl was given.
|
||||||
|
if test "${with_openssl+set}" = set; then
|
||||||
|
withval="$with_openssl"
|
||||||
|
with_openssl=$enableval
|
||||||
|
else
|
||||||
|
with_openssl=yes
|
||||||
|
fi;
|
||||||
|
|
||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
ac_ext=cc
|
ac_ext=cc
|
||||||
ac_cpp='$CXXCPP $CPPFLAGS'
|
ac_cpp='$CXXCPP $CPPFLAGS'
|
||||||
|
@ -3681,9 +3697,453 @@ test -n "$YACC" || YACC="yacc"
|
||||||
|
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
if test "x$enable_ssl" = "xyes"; then
|
if test "x$with_gnutls" = "xyes"; then
|
||||||
|
|
||||||
|
|
||||||
|
# Check whether --with-libgnutls-prefix or --without-libgnutls-prefix was given.
|
||||||
|
if test "${with_libgnutls_prefix+set}" = set; then
|
||||||
|
withval="$with_libgnutls_prefix"
|
||||||
|
libgnutls_config_prefix="$withval"
|
||||||
|
else
|
||||||
|
libgnutls_config_prefix=""
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if test x$libgnutls_config_prefix != x ; then
|
||||||
|
if test x${LIBGNUTLS_CONFIG+set} != xset ; then
|
||||||
|
LIBGNUTLS_CONFIG=$libgnutls_config_prefix/bin/libgnutls-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract the first word of "libgnutls-config", so it can be a program name with args.
|
||||||
|
set dummy libgnutls-config; ac_word=$2
|
||||||
|
echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||||
|
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_path_LIBGNUTLS_CONFIG+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
case $LIBGNUTLS_CONFIG in
|
||||||
|
[\\/]* | ?:[\\/]*)
|
||||||
|
ac_cv_path_LIBGNUTLS_CONFIG="$LIBGNUTLS_CONFIG" # Let the user override the test with a path.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||||
|
ac_cv_path_LIBGNUTLS_CONFIG="$as_dir/$ac_word$ac_exec_ext"
|
||||||
|
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
|
break 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
test -z "$ac_cv_path_LIBGNUTLS_CONFIG" && ac_cv_path_LIBGNUTLS_CONFIG="no"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
LIBGNUTLS_CONFIG=$ac_cv_path_LIBGNUTLS_CONFIG
|
||||||
|
|
||||||
|
if test -n "$LIBGNUTLS_CONFIG"; then
|
||||||
|
echo "$as_me:$LINENO: result: $LIBGNUTLS_CONFIG" >&5
|
||||||
|
echo "${ECHO_T}$LIBGNUTLS_CONFIG" >&6
|
||||||
|
else
|
||||||
|
echo "$as_me:$LINENO: result: no" >&5
|
||||||
|
echo "${ECHO_T}no" >&6
|
||||||
|
fi
|
||||||
|
|
||||||
|
min_libgnutls_version=1.2.9
|
||||||
|
echo "$as_me:$LINENO: checking for libgnutls - version >= $min_libgnutls_version" >&5
|
||||||
|
echo $ECHO_N "checking for libgnutls - version >= $min_libgnutls_version... $ECHO_C" >&6
|
||||||
|
no_libgnutls=""
|
||||||
|
if test "$LIBGNUTLS_CONFIG" = "no" ; then
|
||||||
|
no_libgnutls=yes
|
||||||
|
else
|
||||||
|
LIBGNUTLS_CFLAGS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --cflags`
|
||||||
|
LIBGNUTLS_LIBS=`$LIBGNUTLS_CONFIG $libgnutls_config_args --libs`
|
||||||
|
libgnutls_config_version=`$LIBGNUTLS_CONFIG $libgnutls_config_args --version`
|
||||||
|
|
||||||
|
|
||||||
|
ac_save_CFLAGS="$CFLAGS"
|
||||||
|
ac_save_LIBS="$LIBS"
|
||||||
|
CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
|
||||||
|
LIBS="$LIBS $LIBGNUTLS_LIBS"
|
||||||
|
rm -f conf.libgnutlstest
|
||||||
|
if test "$cross_compiling" = yes; then
|
||||||
|
echo $ac_n "cross compiling; assumed OK... $ac_c"
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
system ("touch conf.libgnutlstest");
|
||||||
|
|
||||||
|
if( strcmp( gnutls_check_version(NULL), "$libgnutls_config_version" ) )
|
||||||
|
{
|
||||||
|
printf("\n*** 'libgnutls-config --version' returned %s, but LIBGNUTLS (%s)\n",
|
||||||
|
"$libgnutls_config_version", gnutls_check_version(NULL) );
|
||||||
|
printf("*** was found! If libgnutls-config was correct, then it is best\n");
|
||||||
|
printf("*** to remove the old version of LIBGNUTLS. You may also be able to fix the error\n");
|
||||||
|
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
|
||||||
|
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
|
||||||
|
printf("*** required on your system.\n");
|
||||||
|
printf("*** If libgnutls-config was wrong, set the environment variable LIBGNUTLS_CONFIG\n");
|
||||||
|
printf("*** to point to the correct copy of libgnutls-config, and remove the file config.cache\n");
|
||||||
|
printf("*** before re-running configure\n");
|
||||||
|
}
|
||||||
|
else if ( strcmp(gnutls_check_version(NULL), LIBGNUTLS_VERSION ) )
|
||||||
|
{
|
||||||
|
printf("\n*** LIBGNUTLS header file (version %s) does not match\n", LIBGNUTLS_VERSION);
|
||||||
|
printf("*** library (version %s)\n", gnutls_check_version(NULL) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( gnutls_check_version( "$min_libgnutls_version" ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("no\n*** An old version of LIBGNUTLS (%s) was found.\n",
|
||||||
|
gnutls_check_version(NULL) );
|
||||||
|
printf("*** You need a version of LIBGNUTLS newer than %s. The latest version of\n",
|
||||||
|
"$min_libgnutls_version" );
|
||||||
|
printf("*** LIBGNUTLS is always available from ftp://gnutls.hellug.gr/pub/gnutls.\n");
|
||||||
|
printf("*** \n");
|
||||||
|
printf("*** If you have already installed a sufficiently new version, this error\n");
|
||||||
|
printf("*** probably means that the wrong copy of the libgnutls-config shell script is\n");
|
||||||
|
printf("*** being found. The easiest way to fix this is to remove the old version\n");
|
||||||
|
printf("*** of LIBGNUTLS, but you can also set the LIBGNUTLS_CONFIG environment to point to the\n");
|
||||||
|
printf("*** correct copy of libgnutls-config. (In this case, you will have to\n");
|
||||||
|
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
|
||||||
|
printf("*** so that the correct libraries are found at run-time))\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "$as_me: program exited with status $ac_status" >&5
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
( exit $ac_status )
|
||||||
|
no_libgnutls=yes
|
||||||
|
fi
|
||||||
|
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$no_libgnutls" = x ; then
|
||||||
|
echo "$as_me:$LINENO: result: yes" >&5
|
||||||
|
echo "${ECHO_T}yes" >&6
|
||||||
|
have_libgnutls=yes
|
||||||
|
else
|
||||||
|
if test -f conf.libgnutlstest ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "$as_me:$LINENO: result: no" >&5
|
||||||
|
echo "${ECHO_T}no" >&6
|
||||||
|
fi
|
||||||
|
if test "$LIBGNUTLS_CONFIG" = "no" ; then
|
||||||
|
echo "*** The libgnutls-config script installed by LIBGNUTLS could not be found"
|
||||||
|
echo "*** If LIBGNUTLS was installed in PREFIX, make sure PREFIX/bin is in"
|
||||||
|
echo "*** your path, or set the LIBGNUTLS_CONFIG environment variable to the"
|
||||||
|
echo "*** full path to libgnutls-config."
|
||||||
|
else
|
||||||
|
if test -f conf.libgnutlstest ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "*** Could not run libgnutls test program, checking why..."
|
||||||
|
CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
|
||||||
|
LIBS="$LIBS $LIBGNUTLS_LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <gnutls/gnutls.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return !!gnutls_check_version(NULL);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
echo "*** The test program compiled, but did not run. This usually means"
|
||||||
|
echo "*** that the run-time linker is not finding LIBGNUTLS or finding the wrong"
|
||||||
|
echo "*** version of LIBGNUTLS. If it is not finding LIBGNUTLS, you'll need to set your"
|
||||||
|
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
|
||||||
|
echo "*** to the installed location Also, make sure you have run ldconfig if that"
|
||||||
|
echo "*** is required on your system"
|
||||||
|
echo "***"
|
||||||
|
echo "*** If you have an old version installed, it is best to remove it, although"
|
||||||
|
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
|
||||||
|
echo "***"
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
echo "*** The test program failed to compile or link. See the file config.log for the"
|
||||||
|
echo "*** exact error that occured. This usually means LIBGNUTLS was incorrectly installed"
|
||||||
|
echo "*** or that you have moved LIBGNUTLS since it was installed. In the latter case, you"
|
||||||
|
echo "*** may want to edit the libgnutls-config script: $LIBGNUTLS_CONFIG"
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
CFLAGS="$ac_save_CFLAGS"
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
LIBGNUTLS_CFLAGS=""
|
||||||
|
LIBGNUTLS_LIBS=""
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
rm -f conf.libgnutlstest
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if test "x$have_libgnutls" = "xyes"; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_LIBGNUTLS 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libgnutls" = "xyes"; then
|
||||||
|
|
||||||
|
# Check whether --with-libgcrypt-prefix or --without-libgcrypt-prefix was given.
|
||||||
|
if test "${with_libgcrypt_prefix+set}" = set; then
|
||||||
|
withval="$with_libgcrypt_prefix"
|
||||||
|
libgcrypt_config_prefix="$withval"
|
||||||
|
else
|
||||||
|
libgcrypt_config_prefix=""
|
||||||
|
fi;
|
||||||
|
if test x$libgcrypt_config_prefix != x ; then
|
||||||
|
if test x${LIBGCRYPT_CONFIG+set} != xset ; then
|
||||||
|
LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract the first word of "libgcrypt-config", so it can be a program name with args.
|
||||||
|
set dummy libgcrypt-config; ac_word=$2
|
||||||
|
echo "$as_me:$LINENO: checking for $ac_word" >&5
|
||||||
|
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_path_LIBGCRYPT_CONFIG+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
case $LIBGCRYPT_CONFIG in
|
||||||
|
[\\/]* | ?:[\\/]*)
|
||||||
|
ac_cv_path_LIBGCRYPT_CONFIG="$LIBGCRYPT_CONFIG" # Let the user override the test with a path.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
|
||||||
|
ac_cv_path_LIBGCRYPT_CONFIG="$as_dir/$ac_word$ac_exec_ext"
|
||||||
|
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
|
break 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
test -z "$ac_cv_path_LIBGCRYPT_CONFIG" && ac_cv_path_LIBGCRYPT_CONFIG="no"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
LIBGCRYPT_CONFIG=$ac_cv_path_LIBGCRYPT_CONFIG
|
||||||
|
|
||||||
|
if test -n "$LIBGCRYPT_CONFIG"; then
|
||||||
|
echo "$as_me:$LINENO: result: $LIBGCRYPT_CONFIG" >&5
|
||||||
|
echo "${ECHO_T}$LIBGCRYPT_CONFIG" >&6
|
||||||
|
else
|
||||||
|
echo "$as_me:$LINENO: result: no" >&5
|
||||||
|
echo "${ECHO_T}no" >&6
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmp=1.2.2
|
||||||
|
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
|
||||||
|
req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
|
||||||
|
min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
|
||||||
|
else
|
||||||
|
req_libgcrypt_api=0
|
||||||
|
min_libgcrypt_version="$tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking for LIBGCRYPT - version >= $min_libgcrypt_version" >&5
|
||||||
|
echo $ECHO_N "checking for LIBGCRYPT - version >= $min_libgcrypt_version... $ECHO_C" >&6
|
||||||
|
ok=no
|
||||||
|
if test "$LIBGCRYPT_CONFIG" != "no" ; then
|
||||||
|
req_major=`echo $min_libgcrypt_version | \
|
||||||
|
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\1/'`
|
||||||
|
req_minor=`echo $min_libgcrypt_version | \
|
||||||
|
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\2/'`
|
||||||
|
req_micro=`echo $min_libgcrypt_version | \
|
||||||
|
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)/\3/'`
|
||||||
|
libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
|
||||||
|
major=`echo $libgcrypt_config_version | \
|
||||||
|
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'`
|
||||||
|
minor=`echo $libgcrypt_config_version | \
|
||||||
|
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'`
|
||||||
|
micro=`echo $libgcrypt_config_version | \
|
||||||
|
sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'`
|
||||||
|
if test "$major" -gt "$req_major"; then
|
||||||
|
ok=yes
|
||||||
|
else
|
||||||
|
if test "$major" -eq "$req_major"; then
|
||||||
|
if test "$minor" -gt "$req_minor"; then
|
||||||
|
ok=yes
|
||||||
|
else
|
||||||
|
if test "$minor" -eq "$req_minor"; then
|
||||||
|
if test "$micro" -ge "$req_micro"; then
|
||||||
|
ok=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $ok = yes; then
|
||||||
|
echo "$as_me:$LINENO: result: yes" >&5
|
||||||
|
echo "${ECHO_T}yes" >&6
|
||||||
|
else
|
||||||
|
echo "$as_me:$LINENO: result: no" >&5
|
||||||
|
echo "${ECHO_T}no" >&6
|
||||||
|
fi
|
||||||
|
if test $ok = yes; then
|
||||||
|
# If we have a recent libgcrypt, we should also check that the
|
||||||
|
# API is compatible
|
||||||
|
if test "$req_libgcrypt_api" -gt 0 ; then
|
||||||
|
tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
|
||||||
|
if test "$tmp" -gt 0 ; then
|
||||||
|
echo "$as_me:$LINENO: checking LIBGCRYPT API version" >&5
|
||||||
|
echo $ECHO_N "checking LIBGCRYPT API version... $ECHO_C" >&6
|
||||||
|
if test "$req_libgcrypt_api" -eq "$tmp" ; then
|
||||||
|
echo "$as_me:$LINENO: result: okay" >&5
|
||||||
|
echo "${ECHO_T}okay" >&6
|
||||||
|
else
|
||||||
|
ok=no
|
||||||
|
echo "$as_me:$LINENO: result: does not match (want=$req_libgcrypt_api got=$tmp)" >&5
|
||||||
|
echo "${ECHO_T}does not match (want=$req_libgcrypt_api got=$tmp)" >&6
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test $ok = yes; then
|
||||||
|
LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
|
||||||
|
LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
|
||||||
|
have_libgcrypt=yes
|
||||||
|
else
|
||||||
|
LIBGCRYPT_CFLAGS=""
|
||||||
|
LIBGCRYPT_LIBS=""
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if test "x$have_libgcrypt" = "xyes"; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_LIBGCRYPT 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$with_openssl" = "xyes" && test "x$have_libgnutls" != "xyes"; then
|
||||||
|
# AC_CHECK_LIB([ssl], [SSL_library_init], [have_openssl=yes])
|
||||||
|
# if test "x$have_openssl" = "xyes"; then
|
||||||
|
# AC_DEFINE([HAVE_LIBSSL], [1], [Define to 1 if you have openssl.])
|
||||||
|
# OPENSSL_LIBS="-lssl"
|
||||||
|
# OPENSSL_CFLAGS=""
|
||||||
|
# AC_SUBST(OPENSSL_LIBS)
|
||||||
|
# AC_SUBST(OPENSSL_CFLAGS)
|
||||||
|
# fi
|
||||||
|
|
||||||
|
|
||||||
|
# Check whether --with-openssl-prefix or --without-openssl-prefix was given.
|
||||||
|
if test "${with_openssl_prefix+set}" = set; then
|
||||||
|
withval="$with_openssl_prefix"
|
||||||
|
openssl_prefix=$withval
|
||||||
|
else
|
||||||
|
openssl_prefix=""
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if test "x$openssl_prefix" = "x"; then
|
||||||
|
openssl_prefix=$prefix
|
||||||
|
fi
|
||||||
|
|
||||||
|
openssl_prefix_lib=$openssl_prefix/lib
|
||||||
|
openssl_prefix_include=$openssl_prefix/include
|
||||||
|
|
||||||
|
LIBS_save=$LIBS
|
||||||
|
CPPFLAGS_save=$CPPFLAGS
|
||||||
|
|
||||||
|
LIBS="-L$openssl_prefix_lib $LIBS"
|
||||||
|
CPPFLAGS="-I$openssl_prefix_include $CPPFLAGS"
|
||||||
|
|
||||||
echo "$as_me:$LINENO: checking for SSL_library_init in -lssl" >&5
|
echo "$as_me:$LINENO: checking for SSL_library_init in -lssl" >&5
|
||||||
echo $ECHO_N "checking for SSL_library_init in -lssl... $ECHO_C" >&6
|
echo $ECHO_N "checking for SSL_library_init in -lssl... $ECHO_C" >&6
|
||||||
if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then
|
if test "${ac_cv_lib_ssl_SSL_library_init+set}" = set; then
|
||||||
|
@ -3748,16 +4208,113 @@ fi
|
||||||
echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_library_init" >&5
|
echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_library_init" >&5
|
||||||
echo "${ECHO_T}$ac_cv_lib_ssl_SSL_library_init" >&6
|
echo "${ECHO_T}$ac_cv_lib_ssl_SSL_library_init" >&6
|
||||||
if test $ac_cv_lib_ssl_SSL_library_init = yes; then
|
if test $ac_cv_lib_ssl_SSL_library_init = yes; then
|
||||||
cat >>confdefs.h <<_ACEOF
|
have_openssl=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "x$have_openssl" = "xyes"; then
|
||||||
|
have_openssl=no
|
||||||
|
echo "$as_me:$LINENO: checking for main in -lcrypto" >&5
|
||||||
|
echo $ECHO_N "checking for main in -lcrypto... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_lib_crypto_main+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_check_lib_save_LIBS=$LIBS
|
||||||
|
LIBS="-lcrypto $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
main ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_lib_crypto_main=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_cv_lib_crypto_main=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_check_lib_save_LIBS
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_main" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_lib_crypto_main" >&6
|
||||||
|
if test $ac_cv_lib_crypto_main = yes; then
|
||||||
|
have_openssl=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$have_openssl" = "xyes"; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
#define HAVE_LIBSSL 1
|
#define HAVE_LIBSSL 1
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
LIBS="-lssl $LIBS"
|
OPENSSL_LIBS="-L$openssl_prefix_lib -lssl -lcrypto"
|
||||||
|
OPENSSL_CFLAGS="-I$openssl_prefix_include"
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBS=$LIBS_save
|
||||||
|
CPPFLAGS=$CPPFLAGS_save
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libgnutls" = "xyes" || test "x$have_openssl" = "xyes"; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define ENABLE_SSL 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libgcrypt" = "xyes" || test "x$have_openssl" = "xyes"; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define ENABLE_SHA1DIGEST 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define ENABLE_BITTORRENT 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
ac_ext=c
|
ac_ext=c
|
||||||
ac_cpp='$CPP $CPPFLAGS'
|
ac_cpp='$CPP $CPPFLAGS'
|
||||||
|
@ -11296,6 +11853,14 @@ s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
|
||||||
s,@RANLIB@,$RANLIB,;t t
|
s,@RANLIB@,$RANLIB,;t t
|
||||||
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
|
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
|
||||||
s,@YACC@,$YACC,;t t
|
s,@YACC@,$YACC,;t t
|
||||||
|
s,@LIBGNUTLS_CONFIG@,$LIBGNUTLS_CONFIG,;t t
|
||||||
|
s,@LIBGNUTLS_CFLAGS@,$LIBGNUTLS_CFLAGS,;t t
|
||||||
|
s,@LIBGNUTLS_LIBS@,$LIBGNUTLS_LIBS,;t t
|
||||||
|
s,@LIBGCRYPT_CONFIG@,$LIBGCRYPT_CONFIG,;t t
|
||||||
|
s,@LIBGCRYPT_CFLAGS@,$LIBGCRYPT_CFLAGS,;t t
|
||||||
|
s,@LIBGCRYPT_LIBS@,$LIBGCRYPT_LIBS,;t t
|
||||||
|
s,@OPENSSL_LIBS@,$OPENSSL_LIBS,;t t
|
||||||
|
s,@OPENSSL_CFLAGS@,$OPENSSL_CFLAGS,;t t
|
||||||
s,@ALLOCA@,$ALLOCA,;t t
|
s,@ALLOCA@,$ALLOCA,;t t
|
||||||
s,@CPP@,$CPP,;t t
|
s,@CPP@,$CPP,;t t
|
||||||
s,@EGREP@,$EGREP,;t t
|
s,@EGREP@,$EGREP,;t t
|
||||||
|
|
41
configure.in
41
configure.in
|
@ -13,7 +13,10 @@ localedir=${datadir}/locale
|
||||||
AC_SUBST(localedir)
|
AC_SUBST(localedir)
|
||||||
|
|
||||||
# Checks for arguments.
|
# Checks for arguments.
|
||||||
AC_ARG_ENABLE([ssl], [ --enable-ssl enalbe SSL support if libssl is installed. Default: yes], [enable_ssl=$enableval], [enable_ssl=yes])
|
#AC_ARG_ENABLE([ssl], [ --enable-ssl enalbe SSL support if libssl is installed. Default: yes], [enable_ssl=$enableval], [enable_ssl=yes])
|
||||||
|
AC_ARG_WITH([gnutls], [ --with-gnutls use gnutls library if installed. Default: yes], [with_gnutls=$enableval], [with_gnutls=yes])
|
||||||
|
AC_ARG_WITH([openssl], [ --with-openssl use openssl library if installed. Default: yes], [with_openssl=$enableval], [with_openssl=yes])
|
||||||
|
|
||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
AC_PROG_CXX
|
AC_PROG_CXX
|
||||||
|
@ -23,10 +26,42 @@ AC_PROG_RANLIB
|
||||||
AC_PROG_YACC
|
AC_PROG_YACC
|
||||||
|
|
||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
if test "x$enable_ssl" = "xyes"; then
|
if test "x$with_gnutls" = "xyes"; then
|
||||||
AC_CHECK_LIB([ssl], [SSL_library_init])
|
AM_PATH_LIBGNUTLS([1.2.9], [have_libgnutls=yes])
|
||||||
|
if test "x$have_libgnutls" = "xyes"; then
|
||||||
|
AC_DEFINE([HAVE_LIBGNUTLS], [1], [Define to 1 if you have libgnutls.])
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libgnutls" = "xyes"; then
|
||||||
|
AM_PATH_LIBGCRYPT([1.2.2], [have_libgcrypt=yes])
|
||||||
|
if test "x$have_libgcrypt" = "xyes"; then
|
||||||
|
AC_DEFINE([HAVE_LIBGCRYPT], [1], [Define to 1 if you have libgcrypt.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$with_openssl" = "xyes" && test "x$have_libgnutls" != "xyes"; then
|
||||||
|
# AC_CHECK_LIB([ssl], [SSL_library_init], [have_openssl=yes])
|
||||||
|
# if test "x$have_openssl" = "xyes"; then
|
||||||
|
# AC_DEFINE([HAVE_LIBSSL], [1], [Define to 1 if you have openssl.])
|
||||||
|
# OPENSSL_LIBS="-lssl"
|
||||||
|
# OPENSSL_CFLAGS=""
|
||||||
|
# AC_SUBST(OPENSSL_LIBS)
|
||||||
|
# AC_SUBST(OPENSSL_CFLAGS)
|
||||||
|
# fi
|
||||||
|
AM_PATH_OPENSSL
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libgnutls" = "xyes" || test "x$have_openssl" = "xyes"; then
|
||||||
|
AC_DEFINE([ENABLE_SSL], [1], [Define to 1 if ssl support is enabled.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x$have_libgcrypt" = "xyes" || test "x$have_openssl" = "xyes"; then
|
||||||
|
AC_DEFINE([ENABLE_SHA1DIGEST], [1], [Define to 1 if SHA1 Digest support is enabled.])
|
||||||
|
AC_DEFINE([ENABLE_BITTORRENT], [1], [Define to 1 if BitTorrent support is enabled.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
|
|
@ -45,9 +45,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
|
||||||
$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \
|
$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
|
||||||
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
|
$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/po.m4 \
|
||||||
$(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \
|
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
|
||||||
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.in
|
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
|
||||||
|
$(top_srcdir)/configure.in
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
|
@ -100,6 +101,12 @@ INTLLIBS = @INTLLIBS@
|
||||||
INTLOBJS = @INTLOBJS@
|
INTLOBJS = @INTLOBJS@
|
||||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
|
||||||
|
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
|
||||||
|
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
|
||||||
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
||||||
|
LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
|
||||||
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
LIBINTL = @LIBINTL@
|
LIBINTL = @LIBINTL@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
|
@ -112,6 +119,8 @@ MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
MSGFMT = @MSGFMT@
|
MSGFMT = @MSGFMT@
|
||||||
MSGMERGE = @MSGMERGE@
|
MSGMERGE = @MSGMERGE@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
|
OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
|
||||||
|
OPENSSL_LIBS = @OPENSSL_LIBS@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
PACKAGE_NAME = @PACKAGE_NAME@
|
PACKAGE_NAME = @PACKAGE_NAME@
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
AC_DEFUN([AM_PATH_OPENSSL],
|
||||||
|
[
|
||||||
|
AC_ARG_WITH([openssl-prefix],
|
||||||
|
[ --with-openssl-prefix=PREFIX Prefix where OpenSSL installed (optional)],
|
||||||
|
[openssl_prefix=$withval],
|
||||||
|
[openssl_prefix=""])
|
||||||
|
|
||||||
|
if test "x$openssl_prefix" = "x"; then
|
||||||
|
openssl_prefix=$prefix
|
||||||
|
fi
|
||||||
|
|
||||||
|
openssl_prefix_lib=$openssl_prefix/lib
|
||||||
|
openssl_prefix_include=$openssl_prefix/include
|
||||||
|
|
||||||
|
LIBS_save=$LIBS
|
||||||
|
CPPFLAGS_save=$CPPFLAGS
|
||||||
|
|
||||||
|
LIBS="-L$openssl_prefix_lib $LIBS"
|
||||||
|
CPPFLAGS="-I$openssl_prefix_include $CPPFLAGS"
|
||||||
|
|
||||||
|
AC_CHECK_LIB([ssl], [SSL_library_init], [have_openssl=yes])
|
||||||
|
|
||||||
|
if test "x$have_openssl" = "xyes"; then
|
||||||
|
have_openssl=no
|
||||||
|
AC_CHECK_LIB([crypto], [main], [have_openssl=yes])
|
||||||
|
if test "x$have_openssl" = "xyes"; then
|
||||||
|
AC_DEFINE([HAVE_LIBSSL], [1], [Define to 1 if you have openssl.])
|
||||||
|
OPENSSL_LIBS="-L$openssl_prefix_lib -lssl -lcrypto"
|
||||||
|
OPENSSL_CFLAGS="-I$openssl_prefix_include"
|
||||||
|
AC_SUBST(OPENSSL_LIBS)
|
||||||
|
AC_SUBST(OPENSSL_CFLAGS)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBS=$LIBS_save
|
||||||
|
CPPFLAGS=$CPPFLAGS_save
|
||||||
|
])
|
|
@ -30,18 +30,18 @@
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
|
|
||||||
AbstractDiskWriter::AbstractDiskWriter():fd(0) {
|
AbstractDiskWriter::AbstractDiskWriter():fd(0) {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_MD_CTX_init(&ctx);
|
sha1DigestInit(ctx);
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
AbstractDiskWriter::~AbstractDiskWriter() {
|
AbstractDiskWriter::~AbstractDiskWriter() {
|
||||||
if(fd != 0) {
|
if(fd != 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_MD_CTX_cleanup(&ctx);
|
sha1DigestFree(ctx);
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractDiskWriter::closeFile() {
|
void AbstractDiskWriter::closeFile() {
|
||||||
|
@ -88,8 +88,8 @@ int AbstractDiskWriter::readDataInternal(char* data, int len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) {
|
string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_DigestInit_ex(&ctx, EVP_sha1(), NULL);
|
sha1DigestReset(ctx);
|
||||||
try {
|
try {
|
||||||
int BUFSIZE = 16*1024;
|
int BUFSIZE = 16*1024;
|
||||||
char buf[BUFSIZE];
|
char buf[BUFSIZE];
|
||||||
|
@ -97,7 +97,7 @@ string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) {
|
||||||
if(BUFSIZE != readData(buf, BUFSIZE, offset)) {
|
if(BUFSIZE != readData(buf, BUFSIZE, offset)) {
|
||||||
throw "error";
|
throw "error";
|
||||||
}
|
}
|
||||||
EVP_DigestUpdate(&ctx, buf, BUFSIZE);
|
sha1DigestUpdate(ctx, buf, BUFSIZE);
|
||||||
offset += BUFSIZE;
|
offset += BUFSIZE;
|
||||||
}
|
}
|
||||||
int r = length%BUFSIZE;
|
int r = length%BUFSIZE;
|
||||||
|
@ -105,18 +105,17 @@ string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) {
|
||||||
if(r != readData(buf, r, offset)) {
|
if(r != readData(buf, r, offset)) {
|
||||||
throw "error";
|
throw "error";
|
||||||
}
|
}
|
||||||
EVP_DigestUpdate(&ctx, buf, r);
|
sha1DigestUpdate(ctx, buf, r);
|
||||||
}
|
}
|
||||||
unsigned char hashValue[20];
|
unsigned char hashValue[20];
|
||||||
int len;
|
sha1DigestFinal(ctx, hashValue);
|
||||||
EVP_DigestFinal_ex(&ctx, hashValue, (unsigned int*)&len);
|
|
||||||
return Util::toHex(hashValue, 20);
|
return Util::toHex(hashValue, 20);
|
||||||
} catch(string ex) {
|
} catch(string ex) {
|
||||||
throw new DlAbortEx(strerror(errno));
|
throw new DlAbortEx(strerror(errno));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
return "";
|
return "";
|
||||||
#endif // HASHVALUE
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractDiskWriter::seek(long long int offset) {
|
void AbstractDiskWriter::seek(long long int offset) {
|
||||||
|
|
|
@ -23,17 +23,17 @@
|
||||||
#define _D_ABSTRACT_DISK_WRITER_H_
|
#define _D_ABSTRACT_DISK_WRITER_H_
|
||||||
|
|
||||||
#include "DiskWriter.h"
|
#include "DiskWriter.h"
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
#include <openssl/evp.h>
|
#include "messageDigest.h"
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
|
|
||||||
class AbstractDiskWriter:public DiskWriter {
|
class AbstractDiskWriter:public DiskWriter {
|
||||||
protected:
|
protected:
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_MD_CTX ctx;
|
MessageDigestContext ctx;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
|
|
||||||
void createFile(string filename, int addFlags = 0);
|
void createFile(string filename, int addFlags = 0);
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "DlRetryEx.h"
|
#include "DlRetryEx.h"
|
||||||
#include "HttpRequestCommand.h"
|
#include "HttpRequestCommand.h"
|
||||||
#include "SleepCommand.h"
|
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include "ChunkedEncoding.h"
|
#include "ChunkedEncoding.h"
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,10 @@
|
||||||
|
|
||||||
Command* InitiateConnectionCommandFactory::createInitiateConnectionCommand(int cuid, Request* req, DownloadEngine* e) {
|
Command* InitiateConnectionCommandFactory::createInitiateConnectionCommand(int cuid, Request* req, DownloadEngine* e) {
|
||||||
if(req->getProtocol() == "http"
|
if(req->getProtocol() == "http"
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SSL
|
||||||
// for SSL
|
// for SSL
|
||||||
|| req->getProtocol() == "https"
|
|| req->getProtocol() == "https"
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SSL
|
||||||
) {
|
) {
|
||||||
return new HttpInitiateConnectionCommand(cuid, req, e);
|
return new HttpInitiateConnectionCommand(cuid, req, e);
|
||||||
} else if(req->getProtocol() == "ftp") {
|
} else if(req->getProtocol() == "ftp") {
|
||||||
|
|
|
@ -35,8 +35,17 @@ public:
|
||||||
virtual void debug(const char* msg, Exception* ex, ...) const = 0;
|
virtual void debug(const char* msg, Exception* ex, ...) const = 0;
|
||||||
virtual void info(const char* msg, ...) const = 0;
|
virtual void info(const char* msg, ...) const = 0;
|
||||||
virtual void info(const char* msg, Exception* ex, ...) const = 0;
|
virtual void info(const char* msg, Exception* ex, ...) const = 0;
|
||||||
|
virtual void warn(const char* msg, ...) const = 0;
|
||||||
|
virtual void warn(const char* msg, Exception* ex, ...) const = 0;
|
||||||
virtual void error(const char* msg, ...) const = 0;
|
virtual void error(const char* msg, ...) const = 0;
|
||||||
virtual void error(const char* msg, Exception* ex, ...) const = 0;
|
virtual void error(const char* msg, Exception* ex, ...) const = 0;
|
||||||
|
|
||||||
|
enum LEVEL {
|
||||||
|
DEBUG,
|
||||||
|
INFO,
|
||||||
|
WARN,
|
||||||
|
ERROR
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _D_LOGGER_H_
|
#endif // _D_LOGGER_H_
|
||||||
|
|
|
@ -75,12 +75,14 @@ SRCS = Socket.cc Socket.h\
|
||||||
RequestSlot.cc RequestSlot.h\
|
RequestSlot.cc RequestSlot.h\
|
||||||
RequestSlotMan.cc RequestSlotMan.h\
|
RequestSlotMan.cc RequestSlotMan.h\
|
||||||
TorrentAutoSaveCommand.cc TorrentAutoSaveCommand.h\
|
TorrentAutoSaveCommand.cc TorrentAutoSaveCommand.h\
|
||||||
Directory.cc Directory.h
|
Directory.cc Directory.h\
|
||||||
|
TrackerWatcherCommand.cc TrackerWatcherCommand.h\
|
||||||
|
messageDigest.h
|
||||||
noinst_LIBRARIES = libaria2c.a
|
noinst_LIBRARIES = libaria2c.a
|
||||||
libaria2c_a_SOURCES = $(SRCS)
|
libaria2c_a_SOURCES = $(SRCS)
|
||||||
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@
|
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
|
||||||
FLAGS = -Wall
|
@LIBGCRYPT_LIBS@ @OPENSSL_LIBS@
|
||||||
INCLUDES = -I../lib -I../intl -I$(top_srcdir)/intl
|
AM_CPPFLAGS = -Wall\
|
||||||
DEFS = -D_FILE_OFFSET_BITS=64 -DLOCALEDIR=\"$(localedir)\" @DEFS@
|
-I../lib -I../intl -I$(top_srcdir)/intl\
|
||||||
libaria2c_a_CXXFLAGS = $(FLAGS)
|
@LIBGNUTLS_CFLAGS@ @LIBGCRYPT_CFLAGS@ @OPENSSL_CFLAGS@\
|
||||||
aria2c_CXXFLAGS = $(FLAGS)
|
-D_FILE_OFFSET_BITS=64 -DLOCALEDIR=\"$(localedir)\" @DEFS@
|
||||||
|
|
1153
src/Makefile.in
1153
src/Makefile.in
File diff suppressed because it is too large
Load Diff
|
@ -61,7 +61,7 @@ void PeerConnection::sendKeepAlive() const {
|
||||||
*/
|
*/
|
||||||
char msg[4];
|
char msg[4];
|
||||||
memset(msg, 0, sizeof(msg));
|
memset(msg, 0, sizeof(msg));
|
||||||
writeOutgoingMessageLog("keep-alive");
|
writeOutgoingMessageLog("keep alive");
|
||||||
socket->writeData(msg, sizeof(msg));
|
socket->writeData(msg, sizeof(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@ PeerInteractionCommand::PeerInteractionCommand(int cuid, Peer* peer,
|
||||||
piece = Piece::nullPiece;
|
piece = Piece::nullPiece;
|
||||||
keepAliveCheckPoint.tv_sec = 0;
|
keepAliveCheckPoint.tv_sec = 0;
|
||||||
keepAliveCheckPoint.tv_usec = 0;
|
keepAliveCheckPoint.tv_usec = 0;
|
||||||
|
chokeCheckPoint.tv_sec = 0;
|
||||||
|
chokeCheckPoint.tv_usec = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerInteractionCommand::~PeerInteractionCommand() {
|
PeerInteractionCommand::~PeerInteractionCommand() {
|
||||||
|
@ -95,6 +97,7 @@ bool PeerInteractionCommand::executeInternal() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WIRED:
|
case WIRED:
|
||||||
|
checkLongTimePeerChoking();
|
||||||
syncPiece();
|
syncPiece();
|
||||||
decideChoking();
|
decideChoking();
|
||||||
for(int i = 0; i < 10; i++) {
|
for(int i = 0; i < 10; i++) {
|
||||||
|
@ -116,6 +119,28 @@ bool PeerInteractionCommand::executeInternal() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PeerInteractionCommand::checkLongTimePeerChoking() {
|
||||||
|
if(e->torrentMan->downloadComplete()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
struct timeval now;
|
||||||
|
gettimeofday(&now, NULL);
|
||||||
|
if(chokeCheckPoint.tv_sec == 0 && chokeCheckPoint.tv_usec == 0) {
|
||||||
|
if(peer->amInterested && peer->peerChoking) {
|
||||||
|
chokeCheckPoint = now;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(peer->amInterested && peer->peerChoking) {
|
||||||
|
if(Util::difftv(now, chokeCheckPoint) >= 5*60*1000000) {
|
||||||
|
throw new DlAbortEx("too long choking");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
chokeCheckPoint.tv_sec = 0;
|
||||||
|
chokeCheckPoint.tv_usec = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PeerInteractionCommand::syncPiece() {
|
void PeerInteractionCommand::syncPiece() {
|
||||||
if(Piece::isNull(piece)) {
|
if(Piece::isNull(piece)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -37,7 +37,9 @@ private:
|
||||||
PendingMessages pendingMessages;
|
PendingMessages pendingMessages;
|
||||||
Piece piece;
|
Piece piece;
|
||||||
struct timeval keepAliveCheckPoint;
|
struct timeval keepAliveCheckPoint;
|
||||||
|
struct timeval chokeCheckPoint;
|
||||||
void receiveMessage();
|
void receiveMessage();
|
||||||
|
void checkLongTimePeerChoking();
|
||||||
void syncPiece();
|
void syncPiece();
|
||||||
void detectTimeoutAndDuplicateBlock();
|
void detectTimeoutAndDuplicateBlock();
|
||||||
void decideChoking();
|
void decideChoking();
|
||||||
|
|
|
@ -40,10 +40,13 @@ int PeerListenCommand::bindPort(int portRangeStart, int portRangeEnd) {
|
||||||
try {
|
try {
|
||||||
socket = new Socket();
|
socket = new Socket();
|
||||||
socket->beginListen(port);
|
socket->beginListen(port);
|
||||||
|
e->logger->info("CUID#%d - using port %d for accepting new connections",
|
||||||
|
cuid, port);
|
||||||
return port;
|
return port;
|
||||||
} catch(Exception* ex) {
|
} catch(Exception* ex) {
|
||||||
e->logger->error("CUID#%d - an error occurred while binding port=%d",
|
e->logger->error("CUID#%d - an error occurred while binding port=%d",
|
||||||
cuid, port);
|
ex, cuid, port);
|
||||||
|
delete ex;
|
||||||
delete socket;
|
delete socket;
|
||||||
socket = NULL;
|
socket = NULL;
|
||||||
}
|
}
|
||||||
|
@ -76,7 +79,7 @@ bool PeerListenCommand::execute() {
|
||||||
}
|
}
|
||||||
delete peerSocket;
|
delete peerSocket;
|
||||||
} catch(Exception* ex) {
|
} catch(Exception* ex) {
|
||||||
e->logger->error("CUID#%d - error in accepting connection", cuid, ex);
|
e->logger->error("CUID#%d - error in accepting connection", ex, cuid);
|
||||||
delete ex;
|
delete ex;
|
||||||
if(peerSocket != NULL) {
|
if(peerSocket != NULL) {
|
||||||
delete peerSocket;
|
delete peerSocket;
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
|
|
||||||
Request::Request():port(0), tryCount(0), isTorrent(false) {
|
Request::Request():port(0), tryCount(0), isTorrent(false) {
|
||||||
defaultPorts["http"] = 80;
|
defaultPorts["http"] = 80;
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SSL
|
||||||
// for SSL
|
// for SSL
|
||||||
defaultPorts["https"] = 443;
|
defaultPorts["https"] = 443;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SSL
|
||||||
defaultPorts["ftp"] = 21;
|
defaultPorts["ftp"] = 21;
|
||||||
seg.sp = 0;
|
seg.sp = 0;
|
||||||
seg.ep = 0;
|
seg.ep = 0;
|
||||||
|
|
|
@ -68,7 +68,8 @@ void RequestSlotMan::deleteTimedoutRequestSlot(Piece& piece) {
|
||||||
void RequestSlotMan::deleteCompletedRequestSlot(const Piece& piece) {
|
void RequestSlotMan::deleteCompletedRequestSlot(const Piece& piece) {
|
||||||
for(RequestSlots::iterator itr = requestSlots.begin();
|
for(RequestSlots::iterator itr = requestSlots.begin();
|
||||||
itr != requestSlots.end();) {
|
itr != requestSlots.end();) {
|
||||||
if(Piece::isNull(piece) || piece.hasBlock(itr->getBlockIndex())) {
|
if(Piece::isNull(piece) || piece.hasBlock(itr->getBlockIndex()) ||
|
||||||
|
torrentMan->hasPiece(piece.getIndex())) {
|
||||||
logger->debug("CUID#%d - deleting requestslot blockIndex %d because the block is already acquired.", cuid,
|
logger->debug("CUID#%d - deleting requestslot blockIndex %d because the block is already acquired.", cuid,
|
||||||
itr->getBlockIndex());
|
itr->getBlockIndex());
|
||||||
PendingMessage pendingMessage =
|
PendingMessage pendingMessage =
|
||||||
|
|
|
@ -23,58 +23,58 @@
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
|
|
||||||
ShaVisitor::ShaVisitor() {
|
ShaVisitor::ShaVisitor() {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_MD_CTX_init(&ctx);
|
sha1DigestInit(ctx);
|
||||||
EVP_DigestInit_ex(&ctx, EVP_sha1(), NULL);
|
sha1DigestReset(ctx);
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaVisitor::~ShaVisitor() {
|
ShaVisitor::~ShaVisitor() {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_MD_CTX_cleanup(&ctx);
|
sha1DigestFree(ctx);
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaVisitor::visit(const Data* d) {
|
void ShaVisitor::visit(const Data* d) {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
if(d->isNumber()) {
|
if(d->isNumber()) {
|
||||||
EVP_DigestUpdate(&ctx, "i", 1);
|
sha1DigestUpdate(ctx, "i", 1);
|
||||||
} else {
|
} else {
|
||||||
string lenStr = Util::llitos(d->getLen());
|
string lenStr = Util::llitos(d->getLen());
|
||||||
EVP_DigestUpdate(&ctx, lenStr.c_str(), lenStr.size());
|
sha1DigestUpdate(ctx, lenStr.c_str(), lenStr.size());
|
||||||
EVP_DigestUpdate(&ctx, ":", 1);
|
sha1DigestUpdate(ctx, ":", 1);
|
||||||
}
|
}
|
||||||
EVP_DigestUpdate(&ctx, d->getData(), d->getLen());
|
sha1DigestUpdate(ctx, d->getData(), d->getLen());
|
||||||
if(d->isNumber()) {
|
if(d->isNumber()) {
|
||||||
EVP_DigestUpdate(&ctx, "e", 1);
|
sha1DigestUpdate(ctx, "e", 1);
|
||||||
}
|
}
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaVisitor::visit(const Dictionary* d) {
|
void ShaVisitor::visit(const Dictionary* d) {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_DigestUpdate(&ctx, "d", 1);
|
sha1DigestUpdate(ctx, "d", 1);
|
||||||
const Order& v = d->getOrder();
|
const Order& v = d->getOrder();
|
||||||
for(Order::const_iterator itr = v.begin(); itr != v.end(); itr++) {
|
for(Order::const_iterator itr = v.begin(); itr != v.end(); itr++) {
|
||||||
string lenStr = Util::llitos(itr->size());
|
string lenStr = Util::llitos(itr->size());
|
||||||
EVP_DigestUpdate(&ctx, lenStr.c_str(), lenStr.size());
|
sha1DigestUpdate(ctx, lenStr.c_str(), lenStr.size());
|
||||||
EVP_DigestUpdate(&ctx, ":", 1);
|
sha1DigestUpdate(ctx, ":", 1);
|
||||||
EVP_DigestUpdate(&ctx, itr->c_str(), itr->size());
|
sha1DigestUpdate(ctx, itr->c_str(), itr->size());
|
||||||
const MetaEntry* e = d->get(*itr);
|
const MetaEntry* e = d->get(*itr);
|
||||||
this->visit(e);
|
this->visit(e);
|
||||||
}
|
}
|
||||||
EVP_DigestUpdate(&ctx, "e", 1);
|
sha1DigestUpdate(ctx, "e", 1);
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaVisitor::visit(const List* l) {
|
void ShaVisitor::visit(const List* l) {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_DigestUpdate(&ctx, "l", 1);
|
sha1DigestUpdate(ctx, "l", 1);
|
||||||
for(MetaList::const_iterator itr = l->getList().begin(); itr != l->getList().end(); itr++) {
|
for(MetaList::const_iterator itr = l->getList().begin(); itr != l->getList().end(); itr++) {
|
||||||
this->visit(*itr);
|
this->visit(*itr);
|
||||||
}
|
}
|
||||||
EVP_DigestUpdate(&ctx, "e", 1);
|
sha1DigestUpdate(ctx, "e", 1);
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaVisitor::visit(const MetaEntry* e) {
|
void ShaVisitor::visit(const MetaEntry* e) {
|
||||||
|
@ -88,7 +88,8 @@ void ShaVisitor::visit(const MetaEntry* e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaVisitor::getHash(unsigned char* hashValue, int& len) {
|
void ShaVisitor::getHash(unsigned char* hashValue, int& len) {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_DigestFinal_ex(&ctx, hashValue, (unsigned int*)&len);
|
sha1DigestFinal(ctx, hashValue);
|
||||||
#endif // HAVE_LIBSSL
|
len = 20;
|
||||||
|
#endif // ENABLE_SHA1DIGEST
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,15 +27,15 @@
|
||||||
#include "Dictionary.h"
|
#include "Dictionary.h"
|
||||||
#include "List.h"
|
#include "List.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
#include <openssl/evp.h>
|
#include "messageDigest.h"
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
|
|
||||||
class ShaVisitor : public MetaEntryVisitor {
|
class ShaVisitor : public MetaEntryVisitor {
|
||||||
private:
|
private:
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_SHA1DIGEST
|
||||||
EVP_MD_CTX ctx;
|
MessageDigestContext ctx;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_SHA1DIGEST
|
||||||
public:
|
public:
|
||||||
ShaVisitor();
|
ShaVisitor();
|
||||||
~ShaVisitor();
|
~ShaVisitor();
|
||||||
|
|
|
@ -25,6 +25,18 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define WRITE_LOG(LEVEL, MSG) \
|
||||||
|
va_list ap;\
|
||||||
|
va_start(ap, MSG);\
|
||||||
|
writeLog(Logger::LEVEL, MSG, ap);\
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
|
#define WRITE_LOG_EX(LEVEL, MSG, EX) \
|
||||||
|
va_list ap;\
|
||||||
|
va_start(ap, EX);\
|
||||||
|
writeLog(Logger::LEVEL, MSG, ap, EX);\
|
||||||
|
va_end(ap);
|
||||||
|
|
||||||
SimpleLogger::SimpleLogger(string filename) {
|
SimpleLogger::SimpleLogger(string filename) {
|
||||||
file = fopen(filename.c_str(), "a");
|
file = fopen(filename.c_str(), "a");
|
||||||
}
|
}
|
||||||
|
@ -43,13 +55,16 @@ void SimpleLogger::writeLog(int level, const char* msg, va_list ap, Exception* e
|
||||||
{
|
{
|
||||||
string levelStr;
|
string levelStr;
|
||||||
switch(level) {
|
switch(level) {
|
||||||
case DEBUG:
|
case Logger::DEBUG:
|
||||||
levelStr = "DEBUG";
|
levelStr = "DEBUG";
|
||||||
break;
|
break;
|
||||||
case ERROR:
|
case Logger::WARN:
|
||||||
|
levelStr = "WARN";
|
||||||
|
break;
|
||||||
|
case Logger::ERROR:
|
||||||
levelStr = "ERROR";
|
levelStr = "ERROR";
|
||||||
break;
|
break;
|
||||||
case INFO:
|
case Logger::INFO:
|
||||||
default:
|
default:
|
||||||
levelStr = "INFO";
|
levelStr = "INFO";
|
||||||
}
|
}
|
||||||
|
@ -65,47 +80,35 @@ void SimpleLogger::writeLog(int level, const char* msg, va_list ap, Exception* e
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleLogger::debug(const char* msg, ...) const {
|
void SimpleLogger::debug(const char* msg, ...) const {
|
||||||
va_list ap;
|
WRITE_LOG(DEBUG, msg);
|
||||||
va_start(ap, msg);
|
|
||||||
writeLog(DEBUG, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleLogger::debug(const char* msg, Exception* e, ...) const {
|
void SimpleLogger::debug(const char* msg, Exception* e, ...) const {
|
||||||
va_list ap;
|
WRITE_LOG_EX(DEBUG, msg, e);
|
||||||
va_start(ap, e);
|
|
||||||
writeLog(DEBUG, msg, ap, e);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SimpleLogger::info(const char* msg, ...) const {
|
void SimpleLogger::info(const char* msg, ...) const {
|
||||||
va_list ap;
|
WRITE_LOG(INFO, msg);
|
||||||
va_start(ap, msg);
|
|
||||||
writeLog(INFO, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleLogger::info(const char* msg, Exception* e, ...) const {
|
void SimpleLogger::info(const char* msg, Exception* e, ...) const {
|
||||||
va_list ap;
|
WRITE_LOG_EX(INFO, msg, e);
|
||||||
va_start(ap, e);
|
|
||||||
writeLog(INFO, msg, ap, e);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SimpleLogger::warn(const char* msg, ...) const {
|
||||||
|
WRITE_LOG(WARN, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimpleLogger::warn(const char* msg, Exception* e, ...) const {
|
||||||
|
WRITE_LOG_EX(WARN, msg, e);
|
||||||
|
}
|
||||||
|
|
||||||
void SimpleLogger::error(const char* msg, ...) const {
|
void SimpleLogger::error(const char* msg, ...) const {
|
||||||
va_list ap;
|
WRITE_LOG(ERROR, msg);
|
||||||
va_start(ap, msg);
|
|
||||||
writeLog(ERROR, msg, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SimpleLogger::error(const char* msg, Exception* e, ...) const {
|
void SimpleLogger::error(const char* msg, Exception* e, ...) const {
|
||||||
va_list ap;
|
WRITE_LOG_EX(ERROR, msg, e);
|
||||||
va_start(ap, e);
|
|
||||||
writeLog(ERROR, msg, ap, e);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,6 @@
|
||||||
|
|
||||||
class SimpleLogger:public Logger {
|
class SimpleLogger:public Logger {
|
||||||
private:
|
private:
|
||||||
enum LEVEL {
|
|
||||||
DEBUG,
|
|
||||||
INFO,
|
|
||||||
ERROR};
|
|
||||||
void writeLog(int level, const char* msg, va_list ap, Exception* e = NULL) const;
|
void writeLog(int level, const char* msg, va_list ap, Exception* e = NULL) const;
|
||||||
FILE* file;
|
FILE* file;
|
||||||
public:
|
public:
|
||||||
|
@ -41,6 +37,8 @@ public:
|
||||||
void debug(const char* msg, Exception* ex, ...) const;
|
void debug(const char* msg, Exception* ex, ...) const;
|
||||||
void info(const char* msg, ...) const;
|
void info(const char* msg, ...) const;
|
||||||
void info(const char* msg, Exception* ex, ...) const;
|
void info(const char* msg, Exception* ex, ...) const;
|
||||||
|
void warn(const char* msg, ...) const;
|
||||||
|
void warn(const char* msg, Exception* ex, ...) const;
|
||||||
void error(const char* msg, ...) const;
|
void error(const char* msg, ...) const;
|
||||||
void error(const char* msg, Exception* ex, ...) const;
|
void error(const char* msg, Exception* ex, ...) const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -50,10 +50,20 @@ void SocketCore::init() {
|
||||||
sslCtx = NULL;
|
sslCtx = NULL;
|
||||||
ssl = NULL;
|
ssl = NULL;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
sslSession = NULL;
|
||||||
|
sslXcred = NULL;
|
||||||
|
peekBufMax = 4096;
|
||||||
|
peekBuf = new char[peekBufMax];
|
||||||
|
peekBufLength = 0;
|
||||||
|
#endif //HAVE_LIBGNUTLS
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketCore::~SocketCore() {
|
SocketCore::~SocketCore() {
|
||||||
closeConnection();
|
closeConnection();
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
delete [] peekBuf;
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
}
|
}
|
||||||
|
|
||||||
void SocketCore::beginListen(int port) {
|
void SocketCore::beginListen(int port) {
|
||||||
|
@ -170,23 +180,32 @@ void SocketCore::setBlockingMode() const {
|
||||||
void SocketCore::closeConnection() {
|
void SocketCore::closeConnection() {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
// for SSL
|
// for SSL
|
||||||
if(secure && ssl != NULL) {
|
if(secure) {
|
||||||
SSL_shutdown(ssl);
|
SSL_shutdown(ssl);
|
||||||
}
|
}
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(secure) {
|
||||||
|
gnutls_bye(sslSession, GNUTLS_SHUT_RDWR);
|
||||||
|
}
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
if(sockfd != -1) {
|
if(sockfd != -1) {
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
sockfd = -1;
|
sockfd = -1;
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
// for SSL
|
// for SSL
|
||||||
if(secure && ssl != NULL) {
|
if(secure) {
|
||||||
SSL_free(ssl);
|
SSL_free(ssl);
|
||||||
SSL_CTX_free(sslCtx);
|
SSL_CTX_free(sslCtx);
|
||||||
ssl = NULL;
|
|
||||||
sslCtx = NULL;
|
|
||||||
}
|
}
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(secure) {
|
||||||
|
gnutls_deinit(sslSession);
|
||||||
|
gnutls_certificate_free_credentials(sslXcred);
|
||||||
|
}
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SocketCore::isWritable(int timeout) const {
|
bool SocketCore::isWritable(int timeout) const {
|
||||||
|
@ -214,6 +233,11 @@ bool SocketCore::isWritable(int timeout) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SocketCore::isReadable(int timeout) const {
|
bool SocketCore::isReadable(int timeout) const {
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(peekBufLength > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
fd_set fds;
|
fd_set fds;
|
||||||
FD_ZERO(&fds);
|
FD_ZERO(&fds);
|
||||||
FD_SET(sockfd, &fds);
|
FD_SET(sockfd, &fds);
|
||||||
|
@ -237,41 +261,145 @@ bool SocketCore::isReadable(int timeout) const {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SocketCore::writeData(const char* data, int len, int timeout) const {
|
void SocketCore::writeData(const char* data, int len, int timeout) {
|
||||||
if(!secure && send(sockfd, data, (size_t)len, 0) != len
|
int ret = 0;
|
||||||
|
if(!secure && (ret = send(sockfd, data, (size_t)len, 0)) != len
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
// for SSL
|
// for SSL
|
||||||
// TODO handling len == 0 case required
|
// TODO handling len == 0 case required
|
||||||
|| secure && SSL_write(ssl, data, len) != len
|
|| secure && (ret = SSL_write(ssl, data, len)) != len
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
|| secure && (ret = gnutls_record_send(sslSession, data, len)) != len
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
) {
|
) {
|
||||||
throw new DlRetryEx(strerror(errno));
|
const char* errorMsg;
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(secure) {
|
||||||
|
errorMsg = gnutls_strerror(ret);
|
||||||
|
} else {
|
||||||
|
errorMsg = strerror(errno);
|
||||||
|
}
|
||||||
|
#else // HAVE_LIBGNUTLS
|
||||||
|
errorMsg = strerror(errno);
|
||||||
|
#endif
|
||||||
|
throw new DlRetryEx(errorMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SocketCore::readData(char* data, int& len, int timeout) const {
|
void SocketCore::readData(char* data, int& len, int timeout) {
|
||||||
if(!secure && (len = recv(sockfd, data, (size_t)len, 0)) < 0
|
int ret = 0;
|
||||||
|
if(!secure && (ret = recv(sockfd, data, (size_t)len, 0)) < 0
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
// for SSL
|
// for SSL
|
||||||
// TODO handling len == 0 case required
|
// TODO handling len == 0 case required
|
||||||
|| secure && (len = SSL_read(ssl, data, len)) < 0
|
|| secure && (ret = SSL_read(ssl, data, len)) < 0
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
|| secure && (ret = gnutlsRecv(data, len)) < 0
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
) {
|
) {
|
||||||
throw new DlRetryEx(strerror(errno));
|
const char* errorMsg;
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(secure) {
|
||||||
|
errorMsg = gnutls_strerror(ret);
|
||||||
|
} else {
|
||||||
|
errorMsg = strerror(errno);
|
||||||
|
}
|
||||||
|
#else // HAVE_LIBGNUTLS
|
||||||
|
errorMsg = strerror(errno);
|
||||||
|
#endif
|
||||||
|
throw new DlRetryEx(errorMsg);
|
||||||
|
}
|
||||||
|
len = ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SocketCore::peekData(char* data, int& len, int timeout) {
|
||||||
|
int ret = 0;
|
||||||
|
if(!secure && (ret = recv(sockfd, data, (size_t)len, MSG_PEEK)) < 0
|
||||||
|
#ifdef HAVE_LIBSSL
|
||||||
|
// for SSL
|
||||||
|
// TODO handling len == 0 case required
|
||||||
|
|| secure && (ret = SSL_peek(ssl, data, len)) < 0
|
||||||
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
|| secure && (ret = gnutlsPeek(data, len)) < 0
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
|
) {
|
||||||
|
const char* errorMsg;
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(secure) {
|
||||||
|
errorMsg = gnutls_strerror(ret);
|
||||||
|
} else {
|
||||||
|
errorMsg = strerror(errno);
|
||||||
|
}
|
||||||
|
#else // HAVE_LIBGNUTLS
|
||||||
|
errorMsg = strerror(errno);
|
||||||
|
#endif
|
||||||
|
throw new DlRetryEx(errorMsg);
|
||||||
|
}
|
||||||
|
len = ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
int SocketCore::shiftPeekData(char* data, int len) {
|
||||||
|
if(peekBufLength <= len) {
|
||||||
|
memcpy(data, peekBuf, peekBufLength);
|
||||||
|
int ret = peekBufLength;
|
||||||
|
peekBufLength = 0;
|
||||||
|
return ret;
|
||||||
|
} else {
|
||||||
|
memcpy(data, peekBuf, len);
|
||||||
|
char* temp = new char[peekBufMax];
|
||||||
|
memcpy(temp, peekBuf+len, peekBufLength-len);
|
||||||
|
delete [] peekBuf;
|
||||||
|
peekBuf = temp;
|
||||||
|
peekBufLength -= len;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SocketCore::addPeekData(char* data, int len) {
|
||||||
|
if(peekBufLength+len > peekBufMax) {
|
||||||
|
char* temp = new char[peekBufMax+len];
|
||||||
|
memcpy(temp, peekBuf, peekBufLength);
|
||||||
|
delete [] peekBuf;
|
||||||
|
peekBuf = temp;
|
||||||
|
peekBufMax = peekBufLength+len;
|
||||||
|
}
|
||||||
|
memcpy(peekBuf+peekBufLength, data, len);
|
||||||
|
peekBufLength += len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SocketCore::gnutlsRecv(char* data, int len) {
|
||||||
|
int plen = shiftPeekData(data, len);
|
||||||
|
if(plen < len) {
|
||||||
|
int ret = gnutls_record_recv(sslSession, data+plen, len-plen);
|
||||||
|
if(ret < 0) {
|
||||||
|
throw new DlRetryEx(gnutls_strerror(ret));
|
||||||
|
}
|
||||||
|
return plen+ret;
|
||||||
|
} else {
|
||||||
|
return plen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SocketCore::peekData(char* data, int& len, int timeout) const {
|
int SocketCore::gnutlsPeek(char* data, int len) {
|
||||||
if(!secure && (len = recv(sockfd, data, (size_t)len, MSG_PEEK)) < 0
|
if(peekBufLength >= len) {
|
||||||
#ifdef HAVE_LIBSSL
|
memcpy(data, peekBuf, len);
|
||||||
// for SSL
|
return len;
|
||||||
// TODO handling len == 0 case required
|
} else {
|
||||||
|| secure && (len == SSL_peek(ssl, data, len)) < 0
|
memcpy(data, peekBuf, peekBufLength);
|
||||||
#endif // HAVE_LIBSSL
|
int ret = gnutls_record_recv(sslSession, data+peekBufLength, len-peekBufLength);
|
||||||
) {
|
if(ret < 0) {
|
||||||
throw new DlRetryEx(strerror(errno));
|
throw new DlRetryEx(gnutls_strerror(ret));
|
||||||
|
}
|
||||||
|
addPeekData(data+peekBufLength, ret);
|
||||||
|
return peekBufLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
|
|
||||||
void SocketCore::initiateSecureConnection() {
|
void SocketCore::initiateSecureConnection() {
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
|
@ -296,5 +424,26 @@ void SocketCore::initiateSecureConnection() {
|
||||||
secure = true;
|
secure = true;
|
||||||
}
|
}
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
if(!secure) {
|
||||||
|
const int cert_type_priority[3] = { GNUTLS_CRT_X509,
|
||||||
|
GNUTLS_CRT_OPENPGP, 0
|
||||||
|
};
|
||||||
|
// while we do not support X509 certificate, most web servers require
|
||||||
|
// X509 stuff.
|
||||||
|
gnutls_certificate_allocate_credentials (&sslXcred);
|
||||||
|
gnutls_init(&sslSession, GNUTLS_CLIENT);
|
||||||
|
gnutls_set_default_priority(sslSession);
|
||||||
|
gnutls_kx_set_priority(sslSession, cert_type_priority);
|
||||||
|
// put the x509 credentials to the current session
|
||||||
|
gnutls_credentials_set(sslSession, GNUTLS_CRD_CERTIFICATE, sslXcred);
|
||||||
|
gnutls_transport_set_ptr(sslSession, (gnutls_transport_ptr_t)sockfd);
|
||||||
|
int ret = gnutls_handshake(sslSession);
|
||||||
|
if(ret < 0) {
|
||||||
|
throw new DlAbortEx(gnutls_strerror(ret));
|
||||||
|
}
|
||||||
|
secure = true;
|
||||||
|
}
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
// for SSL
|
// for SSL
|
||||||
# include <openssl/ssl.h>
|
# include <openssl/ssl.h>
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
# include <gnutls/gnutls.h>
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -46,6 +49,19 @@ private:
|
||||||
SSL_CTX* sslCtx;
|
SSL_CTX* sslCtx;
|
||||||
SSL* ssl;
|
SSL* ssl;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
gnutls_session_t sslSession;
|
||||||
|
gnutls_certificate_credentials_t sslXcred;
|
||||||
|
char* peekBuf;
|
||||||
|
int peekBufLength;
|
||||||
|
int peekBufMax;
|
||||||
|
|
||||||
|
int shiftPeekData(char* data, int len);
|
||||||
|
void addPeekData(char* data, int len);
|
||||||
|
int gnutlsRecv(char* data, int len);
|
||||||
|
int gnutlsPeek(char* data, int len);
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
SocketCore(int sockfd);
|
SocketCore(int sockfd);
|
||||||
public:
|
public:
|
||||||
|
@ -126,7 +142,7 @@ public:
|
||||||
* @param timeout the amount of time elapsed before isWritable()
|
* @param timeout the amount of time elapsed before isWritable()
|
||||||
* are timed out.
|
* are timed out.
|
||||||
*/
|
*/
|
||||||
void writeData(const char* data, int len, int timeout = 0) const;
|
void writeData(const char* data, int len, int timeout = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads up to len bytes from this socket.
|
* Reads up to len bytes from this socket.
|
||||||
|
@ -142,7 +158,7 @@ public:
|
||||||
* @param timeout the amount of time elapsed before isReadable() are timed
|
* @param timeout the amount of time elapsed before isReadable() are timed
|
||||||
* out.
|
* out.
|
||||||
*/
|
*/
|
||||||
void readData(char* data, int& len, int timeout = 0) const;
|
void readData(char* data, int& len, int timeout = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads up to len bytes from this socket, but bytes are not removed from
|
* Reads up to len bytes from this socket, but bytes are not removed from
|
||||||
|
@ -155,7 +171,7 @@ public:
|
||||||
* @param timeout the amount of time elapsed before isReadable() are timed
|
* @param timeout the amount of time elapsed before isReadable() are timed
|
||||||
* out.
|
* out.
|
||||||
*/
|
*/
|
||||||
void peekData(char* data, int& len, int timeout = 0) const;
|
void peekData(char* data, int& len, int timeout = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes this socket secure.
|
* Makes this socket secure.
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
|
|
||||||
class TorrentAutoSaveCommand : public Command {
|
class TorrentAutoSaveCommand : public Command {
|
||||||
private:
|
private:
|
||||||
int cuid;
|
|
||||||
TorrentDownloadEngine* e;
|
TorrentDownloadEngine* e;
|
||||||
int interval;
|
int interval;
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -39,6 +39,7 @@ TorrentMan::TorrentMan():bitfield(NULL),
|
||||||
deltaDownload(0), deltaUpload(0),
|
deltaDownload(0), deltaUpload(0),
|
||||||
storeDir("."),
|
storeDir("."),
|
||||||
multiFileTopDir(NULL),
|
multiFileTopDir(NULL),
|
||||||
|
setupComplete(false),
|
||||||
interval(DEFAULT_ANNOUNCE_INTERVAL),
|
interval(DEFAULT_ANNOUNCE_INTERVAL),
|
||||||
minInterval(DEFAULT_ANNOUNCE_MIN_INTERVAL),
|
minInterval(DEFAULT_ANNOUNCE_MIN_INTERVAL),
|
||||||
complete(0), incomplete(0),
|
complete(0), incomplete(0),
|
||||||
|
@ -65,9 +66,6 @@ void TorrentMan::updatePeers(const Peers& peers) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentMan::addPeer(Peer* peer, bool duplicate) {
|
bool TorrentMan::addPeer(Peer* peer, bool duplicate) {
|
||||||
if(peers.size() >= MAX_PEER_LIST_SIZE) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if(duplicate) {
|
if(duplicate) {
|
||||||
for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) {
|
for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) {
|
||||||
Peer* p = *itr;
|
Peer* p = *itr;
|
||||||
|
@ -76,6 +74,12 @@ bool TorrentMan::addPeer(Peer* peer, bool duplicate) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if(peers.size() >= MAX_PEER_LIST_SIZE) {
|
||||||
|
deleteOldErrorPeers(100);
|
||||||
|
if(peers.size() >= MAX_PEER_LIST_SIZE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) {
|
for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) {
|
||||||
Peer* p = *itr;
|
Peer* p = *itr;
|
||||||
if(p->ipaddr == peer->ipaddr && p->port == peer->port) {
|
if(p->ipaddr == peer->ipaddr && p->port == peer->port) {
|
||||||
|
@ -378,6 +382,7 @@ void TorrentMan::setup(string metaInfoFile) {
|
||||||
} else {
|
} else {
|
||||||
diskWriter->initAndOpenFile(getTempFilePath());
|
diskWriter->initAndOpenFile(getTempFilePath());
|
||||||
}
|
}
|
||||||
|
setupComplete = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentMan::hasPiece(int index) const {
|
bool TorrentMan::hasPiece(int index) const {
|
||||||
|
@ -458,7 +463,7 @@ void TorrentMan::read(FILE* file) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TorrentMan::save() const {
|
void TorrentMan::save() const {
|
||||||
if(downloadedSize == 0) {
|
if(!setupComplete) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
string segFilename = getSegmentFilePath();
|
string segFilename = getSegmentFilePath();
|
||||||
|
|
|
@ -42,8 +42,8 @@ using namespace std;
|
||||||
|
|
||||||
#define IS_NULL_PIECE(X) (X.index == 0 && X.length == 0)
|
#define IS_NULL_PIECE(X) (X.index == 0 && X.length == 0)
|
||||||
|
|
||||||
#define DEFAULT_ANNOUNCE_INTERVAL 120
|
#define DEFAULT_ANNOUNCE_INTERVAL 300
|
||||||
#define DEFAULT_ANNOUNCE_MIN_INTERVAL 120
|
#define DEFAULT_ANNOUNCE_MIN_INTERVAL 300
|
||||||
#define MAX_PEERS 55
|
#define MAX_PEERS 55
|
||||||
#define MAX_PEER_UPDATE 15
|
#define MAX_PEER_UPDATE 15
|
||||||
|
|
||||||
|
@ -83,6 +83,7 @@ private:
|
||||||
UsedPieces usedPieces;
|
UsedPieces usedPieces;
|
||||||
Directory* multiFileTopDir;
|
Directory* multiFileTopDir;
|
||||||
MultiFileEntries multiFileEntries;
|
MultiFileEntries multiFileEntries;
|
||||||
|
bool setupComplete;
|
||||||
|
|
||||||
FILE* openSegFile(string segFilename, string mode) const;
|
FILE* openSegFile(string segFilename, string mode) const;
|
||||||
void read(FILE* file);
|
void read(FILE* file);
|
||||||
|
|
|
@ -34,7 +34,11 @@ bool TrackerInitCommand::execute() {
|
||||||
if(req->getTrackerEvent() == Request::COMPLETED) {
|
if(req->getTrackerEvent() == Request::COMPLETED) {
|
||||||
req->setTrackerEvent(Request::AFTER_COMPLETED);
|
req->setTrackerEvent(Request::AFTER_COMPLETED);
|
||||||
} else {
|
} else {
|
||||||
req->setTrackerEvent(Request::COMPLETED);
|
if(req->getTrackerEvent() == Request::STARTED) {
|
||||||
|
req->setTrackerEvent(Request::AFTER_COMPLETED);
|
||||||
|
} else if(req->getTrackerEvent() != Request::AFTER_COMPLETED) {
|
||||||
|
req->setTrackerEvent(Request::COMPLETED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
string event;
|
string event;
|
||||||
|
|
|
@ -20,10 +20,8 @@
|
||||||
*/
|
*/
|
||||||
/* copyright --> */
|
/* copyright --> */
|
||||||
#include "TrackerUpdateCommand.h"
|
#include "TrackerUpdateCommand.h"
|
||||||
#include "TrackerInitCommand.h"
|
|
||||||
#include "PeerInitiateConnectionCommand.h"
|
#include "PeerInitiateConnectionCommand.h"
|
||||||
#include "PeerListenCommand.h"
|
#include "PeerListenCommand.h"
|
||||||
#include "SleepCommand.h"
|
|
||||||
#include "Dictionary.h"
|
#include "Dictionary.h"
|
||||||
#include "Data.h"
|
#include "Data.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
|
@ -40,8 +38,6 @@ TrackerUpdateCommand::~TrackerUpdateCommand() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TrackerUpdateCommand::execute() {
|
bool TrackerUpdateCommand::execute() {
|
||||||
//e->torrentMan->deleteOldErrorPeers(25);
|
|
||||||
|
|
||||||
Dictionary* response = (Dictionary*)trackerResponse;
|
Dictionary* response = (Dictionary*)trackerResponse;
|
||||||
Data* failureReason = (Data*)response->get("failure reason");
|
Data* failureReason = (Data*)response->get("failure reason");
|
||||||
if(failureReason != NULL) {
|
if(failureReason != NULL) {
|
||||||
|
@ -49,7 +45,7 @@ bool TrackerUpdateCommand::execute() {
|
||||||
}
|
}
|
||||||
Data* warningMessage = (Data*)response->get("warning message");
|
Data* warningMessage = (Data*)response->get("warning message");
|
||||||
if(warningMessage != NULL) {
|
if(warningMessage != NULL) {
|
||||||
e->logger->info(MSG_TRACKER_WARNING_MESSAGE, cuid, warningMessage->toString().c_str());
|
e->logger->warn(MSG_TRACKER_WARNING_MESSAGE, cuid, warningMessage->toString().c_str());
|
||||||
}
|
}
|
||||||
Data* trackerId = (Data*)response->get("tracker id");
|
Data* trackerId = (Data*)response->get("tracker id");
|
||||||
if(trackerId != NULL) {
|
if(trackerId != NULL) {
|
||||||
|
@ -77,35 +73,29 @@ bool TrackerUpdateCommand::execute() {
|
||||||
e->logger->debug("CUID#%d - incomplete:%d", cuid, e->torrentMan->incomplete);
|
e->logger->debug("CUID#%d - incomplete:%d", cuid, e->torrentMan->incomplete);
|
||||||
}
|
}
|
||||||
Data* peers = (Data*)response->get("peers");
|
Data* peers = (Data*)response->get("peers");
|
||||||
for(int i = 0; i < peers->getLen(); i += 6) {
|
if(peers != NULL) {
|
||||||
unsigned int ipaddr1 = (unsigned char)*(peers->getData()+i);
|
for(int i = 0; i < peers->getLen(); i += 6) {
|
||||||
unsigned int ipaddr2 = (unsigned char)*(peers->getData()+i+1);
|
unsigned int ipaddr1 = (unsigned char)*(peers->getData()+i);
|
||||||
unsigned int ipaddr3 = (unsigned char)*(peers->getData()+i+2);
|
unsigned int ipaddr2 = (unsigned char)*(peers->getData()+i+1);
|
||||||
unsigned int ipaddr4 = (unsigned char)*(peers->getData()+i+3);
|
unsigned int ipaddr3 = (unsigned char)*(peers->getData()+i+2);
|
||||||
//unsigned short int nPort = 0;
|
unsigned int ipaddr4 = (unsigned char)*(peers->getData()+i+3);
|
||||||
//memcpy(&nPort, peers->getData()+i+4, 2);
|
unsigned int port = ntohs(*(unsigned short int*)(peers->getData()+i+4));
|
||||||
unsigned int port = ntohs(*(unsigned short int*)(peers->getData()+i+4));
|
char ipaddr[16];
|
||||||
//unsigned int port = ntohs(nPort);
|
|
||||||
char ipaddr[16];
|
|
||||||
|
|
||||||
snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d",
|
snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d",
|
||||||
ipaddr1, ipaddr2, ipaddr3, ipaddr4);
|
ipaddr1, ipaddr2, ipaddr3, ipaddr4);
|
||||||
Peer* peer = new Peer(ipaddr, port, e->torrentMan->pieceLength,
|
Peer* peer = new Peer(ipaddr, port, e->torrentMan->pieceLength,
|
||||||
e->torrentMan->totalSize);
|
e->torrentMan->totalSize);
|
||||||
if(e->torrentMan->addPeer(peer)) {
|
if(e->torrentMan->addPeer(peer)) {
|
||||||
e->logger->debug("CUID#%d - adding peer %s:%d", cuid,
|
e->logger->debug("CUID#%d - adding peer %s:%d", cuid,
|
||||||
peer->ipaddr.c_str(), peer->port);
|
peer->ipaddr.c_str(), peer->port);
|
||||||
} else {
|
} else {
|
||||||
delete peer;
|
delete peer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
e->logger->info("CUID#%d - no peer list received.", cuid);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if(req->getTrackerEvent() == Request::STARTED) {
|
|
||||||
PeerListenCommand* command = new PeerListenCommand(e->torrentMan->getNewCuid(), e);
|
|
||||||
e->commands.push(command);
|
|
||||||
e->logger->debug("CUID#%d - adding listen command", cuid);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
while(e->torrentMan->isPeerAvailable() &&
|
while(e->torrentMan->isPeerAvailable() &&
|
||||||
e->torrentMan->connections < MAX_PEER_UPDATE) {
|
e->torrentMan->connections < MAX_PEER_UPDATE) {
|
||||||
Peer* peer = e->torrentMan->getPeer();
|
Peer* peer = e->torrentMan->getPeer();
|
||||||
|
@ -115,9 +105,8 @@ bool TrackerUpdateCommand::execute() {
|
||||||
e->commands.push(command);
|
e->commands.push(command);
|
||||||
e->logger->debug("CUID#%d - adding new command CUID#%d", cuid, newCuid);
|
e->logger->debug("CUID#%d - adding new command CUID#%d", cuid, newCuid);
|
||||||
}
|
}
|
||||||
req->setTrackerEvent(Request::AUTO);
|
if(req->getTrackerEvent() == Request::STARTED) {
|
||||||
TrackerInitCommand* command = new TrackerInitCommand(cuid, req, e);
|
req->setTrackerEvent(Request::AUTO);
|
||||||
SleepCommand* slpCommand = new SleepCommand(cuid, e, command, e->torrentMan->minInterval);
|
}
|
||||||
e->commands.push(slpCommand);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
/* <!-- copyright */
|
||||||
|
/*
|
||||||
|
* aria2 - a simple utility for downloading files faster
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Tatsuhiro Tsujikawa
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
/* copyright --> */
|
||||||
|
#include "TrackerWatcherCommand.h"
|
||||||
|
#include "SleepCommand.h"
|
||||||
|
#include "TrackerInitCommand.h"
|
||||||
|
|
||||||
|
TrackerWatcherCommand::TrackerWatcherCommand(int cuid, Request* req,
|
||||||
|
TorrentDownloadEngine* e):
|
||||||
|
Command(cuid), req(req), e(e) {}
|
||||||
|
|
||||||
|
TrackerWatcherCommand::~TrackerWatcherCommand() {}
|
||||||
|
|
||||||
|
bool TrackerWatcherCommand::execute() {
|
||||||
|
Command* command = new TrackerInitCommand(e->torrentMan->getNewCuid(),
|
||||||
|
req,
|
||||||
|
e);
|
||||||
|
e->logger->info("CUID#%d - creating new tracker request command #%d", cuid,
|
||||||
|
command->getCuid());
|
||||||
|
e->commands.push(command);
|
||||||
|
|
||||||
|
SleepCommand* slpCommand = new SleepCommand(cuid, e, this,
|
||||||
|
e->torrentMan->minInterval);
|
||||||
|
e->commands.push(slpCommand);
|
||||||
|
return false;
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* <!-- copyright */
|
||||||
|
/*
|
||||||
|
* aria2 - a simple utility for downloading files faster
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Tatsuhiro Tsujikawa
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
/* copyright --> */
|
||||||
|
#ifndef _D_TRACKER_WATCHER_COMMAND_H_
|
||||||
|
#define _D_TRACKER_WATCHER_COMMAND_H_
|
||||||
|
|
||||||
|
#include "Command.h"
|
||||||
|
#include "TorrentDownloadEngine.h"
|
||||||
|
#include "Request.h"
|
||||||
|
|
||||||
|
class TrackerWatcherCommand : public Command {
|
||||||
|
private:
|
||||||
|
Request* req;
|
||||||
|
TorrentDownloadEngine* e;
|
||||||
|
public:
|
||||||
|
TrackerWatcherCommand(int cuid, Request* req, TorrentDownloadEngine* e);
|
||||||
|
~TrackerWatcherCommand();
|
||||||
|
|
||||||
|
bool execute();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _D_TRACKER_WATCHER_COMMAND_H_
|
40
src/main.cc
40
src/main.cc
|
@ -34,7 +34,7 @@
|
||||||
#include "TrackerInitCommand.h"
|
#include "TrackerInitCommand.h"
|
||||||
#include "PeerListenCommand.h"
|
#include "PeerListenCommand.h"
|
||||||
#include "TorrentAutoSaveCommand.h"
|
#include "TorrentAutoSaveCommand.h"
|
||||||
#include "SleepCommand.h"
|
#include "TrackerWatcherCommand.h"
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -51,6 +51,9 @@ extern int optind, opterr, optopt;
|
||||||
# include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
# include <openssl/ssl.h>
|
# include <openssl/ssl.h>
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
# include <gnutls/gnutls.h>
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -180,13 +183,13 @@ void showUsage() {
|
||||||
cout << _(" --ftp-via-http-proxy=METHOD Use HTTP proxy in FTP. METHOD is either 'get' or\n"
|
cout << _(" --ftp-via-http-proxy=METHOD Use HTTP proxy in FTP. METHOD is either 'get' or\n"
|
||||||
" 'tunnel'.\n"
|
" 'tunnel'.\n"
|
||||||
" Default: tunnel") << endl;
|
" Default: tunnel") << endl;
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_BITTORRENT
|
||||||
cout << _(" --torrent-file=TORRENT_FILE The file path to .torrent file.") << endl;
|
cout << _(" --torrent-file=TORRENT_FILE The file path to .torrent file.") << endl;
|
||||||
cout << _(" --follow-torrent=true|false Setting this option to false prevents aria2 to\n"
|
cout << _(" --follow-torrent=true|false Setting this option to false prevents aria2 to\n"
|
||||||
" enter BitTorrent mode even if the filename of\n"
|
" enter BitTorrent mode even if the filename of\n"
|
||||||
" downloaded file ends with .torrent.\n"
|
" downloaded file ends with .torrent.\n"
|
||||||
" Default: true") << endl;
|
" Default: true") << endl;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_BITTORRENT
|
||||||
cout << _(" -v, --version Print the version number and exit.") << endl;
|
cout << _(" -v, --version Print the version number and exit.") << endl;
|
||||||
cout << _(" -h, --help Print this message and exit.") << endl;
|
cout << _(" -h, --help Print this message and exit.") << endl;
|
||||||
cout << endl;
|
cout << endl;
|
||||||
|
@ -203,13 +206,13 @@ void showUsage() {
|
||||||
cout << " aria2c http://AAA.BBB.CCC/file.zip http://DDD.EEE.FFF/GGG/file.zip" << endl;
|
cout << " aria2c http://AAA.BBB.CCC/file.zip http://DDD.EEE.FFF/GGG/file.zip" << endl;
|
||||||
cout << _(" You can mix up different protocols:") << endl;
|
cout << _(" You can mix up different protocols:") << endl;
|
||||||
cout << " aria2c http://AAA.BBB.CCC/file.zip ftp://DDD.EEE.FFF/GGG/file.zip" << endl;
|
cout << " aria2c http://AAA.BBB.CCC/file.zip ftp://DDD.EEE.FFF/GGG/file.zip" << endl;
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_BITTORRENT
|
||||||
cout << _(" Download a torrent:") << endl;
|
cout << _(" Download a torrent:") << endl;
|
||||||
cout << " aria2c -o test.torrent http://AAA.BBB.CCC/file.torrent" << endl;
|
cout << " aria2c -o test.torrent http://AAA.BBB.CCC/file.torrent" << endl;
|
||||||
cout << _(" Download a torrent using local .torrent file:") << endl;
|
cout << _(" Download a torrent using local .torrent file:") << endl;
|
||||||
cout << " aria2c --torrent-file test.torrent" << endl;
|
cout << " aria2c --torrent-file test.torrent" << endl;
|
||||||
cout << endl;
|
cout << endl;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_BITTORRENT
|
||||||
printf(_("Reports bugs to %s"), "<tujikawa at users dot sourceforge dot net>");
|
printf(_("Reports bugs to %s"), "<tujikawa at users dot sourceforge dot net>");
|
||||||
cout << endl;
|
cout << endl;
|
||||||
}
|
}
|
||||||
|
@ -229,11 +232,11 @@ int main(int argc, char* argv[]) {
|
||||||
bool daemonMode = false;
|
bool daemonMode = false;
|
||||||
string referer;
|
string referer;
|
||||||
string torrentFile;
|
string torrentFile;
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_BITTORRENT
|
||||||
bool followTorrent = true;
|
bool followTorrent = true;
|
||||||
#else
|
#else
|
||||||
bool followTorrent = false;
|
bool followTorrent = false;
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_BITTORRENT
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
Option* op = new Option();
|
Option* op = new Option();
|
||||||
|
@ -274,10 +277,10 @@ int main(int argc, char* argv[]) {
|
||||||
{ "ftp-via-http-proxy", required_argument, &lopt, 12 },
|
{ "ftp-via-http-proxy", required_argument, &lopt, 12 },
|
||||||
{ "min-segment-size", required_argument, &lopt, 13 },
|
{ "min-segment-size", required_argument, &lopt, 13 },
|
||||||
{ "http-proxy-method", required_argument, &lopt, 14 },
|
{ "http-proxy-method", required_argument, &lopt, 14 },
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef ENABLE_BITTORRENT
|
||||||
{ "torrent-file", required_argument, &lopt, 15 },
|
{ "torrent-file", required_argument, &lopt, 15 },
|
||||||
{ "follow-torrent", required_argument, &lopt, 16 },
|
{ "follow-torrent", required_argument, &lopt, 16 },
|
||||||
#endif // HAVE_LIBSSL
|
#endif // ENABLE_BITTORRENT
|
||||||
{ "version", no_argument, NULL, 'v' },
|
{ "version", no_argument, NULL, 'v' },
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{ "help", no_argument, NULL, 'h' },
|
||||||
{ 0, 0, 0, 0 }
|
{ 0, 0, 0, 0 }
|
||||||
|
@ -483,6 +486,9 @@ int main(int argc, char* argv[]) {
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
SSL_library_init();
|
SSL_library_init();
|
||||||
#endif // HAVE_LIBSSL
|
#endif // HAVE_LIBSSL
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
gnutls_global_init();
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
srandom(time(NULL));
|
srandom(time(NULL));
|
||||||
SimpleLogger* logger;
|
SimpleLogger* logger;
|
||||||
if(stdoutLog) {
|
if(stdoutLog) {
|
||||||
|
@ -548,7 +554,7 @@ int main(int argc, char* argv[]) {
|
||||||
}
|
}
|
||||||
if(!torrentFile.empty() || followTorrent && readyToTorrentMode) {
|
if(!torrentFile.empty() || followTorrent && readyToTorrentMode) {
|
||||||
try {
|
try {
|
||||||
op->put(PREF_MAX_TRIES, "0");
|
//op->put(PREF_MAX_TRIES, "0");
|
||||||
struct sigaction sigact;
|
struct sigaction sigact;
|
||||||
sigact.sa_handler = torrentHandler;
|
sigact.sa_handler = torrentHandler;
|
||||||
sigact.sa_flags = 0;
|
sigact.sa_flags = 0;
|
||||||
|
@ -580,12 +586,11 @@ int main(int argc, char* argv[]) {
|
||||||
}
|
}
|
||||||
te->torrentMan->setPort(port);
|
te->torrentMan->setPort(port);
|
||||||
te->commands.push(listenCommand);
|
te->commands.push(listenCommand);
|
||||||
te->commands.push(new TrackerInitCommand(te->torrentMan->getNewCuid(),
|
te->commands.push(new TrackerWatcherCommand(te->torrentMan->getNewCuid(),
|
||||||
req, te));
|
req, te));
|
||||||
int autoSaveCommandCuid = te->torrentMan->getNewCuid();
|
te->commands.push(new TorrentAutoSaveCommand(te->torrentMan->getNewCuid(),
|
||||||
te->commands.push(new SleepCommand(autoSaveCommandCuid, te,
|
te,
|
||||||
new TorrentAutoSaveCommand(autoSaveCommandCuid, te, op->getAsInt(PREF_AUTO_SAVE_INTERVAL)),
|
op->getAsInt(PREF_AUTO_SAVE_INTERVAL)));
|
||||||
op->getAsInt(PREF_AUTO_SAVE_INTERVAL)));
|
|
||||||
te->run();
|
te->run();
|
||||||
|
|
||||||
if(te->torrentMan->downloadComplete()) {
|
if(te->torrentMan->downloadComplete()) {
|
||||||
|
@ -609,5 +614,8 @@ int main(int argc, char* argv[]) {
|
||||||
delete(op);
|
delete(op);
|
||||||
delete(splitter);
|
delete(splitter);
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBGNUTLS
|
||||||
|
gnutls_global_deinit();
|
||||||
|
#endif // HAVE_LIBGNUTLS
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* <!-- copyright */
|
||||||
|
/*
|
||||||
|
* aria2 - a simple utility for downloading files faster
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006 Tatsuhiro Tsujikawa
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
/* copyright --> */
|
||||||
|
#ifndef _D_MESSAGE_DIGEST_H_
|
||||||
|
#define _D_MESSAGE_DIGEST_H_
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#ifdef ENABLE_BITTORRENT
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBSSL
|
||||||
|
#include <openssl/evp.h>
|
||||||
|
#define MessageDigestContext EVP_MD_CTX
|
||||||
|
#define sha1DigestInit(CTX) EVP_MD_CTX_init(&CTX)
|
||||||
|
#define sha1DigestReset(CTX) EVP_DigestInit_ex(&CTX, EVP_sha1(), NULL)
|
||||||
|
#define sha1DigestUpdate(CTX, DATA, LENGTH) EVP_DigestUpdate(&CTX, DATA, LENGTH)
|
||||||
|
#define sha1DigestFinal(CTX, HASH) \
|
||||||
|
{\
|
||||||
|
int len;\
|
||||||
|
EVP_DigestFinal_ex(&CTX, HASH, (unsigned int*)&len);\
|
||||||
|
}
|
||||||
|
#define sha1DigestFree(CTX) EVP_MD_CTX_cleanup(&CTX)
|
||||||
|
#endif // HAVE_LIBSSL
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBGCRYPT
|
||||||
|
#include <gcrypt.h>
|
||||||
|
#define MessageDigestContext gcry_md_hd_t
|
||||||
|
#define sha1DigestInit(CTX) gcry_md_open(&CTX, GCRY_MD_SHA1, 0)
|
||||||
|
#define sha1DigestReset(CTX) gcry_md_reset(CTX)
|
||||||
|
#define sha1DigestUpdate(CTX, DATA, LENGTH) gcry_md_write(CTX, DATA, LENGTH)
|
||||||
|
#define sha1DigestFinal(CTX, HASH) \
|
||||||
|
{\
|
||||||
|
gcry_md_final(CTX);\
|
||||||
|
memcpy(HASH, gcry_md_read(CTX, 0), 20);\
|
||||||
|
}
|
||||||
|
#define sha1DigestFree(CTX) gcry_md_close(CTX)
|
||||||
|
#endif // HAVE_LIBGCRYPT
|
||||||
|
|
||||||
|
#endif // ENABLE_BITTORRENT
|
||||||
|
|
||||||
|
#endif // _D_MESSAGE_DIGEST_H_
|
|
@ -46,9 +46,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
|
||||||
$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \
|
$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/lcmessage.m4 \
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
|
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/nls.m4 \
|
||||||
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \
|
$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/po.m4 \
|
||||||
$(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/uintmax_t.m4 \
|
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/stdint_h.m4 \
|
||||||
$(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/configure.in
|
$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/ulonglong.m4 \
|
||||||
|
$(top_srcdir)/configure.in
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
|
@ -126,6 +127,12 @@ INTLLIBS = @INTLLIBS@
|
||||||
INTLOBJS = @INTLOBJS@
|
INTLOBJS = @INTLOBJS@
|
||||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
|
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
|
||||||
|
LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@
|
||||||
|
LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@
|
||||||
|
LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@
|
||||||
|
LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@
|
||||||
|
LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@
|
||||||
LIBICONV = @LIBICONV@
|
LIBICONV = @LIBICONV@
|
||||||
LIBINTL = @LIBINTL@
|
LIBINTL = @LIBINTL@
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
|
@ -138,6 +145,8 @@ MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||||
MSGFMT = @MSGFMT@
|
MSGFMT = @MSGFMT@
|
||||||
MSGMERGE = @MSGMERGE@
|
MSGMERGE = @MSGMERGE@
|
||||||
OBJEXT = @OBJEXT@
|
OBJEXT = @OBJEXT@
|
||||||
|
OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
|
||||||
|
OPENSSL_LIBS = @OPENSSL_LIBS@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
PACKAGE_NAME = @PACKAGE_NAME@
|
PACKAGE_NAME = @PACKAGE_NAME@
|
||||||
|
|
Loading…
Reference in New Issue