diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/ctorrent | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/ctorrent')
-rw-r--r-- | packages/ctorrent/ctcs_1.4.1.bb | 12 | ||||
-rw-r--r-- | packages/ctorrent/ctorrent.inc | 10 | ||||
-rw-r--r-- | packages/ctorrent/ctorrent_1.3.4.bb | 4 | ||||
-rw-r--r-- | packages/ctorrent/ctorrent_3.3.1.bb | 5 | ||||
-rw-r--r-- | packages/ctorrent/files/extended_ctorrent.diff | 15445 |
5 files changed, 0 insertions, 15476 deletions
diff --git a/packages/ctorrent/ctcs_1.4.1.bb b/packages/ctorrent/ctcs_1.4.1.bb deleted file mode 100644 index f56c283b35..0000000000 --- a/packages/ctorrent/ctcs_1.4.1.bb +++ /dev/null @@ -1,12 +0,0 @@ -require ctorrent.inc - -DESCRIPTION += This is the controller of the enhanced version" -RDEPENDS = "perl perl-module-strict perl-module-socket perl-module-tcntl \ - perl-module-errno perl-module-sys-hostname" - -SRC_URI = "${SOURCEFORGE_MIRROR}/dtorrent/ctcs-${PV}.tar.gz" - -do_install () { - install -d ${D}/usr/bin - install -m 0755 ${S}/ctcs ${D}/usr/bin/ -} diff --git a/packages/ctorrent/ctorrent.inc b/packages/ctorrent/ctorrent.inc deleted file mode 100644 index 8005fa94e5..0000000000 --- a/packages/ctorrent/ctorrent.inc +++ /dev/null @@ -1,10 +0,0 @@ -DESCRIPTION = "CTorrent is a console BitTorrent client \ - with a focus on being lightweight and quick." -HOMEPAGE = "http://www.rahul.net/dholmes/ctorrent/" -SECTION = "network" -LICENSE = "GPL" -DEPENDS = "openssl" - -SRC_URI = "${SOURCEFORGE_MIRROR}/ctorrent/ctorrent-${PV}.tar.bz2" - -inherit autotools diff --git a/packages/ctorrent/ctorrent_1.3.4.bb b/packages/ctorrent/ctorrent_1.3.4.bb deleted file mode 100644 index 1b6d96c204..0000000000 --- a/packages/ctorrent/ctorrent_1.3.4.bb +++ /dev/null @@ -1,4 +0,0 @@ -require ctorrent.inc -PR = "r6" - -SRC_URI += "file://extended_ctorrent.diff;patch=1" diff --git a/packages/ctorrent/ctorrent_3.3.1.bb b/packages/ctorrent/ctorrent_3.3.1.bb deleted file mode 100644 index 812c0644b0..0000000000 --- a/packages/ctorrent/ctorrent_3.3.1.bb +++ /dev/null @@ -1,5 +0,0 @@ -require ctorrent.inc - -DESCRIPTION += "This is the Enhanced version from the dtorrent project" - -SRC_URI = "${SOURCEFORGE_MIRROR}/dtorrent/ctorrent-dnh${PV}.tar.gz" diff --git a/packages/ctorrent/files/extended_ctorrent.diff b/packages/ctorrent/files/extended_ctorrent.diff deleted file mode 100644 index ca016fe037..0000000000 --- a/packages/ctorrent/files/extended_ctorrent.diff +++ /dev/null @@ -1,15445 +0,0 @@ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/aclocal.m4 ctorrent-1.3.4/aclocal.m4 ---- ctorrent-1.3.4.sav/aclocal.m4 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/aclocal.m4 2006-06-28 19:30:02.000000000 +0200 -@@ -1,6 +1,6 @@ --# generated automatically by aclocal 1.7.6 -*- Autoconf -*- -+# generated automatically by aclocal 1.9.1 -*- Autoconf -*- - --# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 -+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 - # Free Software Foundation, Inc. - # This file is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, -@@ -11,132 +11,9 @@ - # even the implied warranty of MERCHANTABILITY or FITNESS FOR A - # PARTICULAR PURPOSE. - --# Do all the work for Automake. -*- Autoconf -*- -- --# This macro actually does too much some checks are only needed if --# your package does certain things. But this isn't really a big deal. -- --# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 --# Free Software Foundation, Inc. -- --# 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, 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. -- --# serial 10 -- --AC_PREREQ([2.54]) -- --# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow --# the ones we care about. --m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -- --# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) --# AM_INIT_AUTOMAKE([OPTIONS]) --# ----------------------------------------------- --# The call with PACKAGE and VERSION arguments is the old style --# call (pre autoconf-2.50), which is being phased out. PACKAGE --# and VERSION should now be passed to AC_INIT and removed from --# the call to AM_INIT_AUTOMAKE. --# We support both call styles for the transition. After --# the next Automake release, Autoconf can make the AC_INIT --# arguments mandatory, and then we can depend on a new Autoconf --# release and drop the old call support. --AC_DEFUN([AM_INIT_AUTOMAKE], --[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -- AC_REQUIRE([AC_PROG_INSTALL])dnl --# test to see if srcdir already configured --if test "`cd $srcdir && pwd`" != "`pwd`" && -- test -f $srcdir/config.status; then -- AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) --fi -- --# test whether we have cygpath --if test -z "$CYGPATH_W"; then -- if (cygpath --version) >/dev/null 2>/dev/null; then -- CYGPATH_W='cygpath -w' -- else -- CYGPATH_W=echo -- fi --fi --AC_SUBST([CYGPATH_W]) -- --# Define the identity of the package. --dnl Distinguish between old-style and new-style calls. --m4_ifval([$2], --[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl -- AC_SUBST([PACKAGE], [$1])dnl -- AC_SUBST([VERSION], [$2])], --[_AM_SET_OPTIONS([$1])dnl -- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl -- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl -- --_AM_IF_OPTION([no-define],, --[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl -- --# Some tools Automake needs. --AC_REQUIRE([AM_SANITY_CHECK])dnl --AC_REQUIRE([AC_ARG_PROGRAM])dnl --AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) --AM_MISSING_PROG(AUTOCONF, autoconf) --AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) --AM_MISSING_PROG(AUTOHEADER, autoheader) --AM_MISSING_PROG(MAKEINFO, makeinfo) --AM_MISSING_PROG(AMTAR, tar) --AM_PROG_INSTALL_SH --AM_PROG_INSTALL_STRIP --# We need awk for the "check" target. The system "awk" is bad on --# some platforms. --AC_REQUIRE([AC_PROG_AWK])dnl --AC_REQUIRE([AC_PROG_MAKE_SET])dnl --AC_REQUIRE([AM_SET_LEADING_DOT])dnl -- --_AM_IF_OPTION([no-dependencies],, --[AC_PROVIDE_IFELSE([AC_PROG_CC], -- [_AM_DEPENDENCIES(CC)], -- [define([AC_PROG_CC], -- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl --AC_PROVIDE_IFELSE([AC_PROG_CXX], -- [_AM_DEPENDENCIES(CXX)], -- [define([AC_PROG_CXX], -- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl --]) --]) -- -- --# When config.status generates a header, we must update the stamp-h file. --# This file resides in the same directory as the config header --# that is generated. The stamp files are numbered to have different names. -- --# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the --# loop where config.status creates the headers, so we can generate --# our stamp files there. --AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], --[# Compute $1's index in $config_headers. --_am_stamp_count=1 --for _am_header in $config_headers :; do -- case $_am_header in -- $1 | $1:* ) -- break ;; -- * ) -- _am_stamp_count=`expr $_am_stamp_count + 1` ;; -- esac --done --echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) -- --# Copyright 2002 Free Software Foundation, Inc. -+# -*- Autoconf -*- -+# Copyright (C) 2002, 2003 Free Software Foundation, Inc. -+# Generated from amversion.in; do not edit by hand. - - # 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 -@@ -156,18 +33,18 @@ - # ---------------------------- - # Automake X.Y traces this macro to ensure aclocal.m4 has been - # generated from the m4 files accompanying Automake X.Y. --AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) -+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) - - # AM_SET_CURRENT_AUTOMAKE_VERSION - # ------------------------------- - # Call AM_AUTOMAKE_VERSION so it can be traced. - # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. - AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -- [AM_AUTOMAKE_VERSION([1.7.6])]) -+ [AM_AUTOMAKE_VERSION([1.9.1])]) - --# Helper functions for option handling. -*- Autoconf -*- -+# AM_AUX_DIR_EXPAND - --# Copyright 2001, 2002 Free Software Foundation, Inc. -+# Copyright (C) 2001, 2003 Free Software Foundation, Inc. - - # 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 -@@ -184,36 +61,54 @@ - # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - # 02111-1307, USA. - --# serial 2 -- --# _AM_MANGLE_OPTION(NAME) --# ----------------------- --AC_DEFUN([_AM_MANGLE_OPTION], --[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) -- --# _AM_SET_OPTION(NAME) --# ------------------------------ --# Set option NAME. Presently that only means defining a flag for this option. --AC_DEFUN([_AM_SET_OPTION], --[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) -- --# _AM_SET_OPTIONS(OPTIONS) --# ---------------------------------- --# OPTIONS is a space-separated list of Automake options. --AC_DEFUN([_AM_SET_OPTIONS], --[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) -- --# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) --# ------------------------------------------- --# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. --AC_DEFUN([_AM_IF_OPTION], --[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -- -+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -+# `$srcdir', `$srcdir/..', or `$srcdir/../..'. - # --# Check to make sure that the build environment is sane. -+# Of course, Automake must honor this variable whenever it calls a -+# tool from the auxiliary directory. The problem is that $srcdir (and -+# therefore $ac_aux_dir as well) can be either absolute or relative, -+# depending on how configure is run. This is pretty annoying, since -+# it makes $ac_aux_dir quite unusable in subdirectories: in the top -+# source directory, any form will work fine, but in subdirectories a -+# relative path needs to be adjusted first. -+# -+# $ac_aux_dir/missing -+# fails when called from a subdirectory if $ac_aux_dir is relative -+# $top_srcdir/$ac_aux_dir/missing -+# fails if $ac_aux_dir is absolute, -+# fails when called from a subdirectory in a VPATH build with -+# a relative $ac_aux_dir -+# -+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -+# are both prefixed by $srcdir. In an in-source build this is usually -+# harmless because $srcdir is `.', but things will broke when you -+# start a VPATH build or use an absolute $srcdir. -+# -+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -+# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -+# and then we would define $MISSING as -+# MISSING="\${SHELL} $am_aux_dir/missing" -+# This will work as long as MISSING is not called from configure, because -+# unfortunately $(top_srcdir) has no meaning in configure. -+# However there are other variables, like CC, which are often used in -+# configure, and could therefore not use this "fixed" $ac_aux_dir. - # -+# Another solution, used here, is to always expand $ac_aux_dir to an -+# absolute PATH. The drawback is that using absolute paths prevent a -+# configured tree to be moved without reconfiguration. -+ -+AC_DEFUN([AM_AUX_DIR_EXPAND], -+[dnl Rely on autoconf to set up CDPATH properly. -+AC_PREREQ([2.50])dnl -+# expand $ac_aux_dir to an absolute path -+am_aux_dir=`cd $ac_aux_dir && pwd` -+]) - --# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. -+# AM_CONDITIONAL -*- Autoconf -*- -+ -+# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. - - # 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 -@@ -230,53 +125,34 @@ - # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - # 02111-1307, USA. - --# serial 3 -- --# AM_SANITY_CHECK --# --------------- --AC_DEFUN([AM_SANITY_CHECK], --[AC_MSG_CHECKING([whether build environment is sane]) --# Just in case --sleep 1 --echo timestamp > conftest.file --# Do `set' in a subshell so we don't clobber the current shell's --# arguments. Must try -L first in case configure is actually a --# symlink; some systems play weird games with the mod time of symlinks --# (eg FreeBSD returns the mod time of the symlink's containing --# directory). --if ( -- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` -- if test "$[*]" = "X"; then -- # -L didn't work. -- set X `ls -t $srcdir/configure conftest.file` -- fi -- rm -f conftest.file -- if test "$[*]" != "X $srcdir/configure conftest.file" \ -- && test "$[*]" != "X conftest.file $srcdir/configure"; then -- -- # If neither matched, then we have a broken ls. This can happen -- # if, for instance, CONFIG_SHELL is bash and it inherits a -- # broken ls alias from the environment. This has actually -- # happened. Such a system could not be considered "sane". -- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken --alias in your environment]) -- fi -+# serial 6 - -- test "$[2]" = conftest.file -- ) --then -- # Ok. -- : -+# AM_CONDITIONAL(NAME, SHELL-CONDITION) -+# ------------------------------------- -+# Define a conditional. -+AC_DEFUN([AM_CONDITIONAL], -+[AC_PREREQ(2.52)dnl -+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], -+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -+AC_SUBST([$1_TRUE]) -+AC_SUBST([$1_FALSE]) -+if $2; then -+ $1_TRUE= -+ $1_FALSE='#' - else -- AC_MSG_ERROR([newly created file is older than distributed files! --Check your system clock]) -+ $1_TRUE='#' -+ $1_FALSE= - fi --AC_MSG_RESULT(yes)]) -- --# -*- Autoconf -*- -+AC_CONFIG_COMMANDS_PRE( -+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then -+ AC_MSG_ERROR([[conditional "$1" was never defined. -+Usually this means the macro was only invoked conditionally.]]) -+fi])]) - -+# serial 7 -*- Autoconf -*- - --# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 -+# Free Software Foundation, Inc. - - # 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 -@@ -293,220 +169,12 @@ - # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - # 02111-1307, USA. - --# serial 3 - --# AM_MISSING_PROG(NAME, PROGRAM) --# ------------------------------ --AC_DEFUN([AM_MISSING_PROG], --[AC_REQUIRE([AM_MISSING_HAS_RUN]) --$1=${$1-"${am_missing_run}$2"} --AC_SUBST($1)]) -- -- --# AM_MISSING_HAS_RUN --# ------------------ --# Define MISSING if not defined so far and test if it supports --run. --# If it does, set am_missing_run to use it, otherwise, to nothing. --AC_DEFUN([AM_MISSING_HAS_RUN], --[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl --test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" --# Use eval to expand $SHELL --if eval "$MISSING --run true"; then -- am_missing_run="$MISSING --run " --else -- am_missing_run= -- AC_MSG_WARN([`missing' script is too old or missing]) --fi --]) -- --# AM_AUX_DIR_EXPAND -- --# Copyright 2001 Free Software Foundation, Inc. -- --# 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, 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. -- --# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets --# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to --# `$srcdir', `$srcdir/..', or `$srcdir/../..'. --# --# Of course, Automake must honor this variable whenever it calls a --# tool from the auxiliary directory. The problem is that $srcdir (and --# therefore $ac_aux_dir as well) can be either absolute or relative, --# depending on how configure is run. This is pretty annoying, since --# it makes $ac_aux_dir quite unusable in subdirectories: in the top --# source directory, any form will work fine, but in subdirectories a --# relative path needs to be adjusted first. --# --# $ac_aux_dir/missing --# fails when called from a subdirectory if $ac_aux_dir is relative --# $top_srcdir/$ac_aux_dir/missing --# fails if $ac_aux_dir is absolute, --# fails when called from a subdirectory in a VPATH build with --# a relative $ac_aux_dir --# --# The reason of the latter failure is that $top_srcdir and $ac_aux_dir --# are both prefixed by $srcdir. In an in-source build this is usually --# harmless because $srcdir is `.', but things will broke when you --# start a VPATH build or use an absolute $srcdir. --# --# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, --# iff we strip the leading $srcdir from $ac_aux_dir. That would be: --# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` --# and then we would define $MISSING as --# MISSING="\${SHELL} $am_aux_dir/missing" --# This will work as long as MISSING is not called from configure, because --# unfortunately $(top_srcdir) has no meaning in configure. --# However there are other variables, like CC, which are often used in --# configure, and could therefore not use this "fixed" $ac_aux_dir. --# --# Another solution, used here, is to always expand $ac_aux_dir to an --# absolute PATH. The drawback is that using absolute paths prevent a --# configured tree to be moved without reconfiguration. -- --# Rely on autoconf to set up CDPATH properly. --AC_PREREQ([2.50]) -- --AC_DEFUN([AM_AUX_DIR_EXPAND], [ --# expand $ac_aux_dir to an absolute path --am_aux_dir=`cd $ac_aux_dir && pwd` --]) -- --# AM_PROG_INSTALL_SH --# ------------------ --# Define $install_sh. -- --# Copyright 2001 Free Software Foundation, Inc. -- --# 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, 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. -- --AC_DEFUN([AM_PROG_INSTALL_SH], --[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl --install_sh=${install_sh-"$am_aux_dir/install-sh"} --AC_SUBST(install_sh)]) -- --# AM_PROG_INSTALL_STRIP -- --# Copyright 2001 Free Software Foundation, Inc. -- --# 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, 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. -- --# One issue with vendor `install' (even GNU) is that you can't --# specify the program used to strip binaries. This is especially --# annoying in cross-compiling environments, where the build's strip --# is unlikely to handle the host's binaries. --# Fortunately install-sh will honor a STRIPPROG variable, so we --# always use install-sh in `make install-strip', and initialize --# STRIPPROG with the value of the STRIP variable (set by the user). --AC_DEFUN([AM_PROG_INSTALL_STRIP], --[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl --# Installed binaries are usually stripped using `strip' when the user --# run `make install-strip'. However `strip' might not be the right --# tool to use in cross-compilation environments, therefore Automake --# will honor the `STRIP' environment variable to overrule this program. --dnl Don't test for $cross_compiling = yes, because it might be `maybe'. --if test "$cross_compiling" != no; then -- AC_CHECK_TOOL([STRIP], [strip], :) --fi --INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" --AC_SUBST([INSTALL_STRIP_PROGRAM])]) -- --# -*- Autoconf -*- --# Copyright (C) 2003 Free Software Foundation, Inc. -- --# 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, 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. -- --# serial 1 -- --# Check whether the underlying file-system supports filenames --# with a leading dot. For instance MS-DOS doesn't. --AC_DEFUN([AM_SET_LEADING_DOT], --[rm -rf .tst 2>/dev/null --mkdir .tst 2>/dev/null --if test -d .tst; then -- am__leading_dot=. --else -- am__leading_dot=_ --fi --rmdir .tst 2>/dev/null --AC_SUBST([am__leading_dot])]) -- --# serial 5 -*- Autoconf -*- -- --# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -- --# 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, 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. -- -- --# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be --# written in clear, in which case automake, when reading aclocal.m4, --# will think it sees a *use*, and therefore will trigger all it's --# C support machinery. Also note that it means that autoscan, seeing --# CC etc. in the Makefile, will ask for an AC_PROG_CC use... -+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -+# written in clear, in which case automake, when reading aclocal.m4, -+# will think it sees a *use*, and therefore will trigger all it's -+# C support machinery. Also note that it means that autoscan, seeing -+# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - - -@@ -568,7 +236,9 @@ - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c -- : > sub/conftst$i.h -+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with -+ # Solaris 8's {/usr,}/bin/sh. -+ touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -@@ -596,9 +266,14 @@ - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings -- # (even with -Werror). So we grep stderr for any message -- # that says an option was ignored. -- if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else -+ # or remarks (even with -Werror). So we grep stderr for any message -+ # that says an option was ignored or not supported. -+ # When given -MP, icc 7.0 and 7.1 complain thusly: -+ # icc: Command line warning: ignoring option '-M'; no argument required -+ # The diagnosis changed in icc 8.0: -+ # icc: Command line remark: option '-MP' not supported -+ if (grep 'ignoring option' conftest.err || -+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi -@@ -632,8 +307,8 @@ - # ------------ - AC_DEFUN([AM_DEP_TRACK], - [AC_ARG_ENABLE(dependency-tracking, --[ --disable-dependency-tracking Speeds up one-time builds -- --enable-dependency-tracking Do not reject slow dependency extractors]) -+[ --disable-dependency-tracking speeds up one-time build -+ --enable-dependency-tracking do not reject slow dependency extractors]) - if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -@@ -644,7 +319,8 @@ - - # Generate code to set up dependency tracking. -*- Autoconf -*- - --# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. -+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 -+# Free Software Foundation, Inc. - - # 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 -@@ -680,27 +356,21 @@ - else - continue - fi -- grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue -- # Extract the definition of DEP_FILES from the Makefile without -- # running `make'. -- DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` -+ # Extract the definition of DEPDIR, am__include, and am__quote -+ # from the Makefile without running `make'. -+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue -+ am__include=`sed -n 's/^am__include = //p' < "$mf"` -+ test -z "am__include" && continue -+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it -- U=`sed -n -e '/^U = / s///p' < "$mf"` -- test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" -- # We invoke sed twice because it is the simplest approach to -- # changing $(DEPDIR) to its actual value in the expansion. -- for file in `sed -n -e ' -- /^DEP_FILES = .*\\\\$/ { -- s/^DEP_FILES = // -- :loop -- s/\\\\$// -- p -- n -- /\\\\$/ b loop -- p -- } -- /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ -+ U=`sed -n 's/^U = //p' < "$mf"` -+ # Find all dependency output files, they are included files with -+ # $(DEPDIR) in their names. We invoke sed twice because it is the -+ # simplest approach to changing $(DEPDIR) to its actual value in the -+ # expansion. -+ for file in `sed -n " -+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue -@@ -726,9 +396,13 @@ - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) - ]) - --# Check to see how 'make' treats includes. -*- Autoconf -*- -+# Do all the work for Automake. -*- Autoconf -*- - --# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. -+# This macro actually does too much some checks are only needed if -+# your package does certain things. But this isn't really a big deal. -+ -+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -+# Free Software Foundation, Inc. - - # 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 -@@ -745,43 +419,223 @@ - # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - # 02111-1307, USA. - --# serial 2 -+# serial 11 - --# AM_MAKE_INCLUDE() --# ----------------- --# Check to see how make treats includes. --AC_DEFUN([AM_MAKE_INCLUDE], --[am_make=${MAKE-make} --cat > confinc << 'END' --am__doit: -- @echo done --.PHONY: am__doit --END --# If we don't find an include directive, just comment out the code. --AC_MSG_CHECKING([for style of include used by $am_make]) --am__include="#" --am__quote= --_am_result=none --# First try GNU make style include. --echo "include confinc" > confmf --# We grep out `Entering directory' and `Leaving directory' --# messages which can occur if `w' ends up in MAKEFLAGS. --# In particular we don't look at `^make:' because GNU make might --# be invoked under some other name (usually "gmake"), in which --# case it prints its new name instead of `make'. --if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then -- am__include=include -- am__quote= -- _am_result=GNU --fi --# Now try BSD make style include. --if test "$am__include" = "#"; then -- echo '.include "confinc"' > confmf -- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then -- am__include=.include -- am__quote="\"" -- _am_result=BSD -- fi -+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -+# AM_INIT_AUTOMAKE([OPTIONS]) -+# ----------------------------------------------- -+# The call with PACKAGE and VERSION arguments is the old style -+# call (pre autoconf-2.50), which is being phased out. PACKAGE -+# and VERSION should now be passed to AC_INIT and removed from -+# the call to AM_INIT_AUTOMAKE. -+# We support both call styles for the transition. After -+# the next Automake release, Autoconf can make the AC_INIT -+# arguments mandatory, and then we can depend on a new Autoconf -+# release and drop the old call support. -+AC_DEFUN([AM_INIT_AUTOMAKE], -+[AC_PREREQ([2.58])dnl -+dnl Autoconf wants to disallow AM_ names. We explicitly allow -+dnl the ones we care about. -+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -+AC_REQUIRE([AC_PROG_INSTALL])dnl -+# test to see if srcdir already configured -+if test "`cd $srcdir && pwd`" != "`pwd`" && -+ test -f $srcdir/config.status; then -+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -+fi -+ -+# test whether we have cygpath -+if test -z "$CYGPATH_W"; then -+ if (cygpath --version) >/dev/null 2>/dev/null; then -+ CYGPATH_W='cygpath -w' -+ else -+ CYGPATH_W=echo -+ fi -+fi -+AC_SUBST([CYGPATH_W]) -+ -+# Define the identity of the package. -+dnl Distinguish between old-style and new-style calls. -+m4_ifval([$2], -+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl -+ AC_SUBST([PACKAGE], [$1])dnl -+ AC_SUBST([VERSION], [$2])], -+[_AM_SET_OPTIONS([$1])dnl -+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl -+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl -+ -+_AM_IF_OPTION([no-define],, -+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl -+ -+# Some tools Automake needs. -+AC_REQUIRE([AM_SANITY_CHECK])dnl -+AC_REQUIRE([AC_ARG_PROGRAM])dnl -+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -+AM_MISSING_PROG(AUTOCONF, autoconf) -+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -+AM_MISSING_PROG(AUTOHEADER, autoheader) -+AM_MISSING_PROG(MAKEINFO, makeinfo) -+AM_PROG_INSTALL_SH -+AM_PROG_INSTALL_STRIP -+AC_REQUIRE([AM_PROG_MKDIR_P])dnl -+# We need awk for the "check" target. The system "awk" is bad on -+# some platforms. -+AC_REQUIRE([AC_PROG_AWK])dnl -+AC_REQUIRE([AC_PROG_MAKE_SET])dnl -+AC_REQUIRE([AM_SET_LEADING_DOT])dnl -+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], -+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], -+ [_AM_PROG_TAR([v7])])]) -+_AM_IF_OPTION([no-dependencies],, -+[AC_PROVIDE_IFELSE([AC_PROG_CC], -+ [_AM_DEPENDENCIES(CC)], -+ [define([AC_PROG_CC], -+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -+AC_PROVIDE_IFELSE([AC_PROG_CXX], -+ [_AM_DEPENDENCIES(CXX)], -+ [define([AC_PROG_CXX], -+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -+]) -+]) -+ -+ -+# When config.status generates a header, we must update the stamp-h file. -+# This file resides in the same directory as the config header -+# that is generated. The stamp files are numbered to have different names. -+ -+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -+# loop where config.status creates the headers, so we can generate -+# our stamp files there. -+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -+[# Compute $1's index in $config_headers. -+_am_stamp_count=1 -+for _am_header in $config_headers :; do -+ case $_am_header in -+ $1 | $1:* ) -+ break ;; -+ * ) -+ _am_stamp_count=`expr $_am_stamp_count + 1` ;; -+ esac -+done -+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) -+ -+# AM_PROG_INSTALL_SH -+# ------------------ -+# Define $install_sh. -+ -+# Copyright (C) 2001, 2003 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+AC_DEFUN([AM_PROG_INSTALL_SH], -+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -+install_sh=${install_sh-"$am_aux_dir/install-sh"} -+AC_SUBST(install_sh)]) -+ -+# -*- Autoconf -*- -+# Copyright (C) 2003 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# serial 1 -+ -+# Check whether the underlying file-system supports filenames -+# with a leading dot. For instance MS-DOS doesn't. -+AC_DEFUN([AM_SET_LEADING_DOT], -+[rm -rf .tst 2>/dev/null -+mkdir .tst 2>/dev/null -+if test -d .tst; then -+ am__leading_dot=. -+else -+ am__leading_dot=_ -+fi -+rmdir .tst 2>/dev/null -+AC_SUBST([am__leading_dot])]) -+ -+# Check to see how 'make' treats includes. -*- Autoconf -*- -+ -+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# serial 2 -+ -+# AM_MAKE_INCLUDE() -+# ----------------- -+# Check to see how make treats includes. -+AC_DEFUN([AM_MAKE_INCLUDE], -+[am_make=${MAKE-make} -+cat > confinc << 'END' -+am__doit: -+ @echo done -+.PHONY: am__doit -+END -+# If we don't find an include directive, just comment out the code. -+AC_MSG_CHECKING([for style of include used by $am_make]) -+am__include="#" -+am__quote= -+_am_result=none -+# First try GNU make style include. -+echo "include confinc" > confmf -+# We grep out `Entering directory' and `Leaving directory' -+# messages which can occur if `w' ends up in MAKEFLAGS. -+# In particular we don't look at `^make:' because GNU make might -+# be invoked under some other name (usually "gmake"), in which -+# case it prints its new name instead of `make'. -+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then -+ am__include=include -+ am__quote= -+ _am_result=GNU -+fi -+# Now try BSD make style include. -+if test "$am__include" = "#"; then -+ echo '.include "confinc"' > confmf -+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then -+ am__include=.include -+ am__quote="\"" -+ _am_result=BSD -+ fi - fi - AC_SUBST([am__include]) - AC_SUBST([am__quote]) -@@ -789,9 +643,10 @@ - rm -f confinc confmf - ]) - --# AM_CONDITIONAL -*- Autoconf -*- -+# -*- Autoconf -*- -+ - --# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. -+# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. - - # 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 -@@ -808,28 +663,358 @@ - # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - # 02111-1307, USA. - --# serial 5 -+# serial 3 - --AC_PREREQ(2.52) -+# AM_MISSING_PROG(NAME, PROGRAM) -+# ------------------------------ -+AC_DEFUN([AM_MISSING_PROG], -+[AC_REQUIRE([AM_MISSING_HAS_RUN]) -+$1=${$1-"${am_missing_run}$2"} -+AC_SUBST($1)]) - --# AM_CONDITIONAL(NAME, SHELL-CONDITION) --# ------------------------------------- --# Define a conditional. --AC_DEFUN([AM_CONDITIONAL], --[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], -- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl --AC_SUBST([$1_TRUE]) --AC_SUBST([$1_FALSE]) --if $2; then -- $1_TRUE= -- $1_FALSE='#' -+ -+# AM_MISSING_HAS_RUN -+# ------------------ -+# Define MISSING if not defined so far and test if it supports --run. -+# If it does, set am_missing_run to use it, otherwise, to nothing. -+AC_DEFUN([AM_MISSING_HAS_RUN], -+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -+# Use eval to expand $SHELL -+if eval "$MISSING --run true"; then -+ am_missing_run="$MISSING --run " - else -- $1_TRUE='#' -- $1_FALSE= -+ am_missing_run= -+ AC_MSG_WARN([`missing' script is too old or missing]) - fi --AC_CONFIG_COMMANDS_PRE( --[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then -- AC_MSG_ERROR([conditional "$1" was never defined. --Usually this means the macro was only invoked conditionally.]) --fi])]) -+]) -+ -+# AM_PROG_MKDIR_P -+# --------------- -+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -+ -+# Copyright (C) 2003, 2004 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -+# created by `make install' are always world readable, even if the -+# installer happens to have an overly restrictive umask (e.g. 077). -+# This was a mistake. There are at least two reasons why we must not -+# use `-m 0755': -+# - it causes special bits like SGID to be ignored, -+# - it may be too restrictive (some setups expect 775 directories). -+# -+# Do not use -m 0755 and let people choose whatever they expect by -+# setting umask. -+# -+# We cannot accept any implementation of `mkdir' that recognizes `-p'. -+# Some implementations (such as Solaris 8's) are not thread-safe: if a -+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -+# concurrently, both version can detect that a/ is missing, but only -+# one can create it and the other will error out. Consequently we -+# restrict ourselves to GNU make (using the --version option ensures -+# this.) -+AC_DEFUN([AM_PROG_MKDIR_P], -+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then -+ # We used to keeping the `.' as first argument, in order to -+ # allow $(mkdir_p) to be used without argument. As in -+ # $(mkdir_p) $(somedir) -+ # where $(somedir) is conditionally defined. However this is wrong -+ # for two reasons: -+ # 1. if the package is installed by a user who cannot write `.' -+ # make install will fail, -+ # 2. the above comment should most certainly read -+ # $(mkdir_p) $(DESTDIR)$(somedir) -+ # so it does not work when $(somedir) is undefined and -+ # $(DESTDIR) is not. -+ # To support the latter case, we have to write -+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), -+ # so the `.' trick is pointless. -+ mkdir_p='mkdir -p --' -+else -+ # On NextStep and OpenStep, the `mkdir' command does not -+ # recognize any option. It will interpret all options as -+ # directories to create, and then abort because `.' already -+ # exists. -+ for d in ./-p ./--version; -+ do -+ test -d $d && rmdir $d -+ done -+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. -+ if test -f "$ac_aux_dir/mkinstalldirs"; then -+ mkdir_p='$(mkinstalldirs)' -+ else -+ mkdir_p='$(install_sh) -d' -+ fi -+fi -+AC_SUBST([mkdir_p])]) -+ -+# Helper functions for option handling. -*- Autoconf -*- -+ -+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# serial 2 -+ -+# _AM_MANGLE_OPTION(NAME) -+# ----------------------- -+AC_DEFUN([_AM_MANGLE_OPTION], -+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) -+ -+# _AM_SET_OPTION(NAME) -+# ------------------------------ -+# Set option NAME. Presently that only means defining a flag for this option. -+AC_DEFUN([_AM_SET_OPTION], -+[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) -+ -+# _AM_SET_OPTIONS(OPTIONS) -+# ---------------------------------- -+# OPTIONS is a space-separated list of Automake options. -+AC_DEFUN([_AM_SET_OPTIONS], -+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) -+ -+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -+# ------------------------------------------- -+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -+AC_DEFUN([_AM_IF_OPTION], -+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -+ -+# -+# Check to make sure that the build environment is sane. -+# -+ -+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# serial 3 -+ -+# AM_SANITY_CHECK -+# --------------- -+AC_DEFUN([AM_SANITY_CHECK], -+[AC_MSG_CHECKING([whether build environment is sane]) -+# Just in case -+sleep 1 -+echo timestamp > conftest.file -+# Do `set' in a subshell so we don't clobber the current shell's -+# arguments. Must try -L first in case configure is actually a -+# symlink; some systems play weird games with the mod time of symlinks -+# (eg FreeBSD returns the mod time of the symlink's containing -+# directory). -+if ( -+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` -+ if test "$[*]" = "X"; then -+ # -L didn't work. -+ set X `ls -t $srcdir/configure conftest.file` -+ fi -+ rm -f conftest.file -+ if test "$[*]" != "X $srcdir/configure conftest.file" \ -+ && test "$[*]" != "X conftest.file $srcdir/configure"; then -+ -+ # If neither matched, then we have a broken ls. This can happen -+ # if, for instance, CONFIG_SHELL is bash and it inherits a -+ # broken ls alias from the environment. This has actually -+ # happened. Such a system could not be considered "sane". -+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -+alias in your environment]) -+ fi -+ -+ test "$[2]" = conftest.file -+ ) -+then -+ # Ok. -+ : -+else -+ AC_MSG_ERROR([newly created file is older than distributed files! -+Check your system clock]) -+fi -+AC_MSG_RESULT(yes)]) -+ -+# AM_PROG_INSTALL_STRIP -+ -+# Copyright (C) 2001, 2003 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# One issue with vendor `install' (even GNU) is that you can't -+# specify the program used to strip binaries. This is especially -+# annoying in cross-compiling environments, where the build's strip -+# is unlikely to handle the host's binaries. -+# Fortunately install-sh will honor a STRIPPROG variable, so we -+# always use install-sh in `make install-strip', and initialize -+# STRIPPROG with the value of the STRIP variable (set by the user). -+AC_DEFUN([AM_PROG_INSTALL_STRIP], -+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -+# Installed binaries are usually stripped using `strip' when the user -+# run `make install-strip'. However `strip' might not be the right -+# tool to use in cross-compilation environments, therefore Automake -+# will honor the `STRIP' environment variable to overrule this program. -+dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -+if test "$cross_compiling" != no; then -+ AC_CHECK_TOOL([STRIP], [strip], :) -+fi -+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -+AC_SUBST([INSTALL_STRIP_PROGRAM])]) -+ -+# Check how to create a tarball. -*- Autoconf -*- -+ -+# Copyright (C) 2004 Free Software Foundation, Inc. -+ -+# 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, 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. -+ -+# serial 1 -+ -+ -+# _AM_PROG_TAR(FORMAT) -+# -------------------- -+# Check how to create a tarball in format FORMAT. -+# FORMAT should be one of `v7', `ustar', or `pax'. -+# -+# Substitute a variable $(am__tar) that is a command -+# writing to stdout a FORMAT-tarball containing the directory -+# $tardir. -+# tardir=directory && $(am__tar) > result.tar -+# -+# Substitute a variable $(am__untar) that extract such -+# a tarball read from stdin. -+# $(am__untar) < result.tar -+AC_DEFUN([_AM_PROG_TAR], -+[# Always define AMTAR for backward compatibility. -+AM_MISSING_PROG([AMTAR], [tar]) -+m4_if([$1], [v7], -+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], -+ [m4_case([$1], [ustar],, [pax],, -+ [m4_fatal([Unknown tar format])]) -+AC_MSG_CHECKING([how to create a $1 tar archive]) -+# Loop over all known methods to create a tar archive until one works. -+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -+_am_tools=${am_cv_prog_tar_$1-$_am_tools} -+# Do not fold the above two line into one, because Tru64 sh and -+# Solaris sh will not grok spaces in the rhs of `-'. -+for _am_tool in $_am_tools -+do -+ case $_am_tool in -+ gnutar) -+ for _am_tar in tar gnutar gtar; -+ do -+ AM_RUN_LOG([$_am_tar --version]) && break -+ done -+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' -+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' -+ am__untar="$_am_tar -xf -" -+ ;; -+ plaintar) -+ # Must skip GNU tar: if it does not support --format= it doesn't create -+ # ustar tarball either. -+ (tar --version) >/dev/null 2>&1 && continue -+ am__tar='tar chf - "$$tardir"' -+ am__tar_='tar chf - "$tardir"' -+ am__untar='tar xf -' -+ ;; -+ pax) -+ am__tar='pax -L -x $1 -w "$$tardir"' -+ am__tar_='pax -L -x $1 -w "$tardir"' -+ am__untar='pax -r' -+ ;; -+ cpio) -+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L' -+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L' -+ am__untar='cpio -i -H $1 -d' -+ ;; -+ none) -+ am__tar=false -+ am__tar_=false -+ am__untar=false -+ ;; -+ esac -+ -+ # If the value was cached, stop now. We just wanted to have am__tar -+ # and am__untar set. -+ test -n "${am_cv_prog_tar_$1}" && break -+ -+ # tar/untar a dummy directory, and stop if the command works -+ rm -rf conftest.dir -+ mkdir conftest.dir -+ echo GrepMe > conftest.dir/file -+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) -+ rm -rf conftest.dir -+ if test -s conftest.tar; then -+ AM_RUN_LOG([$am__untar <conftest.tar]) -+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break -+ fi -+done -+rm -rf conftest.dir -+ -+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -+AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -+AC_SUBST([am__tar]) -+AC_SUBST([am__untar]) -+]) # _AM_PROG_TAR - -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bencode.cpp ctorrent-1.3.4/bencode.cpp ---- ctorrent-1.3.4.sav/bencode.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/bencode.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -1,6 +1,6 @@ -+#include "./def.h" - #include <sys/types.h> - --#include "./def.h" - #include "bencode.h" - - #ifndef WINDOWS -@@ -29,7 +29,7 @@ - return keylen; - } - --size_t buf_int(const char *b,size_t len,char beginchar,char endchar,size_t *pi) -+size_t buf_long(const char *b,size_t len,char beginchar,char endchar,int64_t *pi) - { - const char *p = b; - const char *psave; -@@ -46,12 +46,26 @@ - if(!len || MAX_INT_SIZ < (p - psave) || *p != endchar) return 0; - - if( pi ){ -- if( beginchar ) *pi = (size_t)strtol(b + 1,(char**) 0,10); -- else *pi=(size_t)strtol(b,(char**) 0,10); -+ if( beginchar ) *pi = strtoll(b + 1,(char**) 0,10); -+ else *pi=strtoll(b,(char**) 0,10); - } - return (size_t)( p - b + 1 ); - } - -+size_t buf_int(const char *b,size_t len,char beginchar,char endchar,size_t *pi) -+{ -+ size_t r; -+ -+ if( pi ){ -+ int64_t pl; -+ r = buf_long(b,len,beginchar,endchar,&pl); -+ *pi = (size_t) pl; -+ }else{ -+ r = buf_long(b,len,beginchar,endchar,(int64_t*) 0); -+ } -+ return r; -+} -+ - size_t buf_str(const char *b,size_t len,const char **pstr,size_t* slen) - { - size_t rl,sl; -@@ -69,7 +83,7 @@ - - size_t decode_int(const char *b,size_t len) - { -- return(buf_int(b,len,'i','e',(size_t*) 0)); -+ return(buf_long(b,len,'i','e',(int64_t*) 0)); - } - - size_t decode_str(const char *b,size_t len) -@@ -136,7 +150,7 @@ - } - } - --size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int method) -+size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int64_t *pl,int method) - { - size_t pos; - char kl[KEYNAME_LISTSIZ]; -@@ -147,8 +161,9 @@ - case QUERY_STR: return(buf_str(b + pos,len - pos, ps, pi)); - case QUERY_INT: return(buf_int(b + pos,len - pos, 'i', 'e', pi)); - case QUERY_POS: -- if(pi) *pi = decode_rev(b + pos, len - pos, (const char*) 0); -- return pos; -+ if(pi) *pi = decode_rev(b + pos, len - pos, (const char*) 0); -+ return pos; -+ case QUERY_LONG: return(buf_long(b + pos,len - pos, 'i', 'e', pl)); - default: return 0; - } - } -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bencode.h ctorrent-1.3.4/bencode.h ---- ctorrent-1.3.4.sav/bencode.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/bencode.h 2006-06-28 19:30:02.000000000 +0200 -@@ -13,7 +13,9 @@ - #define QUERY_STR 0 - #define QUERY_INT 1 - #define QUERY_POS 2 -+#define QUERY_LONG 3 - -+size_t buf_long(const char *b,size_t len,char beginchar,char endchar,int64_t *pi); - size_t buf_int(const char *b,size_t len,char beginchar,char endchar,size_t *pi); - size_t buf_str(const char *b,size_t len,const char **pstr,size_t* slen); - size_t decode_int(const char *b,size_t len); -@@ -21,7 +23,7 @@ - size_t decode_dict(const char *b,size_t len,const char *keylist); - size_t decode_list(const char *b,size_t len,const char *keylist); - size_t decode_rev(const char *b,size_t len,const char *keylist); --size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int method); -+size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int64_t *pl,int method); - size_t decode_list2path(const char *b, size_t n, char *pathname); - size_t bencode_buf(const char *str,size_t len,FILE *fp); - size_t bencode_str(const char *str, FILE *fp); -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bitfield.cpp ctorrent-1.3.4/bitfield.cpp ---- ctorrent-1.3.4.sav/bitfield.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/bitfield.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -143,8 +143,8 @@ - size_t s = nset; - for( ; i < nbytes - 1; i++ ) b[i] = ~b[i]; - -- if( nbits % nbytes ){ -- for( i = 8 * (nbytes - 1); i < nbits; i++ ) if( _isset(i) ) UnSet(i); else Set(i); -+ if( nbits % 8 ){ -+ for( i = 8 * (nbytes - 1); i < nbits; i++ ) if( _isset(i) ) UnSet(i); else _set(i); - }else - b[nbytes - 1] = ~b[nbytes - 1]; - -@@ -152,6 +152,16 @@ - } - } - -+// _set() sets the bit but doesn't increment nset or set the isfull case. -+// Use instead of Set() when you know nset is incorrect and will be corrected -+// afterward (as in Invert or by _recalc), -+// and either bitfield won't get full or you'll _recalc() afterward to fix it. -+void BitField::_set(size_t idx) -+{ -+ if( idx < nbits && !_isfull() && !_isset(idx) ) -+ b[idx / 8] |= BIT_HEX[idx % 8]; -+} -+ - void BitField::Comb(const BitField &bf) - { - size_t i; -@@ -167,7 +177,10 @@ - { - size_t i; - char c; -- if( bf.nset != 0 ){ -+ if( _isfull_sp(bf) ){ -+ SetAll(); -+ Invert(); -+ }else if( bf.nset != 0 ){ - if( nset >= nbits ){ - b = new unsigned char[nbytes]; - #ifndef WINDOWS -@@ -184,6 +197,26 @@ - } - } - -+void BitField::And(const BitField &bf) -+{ -+ size_t i; -+ -+ if( bf.nset == 0 ){ -+ SetAll(); -+ Invert(); -+ }else if( !_isfull_sp(bf) ){ -+ if( nset >= nbits ){ -+ b = new unsigned char[nbytes]; -+#ifndef WINDOWS -+ if( !b ) throw 9; -+#endif -+ _setall(b); -+ } -+ for(i = 0; i < nbytes; i++) b[i] &= bf.b[i]; -+ _recalc(); -+ } -+} -+ - size_t BitField::Random() const - { - size_t idx; -@@ -300,3 +333,4 @@ - fclose(fp); - return -1; - } -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bitfield.h ctorrent-1.3.4/bitfield.h ---- ctorrent-1.3.4.sav/bitfield.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/bitfield.h 2006-06-28 19:30:02.000000000 +0200 -@@ -14,6 +14,7 @@ - - inline void _recalc(); - inline void _setall(unsigned char* buf); -+ inline void _set(size_t idx); - - public: - BitField(); -@@ -40,6 +41,7 @@ - void Comb(const BitField &bf); - void Except(const BitField &bf); - void Invert(); -+ void And(const BitField &bf); - - int WriteToFile(const char *fname); - int SetReferFile(const char *fname); -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btconfig.cpp ctorrent-1.3.4/btconfig.cpp ---- ctorrent-1.3.4.sav/btconfig.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btconfig.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -1,19 +1,23 @@ - #include <sys/types.h> - --size_t cfg_req_slice_size = 32768; -+size_t cfg_req_slice_size = 16384; -+size_t cfg_req_queue_length = 74; - - size_t cfg_cache_size = 16; - - size_t cfg_max_peers = 100; --size_t cfg_min_peers = 40; -+size_t cfg_min_peers = 1; - -+unsigned long cfg_listen_ip = 0; - int cfg_listen_port = 0; - int cfg_max_listen_port = 2706; - int cfg_min_listen_port = 2106; - --int cfg_max_bandwidth = -1; -+int cfg_max_bandwidth_down = -1; -+int cfg_max_bandwidth_up = -1; - - time_t cfg_seed_hours = 72; -+double cfg_seed_ratio = 0; - - // arguments global value - char *arg_metainfo_file = (char*) 0; -@@ -25,6 +29,12 @@ - unsigned char arg_flg_check_only = 0; - unsigned char arg_flg_exam_only = 0; - unsigned char arg_flg_make_torrent = 0; -+size_t arg_file_to_download = 0; -+unsigned char arg_verbose = 0; - - size_t arg_piece_length = 262144; - char *arg_announce = (char*) 0; -+ -+char *arg_ctcs = (char*) 0; -+int cfg_exit_zero_peers = 0; -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btconfig.h ctorrent-1.3.4/btconfig.h ---- ctorrent-1.3.4.sav/btconfig.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btconfig.h 2006-06-28 19:30:02.000000000 +0200 -@@ -4,24 +4,32 @@ - extern size_t cfg_req_slice_size; - - #define MAX_METAINFO_FILESIZ 4194304 --#define cfg_max_slice_size 131072 --#define cfg_req_queue_length 64 -+// According to specs the max slice size is 128K. But most clients do not -+// accept a value that large, so we limit to 64K. Note that there is a -+// comparison in RequestQueue::IsValidRequest() (see btrequest.cpp) that -+// doubles the value so that we will accept a request for 128K. -+#define cfg_max_slice_size 65536 -+extern size_t cfg_req_queue_length; - #define MAX_PF_LEN 8 - #define PEER_ID_LEN 20 --#define PEER_PFX "-CT1304-" -+#define PEER_PFX "-CD0200-" - - extern size_t cfg_cache_size; - - extern size_t cfg_max_peers; - extern size_t cfg_min_peers; - -+extern unsigned long cfg_listen_ip; - extern int cfg_listen_port; - extern int cfg_max_listen_port; - extern int cfg_min_listen_port; - - extern time_t cfg_seed_hours; -+extern double cfg_seed_ratio; - - extern int cfg_max_bandwidth; -+extern int cfg_max_bandwidth_down; -+extern int cfg_max_bandwidth_up; - - // arguments global value - extern char *arg_metainfo_file; -@@ -33,7 +41,12 @@ - extern unsigned char arg_flg_check_only; - extern unsigned char arg_flg_exam_only; - extern unsigned char arg_flg_make_torrent; -+extern size_t arg_file_to_download; -+extern unsigned char arg_verbose; - - extern size_t arg_piece_length; - extern char *arg_announce; -+ -+extern char *arg_ctcs; -+extern int cfg_exit_zero_peers; - #endif -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btcontent.cpp ctorrent-1.3.4/btcontent.cpp ---- ctorrent-1.3.4.sav/btcontent.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btcontent.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -9,8 +9,12 @@ - #else - #include <unistd.h> - #include <sys/param.h> -+#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBMD) || defined(HAVE_LIBCRYPTO) -+#include <sha.h> -+#elif defined(HAVE_LIBSSL) - #include <openssl/sha.h> - #endif -+#endif - - #include <time.h> - #include <sys/stat.h> -@@ -23,10 +27,15 @@ - #include "bencode.h" - #include "peer.h" - #include "httpencode.h" -+#include "tracker.h" -+ -+#if defined(USE_STANDALONE_SHA1) -+#include "sha1.h" -+#endif - --#define meta_str(keylist,pstr,pint) decode_query(b,flen,(keylist),(pstr),(pint),QUERY_STR) --#define meta_int(keylist,pint) decode_query(b,flen,(keylist),(const char**) 0,(pint),QUERY_INT) --#define meta_pos(keylist) decode_query(b,flen,(keylist),(const char**) 0,(size_t*) 0,QUERY_POS) -+#define meta_str(keylist,pstr,pint) decode_query(b,flen,(keylist),(pstr),(pint),(int64_t*) 0,QUERY_STR) -+#define meta_int(keylist,pint) decode_query(b,flen,(keylist),(const char**) 0,(pint),(int64_t*) 0,QUERY_INT) -+#define meta_pos(keylist) decode_query(b,flen,(keylist),(const char**) 0,(size_t*) 0,(int64_t*) 0,QUERY_POS) - - #define CACHE_FIT(ca,roff,rlen) \ - (max_u_int64_t((ca)->bc_off,(roff)) <= \ -@@ -38,6 +47,12 @@ - - static void Sha1(char *ptr,size_t len,unsigned char *dm) - { -+#if defined(USE_STANDALONE_SHA1) -+ SHA1_CTX context; -+ SHA1Init(&context); -+ SHA1Update(&context,(unsigned char*)ptr,len); -+ SHA1Final(dm,&context); -+#else - #ifdef WINDOWS - ; - #else -@@ -46,6 +61,7 @@ - SHA1_Update(&context,(unsigned char*)ptr,len); - SHA1_Final(dm,&context); - #endif -+#endif - } - - btContent::btContent() -@@ -53,6 +69,7 @@ - m_announce = global_piece_buffer = (char*) 0; - m_hash_table = (unsigned char *) 0; - pBF = (BitField*) 0; -+ pBFilter = (BitField*) 0; - m_create_date = m_seed_timestamp = (time_t) 0; - time(&m_start_timestamp); - m_cache = (BTCACHE*) 0; -@@ -121,7 +138,8 @@ - m_piece_length *= 65536; - } - -- if( !m_piece_length || m_piece_length > cfg_req_queue_length * cfg_req_slice_size ) -+ // This is really just a sanity check on the piece length to create. -+ if( !m_piece_length || m_piece_length > 4096*1024 ) - m_piece_length = 262144; - - m_announce = ann_url; -@@ -209,26 +227,24 @@ - if(!meta_int("info|piece length",&m_piece_length)) ERR_RETURN(); - m_npieces = m_hashtable_length / 20; - -- if( m_piece_length > cfg_max_slice_size * cfg_req_queue_length ){ -- fprintf(stderr,"error, piece length too long[%u]. please recompile CTorrent with a larger cfg_max_slice_size in <btconfig.h>.\n", m_piece_length); -- ERR_RETURN(); -- } -+ cfg_req_queue_length = (m_piece_length / cfg_req_slice_size) * 2 - 1; - - if( m_piece_length < cfg_req_slice_size ) - cfg_req_slice_size = m_piece_length; -- else{ -- for( ;(m_piece_length / cfg_req_slice_size) >= cfg_req_queue_length; ){ -- cfg_req_slice_size *= 2; -- if( cfg_req_slice_size > cfg_max_slice_size ) ERR_RETURN(); -- } -- } - - if( m_btfiles.BuildFromMI(b, flen, saveas) < 0) ERR_RETURN(); - - delete []b; -- PrintOut(); -+ b = (char *)0; - -- if( arg_flg_exam_only ) return 0; -+ if( arg_flg_exam_only ){ -+ PrintOut(); -+ return 0; -+ }else{ -+ arg_flg_exam_only = 1; -+ PrintOut(); -+ arg_flg_exam_only = 0; -+ } - - if( ( r = m_btfiles.CreateFiles() ) < 0) ERR_RETURN(); - -@@ -242,6 +258,17 @@ - if( !pBF ) ERR_RETURN(); - #endif - -+ //create the file filter -+ pBFilter = new BitField(m_npieces); -+#ifndef WINDOWS -+ if( !pBFilter ) ERR_RETURN(); -+#endif -+ if(arg_file_to_download>0){ -+ m_btfiles.SetFilter(arg_file_to_download,pBFilter,m_piece_length); -+ } -+ -+ -+ - m_left_bytes = m_btfiles.GetTotalLength() / m_piece_length; - if( m_btfiles.GetTotalLength() % m_piece_length ) m_left_bytes++; - if( m_left_bytes != m_npieces ) ERR_RETURN(); -@@ -252,13 +279,13 @@ - - if( !arg_flg_check_only ){ - if( pBF->SetReferFile(arg_bitfield_file) >= 0){ -- size_t idx; -- r = 0; -- for( idx = 0; idx < m_npieces; idx++ ) -- if( pBF->IsSet(idx) ) m_left_bytes -= GetPieceLength(idx); -+ size_t idx; -+ r = 0; -+ for( idx = 0; idx < m_npieces; idx++ ) -+ if( pBF->IsSet(idx) ) m_left_bytes -= GetPieceLength(idx); - } - else{ -- fprintf(stderr,"warn, couldn't set bit field refer file %s.\n",arg_bitfield_file); -+ fprintf(stderr,"warn, couldn't set bit field refer file %s.\n",arg_bitfield_file); - } - } - -@@ -271,7 +298,9 @@ - CheckExist(); - } - -- printf("Already/Total: %u/%u\n",pBF->Count(),m_npieces); -+ PrintOut(); -+ printf("Already/Total: %u/%u (%d%%)\n",pBF->Count(),m_npieces, -+ 100 * pBF->Count() / m_npieces); - - if( arg_flg_check_only ){ - if( arg_bitfield_file ) pBF->WriteToFile(arg_bitfield_file); -@@ -285,11 +314,11 @@ - memset(ptr,0,8); // reserved set zero. - - { // peer id -- char *sptr = arg_user_agent; -- char *dptr = (char *)m_shake_buffer + 48; -- char *eptr = dptr + PEER_ID_LEN; -- while (*sptr) *dptr++ = *sptr++; -- while (dptr < eptr) *dptr++ = (unsigned char)random(); -+ char *sptr = arg_user_agent; -+ char *dptr = (char *)m_shake_buffer + 48; -+ char *eptr = dptr + PEER_ID_LEN; -+ while (*sptr) *dptr++ = *sptr++; -+ while (dptr < eptr) *dptr++ = (unsigned char)random(); - } - return 0; - } -@@ -309,7 +338,8 @@ - - ssize_t btContent::ReadSlice(char *buf,size_t idx,size_t off,size_t len) - { -- u_int64_t offset = idx * m_piece_length + off; -+ //changed -+ u_int64_t offset = (u_int64_t)idx * (u_int64_t)m_piece_length + (u_int64_t)off; - - if( !m_cache_size ) return m_btfiles.IO(buf, offset, len, 0); - else{ -@@ -322,16 +352,16 @@ - for( ; len && p && CACHE_FIT(p, offset, len);){ - flg_rescan = 0; - if( offset < p->bc_off ){ -- len2 = p->bc_off - offset; -- if( CacheIO(buf, offset, len2, 0) < 0) return -1; -- flg_rescan = 1; -+ len2 = p->bc_off - offset; -+ if( CacheIO(buf, offset, len2, 0) < 0) return -1; -+ flg_rescan = 1; - }else if( offset > p->bc_off ){ -- len2 = p->bc_off + p->bc_len - offset; -- if( len2 > len ) len2 = len; -- memcpy(buf, p->bc_buf + offset - p->bc_off, len2); -+ len2 = p->bc_off + p->bc_len - offset; -+ if( len2 > len ) len2 = len; -+ memcpy(buf, p->bc_buf + offset - p->bc_off, len2); - }else{ -- len2 = (len > p->bc_len) ? p->bc_len : len; -- memcpy(buf, p->bc_buf, len2); -+ len2 = (len > p->bc_len) ? p->bc_len : len; -+ memcpy(buf, p->bc_buf, len2); - } - - buf += len2; -@@ -339,14 +369,14 @@ - len -= len2; - - if( len ){ -- if( flg_rescan ){ -- for( p = m_cache; -- p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len); -- p = p->bc_next) ; -- }else{ -- time(&p->bc_last_timestamp); -- p = p->bc_next; -- } -+ if( flg_rescan ){ -+ for( p = m_cache; -+ p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len); -+ p = p->bc_next) ; -+ }else{ -+ time(&p->bc_last_timestamp); -+ p = p->bc_next; -+ } - } - }// end for; - -@@ -399,13 +429,17 @@ - if( p->bc_f_flush ){ - p->bc_f_flush = 0; - if(m_btfiles.IO(p->bc_buf, p->bc_off, p->bc_len, 1) < 0) -- fprintf(stderr,"warn, write file failed while flush cache.\n"); -+ fprintf(stderr,"warn, write file failed while flush cache.\n"); - } - } - - ssize_t btContent::WriteSlice(char *buf,size_t idx,size_t off,size_t len) - { -- u_int64_t offset = (u_int64_t)(idx * m_piece_length + off); -+ //u_int64_t offset = (u_int64_t)(idx * m_piece_length + off); -+ //changed -+ u_int64_t offset = (u_int64_t)idx * (u_int64_t)m_piece_length + (u_int64_t)off; -+ -+ // printf("\nOffset-write: %lu - Piece:%lu\n",offset,(unsigned long)idx); - - if( !m_cache_size ) return m_btfiles.IO(buf, offset, len, 1); - else{ -@@ -418,18 +452,18 @@ - for( ; len && p && CACHE_FIT(p, offset, len);){ - flg_rescan = 0; - if( offset < p->bc_off ){ -- len2 = p->bc_off - offset; -- if( CacheIO(buf, offset, len2, 1) < 0) return -1; -- flg_rescan = 1; -+ len2 = p->bc_off - offset; -+ if( CacheIO(buf, offset, len2, 1) < 0) return -1; -+ flg_rescan = 1; - }else if( offset > p->bc_off ){ -- len2 = p->bc_off + p->bc_len - offset; -- if( len2 > len ) len2 = len; -- memcpy(p->bc_buf + offset - p->bc_off, buf, len2); -- p->bc_f_flush = 1; -+ len2 = p->bc_off + p->bc_len - offset; -+ if( len2 > len ) len2 = len; -+ memcpy(p->bc_buf + offset - p->bc_off, buf, len2); -+ p->bc_f_flush = 1; - }else{ -- len2 = (len > p->bc_len) ? p->bc_len : len; -- memcpy(p->bc_buf, buf, len2); -- p->bc_f_flush = 1; -+ len2 = (len > p->bc_len) ? p->bc_len : len; -+ memcpy(p->bc_buf, buf, len2); -+ p->bc_f_flush = 1; - } - - buf += len2; -@@ -437,12 +471,12 @@ - len -= len2; - - if( len ){ -- if( flg_rescan ){ -- for( p = m_cache; p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len); p = p->bc_next) ; -- }else{ -- time(&p->bc_last_timestamp); -- p = p->bc_next; -- } -+ if( flg_rescan ){ -+ for( p = m_cache; p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len); p = p->bc_next) ; -+ }else{ -+ time(&p->bc_last_timestamp); -+ p = p->bc_next; -+ } - } - }// end for; - -@@ -514,12 +548,12 @@ - if( !percent ) percent = 1; - - for( ; idx < m_npieces; idx++){ -- if( GetHashValue(idx, md) == 0 && memcmp(md, m_hash_table + idx * 20, 20) == 0){ -- m_left_bytes -= GetPieceLength(idx); -- pBF->Set(idx); -+ if( GetHashValue(idx, md) == 0 && memcmp(md, m_hash_table + idx * 20, 20) == 0){ -+ m_left_bytes -= GetPieceLength(idx); -+ pBF->Set(idx); - } -- if(idx % percent == 0){ -- printf("\rCheck exist: %d/%d",idx,pBF->NBits()); -+ if(idx % percent == 0 || idx == m_npieces-1){ -+ printf("\rCheck exist: %d/%d",idx+1,pBF->NBits()); - fflush(stdout); - } - } -@@ -575,7 +609,6 @@ - fprintf(stderr,"warn,piece %d hash check failed.\n",idx); - return 0; - } -- - pBF->Set(idx); - m_left_bytes -= GetPieceLength(idx); - return 1; -@@ -590,8 +623,10 @@ - - int btContent::SeedTimeout(const time_t *pnow) - { -+ u_int64_t dl; - if( pBF->IsFull() ){ - if( !m_seed_timestamp ){ -+ Tracker.Reset(1); - Self.ResetDLTimer(); - Self.ResetULTimer(); - ReleaseHashTable(); -@@ -599,9 +634,27 @@ - FlushCache(); - printf("\nDownload complete.\n"); - printf("Total time used: %lu minutes.\n",(*pnow - m_start_timestamp) / 60); -- printf("Seed for other %lu hours.\n\n", cfg_seed_hours); -+ printf("Seed for other %lu hours", cfg_seed_hours); -+ if(cfg_seed_ratio) printf(" or to ratio of %f", cfg_seed_ratio); -+ printf(".\n\n"); - } -- if( (*pnow - m_seed_timestamp) >= (cfg_seed_hours * 60 * 60) ) return 1; -+ dl = (Self.TotalDL() > 0) ? Self.TotalDL() : GetTotalFilesLength(); -+ if( (cfg_seed_ratio == 0 && cfg_seed_hours == 0) || -+ (cfg_seed_hours > 0 && -+ (*pnow - m_seed_timestamp) >= (cfg_seed_hours * 60 * 60)) || -+ (cfg_seed_ratio > 0 && -+ cfg_seed_ratio <= Self.TotalUL() / dl) ) return 1; - } - return 0; - } -+ -+ -+size_t btContent::getFilePieces(size_t nfile){ -+ return m_btfiles.getFilePieces(nfile); -+} -+ -+ -+void btContent::SetFilter(){ -+ m_btfiles.SetFilter(arg_file_to_download,pBFilter,m_piece_length); -+} -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btcontent.h ctorrent-1.3.4/btcontent.h ---- ctorrent-1.3.4.sav/btcontent.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btcontent.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,9 +1,8 @@ - #ifndef BTCONTENT_H - #define BTCONTENT_H - --#include <sys/types.h> -- - #include "def.h" -+#include <sys/types.h> - - #include <stdio.h> - #include "bitfield.h" -@@ -60,6 +59,7 @@ - - public: - BitField *pBF; -+ BitField *pBFilter; - char *global_piece_buffer; - - btContent(); -@@ -93,6 +93,15 @@ - - int PrintOut(); - int SeedTimeout(const time_t *pnow); -+ -+ -+ void SetFilter(); -+ void SetTmpFilter(int nfile, BitField *pFilter) { m_btfiles.SetFilter(nfile, pFilter, m_piece_length); } -+ size_t getFilePieces(size_t nfile); -+ -+ BTFILE *GetNextFile(BTFILE *file) { return m_btfiles.GetNextFile(file); } -+ time_t GetStartTime() { return m_start_timestamp; } -+ time_t GetSeedTime() { return m_seed_timestamp; } - }; - - extern btContent BTCONTENT; -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btfiles.cpp ctorrent-1.3.4/btfiles.cpp ---- ctorrent-1.3.4.sav/btfiles.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btfiles.cpp 2006-06-28 19:30:13.000000000 +0200 -@@ -8,8 +8,12 @@ - #include <unistd.h> - #include <dirent.h> - #include <sys/param.h> -+#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBMD) || defined(HAVE_LIBCRYPTO) -+#include <sha.h> -+#elif defined(HAVE_LIBSSL) - #include <openssl/sha.h> - #endif -+#endif - - #include <time.h> - #include <sys/stat.h> -@@ -19,6 +23,9 @@ - #include <errno.h> - - #include "bencode.h" -+#include "btconfig.h" -+#include "btcontent.h" -+#include "bitfield.h" - - #define MAX_OPEN_FILES 20 - -@@ -66,7 +73,7 @@ - for(pbf_n = m_btfhead; pbf_n ; pbf_n = pbf_n->bf_next){ - if(!pbf_n->bf_flag_opened) continue; // file not been opened. - if( !pbf_close || pbf_n->bf_last_timestamp < pbf_close->bf_last_timestamp) -- pbf_close = pbf_n; -+ pbf_close = pbf_n; - } - if(!pbf_close || fclose(pbf_close->bf_fp) < 0) return -1; - pbf_close->bf_flag_opened = 0; -@@ -90,7 +97,7 @@ - ssize_t btFiles::IO(char *buf, u_int64_t off, size_t len, const int iotype) - { - u_int64_t n = 0; -- size_t pos,nio; -+ off_t pos,nio; - BTFILE *pbf = m_btfhead; - - if( ( off + (u_int64_t)len ) > m_total_files_length) return -1; -@@ -102,16 +109,21 @@ - - if( !pbf ) return -1; - -- pos = (size_t) (off - (n - pbf->bf_length)); -+ pos = off - (n - pbf->bf_length); - - for(; len ;){ -+ - if( !pbf->bf_flag_opened ){ - if( _btf_open(pbf) < 0 ) return -1; - } - - if( m_flag_automanage ) time(&pbf->bf_last_timestamp); - -+#ifdef HAVE_FSEEKO -+ if( fseeko(pbf->bf_fp,pos,SEEK_SET) < 0) return -1; -+#else - if( fseek(pbf->bf_fp,(long) pos,SEEK_SET) < 0) return -1; -+#endif - - nio = (len < pbf->bf_length - pos) ? len : (pbf->bf_length - pos); - -@@ -119,6 +131,7 @@ - if( 1 != fread(buf,nio,1,pbf->bf_fp) ) return -1; - }else{ - if( 1 != fwrite(buf,nio,1,pbf->bf_fp) ) return -1; -+ fflush(pbf->bf_fp); - } - - len -= nio; -@@ -149,14 +162,21 @@ - return 0; - } - --int btFiles::_btf_ftruncate(int fd,size_t length) -+int btFiles::_btf_ftruncate(int fd,int64_t length) - { - #ifdef WINDOWS - char c = (char)0; - if(lseek(fd,length - 1, SEEK_SET) < 0 ) return -1; - return write(fd, &c, 1); - #else -- return ftruncate(fd,length); -+ // ftruncate() not allowed on [v]fat under linux -+ int retval = ftruncate(fd,length); -+ if( retval < 0 ) { -+ char c = (char)0; -+ if(lseek(fd,length - 1, SEEK_SET) < 0 ) return -1; -+ return write(fd, &c, 1); -+ } -+ else return retval; - #endif - } - -@@ -169,7 +189,7 @@ - DIR *dp; - BTFILE *pbf; - -- if( !getwd(full_cur) ) return -1; -+ if( !getcwd(full_cur,MAXPATHLEN) ) return -1; - - if( cur_path ){ - strcpy(fn, full_cur); -@@ -185,12 +205,12 @@ - while( (struct dirent*) 0 != (dirp = readdir(dp)) ){ - - if( 0 == strcmp(dirp->d_name, ".") || -- 0 == strcmp(dirp->d_name, "..") ) continue; -+ 0 == strcmp(dirp->d_name, "..") ) continue; - - if( cur_path ){ - if(MAXPATHLEN < snprintf(fn, MAXPATHLEN, "%s%c%s", cur_path, PATH_SP, dirp->d_name)){ -- fprintf(stderr,"error, pathname too long\n"); -- return -1; -+ fprintf(stderr,"error, pathname too long\n"); -+ return -1; - } - }else{ - strcpy(fn, dirp->d_name); -@@ -232,7 +252,7 @@ - return 0; - } - --int btFiles::_btf_creat_by_path(const char *pathname, size_t file_length) -+int btFiles::_btf_creat_by_path(const char *pathname, int64_t file_length) - { - struct stat sb; - int fd; -@@ -251,17 +271,17 @@ - *p = '\0'; - if(stat(sp,&sb) < 0){ - if( ENOENT == errno ){ -- if( !last ){ -+ if( !last ){ - #ifdef WINDOWS -- if(mkdir(sp) < 0) break; -+ if(mkdir(sp) < 0) break; - #else -- if(mkdir(sp,0755) < 0) break; -+ if(mkdir(sp,0755) < 0) break; - #endif -- }else{ -- if((fd = creat(sp,0644)) < 0) { last = 0; break; } -- if(file_length && _btf_ftruncate(fd, file_length) < 0){close(fd); last = 0; break;} -- close(fd); -- } -+ }else{ -+ if((fd = creat(sp,0644)) < 0) { last = 0; break; } -+ if(file_length && _btf_ftruncate(fd, file_length) < 0){close(fd); last = 0; break;} -+ close(fd); -+ } - }else{last = 0; break;} - } - if( !last ){ *p = PATH_SP; pnext = p + 1;} -@@ -293,7 +313,7 @@ - m_btfhead = pbf; - }else if( S_IFDIR & sb.st_mode ){ - char wd[MAXPATHLEN]; -- if( !getwd(wd) ) return -1; -+ if( !getcwd(wd,MAXPATHLEN) ) return -1; - m_directory = new char[strlen(pathname) + 1]; - #ifndef WINDOWS - if( !m_directory ) return -1; -@@ -319,20 +339,21 @@ - char path[MAXPATHLEN]; - const char *s, *p; - size_t r,q,n; -- if( !decode_query(metabuf, metabuf_len, "info|name",&s,&q,QUERY_STR) || -+ int64_t t; -+ if( !decode_query(metabuf, metabuf_len, "info|name",&s,&q,(int64_t*) 0,QUERY_STR) || - MAXPATHLEN <= q) return -1; - - memcpy(path, s, q); - path[q] = '\0'; - -- r = decode_query(metabuf,metabuf_len,"info|files",(const char**) 0, &q,QUERY_POS); -+ r = decode_query(metabuf,metabuf_len,"info|files",(const char**) 0, &q,(int64_t*) 0,QUERY_POS); - - if( r ){ - BTFILE *pbf_last = (BTFILE*) 0; - BTFILE *pbf = (BTFILE*) 0; - size_t dl; - if( decode_query(metabuf,metabuf_len,"info|length", -- (const char**) 0,(size_t*) 0,QUERY_INT) ) -+ (const char**) 0,(size_t*) 0,(int64_t*) 0,QUERY_LONG) ) - return -1; - - if( saveas ){ -@@ -355,14 +376,14 @@ - for(; q && 'e' != *p; p += dl, q -= dl){ - if(!(dl = decode_dict(p, q, (const char*) 0)) ) return -1; - if( !decode_query(p, dl, "length", (const char**) 0, -- &r,QUERY_INT) ) return -1; -+ (size_t*) 0,&t,QUERY_LONG) ) return -1; - pbf = _new_bfnode(); - #ifndef WINDOWS - if( !pbf ) return -1; - #endif -- pbf->bf_length = r; -- m_total_files_length += r; -- r = decode_query(p, dl, "path", (const char **) 0, &n,QUERY_POS); -+ pbf->bf_length = t; -+ m_total_files_length += t; -+ r = decode_query(p, dl, "path", (const char **) 0, &n,(int64_t*) 0,QUERY_POS); - if( !r ) return -1; - if(!decode_list2path(p + r, n, path)) return -1; - pbf->bf_filename = new char[strlen(path) + 1]; -@@ -375,13 +396,13 @@ - } - }else{ - if( !decode_query(metabuf,metabuf_len,"info|length", -- (const char**) 0,(size_t*) &q,QUERY_INT) ) -+ (const char**) 0,(size_t*) 0,&t,QUERY_LONG) ) - return -1; - m_btfhead = _new_bfnode(); - #ifndef WINDOWS - if( !m_btfhead) return -1; - #endif -- m_btfhead->bf_length = m_total_files_length = q; -+ m_btfhead->bf_length = m_total_files_length = t; - if( saveas ){ - m_btfhead->bf_filename = new char[strlen(saveas) + 1]; - #ifndef WINDOWS -@@ -409,31 +430,31 @@ - for(; pbt; pbt = pbt->bf_next){ - if( m_directory ){ - if( MAXPATHLEN <= snprintf(fn, MAXPATHLEN, "%s%c%s", m_directory, PATH_SP, pbt->bf_filename) ) -- return -1; -+ return -1; - }else{ - strcpy(fn, pbt->bf_filename); - } - - if(stat(fn ,&sb) < 0){ - if(ENOENT == errno){ -- if( !_btf_creat_by_path(fn,pbt->bf_length)){ -- fprintf(stderr,"error, create file %s failed.\n",fn); -- return -1; -- } -+ if( !_btf_creat_by_path(fn,pbt->bf_length)){ -+ fprintf(stderr,"error, create file %s failed.\n",fn); -+ return -1; -+ } - }else{ -- fprintf(stderr,"error, couldn't create file %s\n", fn); -- return -1; -+ fprintf(stderr,"error, couldn't create file %s\n", fn); -+ return -1; - } - }else{ - if( !check_exist) check_exist = 1; - if( !(S_IFREG & sb.st_mode) ){ -- fprintf(stderr,"error, file %s not a regular file.\n", fn); -- return -1; -+ fprintf(stderr,"error, file %s not a regular file.\n", fn); -+ return -1; - } - if(sb.st_size != pbt->bf_length){ -- fprintf(stderr,"error, file %s 's size not match. must be %u\n", -- fn, pbt->bf_length); -- return -1; -+ fprintf(stderr,"error, file %s 's size not match. must be %u\n", -+ fn, pbt->bf_length); -+ return -1; - } - } - } //end for -@@ -445,10 +466,21 @@ - BTFILE *p = m_btfhead; - size_t id = 1; - printf("FILES INFO\n"); -+ BitField tmpBitField, tmpFilter; - if(m_directory) printf("Directory: %s\n",m_directory); - for( ; p ; p = p->bf_next ){ -- printf("<%d> %c%s [%u]\n",id++, -- m_directory ? '\t': ' ',p->bf_filename, p->bf_length); -+ printf("<%d> %c%s [%llu]",id, -+ m_directory ? '\t': ' ',p->bf_filename, p->bf_length); -+ if( !arg_flg_exam_only ){ -+ BTCONTENT.SetTmpFilter(id, &tmpFilter); -+ tmpBitField = *BTCONTENT.pBF; -+ tmpBitField.Except(tmpFilter); -+ printf(" %u/%u (%d%%)", -+ tmpBitField.Count(), BTCONTENT.getFilePieces(id), -+ 100 * tmpBitField.Count() / BTCONTENT.getFilePieces(id)); -+ } -+ ++id; -+ printf("\n"); - } - printf("Total: %lu MB\n\n",(unsigned long)(m_total_files_length / 1024 / 1024)); - } -@@ -488,3 +520,73 @@ - } - return 1; - } -+ -+ -+void btFiles::SetFilter(int nfile, BitField *pFilter, size_t pieceLength) -+{ -+ //set the filter -+ -+ BTFILE *p = m_btfhead; -+ size_t id = 1; -+ u_int64_t sizeBuffer=0; -+ size_t index; -+ -+ -+ pFilter->SetAll(); -+ for( ; p ; p = p->bf_next ){ -+ if(id++ == nfile){ -+ size_t start,stop; -+ start = sizeBuffer/pieceLength; -+ stop = (sizeBuffer+p->bf_length)/pieceLength; -+ // This "if" cuts down on false prints with CTCS. -+ if(arg_file_to_download == nfile){ -+ printf ("\rDownloading file: <%d> %s \nPieces: %d - %d (%d)\n",nfile,p->bf_filename,start,stop,stop-start+1); -+ } -+ p->bf_npieces = stop-start+1; -+ for(index=sizeBuffer/pieceLength;index<=(sizeBuffer+p->bf_length)/pieceLength;index++){ -+ pFilter->UnSet(index); -+ } -+ } -+ sizeBuffer+=(u_int64_t) p->bf_length; -+ } -+ if(nfile>=id || nfile==0){ -+ printf("\nEnd of files list. Resuming normal behaviour\n"); -+ pFilter->Invert(); -+ arg_file_to_download = 0; -+ } -+} -+ -+size_t btFiles::getFilePieces(size_t nfile) -+{ -+ //returns the pieces of the file already gotten -+ -+ BTFILE *p = m_btfhead; -+ size_t id = 1; -+ -+ for( ; p ; p = p->bf_next ){ -+ if(id++ == nfile){ -+ return p->bf_npieces; -+ } -+ } -+return 0; -+} -+ -+BTFILE *btFiles::GetNextFile(BTFILE *file) -+{ -+ static BTFILE *p = m_btfhead; -+ -+ if( 0==file ) p = m_btfhead; -+ else if( p==file ){ -+ p = p->bf_next; -+ }else{ -+ for( p=m_btfhead; p && (p != file); p = p->bf_next); -+ if( 0==p ){ -+ p = m_btfhead; -+ }else{ -+ p = p->bf_next; -+ } -+ } -+ return p; -+} -+ -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btfiles.h ctorrent-1.3.4/btfiles.h ---- ctorrent-1.3.4.sav/btfiles.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btfiles.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,18 +1,22 @@ - #ifndef BTFILES_H - #define BTFILES_H - -+#include "./def.h" - #include <sys/types.h> - #include <stdio.h> --#include "./def.h" -+ -+#include "bitfield.h" - - typedef struct _btfile{ - char *bf_filename; // full path of file. -- size_t bf_length; //single file length limits to 4 GB -+ u_int64_t bf_length; - FILE *bf_fp; - - time_t bf_last_timestamp; // last io timestamp. - -- size_t bf_completed; // already downloaded length -+ u_int64_t bf_completed; // already downloaded length -+ -+ size_t bf_npieces; //number of pieces - - unsigned char bf_flag_opened:1; - unsigned char bf_flag_need:1; -@@ -36,8 +40,8 @@ - - BTFILE* _new_bfnode(); - int _btf_open(BTFILE *sbf_p); -- int _btf_ftruncate(int fd,size_t length); -- int _btf_creat_by_path(const char *pathname, size_t file_length); -+ int _btf_ftruncate(int fd,int64_t length); -+ int _btf_creat_by_path(const char *pathname, int64_t file_length); - int _btf_destroy(); - int _btf_recurses_directory(const char *cur_path, BTFILE *lastnode); - -@@ -53,9 +57,14 @@ - u_int64_t GetTotalLength() const { return m_total_files_length; } - ssize_t IO(char *buf, u_int64_t off, size_t len, const int iotype); - size_t FillMetaInfo(FILE* fp); -+ -+ void SetFilter(int nfile, BitField *pFilter,size_t pieceLength); -+ size_t getFilePieces(size_t nfile); -+ - #ifndef WINDOWS - void PrintOut(); - #endif -+ BTFILE *GetNextFile(BTFILE *file); - }; - - #endif -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btrequest.cpp ctorrent-1.3.4/btrequest.cpp ---- ctorrent-1.3.4.sav/btrequest.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btrequest.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -24,24 +24,179 @@ - RequestQueue::RequestQueue() - { - rq_head = (PSLICE) 0; -+ rq_send = rq_head; - } - - void RequestQueue::Empty() - { - if(rq_head) _empty_slice_list(&rq_head); -+ rq_send = rq_head; - } - - void RequestQueue::SetHead(PSLICE ps) - { - if( rq_head ) _empty_slice_list(&rq_head); - rq_head = ps; -+ rq_send = rq_head; - } - - void RequestQueue::operator=(RequestQueue &rq) - { -+ PSLICE n, u = (PSLICE) 0; -+ size_t idx; -+ int flag = 0; -+ - if( rq_head ) _empty_slice_list(&rq_head); - rq_head = rq.rq_head; -- rq.rq_head = (PSLICE) 0; -+ rq_send = rq_head; -+ -+ // Reassign only the first piece represented in the queue. -+ n = rq_head; -+ idx = n->index; -+ for( ; n ; u = n,n = u->next){ -+ if( rq.rq_send == n ) flag = 1; -+ if( n->index != idx ) break; -+ } -+ if(n){ -+ u->next = (PSLICE) 0; -+ rq.rq_head = n; -+ if(flag) rq.rq_send = rq.rq_head; -+ }else{ -+ rq.rq_head = (PSLICE) 0; -+ rq.rq_send = rq.rq_head; -+ } -+} -+ -+int RequestQueue::Copy(RequestQueue *prq) -+{ -+ PSLICE n, u=(PSLICE)0, ps; -+ size_t idx; -+ -+ if( prq->IsEmpty() ) return 0; -+ -+ ps = prq->GetHead(); -+ idx = ps->index; -+ for ( ; ps; ps = ps->next) { -+ if( ps->index != idx ) break; -+ if( Add(ps->index, ps->offset, ps->length) < 0 ) return -1; -+ } -+ return 0; -+} -+ -+int RequestQueue::CopyShuffle(RequestQueue *prq, size_t piece) -+{ -+ PSLICE n, u=(PSLICE)0, ps, start; -+ size_t idx; -+ unsigned long rndbits; -+ int i=0; -+ -+ if( prq->IsEmpty() ) return 0; -+ -+ n = rq_head; -+ for( ; n ; u = n,n = u->next); // move to end -+ -+ ps = prq->GetHead(); -+ for ( ; ps && ps->index != piece; ps = ps->next); -+ start = ps; -+ -+ idx = ps->index; -+ -+ // First, skip to the slices that haven't been sent to the original peer. -+ if( prq->rq_send && prq->rq_send->index == idx ){ -+ ps = prq->rq_send; -+ for ( ; ps; ps = ps->next){ -+ if( ps->index != idx ) break; -+ if( !i-- ){ -+ rndbits = random(); -+ i = 30; -+ } -+ if( (rndbits>>=1)&01 ){ -+ if( Add(ps->index, ps->offset, ps->length) < 0 ) return -1; -+ } -+ else if( Insert(u, ps->index, ps->offset, ps->length) < 0 ) return -1; -+ } -+ if(u) n = u->next; -+ else n = rq_head; -+ for( ; n ; u = n,n = u->next); // move to end -+ } -+ -+ // Now put the already-requested slices at the end. -+ ps = start; -+ for ( ; ps && ps != prq->rq_send; ps = ps->next){ -+ if( ps->index != idx ) break; -+ if( !i-- ){ -+ rndbits = random(); -+ i = 30; -+ } -+ if( (rndbits>>=1)&01 ){ -+ if( Add(ps->index, ps->offset, ps->length) < 0 ) return -1; -+ } -+ else if( Insert(u, ps->index, ps->offset, ps->length) < 0 ) return -1; -+ } -+ return 0; -+} -+ -+// Counts all queued slices. -+size_t RequestQueue::Qsize() -+{ -+ size_t cnt = 0; -+ PSLICE n = rq_head; -+ PSLICE u = (PSLICE) 0; -+ -+ for( ; n ; u = n,n = u->next) cnt++; // move to end -+ return cnt; -+} -+ -+// Counts only slices from one piece. -+size_t RequestQueue::Qlen(size_t piece) -+{ -+ size_t cnt = 0; -+ PSLICE n = rq_head; -+ PSLICE u = (PSLICE) 0; -+ size_t idx; -+ -+ for ( ; n && n->index != piece; n = n->next); -+ -+ if(n) idx = n->index; -+ for( ; n ; u = n,n = u->next){ -+ if( n->index != idx ) break; -+ cnt++; -+ } -+ return cnt; -+} -+ -+int RequestQueue::Insert(PSLICE ps,size_t idx,size_t off,size_t len) -+{ -+ size_t cnt = 0; -+ PSLICE n = rq_head; -+ PSLICE u = (PSLICE) 0; -+ -+ for( ; n ; u = n,n = u->next) cnt++; // move to end (count) -+ -+ if( cnt >= cfg_req_queue_length ) return -1; // already full -+ -+ n = new SLICE; -+ -+#ifndef WINDOWS -+ if( !n ) return -1; -+#endif -+ -+ n->index = idx; -+ n->offset = off; -+ n->length = len; -+ -+ // ps is the slice to insert after; if 0, insert at the head. -+ if(ps){ -+ n->next = ps->next; -+ ps->next = n; -+ if( rq_send == n->next ) rq_send = n; -+ }else{ -+ n->next = rq_head; -+ rq_head = n; -+ rq_send = rq_head; -+ } -+ -+ return 0; - } - - int RequestQueue::Add(size_t idx,size_t off,size_t len) -@@ -64,8 +219,33 @@ - n->index = idx; - n->offset = off; - n->length = len; -+ n->reqtime = (time_t) 0; -+ -+ if( u ) u->next = n; -+ else{ -+ rq_head = n; -+ rq_send = rq_head; -+ } - -- if( u ) u->next = n; else rq_head = n; -+ if( !rq_send ) rq_send = n; -+ -+ return 0; -+} -+ -+int RequestQueue::Append(PSLICE ps) -+{ -+ size_t cnt = 0; -+ PSLICE n = rq_head; -+ PSLICE u = (PSLICE) 0; -+ -+ for( ; n ; u = n,n = u->next) cnt++; // move to end -+ -+ if( cnt >= cfg_req_queue_length ) return -1; // already full -+ -+ if(u) u->next = ps; -+ else rq_head = ps; -+ -+ if( !rq_send ) rq_send = ps; - - return 0; - } -@@ -82,11 +262,41 @@ - if( !n ) return -1; /* not found */ - - if( u ) u->next = n->next; else rq_head = n->next; -+ if( rq_send == n ) rq_send = n->next; - delete n; - - return 0; - } - -+int RequestQueue::HasIdx(size_t idx) -+{ -+ PSLICE n = rq_head; -+ -+ for( ; n ; n = n->next){ -+ if(n->index == idx) break; -+ } -+ -+ return n ? 1 : 0; -+} -+ -+time_t RequestQueue::GetReqTime(size_t idx,size_t off,size_t len) -+{ -+ PSLICE n = rq_head; -+ -+ for( ; n ; n = n->next){ -+ if(n->index == idx && n->offset == off && n->length == len ) break; -+ } -+ -+ if( !n ) return -1; /* not found */ -+ -+ return n->reqtime; -+} -+ -+void RequestQueue::SetReqTime(PSLICE n,time_t t) -+{ -+ n->reqtime = t; -+} -+ - int RequestQueue::Pop(size_t *pidx,size_t *poff,size_t *plen) - { - PSLICE n; -@@ -99,6 +309,7 @@ - if(poff) *poff = rq_head->offset; - if(plen) *plen = rq_head->length; - -+ if( rq_send == rq_head ) rq_send = n; - delete rq_head; - - rq_head = n; -@@ -121,8 +332,6 @@ - { - size_t i,off,len,ns; - -- if( rq_head ) _empty_slice_list(&rq_head); -- - ns = NSlices(idx); - - for( i = off = 0; i < ns; i++){ -@@ -154,9 +363,11 @@ - int RequestQueue::IsValidRequest(size_t idx,size_t off,size_t len) - { - return ( idx < BTCONTENT.GetNPieces() && -- len && -- (off + len) <= BTCONTENT.GetPieceLength(idx) && -- len <= cfg_max_slice_size) ? -+ len && -+ (off + len) <= BTCONTENT.GetPieceLength(idx) && -+// len <= cfg_max_slice_size) ? -+ // See note for cfg_max_slice_size in btconfig.h -+ len <= 2 * cfg_max_slice_size) ? - 1 : 0; - } - -@@ -196,20 +407,51 @@ - - int PendingQueue::Pending(RequestQueue *prq) - { -- int i = 0; -+ int i = 0, j = 0; -+ PSLICE n, u = (PSLICE) 0; -+ size_t idx, off, len; -+ RequestQueue tmprq; - - if( pq_count >= PENDING_QUEUE_SIZE ){ - prq->Empty(); - return -1; - } -+ if( prq->Qlen(prq->GetRequestIdx()) >= -+ BTCONTENT.GetPieceLength() / cfg_req_slice_size ){ -+ // This shortcut relies on the fact that we don't add to a queue if it -+ // already contains a full piece. -+ prq->Empty(); -+ return 0; -+ } - -- for( ; i < PENDING_QUEUE_SIZE; i++) -+ for( ; i < PENDING_QUEUE_SIZE; i++){ - if(pending_array[i] == (PSLICE) 0){ -- pending_array[i] = prq->GetHead(); -- prq->Release(); -- pq_count++; -- break; -+ // Don't add a piece to Pending more than once. -+ if(!j) j = i; -+ }else if(prq->GetRequestIdx() == pending_array[i]->index){ -+ while( !prq->IsEmpty() && -+ prq->GetRequestIdx() == pending_array[i]->index ) -+ prq->Pop(&idx,&off,&len); -+ if( prq->IsEmpty() ) return 0; -+ i = 0; - } -+ } -+ i = j; -+ pending_array[i] = prq->GetHead(); -+ prq->Release(); -+ pq_count++; -+ -+ // If multiple pieces are queued, break up the queue separately. -+ n = pending_array[i]; -+ idx = n->index; -+ for( ; n ; u = n, n = u->next) -+ if( n->index != idx ) break; -+ if(n){ -+ u->next = (PSLICE) 0; -+ tmprq.SetHead(n); -+ Pending(&tmprq); -+ tmprq.Release(); -+ } - - return 0; - } -@@ -218,16 +460,57 @@ - { - int i = 0; - size_t sc = pq_count; -+ size_t idx; - for( ; i < PENDING_QUEUE_SIZE && sc; i++){ - if( pending_array[i] != (PSLICE) 0){ -+ if( bf.IsSet(pending_array[i]->index) && -+ !prq->HasIdx(pending_array[i]->index) ){ -+ idx = pending_array[i]->index; -+ prq->Append(pending_array[i]); -+ pending_array[i] = (PSLICE) 0; -+ pq_count--; -+ Delete(idx); // delete any copies from Pending -+ break; -+ } - sc--; -- if( bf.IsSet(pending_array[i]->index) ){ -- prq->SetHead(pending_array[i]); -- pending_array[i] = (PSLICE) 0; -- pq_count--; -- break; -+ } -+ } -+ // Return value now indicates whether a piece was assigned. -+ return sc; -+} -+ -+// This routine should no longer be necessary, but keeping it as a failsafe. -+int PendingQueue::Delete(size_t idx) -+{ -+ int i = 0; -+ for ( ; i < PENDING_QUEUE_SIZE && pq_count; i++){ -+ if( (PSLICE) 0 != pending_array[i] && idx == pending_array[i]->index){ -+ if(arg_verbose) fprintf(stderr, "PQD found %d\n", (int)idx); -+ _empty_slice_list(&(pending_array[i])); -+ pq_count--; -+ break; -+ } -+ } -+ return 0; -+} -+ -+int PendingQueue::DeleteSlice(size_t idx, size_t off, size_t len) -+{ -+ int i = 0; -+ RequestQueue rq; -+ for ( ; i < PENDING_QUEUE_SIZE && pq_count; i++){ -+ if( (PSLICE) 0 != pending_array[i] && idx == pending_array[i]->index){ -+ //check if off & len match any slice -+ //remove the slice if so -+ rq.SetHead(pending_array[i]); -+ if( rq.Remove(idx, off, len) == 0 ){ -+ pending_array[i] = rq.GetHead(); -+ if( (PSLICE) 0 == pending_array[i] ) pq_count--; -+ i = PENDING_QUEUE_SIZE; // exit loop - } -+ rq.Release(); - } - } - return 0; - } -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btrequest.h ctorrent-1.3.4/btrequest.h ---- ctorrent-1.3.4.sav/btrequest.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btrequest.h 2006-06-28 19:30:02.000000000 +0200 -@@ -2,6 +2,7 @@ - #define SLICE_H - - #include <sys/types.h> -+#include <time.h> - #include "btcontent.h" - #include "bitfield.h" - -@@ -9,6 +10,7 @@ - size_t index; - size_t offset; - size_t length; -+ time_t reqtime; - struct _slice *next; - }SLICE,*PSLICE; - -@@ -17,6 +19,7 @@ - private: - PSLICE rq_head; - public: -+ PSLICE rq_send; // next slice to request - - RequestQueue(); - ~RequestQueue(); -@@ -24,18 +27,30 @@ - void Empty(); - - void SetHead(PSLICE ps); -+ void SetNextSend(PSLICE ps) { rq_send = ps; } - PSLICE GetHead() const { return rq_head; } -+ PSLICE NextSend() const { return rq_send; } - size_t GetRequestIdx(){ return rq_head ? rq_head->index : BTCONTENT.GetNPieces(); } - size_t GetRequestLen(){ return rq_head ? rq_head->length : 0; } -- void Release(){ rq_head = (PSLICE) 0; } -+ void Release(){ rq_head = rq_send = (PSLICE) 0; } - int IsValidRequest(size_t idx,size_t off,size_t len); - - void operator=(RequestQueue &rq); -+ int Copy(RequestQueue *prq); -+ int CopyShuffle(RequestQueue *prq, size_t piece); -+ size_t Qsize(); -+ size_t Qlen(size_t piece); - - int IsEmpty() const { return rq_head ? 0 : 1; } - -+ int Insert(PSLICE ps,size_t idx,size_t off,size_t len); - int Add(size_t idx,size_t off,size_t len); -+ int Append(PSLICE ps); - int Remove(size_t idx,size_t off,size_t len); -+ int HasIdx(size_t idx); -+ time_t GetReqTime(size_t idx,size_t off,size_t len); -+ void SetReqTime(PSLICE n,time_t t); -+ - - int Pop(size_t *pidx,size_t *poff,size_t *plen); - int Peek(size_t *pidx,size_t *poff,size_t *plen) const; -@@ -60,6 +75,8 @@ - int Pending(RequestQueue *prq); - int ReAssign(RequestQueue *prq, BitField &bf); - int Exist(size_t idx); -+ int Delete(size_t idx); -+ int DeleteSlice(size_t idx, size_t off, size_t len); - }; - - extern PendingQueue PENDINGQUEUE; -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btstream.cpp ctorrent-1.3.4/btstream.cpp ---- ctorrent-1.3.4.sav/btstream.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/btstream.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -1,5 +1,6 @@ - #include <arpa/inet.h> - #include "btstream.h" -+#include "peer.h" - #include "msgencode.h" - #include "btconfig.h" - -@@ -11,22 +12,21 @@ - ssize_t btStream::Send_State(unsigned char state) - { - char msg[H_BASE_LEN + 4]; -- *(size_t*)msg = htonl(H_BASE_LEN); -+ -+ set_nl(msg, H_BASE_LEN); - msg[4] = (char)state; -- return out_buffer.PutFlush(sock,msg,H_BASE_LEN + 4); -+ return out_buffer.Put(sock,msg,H_BASE_LEN + 4); - } - - ssize_t btStream::Send_Have(size_t idx) - { - char msg[H_HAVE_LEN + 4]; -- size_t *p = (size_t*)msg; - -- *p = htonl(H_HAVE_LEN); -+ set_nl(msg, H_HAVE_LEN); - msg[4] = (char)M_HAVE; -- p = (size_t*)(msg + 5); -- *p = htonl(idx); -+ set_nl(msg + 5, idx); - -- return out_buffer.PutFlush(sock,msg,H_HAVE_LEN + 4); -+ return out_buffer.Put(sock,msg,H_HAVE_LEN + 4); - } - - ssize_t btStream::Send_Bitfield(char *bit_buf,size_t len) -@@ -37,20 +37,18 @@ - if(r < 0) return r; - r = out_buffer.Put(sock,(char*)&t,1); - if(r < 0) return r; -- return out_buffer.PutFlush(sock,bit_buf,len); -+ return out_buffer.Put(sock,bit_buf,len); - } - - ssize_t btStream::Send_Cancel(size_t idx,size_t off,size_t len) - { - char msg[H_CANCEL_LEN + 4]; -- size_t *p = (size_t*)msg; - -- *p = htonl(H_CANCEL_LEN); -+ set_nl(msg, H_CANCEL_LEN); - msg[4] = M_CANCEL; -- p = (size_t*)(msg + 5); -- *p = htonl(idx); p++; -- *p = htonl(off); p++; -- *p = htonl(len); -+ set_nl(msg + 5, idx); -+ set_nl(msg + 9, off); -+ set_nl(msg + 13, len); - return out_buffer.Put(sock,msg,H_CANCEL_LEN + 4); - } - -@@ -72,21 +70,19 @@ - ssize_t btStream::Send_Request(size_t idx, size_t off,size_t len) - { - char msg[H_REQUEST_LEN + 4]; -- size_t *p = (size_t*) msg; - -- *p = htonl(H_REQUEST_LEN); -+ set_nl(msg, H_REQUEST_LEN); - msg[4] = (char)M_REQUEST; -- p = (size_t*)(msg + 5); -- *p = htonl(idx); p++; -- *p = htonl(off); p++; -- *p = htonl(len); -+ set_nl(msg + 5, idx); -+ set_nl(msg + 9, off); -+ set_nl(msg + 13, len); - return out_buffer.Put(sock,msg,H_REQUEST_LEN + 4); - } - - ssize_t btStream::Send_Keepalive() - { - size_t i = 0; -- return out_buffer.PutFlush(sock,(char*)&i,4); -+ return out_buffer.Put(sock,(char*)&i,4); - } - - int btStream::HaveMessage() -@@ -94,7 +90,7 @@ - // if message arrived. - size_t r; - if( 4 <= in_buffer.Count() ){ -- r = ntohl(*(size_t*)in_buffer.BasePointer()); -+ r = get_nl(in_buffer.BasePointer()); - if( (cfg_max_slice_size + H_PIECE_LEN + 4) < r) return -1; //message too long - if( (r + 4) <= in_buffer.Count() ) return 1; - } -@@ -113,5 +109,5 @@ - - ssize_t btStream::Send_Buffer(char *buf, size_t len) - { -- return out_buffer.PutFlush(sock,buf,len); -+ return out_buffer.Put(sock,buf,len); - } -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bttime.h ctorrent-1.3.4/bttime.h ---- ctorrent-1.3.4.sav/bttime.h 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/bttime.h 2006-06-28 19:30:02.000000000 +0200 -@@ -0,0 +1,7 @@ -+#ifndef BTTIME_H -+#define BTTIME_H -+ -+extern time_t now; -+ -+#endif -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bufio.cpp ctorrent-1.3.4/bufio.cpp ---- ctorrent-1.3.4.sav/bufio.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/bufio.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -61,7 +61,7 @@ - #ifndef WINDOWS - if(errno == EINTR) continue; - #endif -- return (EWOULDBLOCK == errno) ? (ssize_t)t : -1; -+ return (EWOULDBLOCK == errno || EAGAIN == errno) ? (ssize_t)t : -1; - }else if( 0 == r ){ - return t; // no possible??? - }else{ -@@ -83,7 +83,7 @@ - #ifndef WINDOWS - if(errno == EINTR) continue; - #endif -- return (EWOULDBLOCK == errno) ? (ssize_t)t : -1; -+ return (EWOULDBLOCK == errno || EAGAIN == errno) ? (ssize_t)t : -1; - }else if( 0 == r ){ - f_socket_remote_closed = 1; - return t; //connection closed by remote. -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bufio.h ctorrent-1.3.4/bufio.h ---- ctorrent-1.3.4.sav/bufio.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/bufio.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,8 +1,8 @@ - #ifndef BUFIO_H - #define BUFIO_H - --#include <sys/types.h> - #include "def.h" -+#include <sys/types.h> - - #ifdef WINDOWS - #include <Winsock2.h> -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ChangeLog ctorrent-1.3.4/ChangeLog ---- ctorrent-1.3.4.sav/ChangeLog 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/ChangeLog 2006-06-28 19:30:02.000000000 +0200 -@@ -1 +1,379 @@ --*EMPTY* -+ -+ Enhanced CTorrent Change Log -+ _________________________________________________________________ -+ -+ Changes for "dnh2" Release -+ -+ Patches -+ * The following patches or their functionality are incorporated: -+ 1380164 [dnh1.2] -+ 1357832 [invert] (included in dnh1.2) -+ 1352866 [dnh1.1] -+ 1266767 [passkey2] -+ 1239547 [dnh1] -+ 1170457 [standalone-sha1] Added as a fallback case in configure if -+ OpenSSL is not found. To force it to be used, define -+ USE_STANDALONE_SHA1 in config.h (after running configure). -+ 1164454 [ip] -+ 1119610 [vfat] This bug appears to be linux-specific; I've tried -+ to handle it in a more general way that may apply to similar -+ situations on other platforms and filesystems, but I have limited -+ capability to test this. -+ 1067196 [lfs] This is the large-file support that many have asked -+ for. -+ -+ Optimization -+ * Use fewer call to random() by shifting the previously unused bits. -+ * Time() calls have been greatly reduced; a global timestamp -+ variable "now" is set once per main loop interation and referenced -+ in functions that need a timestamp (except the caching I/O -+ routines which were left alone). -+ * Overall current bandwidth rates are now computed only once per -+ main loop and referenced in any routines that evaluate or control -+ bandwidth. -+ * Avoid flushing peer output buffers except in SendModule. This -+ allows for some consolidation of messages to reduce network -+ overhead. -+ -+ Code Fixes -+ * Fixed use of cfg_req_queue_length to be the actual queue size -+ (queue was half of this value). -+ * Fixed: "peer is" verbose output could fubar the terminal. -+ * Formatting: Replaced indentation tabs with spaces for consistency. -+ -+ Operational Enhancements -+ * Improved piece selection methods to include rarity as a factor. -+ This is not strictly "rarest-first", as we do not make a -+ comprehensive effort to find the "rarest" piece or rank pieces by -+ rarity. Rather, we use a more efficient compromise and try to find -+ the set of pieces that have "trade value" (another peer needs -+ them) and make a random choice from that set. Here is the current -+ preference order used in each mode: -+ Trade Value is defined as: -+ 1. Piece that only this peer has (not considering other -+ seeders), that a peer in which we're interested needs. -+ 2. Piece that not every peer in which we're interested has. -+ 3. Piece that only this peer has (not considering other -+ seeders). -+ 4. Piece that not every peer has. -+ Normal Mode -+ 1. Piece we tried to get from another peer but stopped due to -+ choking or lost connection. (We have part of the piece -+ already.) -+ 2. Piece most recently acquired by the peer (possibly/probably -+ rare). -+ 3. Piece with trade value. -+ 4. Any piece not yet requested. -+ Initial-piece Mode -+ 1. Piece with trade value which is already in progress. -+ 2. Piece with trade value that more than one peer has. -+ 3. Piece with trade value. -+ 4. Any piece not yet requested. -+ Endgame Mode -+ 1. Piece with trade value which is already in progress, of which -+ we have the least amount. -+ 2. Piece already in progress of which we have the least amount. -+ * Advanced request queueing system. -+ + Instead of requesting all of the slices for a piece at one -+ time, we now measure latency to the peer and send requests -+ based on how long it takes the data to arrive. This avoids -+ wasting upload banwidth by having too many outstanding -+ requests: If we get choked or lose the connection, the extra -+ requests were wasted; in initial or endgame modes, more -+ requests would have to be cancelled when we completed the -+ piece. -+ + A new piece will be queued for download when there is space -+ in the queue and we've requested the slices that have been -+ queued already. We also don't wait for the current piece to -+ complete before sending requests for a new piece. This helps -+ to maintain a continuous flow of data in the download -+ pipeline. -+ + When duplicating a request in initial or endgame mode, slices -+ that have already been requested are queued last. -+ * Don't send HAVE messages to seeders (to save UL bandwidth). -+ + Since we maintain interested state, and know the peer is a -+ seeder, we'll do the right thing when we become a seeder. -+ + Not sending HAVE to all peers (leechers) that already have -+ the piece is a bad idea IMO. If everyone takes the same -+ attitude, none of us will know when another becomes a seeder -+ and connections will remain open/occupied. -+ + We do send a HAVE to seeders upon completing our first piece -+ so that we don't continue to appear empty. -+ * Endgame strategy is used in get1file mode to complete the file. -+ * Queue management: -+ + Don't accept requests from choked peers. -+ + Discard peer's reponse_q when we choke them. -+ + Don't send cancels when we get choked (according to spec & -+ discussions). -+ + Don't put full piece queues in pending. -+ + Move closing peer's request queue to pending instead of -+ discarding it. -+ * Prefer uploading to or downloading from a peer after we skip them -+ due to bandwidth limiting. This is done via the g_next_up and -+ g_defer_up global variables in peer.cpp (for UL; s/up/dn for the -+ DL versions). The peerlist Sort() function and peer "click" -+ variables have been removed since they are not needed with this -+ feature. -+ -+ Options & Features -+ * The -c option now reports file completion status. -+ + As a side effect the metainfo details are printed twice. This -+ allows you to view the torrent contents while pieces are -+ being verified. -+ + Total percentage completion is also added to the output. -+ * "-E" option to seed to a specified UL:DL ratio. Seeding will stop -+ when this ratio or the timeout (-e) is reached. If CTorrent starts -+ as a seeder, the ratio is interpreted as UL:[torrent size]. -+ * If "-e 0" is specified (explicitly) and -E is used, there will be -+ no timeout; seeding will continue until the ratio is reached. -+ * The "-m" option previously didn't do anything, and it isn't clear -+ what it was originally going to do. Now the default value is 1, -+ and CTorrent will try to maintain at least this many peers by -+ contacting the tracker early if the peer count falls below this -+ value. This feature was present in release dnh1 but the value was -+ not changeable. -+ Actually it seems likely that this was to be number of peers that -+ the client would try to obtain (by initiating connections), as the -+ "official" client does; this is mentioned as a note in the online -+ specification. I don't really see the value in that though. That -+ said, the option as implemented here should rarely be used. It -+ might be useful only with torrents that have significantly more -+ than max_peers total peers and use a long tracker update interval -+ (such that you tend to drop a lot of peers betwen updates). -+ * "-z" option to set the slice size (the unit of a request, i.e. the -+ discrete amount of data that will be requested from a peer at one -+ time). The slice size now defaults to 16K regardless of the piece -+ length. Request queue size is computed and set based on the slice -+ size, as it now affects only system resources (though not a lot) -+ and not the way that requests are sent. -+ * Add support for "key" and "trackerid" tracker interaction -+ parameters. -+ * Support/display tracker warning message -+ * Now able to handle torrents with more than 255 files. -+ * Support for [1]CTorrent Control Server, an application and -+ protocol for monitoring and managing multiple Enhanced CTorrent -+ clients. The "-S" option is used to connect to CTCS, as in "-S -+ localhost:2780" if CTCS is listening at port 2780 on the local -+ system. Appending a colon ("-S localhost:2780:") will prompt for a -+ password to authenticate with CTCS. -+ -+ Peer Handling -+ * Count immediate choke-unchoke (either order) as an error (two -+ errors actually, since it's so wasteful). -+ It may be that some clients do this to stimulate the peer when -+ they think it hasn't responded to their last unchoke (due to high -+ latency). It would be better for them to just repeat the unchoke -+ rather than choke-unchoke, as by choking they will cause the peer -+ to send the requests again. -+ * Detect unresponsive peer connections and try to fix them or -+ disconnect them. Basically, if a peer doesn't respond to our -+ request in a reasonable time then we first assume that our request -+ was lost in transmission; if it happens again then we assume the -+ connection is unreliable. -+ * Handle peers that suppress HAVE messages so we don't always think -+ that they're empty (and thus give them preferential treatment for -+ uploading). If we've sent the peer an amount of data equivalent to -+ two pieces, assume that they now have at least one complete piece. -+ _________________________________________________________________ -+ -+ Changes for "dnh1.2" Release -+ -+ These are just corrections to the previous release that I felt were -+ necessary. Much more improvement is coming in the dnh2 release. -+ -+ Bug/code fixes -+ * Bitfield::Invert patch [1357832 on sourceforge] described below. -+ * Fixed "piece length too long" check to reflect the actual queue -+ length used. -+ * Accept 128K slice size for peer requests. -+ * "Return" keyword in Random_init() removed due to potential compile -+ error. -+ * Modified longer-wait test in the optimistic unchoke routine to -+ consider whether the peer is currently choked. -+ _________________________________________________________________ -+ -+ Bitfield::Invert bug -+ -+ There is a bug in the Bitfield::Invert() function that affects the -+ ctorrent-1.3.4 base code as well as releases dnh1 and dnh1.1. This can -+ cause the application to fail (segmentation fault) or may affect -+ downloading of all pieces of the torrent. A patch is available in the -+ Download secion. -+ _________________________________________________________________ -+ -+ Changes for "dnh1.1" Release -+ -+ These are just corrections to the previous release that I felt were -+ necessary. Much more improvement is coming in the next release. -+ -+ Bug/code fixes -+ * Peer count would increase on each tracker update if there were no -+ seeders. -+ * RequestQueue::CopyShuffle() changed to use a pointer argument. -+ * Fixed some incorrectness in PendingQueue::Delete() and -+ PendingQueue::DeleteSlice() which could cause a memory leak. -+ * Fixed random-chance inversion bug in PeerList::UnChokeCheck() -+ affecting choice for optimistic unchoking. -+ -+ Improvements -+ * Move StopDLTimer() call from RequestPiece() to RequestCheck(), -+ which could occasionally affect peer download rate measurement. -+ * Most clients do not like a slice size of 128K even though it is -+ the max allowed by the BT specification. Changed max slice size to -+ 64K. Note that the maximum piece length is 2MB (2097152); if you -+ need to download a torrent with a larger piece size you can change -+ the value of cfg_req_queue_length in btconfig.h from 64 to 128. -+ * Contact tracker immediately upon becoming (or starting as) a -+ seeder. -+ * Changed SendModule() to send only one slice at a time. This will -+ help with fairly distributing upload bandwidth among the unchoked -+ peers. -+ * Changed default peer ID prefix to '-CD0101-', indicating -+ CTorrent-dnh1.1 release. -+ _________________________________________________________________ -+ -+ Changes for "dnh1" Release -+ -+ This is the first release. "dnh" identifies this patchset, and "1" -+ indicates release version 1 of the patchset. -+ -+ Patches -+ * Incorporates the following patches. The number is the Request ID -+ from the [2]SourceForge patches page, which you can reference for -+ the details of each patch. The name in brackets is the name of the -+ patch file or a name I chose to refer to the patch. Some of these -+ names are used below (in brackets) to describe a fix or change to -+ a particular patch. -+ 1042808 [getcwd] (incorporated in get1file patch) -+ 1084776 [passkey] (incorporated in udlimit patch) -+ 1109266 [align] -+ 1109287 [tracker/tracker2] -+ 1114197 [fmt] (incorporated in get1file patch) -+ 1114364 [resetdl] -+ 1116448 [get1file] -+ 1118597 [crash] -+ 1119467 [stall] -+ 1119492 [rate] -+ 1119497 [flush] -+ 1119519 [opt] -+ 1119689 [status] -+ 1124342 [udlimit] -+ -+ Download performance -+ * If a peer socket is ready for reading and writing, perform both. -+ Previously the cases were exclusive, with preference given to -+ reading. -+ * Download requests are now made to peers when they are ready for -+ writing (in addition to the existing event-driven cases). This -+ fixes peer stalls when a request couldn't be sent in an -+ event-triggered case due to bandwidth limiting or other -+ circumstances. -+ * Additional tests added so that the above request checking doesn't -+ create hard loops. -+ -+ Bandwidth measurement/management -+ * [rate] Bandwidth reporting is now not capped. Also, only the time -+ used for the samples taken is used in the calculation rather than -+ the maximum interval (this affects rate calculation for individual -+ peers). -+ * Additional upload and download bandwidth limit checks added so -+ that bw management is more accurate. -+ * Corrected condition inversion bug in Rate::StopTimer(), which -+ affects peer rate calculations. -+ -+ Peer count -+ * Request our max number of peers from the tracker each time rather -+ than just taking the tracker's default, so we can try to fill up. -+ * The tracker will be contacted early if all peers disconnect so -+ that we can actively try to establish some more peer connections. -+ To avoid hammering the tracker, we must have at least one peer for -+ 15 seconds in order for this to be invoked. -+ * Some clients use nonzero bytes in the "reserved" part of the -+ handshake. Added code to ignore the reserved bytes if the rest of -+ the handshake is as expected. This includes Azureus 2300 thru 2304 -+ (latest) which gives 0x80 as the first reserved byte and BitComet -+ which gives 0x6578 ("ex") as the first two bytes. -+ * Update peer's timestamp on any message, not just keepalives. Any -+ receipt of data from a peer now resets its timeout, preventing -+ early disconnect. -+ -+ Parallel requests -+ * Initial-piece and endgame cases have been improved so that pieces -+ will be requested from multiple peers. Cancels are sent as slices -+ (subpieces) are received. This endgame strategy is described in -+ the BitTorrent online spec. The startup strategy is also described -+ in posts and facilitates obtaining a single piece more rapidly in -+ order to obtain some trade value. In initial mode, the piece of -+ which we need the least parts is targeted. In endgame mode, the -+ piece of which we need the most parts is targeted. Slices that are -+ cancelled are also removed from the "pending" queue, as are pieces -+ that are completed. -+ * When duplicating a piece request, the slice request order is also -+ shuffled in order to minimize duplication of effort. -+ -+ Tracker info -+ * [status] Seems to be missing tracker.cpp diff. Added code to get -+ tracker's total peers, but not all trackers report these fields in -+ the normal response. Also added code to count successful updates -+ from the tracker. -+ * Added tracker connection state to status line (when -+ connecting/connected). -+ -+ Tracker contact -+ * When interrupting (ctrl-C), connect to the tracker immediately -+ rather than waiting 15 seconds. -+ * Contact tracker "soon" after transitioning to seeder state. -+ -+ Peer interaction -+ * Manage our interested state for each peer dynamically as content -+ changes. -+ * Unchoking -+ + Use the peer's interested state (confirming via the bitfield -+ that it needs our data) to consider unchoking. Using only the -+ bitfield could cause us to waste an upload slot on a peer -+ that doesn't have all content but isn't interested (like a -+ single-file downloader). -+ + Choke peers that become uninterested or don't need our data. -+ + Try unchoking new peers only as slots open or the optimistic -+ unchoke rotates. Unchoking too many peers can temporarily -+ reduce per-peer upload rates, which would make uploading to -+ us unappealing for good peers. -+ + In a tie for download speed, prefer to unchoke the peer to -+ whom we've uploaded the least data relative to what we've -+ downloaded from him. -+ * Optimistic unchoking -+ + Fixed condition inversion bug causing opt unchoking to occur -+ too often. -+ + A peer who has no pieces is now preferred 75% vs. a peer who -+ already has at least one piece, in order to help the new peer -+ become productive. This is documented in the online spec. -+ + Set peer's last-unchoke-time when choking the peer to get -+ better rotation of the optimistic unchoke. The value is now -+ the last time that a peer was in the unchoked state rather -+ than the time of the last unchoke event. -+ -+ Miscellaneous items -+ * [tracker] Fixed normal program end (stop) process, which was -+ crashing. -+ * [get1file] Restore compact tracker response support. -+ * [get1file] Made display of the status line info dependent on -+ whether the option is in use. -+ * [get1file] Apply the filter when checking for what we need from a -+ peer instead of when recording what the peer has; this prevents -+ stalls when we move on to the next file. Update interested state -+ for each peer when we begin a new file. Also move the file-done -+ check into the piece completion code and check whether the next -+ file(s) has also been completed. -+ * Reduced the slice size from 32K to 16K (same as BT & Azureus). -+ This provides more precise DL rate measurement, and helps insure -+ that we receive a productive amount of data (i.e. a complete -+ slice) even if we are unchoked by a peer for only one cycle. See -+ [3]http://groups.yahoo.com/group/BitTorrent/message/1260 for more -+ discussion/analysis on this. -+ * Added -v (verbose) option for additional debugging output. -+ -+References -+ -+ 1. http://www.rahul.net/dholmes/ctorrent/ctcs.html -+ 2. http://sourceforge.net/tracker/?atid=598034&group_id=91688&func=browse -+ 3. http://groups.yahoo.com/group/BitTorrent/message/1260 -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/config.h.in ctorrent-1.3.4/config.h.in ---- ctorrent-1.3.4.sav/config.h.in 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/config.h.in 2006-06-28 19:30:02.000000000 +0200 -@@ -10,6 +10,9 @@ - /* Define to 1 if you have the <fcntl.h> header file. */ - #undef HAVE_FCNTL_H - -+/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ -+#undef HAVE_FSEEKO -+ - /* Define to 1 if you have the `ftruncate' function. */ - #undef HAVE_FTRUNCATE - -@@ -31,6 +34,9 @@ - /* Define to 1 if you have the `crypt' library (-lcrypt). */ - #undef HAVE_LIBCRYPT - -+/* Define to 1 if you have the `crypto' library (-lcrypto). */ -+#undef HAVE_LIBCRYPTO -+ - /* Define to 1 if you have the `md' library (-lmd). */ - #undef HAVE_LIBMD - -@@ -107,6 +113,9 @@ - /* Define to 1 if you have the `strtol' function. */ - #undef HAVE_STRTOL - -+/* Define to 1 if you have the `strtoll' function. */ -+#undef HAVE_STRTOLL -+ - /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'. - */ - #undef HAVE_SYS_DIR_H -@@ -164,15 +173,29 @@ - /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ - #undef TIME_WITH_SYS_TIME - -+/* Define to 1 to use the Steve Reid's public-domain SHA-1 code. */ -+#undef USE_STANDALONE_SHA1 -+ - /* Version number of package */ - #undef VERSION - -+/* Number of bits in a file offset, on hosts where this is settable. */ -+#undef _FILE_OFFSET_BITS -+ -+/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ -+#undef _LARGEFILE_SOURCE -+ -+/* Define for large files, on AIX-style hosts. */ -+#undef _LARGE_FILES -+ - /* Define to empty if `const' does not conform to ANSI C. */ - #undef const - --/* Define as `__inline' if that's what the C compiler calls it, or to nothing -- if it is not supported. */ -+/* Define to `__inline__' or `__inline' if that's what the C compiler -+ calls it, or to nothing if 'inline' is not supported under any name. */ -+#ifndef __cplusplus - #undef inline -+#endif - - /* Define to `unsigned' if <sys/types.h> does not define. */ - #undef size_t -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/configure ctorrent-1.3.4/configure ---- ctorrent-1.3.4.sav/configure 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/configure 2006-06-28 19:30:02.000000000 +0200 -@@ -1,11 +1,10 @@ - #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.57 for CTorrent devel. -+# Generated by GNU Autoconf 2.59 for CTorrent dnh2. - # --# Report bugs to <bsdi@sina.com>. -+# Report bugs to <dholmes@ct.boxmail.com>. - # --# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 --# Free Software Foundation, Inc. -+# Copyright (C) 2003 Free Software Foundation, Inc. - # This configure script is free software; the Free Software Foundation - # gives unlimited permission to copy, distribute and modify it. - ## --------------------- ## -@@ -22,9 +21,10 @@ - elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix - fi -+DUALCASE=1; export DUALCASE # for MKS sh - - # Support unset when possible. --if (FOO=FOO; unset FOO) >/dev/null 2>&1; then -+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset - else - as_unset=false -@@ -43,7 +43,7 @@ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME - do -- if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then -+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var -@@ -220,16 +220,17 @@ - if mkdir -p . 2>/dev/null; then - as_mkdir_p=: - else -+ test -d ./-p && rmdir ./-p - as_mkdir_p=false - fi - - as_executable_p="test -f" - - # Sed expression to map a string onto a valid CPP name. --as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - - # Sed expression to map a string onto a valid variable name. --as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - # IFS -@@ -268,9 +269,9 @@ - # Identity of this package. - PACKAGE_NAME='CTorrent' - PACKAGE_TARNAME='ctorrent' --PACKAGE_VERSION='devel' --PACKAGE_STRING='CTorrent devel' --PACKAGE_BUGREPORT='bsdi@sina.com' -+PACKAGE_VERSION='dnh2' -+PACKAGE_STRING='CTorrent dnh2' -+PACKAGE_BUGREPORT='dholmes@ct.boxmail.com' - - ac_unique_file="ctorrent.cpp" - # Factoring default headers for most tests. -@@ -310,7 +311,7 @@ - # include <unistd.h> - #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 AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot 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 CPP EGREP 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 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 CPP EGREP LIBOBJS LTLIBOBJS' - ac_subst_files='' - - # Initialize some variables set by options. -@@ -669,7 +670,7 @@ - - # Be sure to have absolute paths. - for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ -- localstatedir libdir includedir oldincludedir infodir mandir -+ localstatedir libdir includedir oldincludedir infodir mandir - do - eval ac_val=$`echo $ac_var` - case $ac_val in -@@ -709,10 +710,10 @@ - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || - $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$0" : 'X\(//\)[^/]' \| \ -- X"$0" : 'X\(//\)$' \| \ -- X"$0" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$0" : 'X\(//\)[^/]' \| \ -+ X"$0" : 'X\(//\)$' \| \ -+ X"$0" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -787,7 +788,7 @@ - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF --\`configure' configures CTorrent devel to adapt to many kinds of systems. -+\`configure' configures CTorrent dnh2 to adapt to many kinds of systems. - - Usage: $0 [OPTION]... [VAR=VALUE]... - -@@ -812,9 +813,9 @@ - cat <<_ACEOF - Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX -- [$ac_default_prefix] -+ [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX -- [PREFIX] -+ [PREFIX] - - By default, \`make install' will install all the files in - \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -@@ -849,15 +850,16 @@ - - if test -n "$ac_init_help"; then - case $ac_init_help in -- short | recursive ) echo "Configuration of CTorrent devel:";; -+ short | recursive ) echo "Configuration of CTorrent dnh2:";; - esac - cat <<\_ACEOF - - Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] -- --disable-dependency-tracking Speeds up one-time builds -- --enable-dependency-tracking Do not reject slow dependency extractors -+ --disable-dependency-tracking speeds up one-time build -+ --enable-dependency-tracking do not reject slow dependency extractors -+ --disable-largefile omit support for large files - - Some influential environment variables: - CXX C++ compiler command -@@ -873,7 +875,7 @@ - Use these variables to override the choices made by `configure' or to help - it to find libraries and programs with nonstandard names/locations. - --Report bugs to <bsdi@sina.com>. -+Report bugs to <dholmes@ct.boxmail.com>. - _ACEOF - fi - -@@ -907,12 +909,45 @@ - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; - esac --# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be --# absolute. --ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` --ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` --ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` --ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` -+ -+# Do not use `cd foo && pwd` to compute absolute paths, because -+# the directories may not exist. -+case `pwd` in -+.) ac_abs_builddir="$ac_dir";; -+*) -+ case "$ac_dir" in -+ .) ac_abs_builddir=`pwd`;; -+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -+ *) ac_abs_builddir=`pwd`/"$ac_dir";; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_top_builddir=${ac_top_builddir}.;; -+*) -+ case ${ac_top_builddir}. in -+ .) ac_abs_top_builddir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_srcdir=$ac_srcdir;; -+*) -+ case $ac_srcdir in -+ .) ac_abs_srcdir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_top_srcdir=$ac_top_srcdir;; -+*) -+ case $ac_top_srcdir in -+ .) ac_abs_top_srcdir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -+ esac;; -+esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. -@@ -923,7 +958,7 @@ - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || -- test -f $ac_srcdir/configure.in; then -+ test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help - else -@@ -936,11 +971,10 @@ - test -n "$ac_init_help" && exit 0 - if $ac_init_version; then - cat <<\_ACEOF --CTorrent configure devel --generated by GNU Autoconf 2.57 -+CTorrent configure dnh2 -+generated by GNU Autoconf 2.59 - --Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 --Free Software Foundation, Inc. -+Copyright (C) 2003 Free Software Foundation, Inc. - This configure script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it. - _ACEOF -@@ -951,8 +985,8 @@ - This file contains any messages produced by compilers while - running configure, to aid debugging if configure makes a mistake. - --It was created by CTorrent $as_me devel, which was --generated by GNU Autoconf 2.57. Invocation command line was -+It was created by CTorrent $as_me dnh2, which was -+generated by GNU Autoconf 2.59. Invocation command line was - - $ $0 $@ - -@@ -1029,19 +1063,19 @@ - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then -- ac_must_keep_next=false # Got value, back to normal. -+ ac_must_keep_next=false # Got value, back to normal. - else -- case $ac_arg in -- *=* | --config-cache | -C | -disable-* | --disable-* \ -- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ -- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ -- | -with-* | --with-* | -without-* | --without-* | --x) -- case "$ac_configure_args0 " in -- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; -- esac -- ;; -- -* ) ac_must_keep_next=true ;; -- esac -+ case $ac_arg in -+ *=* | --config-cache | -C | -disable-* | --disable-* \ -+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ -+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ -+ | -with-* | --with-* | -without-* | --without-* | --x) -+ case "$ac_configure_args0 " in -+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; -+ esac -+ ;; -+ -* ) ac_must_keep_next=true ;; -+ esac - fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. -@@ -1075,12 +1109,12 @@ - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ -- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; -- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" -+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; -+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; - } -@@ -1109,7 +1143,7 @@ - for ac_var in $ac_subst_files - do - eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -+ echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - fi -@@ -1128,7 +1162,7 @@ - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 -- rm -f core core.* *.core && -+ rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status - ' 0 -@@ -1208,7 +1242,7 @@ - # value. - ac_cache_corrupted=false - for ac_var in `(set) 2>&1 | -- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do -+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" -@@ -1225,13 +1259,13 @@ - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then -- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 - echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} -- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 - echo "$as_me: former value: $ac_old_val" >&2;} -- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 - echo "$as_me: current value: $ac_new_val" >&2;} -- ac_cache_corrupted=: -+ ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. -@@ -1287,7 +1321,7 @@ - - - --am__api_version="1.7" -+am__api_version="1.9" - ac_aux_dir= - for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then -@@ -1324,6 +1358,7 @@ - # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag - # AFS /usr/afsws/bin/install, which mishandles nonexistent args - # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -+# OS/2's system install, which has a completely different semantic - # ./install, which can be erroneously created by make from ./install.sh. - echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 - echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -@@ -1340,6 +1375,7 @@ - case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ -+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. -@@ -1347,20 +1383,20 @@ - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then -- if test $ac_prog = install && -- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -- # AIX install. It has an incompatible calling convention. -- : -- elif test $ac_prog = install && -- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -- # program-specific install script used by HP pwplus--don't use. -- : -- else -- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" -- break 3 -- fi -- fi -+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then -+ if test $ac_prog = install && -+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -+ # AIX install. It has an incompatible calling convention. -+ : -+ elif test $ac_prog = install && -+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -+ # program-specific install script used by HP pwplus--don't use. -+ : -+ else -+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" -+ break 3 -+ fi -+ fi - done - done - ;; -@@ -1448,7 +1484,6 @@ - program_transform_name=`echo $program_transform_name | sed -f conftest.sed` - rm conftest.sed - -- - # expand $ac_aux_dir to an absolute path - am_aux_dir=`cd $ac_aux_dir && pwd` - -@@ -1462,6 +1497,39 @@ - echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} - fi - -+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then -+ # We used to keeping the `.' as first argument, in order to -+ # allow $(mkdir_p) to be used without argument. As in -+ # $(mkdir_p) $(somedir) -+ # where $(somedir) is conditionally defined. However this is wrong -+ # for two reasons: -+ # 1. if the package is installed by a user who cannot write `.' -+ # make install will fail, -+ # 2. the above comment should most certainly read -+ # $(mkdir_p) $(DESTDIR)$(somedir) -+ # so it does not work when $(somedir) is undefined and -+ # $(DESTDIR) is not. -+ # To support the latter case, we have to write -+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), -+ # so the `.' trick is pointless. -+ mkdir_p='mkdir -p --' -+else -+ # On NextStep and OpenStep, the `mkdir' command does not -+ # recognize any option. It will interpret all options as -+ # directories to create, and then abort because `.' already -+ # exists. -+ for d in ./-p ./--version; -+ do -+ test -d $d && rmdir $d -+ done -+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. -+ if test -f "$ac_aux_dir/mkinstalldirs"; then -+ mkdir_p='$(mkinstalldirs)' -+ else -+ mkdir_p='$(install_sh) -d' -+ fi -+fi -+ - for ac_prog in gawk mawk nawk awk - do - # Extract the first word of "$ac_prog", so it can be a program name with args. -@@ -1504,7 +1572,7 @@ - - echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 - echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 --set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` -+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` - if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -@@ -1540,7 +1608,7 @@ - fi - rmdir .tst 2>/dev/null - -- # test to see if srcdir already configured -+# test to see if srcdir already configured - if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -@@ -1560,7 +1628,7 @@ - - # Define the identity of the package. - PACKAGE=ctorrent -- VERSION=devel -+ VERSION=dnh2 - - - cat >>confdefs.h <<_ACEOF -@@ -1588,9 +1656,6 @@ - - MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -- --AMTAR=${AMTAR-"${am_missing_run}tar"} -- - install_sh=${install_sh-"$am_aux_dir/install-sh"} - - # Installed binaries are usually stripped using `strip' when the user -@@ -1683,6 +1748,13 @@ - - # We need awk for the "check" target. The system "awk" is bad on - # some platforms. -+# Always define AMTAR for backward compatibility. -+ -+AMTAR=${AMTAR-"${am_missing_run}tar"} -+ -+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' -+ -+ - - - -@@ -1806,7 +1878,6 @@ - (exit $ac_status); } - - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -1826,8 +1897,8 @@ - # Try to create an executable without -o first, disregard a.out. - # It will help us diagnose broken compilers, and finding out an intuition - # of exeext. --echo "$as_me:$LINENO: checking for C++ compiler default output" >&5 --echo $ECHO_N "checking for C++ compiler default output... $ECHO_C" >&6 -+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 -+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6 - ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 -@@ -1847,23 +1918,23 @@ - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) -- ;; -+ ;; - conftest.$ac_ext ) -- # This is the source file. -- ;; -+ # This is the source file. -+ ;; - [ab].out ) -- # We found the default executable, but exeext='' is most -- # certainly right. -- break;; -+ # We found the default executable, but exeext='' is most -+ # certainly right. -+ break;; - *.* ) -- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -- # FIXME: I believe we export ac_cv_exeext for Libtool, -- # but it would be cool to find out if it's true. Does anybody -- # maintain Libtool? --akim. -- export ac_cv_exeext -- break;; -+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -+ # FIXME: I believe we export ac_cv_exeext for Libtool, -+ # but it would be cool to find out if it's true. Does anybody -+ # maintain Libtool? --akim. -+ export ac_cv_exeext -+ break;; - * ) -- break;; -+ break;; - esac - done - else -@@ -1937,8 +2008,8 @@ - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` -- export ac_cv_exeext -- break;; -+ export ac_cv_exeext -+ break;; - * ) break;; - esac - done -@@ -1963,7 +2034,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2014,7 +2084,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2034,11 +2103,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { ac_try='test -z "$ac_cxx_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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2051,7 +2130,7 @@ - - ac_compiler_gnu=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - - fi -@@ -2067,7 +2146,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2084,11 +2162,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { ac_try='test -z "$ac_cxx_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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2101,7 +2189,7 @@ - - ac_cv_prog_cxx_g=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 - echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 -@@ -2121,8 +2209,7 @@ - fi - fi - for ac_declaration in \ -- ''\ -- '#include <stdlib.h>' \ -+ '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ -@@ -2130,14 +2217,13 @@ - 'void exit (int);' - do - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include <stdlib.h> - $ac_declaration -+#include <stdlib.h> - int - main () - { -@@ -2148,11 +2234,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { ac_try='test -z "$ac_cxx_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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2165,9 +2261,8 @@ - - continue - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2184,11 +2279,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { ac_try='test -z "$ac_cxx_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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2200,7 +2305,7 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done - rm -f conftest* - if test -n "$ac_declaration"; then -@@ -2321,7 +2426,9 @@ - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c -- : > sub/conftst$i.h -+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with -+ # Solaris 8's {/usr,}/bin/sh. -+ touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -@@ -2349,9 +2456,14 @@ - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings -- # (even with -Werror). So we grep stderr for any message -- # that says an option was ignored. -- if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else -+ # or remarks (even with -Werror). So we grep stderr for any message -+ # that says an option was ignored or not supported. -+ # When given -MP, icc 7.0 and 7.1 complain thusly: -+ # icc: Command line warning: ignoring option '-M'; no argument required -+ # The diagnosis changed in icc 8.0: -+ # icc: Command line remark: option '-MP' not supported -+ if (grep 'ignoring option' conftest.err || -+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi -@@ -2723,7 +2835,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2743,11 +2854,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2760,7 +2881,7 @@ - - ac_compiler_gnu=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_c_compiler_gnu=$ac_compiler_gnu - - fi -@@ -2776,7 +2897,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2793,11 +2913,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2810,7 +2940,7 @@ - - ac_cv_prog_cc_g=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 - echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 -@@ -2837,7 +2967,6 @@ - ac_cv_prog_cc_stdc=no - ac_save_CC=$CC - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -2865,6 +2994,16 @@ - va_end (v); - return s; - } -+ -+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has -+ function prototypes and stuff, but not '\xHH' hex character constants. -+ These don't provoke an error unfortunately, instead are silently treated -+ as 'x'. The following induces an error, until -std1 is added to get -+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an -+ array size at least. It's necessary to write '\x00'==0 to get something -+ that's true only with -std1. */ -+int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -+ - int test (int i, double x); - struct s1 {int (*f) (int a);}; - struct s2 {int (*f) (double a);}; -@@ -2891,11 +3030,21 @@ - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2908,7 +3057,7 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext -+rm -f conftest.err conftest.$ac_objext - done - rm -f conftest.$ac_ext conftest.$ac_objext - CC=$ac_save_CC -@@ -2936,19 +3085,28 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (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 - for ac_declaration in \ -- ''\ -- '#include <stdlib.h>' \ -+ '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ -@@ -2956,14 +3114,13 @@ - 'void exit (int);' - do - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ --#include <stdlib.h> - $ac_declaration -+#include <stdlib.h> - int - main () - { -@@ -2974,11 +3131,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -2991,9 +3158,8 @@ - - continue - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3010,11 +3176,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -3026,7 +3202,7 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done - rm -f conftest* - if test -n "$ac_declaration"; then -@@ -3040,7 +3216,7 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=c - ac_cpp='$CPP $CPPFLAGS' - ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -@@ -3088,7 +3264,9 @@ - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c -- : > sub/conftst$i.h -+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with -+ # Solaris 8's {/usr,}/bin/sh. -+ touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - -@@ -3116,9 +3294,14 @@ - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings -- # (even with -Werror). So we grep stderr for any message -- # that says an option was ignored. -- if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else -+ # or remarks (even with -Werror). So we grep stderr for any message -+ # that says an option was ignored or not supported. -+ # When given -MP, icc 7.0 and 7.1 complain thusly: -+ # icc: Command line warning: ignoring option '-M'; no argument required -+ # The diagnosis changed in icc 8.0: -+ # icc: Command line remark: option '-MP' not supported -+ if (grep 'ignoring option' conftest.err || -+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi -@@ -3161,7 +3344,6 @@ - ac_check_lib_save_LIBS=$LIBS - LIBS="-lssl $LIBS" - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3185,11 +3367,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3202,7 +3394,8 @@ - - ac_cv_lib_ssl_SHA1_Init=no - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+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_ssl_SHA1_Init" >&5 -@@ -3224,7 +3417,6 @@ - ac_check_lib_save_LIBS=$LIBS - LIBS="-lcrypt $LIBS" - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3248,11 +3440,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3265,7 +3467,8 @@ - - ac_cv_lib_crypt_SHA1_Init=no - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+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_crypt_SHA1_Init" >&5 -@@ -3279,6 +3482,79 @@ - - else - -+echo "$as_me:$LINENO: checking for SHA1_Init in -lcrypto" >&5 -+echo $ECHO_N "checking for SHA1_Init in -lcrypto... $ECHO_C" >&6 -+if test "${ac_cv_lib_crypto_SHA1_Init+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. */ -+ -+/* Override any gcc2 internal prototype to avoid an error. */ -+#ifdef __cplusplus -+extern "C" -+#endif -+/* We use char because int might match the return type of a gcc2 -+ builtin and then its argument prototype would still apply. */ -+char SHA1_Init (); -+int -+main () -+{ -+SHA1_Init (); -+ ; -+ 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_SHA1_Init=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ac_cv_lib_crypto_SHA1_Init=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_SHA1_Init" >&5 -+echo "${ECHO_T}$ac_cv_lib_crypto_SHA1_Init" >&6 -+if test $ac_cv_lib_crypto_SHA1_Init = yes; then -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_LIBCRYPTO 1 -+_ACEOF -+ -+ LIBS="-lcrypto $LIBS" -+ -+else -+ - echo "$as_me:$LINENO: checking for SHA1_Init in -lmd" >&5 - echo $ECHO_N "checking for SHA1_Init in -lmd... $ECHO_C" >&6 - if test "${ac_cv_lib_md_SHA1_Init+set}" = set; then -@@ -3287,7 +3563,6 @@ - ac_check_lib_save_LIBS=$LIBS - LIBS="-lmd $LIBS" - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3311,11 +3586,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3328,7 +3613,8 @@ - - ac_cv_lib_md_SHA1_Init=no - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+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_md_SHA1_Init" >&5 -@@ -3341,9 +3627,13 @@ - LIBS="-lmd $LIBS" - - else -- { { echo "$as_me:$LINENO: error: error, Please install OpenSSL first!" >&5 --echo "$as_me: error: error, Please install OpenSSL first!" >&2;} -- { (exit 1); exit 1; }; } -+ -+cat >>confdefs.h <<\_ACEOF -+#define USE_STANDALONE_SHA1 -+_ACEOF -+ -+fi -+ - fi - - fi -@@ -3366,7 +3656,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3386,11 +3675,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -3403,7 +3702,7 @@ - - eval "$as_ac_Header=no" - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 - echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -@@ -3426,7 +3725,6 @@ - ac_func_search_save_LIBS=$LIBS - ac_cv_search_opendir=no - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3450,11 +3748,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3466,12 +3774,12 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext - if test "$ac_cv_search_opendir" = no; then - for ac_lib in dir; do - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3495,11 +3803,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3512,7 +3830,8 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext - done - fi - LIBS=$ac_func_search_save_LIBS -@@ -3533,7 +3852,6 @@ - ac_func_search_save_LIBS=$LIBS - ac_cv_search_opendir=no - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3557,11 +3875,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3573,12 +3901,12 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext - if test "$ac_cv_search_opendir" = no; then - for ac_lib in x; do - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3602,11 +3930,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -3619,7 +3957,8 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext - done - fi - LIBS=$ac_func_search_save_LIBS -@@ -3661,7 +4000,6 @@ - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3672,7 +4010,7 @@ - #else - # include <assert.h> - #endif -- Syntax error -+ Syntax error - _ACEOF - if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -@@ -3684,6 +4022,7 @@ - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag -+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -@@ -3704,7 +4043,6 @@ - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3722,6 +4060,7 @@ - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag -+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -@@ -3768,7 +4107,6 @@ - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3779,7 +4117,7 @@ - #else - # include <assert.h> - #endif -- Syntax error -+ Syntax error - _ACEOF - if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -@@ -3791,6 +4129,7 @@ - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag -+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -@@ -3811,7 +4150,6 @@ - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3829,6 +4167,7 @@ - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag -+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -@@ -3889,7 +4228,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3910,11 +4248,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -3927,12 +4275,11 @@ - - ac_cv_header_stdc=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - - if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3954,7 +4301,6 @@ - if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3979,7 +4325,6 @@ - : - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -3991,9 +4336,9 @@ - # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) - #else - # define ISLOWER(c) \ -- (('a' <= (c) && (c) <= 'i') \ -- || ('j' <= (c) && (c) <= 'r') \ -- || ('s' <= (c) && (c) <= 'z')) -+ (('a' <= (c) && (c) <= 'i') \ -+ || ('j' <= (c) && (c) <= 'r') \ -+ || ('s' <= (c) && (c) <= 'z')) - # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) - #endif - -@@ -4004,7 +4349,7 @@ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) -- || toupper (i) != TOUPPER (i)) -+ || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); - } -@@ -4029,7 +4374,7 @@ - ( exit $ac_status ) - ac_cv_header_stdc=no - fi --rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - fi - fi -@@ -4054,7 +4399,7 @@ - - - for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -- inttypes.h stdint.h unistd.h -+ inttypes.h stdint.h unistd.h - do - as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` - echo "$as_me:$LINENO: checking for $ac_header" >&5 -@@ -4063,7 +4408,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4075,11 +4419,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -4092,7 +4446,7 @@ - - eval "$as_ac_Header=no" - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 - echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -@@ -4135,7 +4489,6 @@ - echo "$as_me:$LINENO: checking $ac_header usability" >&5 - echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4146,16 +4499,26 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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); }; }; then -+ (exit $ac_status); }; } && -+ { ac_try='test -s conftest.$ac_objext' -+ { (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_header_compiler=yes - else - echo "$as_me: failed program was:" >&5 -@@ -4163,7 +4526,7 @@ - - ac_header_compiler=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 - echo "${ECHO_T}$ac_header_compiler" >&6 - -@@ -4171,7 +4534,6 @@ - echo "$as_me:$LINENO: checking $ac_header presence" >&5 - echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4189,6 +4551,7 @@ - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag -+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -@@ -4208,33 +4571,32 @@ - echo "${ECHO_T}$ac_header_preproc" >&6 - - # So? What about this header? --case $ac_header_compiler:$ac_header_preproc in -- yes:no ) -+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -+ yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 - echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 --echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} -- ( -- cat <<\_ASBOX --## ------------------------------------ ## --## Report this to bug-autoconf@gnu.org. ## --## ------------------------------------ ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 -+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} -+ ac_header_preproc=yes - ;; -- no:yes ) -+ no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 - echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 --echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} -+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} -+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} -+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 - echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} -+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX --## ------------------------------------ ## --## Report this to bug-autoconf@gnu.org. ## --## ------------------------------------ ## -+## ------------------------------------- ## -+## Report this to dholmes@ct.boxmail.com ## -+## ------------------------------------- ## - _ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 -@@ -4245,7 +4607,7 @@ - if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else -- eval "$as_ac_Header=$ac_header_preproc" -+ eval "$as_ac_Header=\$ac_header_preproc" - fi - echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 - echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -@@ -4268,7 +4630,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4331,11 +4692,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -4348,7 +4719,7 @@ - - ac_cv_c_const=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 - echo "${ECHO_T}$ac_cv_c_const" >&6 -@@ -4368,7 +4739,6 @@ - ac_cv_c_inline=no - for ac_kw in inline __inline__ __inline; do - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4383,11 +4753,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -4399,23 +4779,27 @@ - sed 's/^/| /' conftest.$ac_ext >&5 - - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done - - fi - echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 - echo "${ECHO_T}$ac_cv_c_inline" >&6 -+ -+ - case $ac_cv_c_inline in - inline | yes) ;; -- no) --cat >>confdefs.h <<\_ACEOF --#define inline --_ACEOF -- ;; -- *) cat >>confdefs.h <<_ACEOF --#define inline $ac_cv_c_inline -+ *) -+ case $ac_cv_c_inline in -+ no) ac_val=;; -+ *) ac_val=$ac_cv_c_inline;; -+ esac -+ cat >>confdefs.h <<_ACEOF -+#ifndef __cplusplus -+#define inline $ac_val -+#endif - _ACEOF -- ;; -+ ;; - esac - - echo "$as_me:$LINENO: checking for size_t" >&5 -@@ -4424,7 +4808,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4444,11 +4827,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -4461,7 +4854,7 @@ - - ac_cv_type_size_t=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 - echo "${ECHO_T}$ac_cv_type_size_t" >&6 -@@ -4481,7 +4874,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4502,11 +4894,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -4519,7 +4921,7 @@ - - ac_cv_header_time=no - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 - echo "${ECHO_T}$ac_cv_header_time" >&6 -@@ -4541,7 +4943,6 @@ - else - ac_pattern="Autoconf.*'x'" - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4561,7 +4962,6 @@ - - if test $ac_cv_prog_gcc_traditional = no; then - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4594,13 +4994,12 @@ - ac_cv_func_memcmp_working=no - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -- -+$ac_includes_default - int - main () - { -@@ -4619,12 +5018,12 @@ - int i; - for (i = 0; i < 4; i++) - { -- char *a = foo + i; -- char *b = bar + i; -- strcpy (a, "--------01111111"); -- strcpy (b, "--------10000000"); -- if (memcmp (a, b, 16) >= 0) -- exit (1); -+ char *a = foo + i; -+ char *b = bar + i; -+ strcpy (a, "--------01111111"); -+ strcpy (b, "--------10000000"); -+ if (memcmp (a, b, 16) >= 0) -+ exit (1); - } - exit (0); - } -@@ -4653,12 +5052,19 @@ - ( exit $ac_status ) - ac_cv_func_memcmp_working=no - fi --rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - fi - echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 - echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6 --test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext" -+test $ac_cv_func_memcmp_working = no && case $LIBOBJS in -+ "memcmp.$ac_objext" | \ -+ *" memcmp.$ac_objext" | \ -+ "memcmp.$ac_objext "* | \ -+ *" memcmp.$ac_objext "* ) ;; -+ *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; -+esac -+ - - echo "$as_me:$LINENO: checking return type of signal handlers" >&5 - echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 -@@ -4666,7 +5072,6 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4693,11 +5098,21 @@ - _ACEOF - rm -f conftest.$ac_objext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -- (eval $ac_compile) 2>&5 -+ (eval $ac_compile) 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 -s conftest.$ac_objext' -+ { 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_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? -@@ -4710,7 +5125,7 @@ - - ac_cv_type_signal=int - fi --rm -f conftest.$ac_objext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 - echo "${ECHO_T}$ac_cv_type_signal" >&6 -@@ -4732,7 +5147,6 @@ - ac_cv_func_lstat_dereferences_slashed_symlink=no - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4744,8 +5158,8 @@ - { - struct stat sbuf; - /* Linux will dereference the symlink and fail. -- That is better in the sense that it means we will not -- have to compile and use the lstat wrapper. */ -+ That is better in the sense that it means we will not -+ have to compile and use the lstat wrapper. */ - exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1); - ; - return 0; -@@ -4771,7 +5185,7 @@ - ( exit $ac_status ) - ac_cv_func_lstat_dereferences_slashed_symlink=no - fi --rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - else - # If the `ln -s' command failed, then we probably don't even -@@ -4792,7 +5206,14 @@ - - - if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then -- LIBOBJS="$LIBOBJS lstat.$ac_objext" -+ case $LIBOBJS in -+ "lstat.$ac_objext" | \ -+ *" lstat.$ac_objext" | \ -+ "lstat.$ac_objext "* | \ -+ *" lstat.$ac_objext "* ) ;; -+ *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;; -+esac -+ - fi - - echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5 -@@ -4804,7 +5225,6 @@ - ac_cv_func_stat_empty_string_bug=yes - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext -@@ -4840,13 +5260,20 @@ - ( exit $ac_status ) - ac_cv_func_stat_empty_string_bug=no - fi --rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext - fi - fi - echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5 - echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6 - if test $ac_cv_func_stat_empty_string_bug = yes; then -- LIBOBJS="$LIBOBJS stat.$ac_objext" -+ case $LIBOBJS in -+ "stat.$ac_objext" | \ -+ *" stat.$ac_objext" | \ -+ "stat.$ac_objext "* | \ -+ *" stat.$ac_objext "* ) ;; -+ *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;; -+esac -+ - - cat >>confdefs.h <<_ACEOF - #define HAVE_STAT_EMPTY_STRING_BUG 1 -@@ -4871,7 +5298,8 @@ - - - --for ac_func in ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strnstr -+ -+for ac_func in ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strtoll strnstr - do - as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` - echo "$as_me:$LINENO: checking for $ac_func" >&5 -@@ -4880,21 +5308,28 @@ - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - cat >conftest.$ac_ext <<_ACEOF --#line $LINENO "configure" - /* confdefs.h. */ - _ACEOF - cat confdefs.h >>conftest.$ac_ext - cat >>conftest.$ac_ext <<_ACEOF - /* end confdefs.h. */ -+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. -+ For example, HP-UX 11i <limits.h> declares gettimeofday. */ -+#define $ac_func innocuous_$ac_func -+ - /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ -+ - #ifdef __STDC__ - # include <limits.h> - #else - # include <assert.h> - #endif -+ -+#undef $ac_func -+ - /* Override any gcc2 internal prototype to avoid an error. */ - #ifdef __cplusplus - extern "C" -@@ -4925,11 +5360,21 @@ - _ACEOF - rm -f conftest.$ac_objext conftest$ac_exeext - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 -- (eval $ac_link) 2>&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 -s conftest$ac_exeext' -+ { 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=$? -@@ -4942,7 +5387,8 @@ - - eval "$as_ac_var=no" - fi --rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext -+rm -f conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext - fi - echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 - echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -@@ -4955,6 +5401,547 @@ - done - - -+# Enable/check large file support -+# Check whether --enable-largefile or --disable-largefile was given. -+if test "${enable_largefile+set}" = set; then -+ enableval="$enable_largefile" -+ -+fi; -+if test "$enable_largefile" != no; then -+ -+ echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 -+echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6 -+if test "${ac_cv_sys_largefile_CC+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ ac_cv_sys_largefile_CC=no -+ if test "$GCC" != yes; then -+ ac_save_CC=$CC -+ while :; do -+ # IRIX 6.2 and later do not support large files by default, -+ # so use the C compiler's -n32 option if that helps. -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include <sys/types.h> -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+ rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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 -+ break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext -+ CC="$CC -n32" -+ rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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_sys_largefile_CC=' -n32'; break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext -+ break -+ done -+ CC=$ac_save_CC -+ rm -f conftest.$ac_ext -+ fi -+fi -+echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 -+echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6 -+ if test "$ac_cv_sys_largefile_CC" != no; then -+ CC=$CC$ac_cv_sys_largefile_CC -+ fi -+ -+ echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -+echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6 -+if test "${ac_cv_sys_file_offset_bits+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ while :; do -+ ac_cv_sys_file_offset_bits=no -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include <sys/types.h> -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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 -+ break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#define _FILE_OFFSET_BITS 64 -+#include <sys/types.h> -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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_sys_file_offset_bits=64; break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ break -+done -+fi -+echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 -+echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6 -+if test "$ac_cv_sys_file_offset_bits" != no; then -+ -+cat >>confdefs.h <<_ACEOF -+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -+_ACEOF -+ -+fi -+rm -f conftest* -+ echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 -+echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6 -+if test "${ac_cv_sys_large_files+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ while :; do -+ ac_cv_sys_large_files=no -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#include <sys/types.h> -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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 -+ break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#define _LARGE_FILES 1 -+#include <sys/types.h> -+ /* Check that off_t can represent 2**63 - 1 correctly. -+ We can't simply define LARGE_OFF_T to be 9223372036854775807, -+ since some C++ compilers masquerading as C compilers -+ incorrectly reject 9223372036854775807. */ -+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) -+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 -+ && LARGE_OFF_T % 2147483647 == 1) -+ ? 1 : -1]; -+int -+main () -+{ -+ -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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_sys_large_files=1; break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ break -+done -+fi -+echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 -+echo "${ECHO_T}$ac_cv_sys_large_files" >&6 -+if test "$ac_cv_sys_large_files" != no; then -+ -+cat >>confdefs.h <<_ACEOF -+#define _LARGE_FILES $ac_cv_sys_large_files -+_ACEOF -+ -+fi -+rm -f conftest* -+fi -+ -+echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5 -+echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6 -+if test "${ac_cv_sys_largefile_source+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+else -+ while :; do -+ ac_cv_sys_largefile_source=no -+ 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> -+int -+main () -+{ -+return !fseeko; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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 -+ break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ cat >conftest.$ac_ext <<_ACEOF -+/* confdefs.h. */ -+_ACEOF -+cat confdefs.h >>conftest.$ac_ext -+cat >>conftest.$ac_ext <<_ACEOF -+/* end confdefs.h. */ -+#define _LARGEFILE_SOURCE 1 -+#include <stdio.h> -+int -+main () -+{ -+return !fseeko; -+ ; -+ return 0; -+} -+_ACEOF -+rm -f conftest.$ac_objext -+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -+ (eval $ac_compile) 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_objext' -+ { (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_sys_largefile_source=1; break -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+fi -+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -+ break -+done -+fi -+echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5 -+echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6 -+if test "$ac_cv_sys_largefile_source" != no; then -+ -+cat >>confdefs.h <<_ACEOF -+#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source -+_ACEOF -+ -+fi -+rm -f conftest* -+ -+# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug -+# in glibc 2.1.3, but that breaks too many other things. -+# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. -+echo "$as_me:$LINENO: checking for fseeko" >&5 -+echo $ECHO_N "checking for fseeko... $ECHO_C" >&6 -+if test "${ac_cv_func_fseeko+set}" = set; then -+ echo $ECHO_N "(cached) $ECHO_C" >&6 -+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> -+int -+main () -+{ -+return fseeko && fseeko (stdin, 0, 0); -+ ; -+ 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_func_fseeko=yes -+else -+ echo "$as_me: failed program was:" >&5 -+sed 's/^/| /' conftest.$ac_ext >&5 -+ -+ac_cv_func_fseeko=no -+fi -+rm -f conftest.err conftest.$ac_objext \ -+ conftest$ac_exeext conftest.$ac_ext -+fi -+echo "$as_me:$LINENO: result: $ac_cv_func_fseeko" >&5 -+echo "${ECHO_T}$ac_cv_func_fseeko" >&6 -+if test $ac_cv_func_fseeko = yes; then -+ -+cat >>confdefs.h <<\_ACEOF -+#define HAVE_FSEEKO 1 -+_ACEOF -+ -+fi -+ -+ - ac_config_files="$ac_config_files Makefile" - cat >confcache <<\_ACEOF - # This file is a shell script that caches the results of configure -@@ -4984,13 +5971,13 @@ - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ -- "s/'/'\\\\''/g; -- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" -+ "s/'/'\\\\''/g; -+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ -- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" -+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; - } | -@@ -5020,13 +6007,13 @@ - # trailing colons and then remove the whole line if VPATH becomes empty - # (actually we leave an empty line to preserve line numbers). - if test "x$srcdir" = x.; then -- ac_vpsub='/^[ ]*VPATH[ ]*=/{ -+ ac_vpsub='/^[ ]*VPATH[ ]*=/{ - s/:*\$(srcdir):*/:/; - s/:*\${srcdir}:*/:/; - s/:*@srcdir@:*/:/; --s/^\([^=]*=[ ]*\):*/\1/; -+s/^\([^=]*=[ ]*\):*/\1/; - s/:*$//; --s/^[^=]*=[ ]*$//; -+s/^[^=]*=[ ]*$//; - }' - fi - -@@ -5037,7 +6024,7 @@ - for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | -- sed 's/\$U\././;s/\.o$//;s/\.obj$//'` -+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -@@ -5102,9 +6089,10 @@ - elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix - fi -+DUALCASE=1; export DUALCASE # for MKS sh - - # Support unset when possible. --if (FOO=FOO; unset FOO) >/dev/null 2>&1; then -+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset - else - as_unset=false -@@ -5123,7 +6111,7 @@ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME - do -- if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then -+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var -@@ -5302,16 +6290,17 @@ - if mkdir -p . 2>/dev/null; then - as_mkdir_p=: - else -+ test -d ./-p && rmdir ./-p - as_mkdir_p=false - fi - - as_executable_p="test -f" - - # Sed expression to map a string onto a valid CPP name. --as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" -+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - - # Sed expression to map a string onto a valid variable name. --as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" -+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - - # IFS -@@ -5337,8 +6326,8 @@ - } >&5 - cat >&5 <<_CSEOF - --This file was extended by CTorrent $as_me devel, which was --generated by GNU Autoconf 2.57. Invocation command line was -+This file was extended by CTorrent $as_me dnh2, which was -+generated by GNU Autoconf 2.59. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS -@@ -5382,9 +6371,9 @@ - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] -- instantiate the configuration file FILE -+ instantiate the configuration file FILE - --header=FILE[:TEMPLATE] -- instantiate the configuration header FILE -+ instantiate the configuration header FILE - - Configuration files: - $config_files -@@ -5400,12 +6389,11 @@ - - cat >>$CONFIG_STATUS <<_ACEOF - ac_cs_version="\\ --CTorrent config.status devel --configured by $0, generated by GNU Autoconf 2.57, -+CTorrent config.status dnh2 -+configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" - --Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 --Free Software Foundation, Inc. -+Copyright (C) 2003 Free Software Foundation, Inc. - This config.status script is free software; the Free Software Foundation - gives unlimited permission to copy, distribute and modify it." - srcdir=$srcdir -@@ -5610,14 +6598,17 @@ - s,@AUTOMAKE@,$AUTOMAKE,;t t - s,@AUTOHEADER@,$AUTOHEADER,;t t - s,@MAKEINFO@,$MAKEINFO,;t t --s,@AMTAR@,$AMTAR,;t t - s,@install_sh@,$install_sh,;t t - s,@STRIP@,$STRIP,;t t - s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t - s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -+s,@mkdir_p@,$mkdir_p,;t t - s,@AWK@,$AWK,;t t - s,@SET_MAKE@,$SET_MAKE,;t t - s,@am__leading_dot@,$am__leading_dot,;t t -+s,@AMTAR@,$AMTAR,;t t -+s,@am__tar@,$am__tar,;t t -+s,@am__untar@,$am__untar,;t t - s,@CXX@,$CXX,;t t - s,@CXXFLAGS@,$CXXFLAGS,;t t - s,@LDFLAGS@,$LDFLAGS,;t t -@@ -5673,9 +6664,9 @@ - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then -- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" -+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else -- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" -+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end -@@ -5693,21 +6684,21 @@ - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -+ cat >$tmp/stdin -+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || - $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_file" : 'X\(//\)[^/]' \| \ -- X"$ac_file" : 'X\(//\)$' \| \ -- X"$ac_file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$ac_file" : 'X\(//\)[^/]' \| \ -+ X"$ac_file" : 'X\(//\)$' \| \ -+ X"$ac_file" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -5723,10 +6714,10 @@ - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(//\)[^/]' \| \ -+ X"$as_dir" : 'X\(//\)$' \| \ -+ X"$as_dir" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -5764,12 +6755,45 @@ - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; - esac --# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be --# absolute. --ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` --ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` --ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` --ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` -+ -+# Do not use `cd foo && pwd` to compute absolute paths, because -+# the directories may not exist. -+case `pwd` in -+.) ac_abs_builddir="$ac_dir";; -+*) -+ case "$ac_dir" in -+ .) ac_abs_builddir=`pwd`;; -+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -+ *) ac_abs_builddir=`pwd`/"$ac_dir";; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_top_builddir=${ac_top_builddir}.;; -+*) -+ case ${ac_top_builddir}. in -+ .) ac_abs_top_builddir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_srcdir=$ac_srcdir;; -+*) -+ case $ac_srcdir in -+ .) ac_abs_srcdir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_top_srcdir=$ac_top_srcdir;; -+*) -+ case $ac_top_srcdir in -+ .) ac_abs_top_srcdir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -+ esac;; -+esac - - - case $INSTALL in -@@ -5791,7 +6815,7 @@ - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | -- sed 's,.*/,,'` by configure." -+ sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. -@@ -5800,24 +6824,24 @@ - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -+ # Absolute (can't be DOS-style, as IFS=:) -+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 - echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } -- echo $f;; -+ echo "$f";; - *) # Relative -- if test -f "$f"; then -- # Build tree -- echo $f -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo $srcdir/$f -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -+ if test -f "$f"; then -+ # Build tree -+ echo "$f" -+ elif test -f "$srcdir/$f"; then -+ # Source tree -+ echo "$srcdir/$f" -+ else -+ # /dev/null tree -+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 - echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } -- fi;; -+ fi;; - esac - done` || { (exit 1); exit 1; } - _ACEOF -@@ -5859,12 +6883,12 @@ - # NAME is the cpp macro being defined and VALUE is the value it is being given. - # - # ac_d sets the value in "#define NAME VALUE" lines. --ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' --ac_dB='[ ].*$,\1#\2' -+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -+ac_dB='[ ].*$,\1#\2' - ac_dC=' ' - ac_dD=',;t' - # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". --ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' - ac_uB='$,\1#\2define\3' - ac_uC=' ' - ac_uD=',;t' -@@ -5873,11 +6897,11 @@ - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -+ cat >$tmp/stdin -+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - -@@ -5891,28 +6915,29 @@ - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -+ # Absolute (can't be DOS-style, as IFS=:) -+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 - echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } -- echo $f;; -+ # Do quote $f, to prevent DOS paths from being IFS'd. -+ echo "$f";; - *) # Relative -- if test -f "$f"; then -- # Build tree -- echo $f -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo $srcdir/$f -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -+ if test -f "$f"; then -+ # Build tree -+ echo "$f" -+ elif test -f "$srcdir/$f"; then -+ # Source tree -+ echo "$srcdir/$f" -+ else -+ # /dev/null tree -+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 - echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } -- fi;; -+ fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. -- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in -+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - - _ACEOF - -@@ -5935,9 +6960,9 @@ - s,[\\$`],\\&,g - t clear - : clear --s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp - t end --s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp - : end - _ACEOF - # If some macros were called several times there might be several times -@@ -5951,13 +6976,13 @@ - # example, in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - cat >>conftest.undefs <<\_ACEOF --s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, - _ACEOF - - # Break up conftest.defines because some shells have a limit on the size - # of here documents, and old seds have small limits too (100 cmds). - echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS --echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS - echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS - echo ' :' >>$CONFIG_STATUS - rm -f conftest.tail -@@ -5966,7 +6991,7 @@ - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. -- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS -+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS -@@ -5993,7 +7018,7 @@ - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' -- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS -+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS -@@ -6027,10 +7052,10 @@ - else - ac_dir=`(dirname "$ac_file") 2>/dev/null || - $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_file" : 'X\(//\)[^/]' \| \ -- X"$ac_file" : 'X\(//\)$' \| \ -- X"$ac_file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$ac_file" : 'X\(//\)[^/]' \| \ -+ X"$ac_file" : 'X\(//\)$' \| \ -+ X"$ac_file" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -6046,10 +7071,10 @@ - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(//\)[^/]' \| \ -+ X"$as_dir" : 'X\(//\)$' \| \ -+ X"$as_dir" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -6081,10 +7106,10 @@ - done - echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || - $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X$ac_file : 'X\(//\)[^/]' \| \ -- X$ac_file : 'X\(//\)$' \| \ -- X$ac_file : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X$ac_file : 'X\(//\)[^/]' \| \ -+ X$ac_file : 'X\(//\)$' \| \ -+ X$ac_file : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -6103,16 +7128,41 @@ - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || - $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$ac_dest" : 'X\(//\)[^/]' \| \ -- X"$ac_dest" : 'X\(//\)$' \| \ -- X"$ac_dest" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$ac_dest" : 'X\(//\)[^/]' \| \ -+ X"$ac_dest" : 'X\(//\)$' \| \ -+ X"$ac_dest" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` -+ { if $as_mkdir_p; then -+ mkdir -p "$ac_dir" -+ else -+ as_dir="$ac_dir" -+ as_dirs= -+ while test ! -d "$as_dir"; do -+ as_dirs="$as_dir $as_dirs" -+ as_dir=`(dirname "$as_dir") 2>/dev/null || -+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -+ X"$as_dir" : 'X\(//\)[^/]' \| \ -+ X"$as_dir" : 'X\(//\)$' \| \ -+ X"$as_dir" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || -+echo X"$as_dir" | -+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } -+ /^X\(\/\/\)[^/].*/{ s//\1/; q; } -+ /^X\(\/\/\)$/{ s//\1/; q; } -+ /^X\(\/\).*/{ s//\1/; q; } -+ s/.*/./; q'` -+ done -+ test ! -n "$as_dirs" || mkdir $as_dirs -+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} -+ { (exit 1); exit 1; }; }; } -+ - ac_builddir=. - - if test "$ac_dir" != .; then -@@ -6138,12 +7188,45 @@ - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; - esac --# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be --# absolute. --ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` --ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` --ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` --ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` -+ -+# Do not use `cd foo && pwd` to compute absolute paths, because -+# the directories may not exist. -+case `pwd` in -+.) ac_abs_builddir="$ac_dir";; -+*) -+ case "$ac_dir" in -+ .) ac_abs_builddir=`pwd`;; -+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; -+ *) ac_abs_builddir=`pwd`/"$ac_dir";; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_top_builddir=${ac_top_builddir}.;; -+*) -+ case ${ac_top_builddir}. in -+ .) ac_abs_top_builddir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_srcdir=$ac_srcdir;; -+*) -+ case $ac_srcdir in -+ .) ac_abs_srcdir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; -+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -+ esac;; -+esac -+case $ac_abs_builddir in -+.) ac_abs_top_srcdir=$ac_top_srcdir;; -+*) -+ case $ac_top_srcdir in -+ .) ac_abs_top_srcdir=$ac_abs_builddir;; -+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -+ esac;; -+esac - - - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -@@ -6161,10 +7244,10 @@ - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || - $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$mf" : 'X\(//\)[^/]' \| \ -- X"$mf" : 'X\(//\)$' \| \ -- X"$mf" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$mf" : 'X\(//\)[^/]' \| \ -+ X"$mf" : 'X\(//\)$' \| \ -+ X"$mf" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -6174,36 +7257,30 @@ - else - continue - fi -- grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue -- # Extract the definition of DEP_FILES from the Makefile without -- # running `make'. -- DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` -+ # Extract the definition of DEPDIR, am__include, and am__quote -+ # from the Makefile without running `make'. -+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue -+ am__include=`sed -n 's/^am__include = //p' < "$mf"` -+ test -z "am__include" && continue -+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it -- U=`sed -n -e '/^U = / s///p' < "$mf"` -- test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" -- # We invoke sed twice because it is the simplest approach to -- # changing $(DEPDIR) to its actual value in the expansion. -- for file in `sed -n -e ' -- /^DEP_FILES = .*\\\\$/ { -- s/^DEP_FILES = // -- :loop -- s/\\\\$// -- p -- n -- /\\\\$/ b loop -- p -- } -- /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ -+ U=`sed -n 's/^U = //p' < "$mf"` -+ # Find all dependency output files, they are included files with -+ # $(DEPDIR) in their names. We invoke sed twice because it is the -+ # simplest approach to changing $(DEPDIR) to its actual value in the -+ # expansion. -+ for file in `sed -n " -+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || - $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$file" : 'X\(//\)[^/]' \| \ -- X"$file" : 'X\(//\)$' \| \ -- X"$file" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$file" : 'X\(//\)[^/]' \| \ -+ X"$file" : 'X\(//\)$' \| \ -+ X"$file" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -@@ -6219,10 +7296,10 @@ - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || - $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ -- X"$as_dir" : 'X\(//\)[^/]' \| \ -- X"$as_dir" : 'X\(//\)$' \| \ -- X"$as_dir" : 'X\(/\)' \| \ -- . : '\(.\)' 2>/dev/null || -+ X"$as_dir" : 'X\(//\)[^/]' \| \ -+ X"$as_dir" : 'X\(//\)$' \| \ -+ X"$as_dir" : 'X\(/\)' \| \ -+ . : '\(.\)' 2>/dev/null || - echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/configure.ac ctorrent-1.3.4/configure.ac ---- ctorrent-1.3.4.sav/configure.ac 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/configure.ac 2006-06-28 19:30:02.000000000 +0200 -@@ -1,6 +1,6 @@ - # Process this file with autoconf to produce a configure script. --AC_INIT([CTorrent], [devel], [bsdi@sina.com]) --AM_INIT_AUTOMAKE(ctorrent,devel) -+AC_INIT([CTorrent], [dnh2], [dholmes@ct.boxmail.com]) -+AM_INIT_AUTOMAKE(ctorrent,dnh2) - AC_CONFIG_HEADER([config.h]) - - AC_CONFIG_SRCDIR([ctorrent.cpp]) -@@ -14,7 +14,7 @@ - [AC_CHECK_LIB([crypt],[SHA1_Init],, - [AC_CHECK_LIB([crypto],[SHA1_Init],, - [AC_CHECK_LIB([md],[SHA1_Init],, -- [AC_MSG_ERROR([error, Please install OpenSSL first!])])])])]) -+ [AC_DEFINE([USE_STANDALONE_SHA1],,[Define to 1 to use the Steve Reid's public-domain SHA-1 code.])])])])]) - - # Checks for header files. - AC_HEADER_DIRENT -@@ -32,6 +32,10 @@ - AC_FUNC_MEMCMP - AC_TYPE_SIGNAL - AC_FUNC_STAT --AC_CHECK_FUNCS([ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strnstr]) -+AC_CHECK_FUNCS([ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strtoll strnstr]) -+ -+# Enable/check large file support -+AC_SYS_LARGEFILE -+AC_FUNC_FSEEKO - - AC_OUTPUT(Makefile) -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ctcs.cpp ctorrent-1.3.4/ctcs.cpp ---- ctorrent-1.3.4.sav/ctcs.cpp 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/ctcs.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -0,0 +1,540 @@ -+#ifndef WINDOWS -+#include <unistd.h> -+#include <sys/time.h> -+#include <time.h> -+#include <netdb.h> -+#endif -+ -+#include <stdlib.h> -+#include <string.h> -+#include <errno.h> -+ -+#include <ctype.h> -+ -+#include "ctcs.h" -+#include "btcontent.h" -+#include "setnonblock.h" -+#include "connect_nonb.h" -+#include "tracker.h" -+#include "peerlist.h" -+#include "peer.h" -+#include "btconfig.h" -+#include "bttime.h" -+ -+#define compset(a,member) ( (a.member==member)? 0 : ((a.member = member)||1) ) -+ -+Ctcs CTCS; -+ -+ -+Ctcs::Ctcs() -+{ -+ memset(m_host,0,MAXHOSTNAMELEN); -+ -+ m_sock = INVALID_SOCKET; -+ m_port = 2780; -+ m_status = T_FREE; -+ m_interval = 1; -+ -+ m_last_timestamp = m_sent_ctstatus_time = (time_t) 0; -+ m_sent_ctstatus = 0; -+ m_sent_ctbw = 0; -+} -+ -+ -+Ctcs::~Ctcs() -+{ -+ if( m_sock != INVALID_SOCKET) CLOSE_SOCKET(m_sock); -+} -+ -+ -+void Ctcs::Reset(time_t new_interval) -+{ -+ if(new_interval) m_interval = new_interval; -+ -+ if( INVALID_SOCKET != m_sock ){ -+ CLOSE_SOCKET(m_sock); -+ m_sock = INVALID_SOCKET; -+ } -+ -+ in_buffer.Reset(); -+ out_buffer.Reset(); -+ m_last_timestamp = now; -+ m_sent_ctstatus = 0; -+ m_sent_ctbw = 0; -+ m_status = T_FREE; -+} -+ -+ -+// borrowed from tracker.cpp (with changes) -+int Ctcs:: _s2sin(char *h,int p,struct sockaddr_in *psin) -+{ -+ psin->sin_family = AF_INET; -+ psin->sin_port = htons(p); -+ psin->sin_addr.s_addr = inet_addr(h); -+ if(psin->sin_addr.s_addr == INADDR_NONE){ -+ struct hostent *ph = gethostbyname(h); -+ if( !ph || ph->h_addrtype != AF_INET){ -+ memset(psin,0,sizeof(struct sockaddr_in)); -+ return -1; -+ } -+ memcpy(&psin->sin_addr,ph->h_addr_list[0],sizeof(struct in_addr)); -+ } -+ return ( psin->sin_addr.s_addr == INADDR_NONE ) ? -1 : 0; -+} -+ -+ -+int Ctcs::CheckMessage() -+{ -+ ssize_t r; -+ size_t q; -+ -+ r = in_buffer.FeedIn(m_sock); -+ -+ if( r == 0 ) return 0; // no data -+ if( r < 0 ){ Reset(1); return -1; } // error -+ -+ q = in_buffer.Count(); -+ -+ if( !q ){ -+ int error = 0; -+ socklen_t n = sizeof(error); -+ if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 || -+ error != 0 ){ -+ fprintf(stderr,"warn, received nothing from CTCS! %s\n",strerror(error)); -+ } -+ Reset(0); -+ return -1; -+ } -+ -+ char *s, *msgbuf; -+ while(in_buffer.Count() && (s=strchr(msgbuf=in_buffer.BasePointer(), '\n'))){ -+// msgbuf = in_buffer.BasePointer(); -+// if( s=strchr(msgbuf, '\n') ){ //have a complete message -+ *s = '\0'; -+ if(arg_verbose) fprintf(stderr, "CTCS: %s\n", msgbuf); -+ if( !strncmp("SETDLIMIT",msgbuf,9) ){ -+ cfg_max_bandwidth_down = (int)(strtod(msgbuf+10, NULL)); -+ if(arg_verbose) fprintf(stderr, "DLimit=%d\n", cfg_max_bandwidth_down); -+ }else if( !strncmp("SETULIMIT",msgbuf,9) ){ -+ cfg_max_bandwidth_up = (int)(strtod(msgbuf+10, NULL)); -+ if(arg_verbose) fprintf(stderr, "ULimit=%d\n", cfg_max_bandwidth_up); -+ }else if( !strncmp("SENDPEERS",msgbuf,9) ){ -+ Send_Peers(); -+ }else if( !strncmp("SENDSTATUS",msgbuf,10) ){ -+ Send_Status(); -+ }else if( !strncmp("SENDCONF",msgbuf,8) ){ -+ Send_Config(); -+ }else if( !strncmp("CTCONFIG",msgbuf,8) ){ -+ Set_Config(msgbuf); -+ }else if( !strncmp("SENDDETAIL",msgbuf,10) ){ -+ Send_Detail(); -+ }else if( !strncmp("CTQUIT",msgbuf,6) ){ -+ printf("CTCS sent Quit command\n"); -+ Tracker.SetStoped(); -+ }else if( !strncmp("CTRESTART",msgbuf,9) ){ -+ RestartTracker(); -+ }else if( !strncmp("CTUPDATE",msgbuf,8) ){ -+ Tracker.Reset(1); -+ }else if( !strncmp("PROTOCOL",msgbuf,8) ){ -+ // nothing yet -+ }else{ -+ if(arg_verbose) fprintf(stderr, "unknown CTCS message: %s", msgbuf); -+ } -+ in_buffer.PickUp(s-msgbuf + 1); -+ } -+ return 0; -+} -+ -+ -+int Ctcs::SendMessage(char *message) -+{ -+ int len, r=0; -+ char buf[CTCS_BUFSIZE]; -+ -+ if( m_status == T_READY ){ -+ len = strlen(message); -+ strncpy(buf, message, len); -+ if( len+1 < CTCS_BUFSIZE ){ -+ buf[len] = '\n'; -+ buf[len+1] = '\0'; -+ }else{ -+ buf[CTCS_BUFSIZE-2] = '\n'; -+ buf[CTCS_BUFSIZE-1] = '\0'; -+ } -+ r = out_buffer.Put(m_sock, buf, len+1); -+ if( r<0 ) Reset(1); -+ } -+ return r; -+} -+ -+ -+int Ctcs::Send_Auth() -+{ -+ char message[CTCS_BUFSIZE]; -+ -+ if(!*m_pass) return 0; -+ snprintf(message, CTCS_BUFSIZE, "AUTH %s", m_pass); -+ return SendMessage(message); -+} -+ -+ -+int Ctcs::Send_Protocol() -+{ -+ char message[CTCS_BUFSIZE]; -+ -+ snprintf(message, CTCS_BUFSIZE, "PROTOCOL %s", CTCS_PROTOCOL); -+ return SendMessage(message); -+} -+ -+ -+int Ctcs::Send_Torrent(unsigned char *peerid, char *torrent) -+{ -+ char message[CTCS_BUFSIZE]; -+ char txtid[PEER_ID_LEN*2+3]; -+ -+ TextPeerID(peerid, txtid); -+ -+ snprintf(message, CTCS_BUFSIZE, "CTORRENT %s %ld %ld %s", txtid, -+ (long)(BTCONTENT.GetStartTime()), (long)now, torrent); -+ return SendMessage(message); -+} -+ -+ -+int Ctcs::Report_Status(size_t seeders, size_t leechers, size_t nhave, -+ size_t ntotal, size_t navail, size_t dlrate, size_t ulrate, -+ u_int64_t dltotal, u_int64_t ultotal, size_t dlimit, size_t ulimit) -+{ -+ int changebw=0,change=0; -+ int r; -+ size_t nhad; -+ -+ if( T_READY != m_status ) return 0; -+ -+ nhad = m_ctstatus.nhave; -+ -+ changebw = ( -+ compset(m_ctstatus, dlrate) | -+ compset(m_ctstatus, ulrate) | -+ compset(m_ctstatus, dlimit) | -+ compset(m_ctstatus, ulimit) ); -+ change = ( changebw | -+ compset(m_ctstatus, seeders) | -+ compset(m_ctstatus, leechers) | -+ compset(m_ctstatus, nhave) | -+ compset(m_ctstatus, ntotal) | -+ compset(m_ctstatus, navail) | -+ compset(m_ctstatus, dltotal) | -+ compset(m_ctstatus, ultotal) ); -+ -+ if( ( !m_sent_ctstatus || (nhad<nhave && nhave==ntotal) || -+ (Tracker.GetStatus() && m_sent_ctstatus_time+30 > now) ) && -+ (r=Send_Status()) != 0 ) return r; -+ else return (changebw || !m_sent_ctbw) ? Send_bw() : 0; -+} -+ -+ -+int Ctcs::Send_Status() -+{ -+ char message[CTCS_BUFSIZE]; -+ -+ if( m_sent_ctstatus_time + 1 > now ) { -+ m_sent_ctstatus = 0; -+ return 0; -+ } -+ snprintf(message, CTCS_BUFSIZE, "CTSTATUS %u/%u %u/%u/%u %u,%u %llu,%llu %u,%u", -+ m_ctstatus.seeders, m_ctstatus.leechers, -+ m_ctstatus.nhave, m_ctstatus.ntotal, m_ctstatus.navail, -+ m_ctstatus.dlrate, m_ctstatus.ulrate, -+ m_ctstatus.dltotal, m_ctstatus.ultotal, -+ m_ctstatus.dlimit, m_ctstatus.ulimit ); -+ m_sent_ctstatus = 1; -+ m_sent_ctstatus_time = now; -+ return SendMessage(message); -+} -+ -+ -+int Ctcs::Send_bw() -+{ -+ char message[CTCS_BUFSIZE]; -+ -+ snprintf(message, CTCS_BUFSIZE, "CTBW %u,%u %u,%u", -+ m_ctstatus.dlrate, m_ctstatus.ulrate, -+ m_ctstatus.dlimit, m_ctstatus.ulimit ); -+ m_sent_ctbw = 1; -+ return SendMessage(message); -+} -+ -+ -+int Ctcs::Send_Config() -+{ -+ char message[CTCS_BUFSIZE]; -+ -+ snprintf(message, CTCS_BUFSIZE, "CTCONFIG %d %d %f %d %d %d %d %d %d", -+ (int)arg_verbose, (int)cfg_seed_hours, cfg_seed_ratio, -+ (int)cfg_max_peers, (int)cfg_min_peers, (int)arg_file_to_download, -+ (int)cfg_exit_zero_peers, Tracker.IsPaused(), Tracker.IsQuitting()); -+ return SendMessage(message); -+} -+ -+int Ctcs::Set_Config(char *msgbuf) -+{ -+ unsigned char foo; -+ -+ if(msgbuf[9] != '.') arg_verbose = atoi(msgbuf+9); -+ if(msgbuf[11] != '.') cfg_seed_hours = atoi(msgbuf+11); -+ msgbuf = strchr(msgbuf+11, ' ') + 1; -+ if(msgbuf[0] != '.') cfg_seed_ratio = atof(msgbuf); -+ msgbuf = strchr(msgbuf, ' ') + 1; -+ if(msgbuf[0] != '.') cfg_max_peers = atoi(msgbuf); -+ msgbuf = strchr(msgbuf, ' ') + 1; -+ if(msgbuf[0] != '.') cfg_min_peers = atoi(msgbuf); -+ msgbuf = strchr(msgbuf, ' ') + 1; -+ if(msgbuf[0] != '.'){ -+ foo = atoi(msgbuf); -+ if(foo != arg_file_to_download){ -+ arg_file_to_download = foo; -+ BTCONTENT.FlushCache(); -+ BTCONTENT.SetFilter(); -+ WORLD.CheckInterest(); -+ } -+ } -+ msgbuf = strchr(msgbuf, ' ') + 1; -+ if(msgbuf[0] != '.') cfg_exit_zero_peers = atoi(msgbuf); -+ msgbuf = strchr(msgbuf, ' ') + 1; -+ if(msgbuf[0] != '.'){ -+ if(atoi(msgbuf)){ -+ if( !Tracker.IsPaused() ) Tracker.SetPause(); -+ }else if( Tracker.IsPaused() ) Tracker.Resume(); -+ } -+ msgbuf = strchr(msgbuf, ' ') + 1; -+ if(msgbuf[0] != '.'){ -+ if(atoi(msgbuf)) Tracker.SoftQuit(); -+ else Tracker.DontQuit(); -+ if(atoi(msgbuf)){ -+ if( !Tracker.IsQuitting() ) Tracker.SoftQuit(); -+ }else if( Tracker.IsQuitting() ) Tracker.DontQuit(); -+ } -+ -+ return 0; -+} -+ -+ -+int Ctcs::Send_Detail() -+{ -+ char message[CTCS_BUFSIZE]; -+ int r=0; -+ size_t n=0; -+ BTFILE *file=0; -+ BitField tmpFilter; -+ -+ snprintf( message, CTCS_BUFSIZE, "CTDETAIL %lld %d %ld %ld", -+ BTCONTENT.GetTotalFilesLength(), -+ (int)(BTCONTENT.GetPieceLength()), (long)now, -+ (long)(BTCONTENT.GetSeedTime()) ); -+ r = SendMessage(message); -+ -+ if(r==0) r = SendMessage("CTFILES"); -+ -+ while( r==0 && (file = BTCONTENT.GetNextFile(file)) ){ -+ ++n; -+ BTCONTENT.SetTmpFilter(n, &tmpFilter); -+ BitField tmpBitField = *BTCONTENT.pBF; -+ tmpBitField.Except(tmpFilter); -+ -+ snprintf( message, CTCS_BUFSIZE, "CTFILE %u %d %d %llu %s", -+ n, (int)(BTCONTENT.getFilePieces(n)), -+ (int)(tmpBitField.Count()), -+ file->bf_length, file->bf_filename ); -+ r = SendMessage(message); -+ } -+ if(r==0) r = SendMessage("CTFDONE"); -+ return r; -+} -+ -+ -+int Ctcs::Send_Peers() -+{ -+ btPeer *peer=0; -+ char message[CTCS_BUFSIZE]; -+ char txtid[PEER_ID_LEN*2+3]; -+ struct sockaddr_in psin; -+ int r=0; -+ -+ r=SendMessage("CTPEERS"); -+ while( r==0 && (peer = WORLD.GetNextPeer(peer)) ){ -+ TextPeerID(peer->id, txtid); -+ peer->GetAddress(&psin); -+ -+ snprintf(message, CTCS_BUFSIZE, "CTPEER %s %s %c%c%c%c %d %d %llu %llu %d", -+ txtid, inet_ntoa(psin.sin_addr), -+ peer->Is_Remote_UnChoked() ? 'U' : 'C', -+ peer->Is_Local_Interested() ? 'i' : 'n', -+ peer->Is_Local_UnChoked() ? 'U' : 'C', -+ peer->Is_Remote_Interested() ? 'i' : 'n', -+ peer->RateDL(), peer->RateUL(), -+ peer->TotalDL(), peer->TotalUL(), -+ peer->bitfield.Count() ); -+ r = SendMessage(message); -+ } -+ if(r==0) r = SendMessage("CTPDONE"); -+ return r; -+} -+ -+ -+int Ctcs::Send_Info(const char *info) -+{ -+ char message[CTCS_BUFSIZE]; -+ -+ snprintf(message, CTCS_BUFSIZE, "CTINFO %s", info); -+ return SendMessage(message); -+} -+ -+ -+int Ctcs::Initial() -+{ -+ char *s; -+ -+ strncpy(m_host, arg_ctcs, MAXHOSTNAMELEN-1); -+ m_host[MAXHOSTNAMELEN-1] = '\0'; -+ if( s = strchr(m_host, ':') ) *s='\0'; -+ m_port = atoi(s=(strchr(arg_ctcs, ':')+1)); -+ if(strchr(s, ':')){ -+ printf("Enter CTCS password: "); fflush(stdout); -+ fgets(m_pass, CTCS_PASS_SIZE, stdin); -+ } else *m_pass = '\0'; -+ -+ return 0; -+} -+ -+ -+int Ctcs::Connect() -+{ -+ ssize_t r; -+ m_last_timestamp = now; -+ -+ if(_s2sin(m_host,m_port,&m_sin) < 0) { -+ fprintf(stderr,"warn, get CTCS ip address failed."); -+ return -1; -+ } -+ -+ m_sock = socket(AF_INET,SOCK_STREAM,0); -+ if(INVALID_SOCKET == m_sock) return -1; -+ -+ if(setfd_nonblock(m_sock) < 0) {CLOSE_SOCKET(m_sock); return -1; } -+ -+ r = connect_nonb(m_sock,(struct sockaddr*)&m_sin); -+ -+ if( r == -1 ){ CLOSE_SOCKET(m_sock); return -1;} -+ else if( r == -2 ) m_status = T_CONNECTING; -+ else{ -+ m_status = T_READY; -+ if( Send_Protocol() != 0 ){ -+ fprintf(stderr,"warn, send protocol to CTCS failed. %s\n",strerror(errno)); -+ return -1; -+ } -+ if( Send_Auth() != 0) { -+ fprintf(stderr,"warn, send password to CTCS failed. %s\n",strerror(errno)); -+ return -1; -+ } -+ if( Send_Torrent(BTCONTENT.GetPeerId(), arg_metainfo_file) != 0 ){ -+ fprintf(stderr,"warn, send torrent to CTCS failed. %s\n",strerror(errno)); -+ return -1; -+ } -+ } -+ return 0; -+} -+ -+ -+int Ctcs::IntervalCheck(const time_t *pnow, fd_set *rfdp, fd_set *wfdp) -+{ -+ if( T_FREE == m_status ){ -+ if(*pnow - m_last_timestamp >= m_interval){ -+ if(Connect() < 0){ Reset(15); return -1; } -+ -+ if( m_status == T_CONNECTING ){ -+ FD_SET(m_sock, rfdp); -+ FD_SET(m_sock, wfdp); -+ }else{ -+ FD_SET(m_sock, rfdp); -+ } -+ } -+ }else{ -+ if( m_status == T_CONNECTING ){ -+ FD_SET(m_sock, rfdp); -+ FD_SET(m_sock, wfdp); -+ }else if (INVALID_SOCKET != m_sock){ -+ FD_SET(m_sock, rfdp); -+ if( out_buffer.Count() ) FD_SET(m_sock, wfdp); -+ } -+ } -+ return m_sock; -+} -+ -+ -+int Ctcs::SocketReady(fd_set *rfdp, fd_set *wfdp, int *nfds) -+{ -+ if( T_FREE == m_status ) return 0; -+ -+ if( T_CONNECTING == m_status && FD_ISSET(m_sock,wfdp) ){ -+ int error = 0; -+ socklen_t n = sizeof(error); -+ (*nfds)--; -+ FD_CLR(m_sock, wfdp); -+ if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 || -+ error != 0 ){ -+ if( ECONNREFUSED != error ) -+ fprintf(stderr,"warn, connect to CTCS failed. %s\n",strerror(error)); -+ Reset(15); -+ return -1; -+ }else{ -+ m_status = T_READY; -+ if( Send_Protocol() != 0 ){ -+ fprintf(stderr,"warn, send protocol to CTCS failed. %s\n",strerror(errno)); -+ return -1; -+ } -+ if( Send_Auth() != 0) { -+ fprintf(stderr,"warn, send password to CTCS failed. %s\n",strerror(errno)); -+ return -1; -+ } -+ if( Send_Torrent(BTCONTENT.GetPeerId(), arg_metainfo_file) == 0 ){ -+ fprintf(stderr,"warn, send torrent to CTCS failed. %s\n",strerror(errno)); -+ return -1; -+ } -+ } -+ }else if( T_CONNECTING == m_status && FD_ISSET(m_sock,rfdp) ){ -+ int error = 0; -+ socklen_t n = sizeof(error); -+ (*nfds)--; -+ FD_CLR(m_sock, rfdp); -+ getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n); -+ fprintf(stderr,"warn, connect to CTCS failed. %s\n",strerror(error)); -+ Reset(15); -+ return -1; -+ }else if( INVALID_SOCKET != m_sock ){ -+ if( FD_ISSET(m_sock, rfdp) ){ -+ (*nfds)--; -+ FD_CLR(m_sock,rfdp); -+ CheckMessage(); -+ } -+ if( INVALID_SOCKET != m_sock && FD_ISSET(m_sock, wfdp) ){ -+ (*nfds)--; -+ FD_CLR(m_sock,wfdp); -+ if( out_buffer.Count() && out_buffer.FlushOut(m_sock) < 0){ -+ Reset(1); -+ return -1; -+ } -+ } -+ } -+ return 0; -+} -+ -+ -+void Ctcs::RestartTracker() -+{ -+ Tracker.SetPause(); // prevents downloader from exiting -+ Tracker.SetStoped(); // finish the tracker -+ // Now we need to wait until the tracker updates (T_FINISHED == m_status), -+ // then Tracker.Resume(). -+ Tracker.SetRestart(); -+} -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ctcs.h ctorrent-1.3.4/ctcs.h ---- ctorrent-1.3.4.sav/ctcs.h 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/ctcs.h 2006-06-28 19:30:02.000000000 +0200 -@@ -0,0 +1,78 @@ -+#include "tracker.h" // for its includes/defines -+ -+#define CTCS_PROTOCOL "0001" -+ -+#define CTCS_BUFSIZE 200 -+#define CTCS_PASS_SIZE 21 -+ -+#define C_TORRENT 1 -+#define C_STATUS 2 -+#define C_PEERS 3 -+ -+struct ctstatus { -+ public: -+ size_t seeders, leechers, nhave, ntotal, navail, dlrate, ulrate, -+ dlimit, ulimit; -+ u_int64_t dltotal, ultotal; -+ ctstatus() { -+ seeders=leechers=nhave=ntotal=navail=dlrate=ulrate=dltotal= -+ ultotal=dlimit=ulimit = 0; -+ } -+}; -+ -+class Ctcs -+{ -+ private: -+ char m_host[MAXHOSTNAMELEN]; -+ int m_port; -+ char m_pass[CTCS_PASS_SIZE]; -+ -+ struct sockaddr_in m_sin; -+ -+ unsigned char m_status:2; -+ -+ time_t m_interval; -+ time_t m_last_timestamp; -+ time_t m_sent_ctstatus_time; -+ -+ SOCKET m_sock; -+ BufIo in_buffer; -+ BufIo out_buffer; -+ struct ctstatus m_ctstatus; -+ int m_sent_ctstatus; -+ int m_sent_ctbw; -+ -+ int SendMessage(char *buf); -+ -+ public: -+ Ctcs(); -+ ~Ctcs(); -+ -+ void Reset(time_t new_interval); -+ int _s2sin(char *h,int p,struct sockaddr_in *psin); -+ int Initial(); -+ int Connect(); -+ int CheckMessage(); -+ int Send_Protocol(); -+ int Send_Auth(); -+ int Send_Torrent(unsigned char *peerid, char *torrent); -+ int Report_Status(size_t seeders, size_t leechers, size_t nhave, -+ size_t ntotal, size_t navail, size_t dlrate, size_t ulrate, -+ u_int64_t dltotal, u_int64_t ultotal, size_t dlimit, size_t ulimit); -+ int Send_Status(); -+ int Send_bw(); -+ int Send_Config(); -+ int Set_Config(char *msgbuf); -+ int Send_Detail(); -+ int Send_Peers(); -+ int Send_Info(const char *info); -+ int IntervalCheck(const time_t *pnow, fd_set *rfdp, fd_set *wfdp); -+ int SocketReady(fd_set *rfdp, fd_set *wfdp, int *nfds); -+ void RestartTracker(); -+ -+ SOCKET GetSocket() { return m_sock; } -+ unsigned char GetStatus() { return m_status;} -+}; -+ -+extern Ctcs CTCS; -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ctorrent.cpp ctorrent-1.3.4/ctorrent.cpp ---- ctorrent-1.3.4.sav/ctorrent.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/ctorrent.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -1,6 +1,5 @@ --#include <sys/types.h> -- - #include "./def.h" -+#include <sys/types.h> - - #ifdef WINDOWS - #include <windows.h> -@@ -20,6 +19,7 @@ - #include "downloader.h" - #include "peerlist.h" - #include "tracker.h" -+#include "ctcs.h" - - #include "./config.h" - -@@ -46,7 +46,7 @@ - struct timeval tv; - gettimeofday(&tv,(struct timezone*) 0); - unsigned int seed = tv.tv_usec + tv.tv_sec + getpid(); -- return srandom(seed); -+ srandom(seed); - } - - int main(int argc, char **argv) -@@ -65,7 +65,7 @@ - if( !arg_announce ){ fprintf(stderr,"please use -u to specify a announce url!\n"); exit(1);} - if( !arg_save_as ){ fprintf(stderr,"please use -s to specify a metainfo file name!\n"); exit(1);} - if( BTCONTENT.InitialFromFS(arg_metainfo_file, arg_announce, arg_piece_length) < 0 || -- BTCONTENT.CreateMetainfoFile(arg_save_as) < 0){ -+ BTCONTENT.CreateMetainfoFile(arg_save_as) < 0){ - fprintf(stderr,"create metainfo failed.\n"); - exit(1); - } -@@ -81,15 +81,19 @@ - if( !arg_flg_exam_only && !arg_flg_check_only){ - if(WORLD.Initial_ListenPort() < 0){ - fprintf(stderr,"warn, you couldn't accept connection.\n"); -- }else -- printf("Listen on: %d\n",cfg_listen_port); -+ } - -- Tracker.Initial(); -+ if( arg_ctcs ) CTCS.Initial(); -+ Tracker.Initial(); - -- signal(SIGPIPE,SIG_IGN); -- signal(SIGINT,sigint_catch); -+ signal(SIGPIPE,SIG_IGN); -+ signal(SIGINT,sig_catch); -+ signal(SIGTERM,sig_catch); - Downloader(); - } -+ if( cfg_cache_size ) BTCONTENT.FlushCache(); -+ if( arg_bitfield_file ) BTCONTENT.pBF->WriteToFile(arg_bitfield_file); -+ WORLD.CloseAll(); - - exit(0); - } -@@ -99,7 +103,8 @@ - int param_check(int argc, char **argv) - { - int c, l; -- while ( ( c = getopt(argc,argv,"b:B:cC:e:fl:M:m:P:p:s:tu:xhH")) != -1) -+ char *s; -+ while ( ( c = getopt(argc,argv,"b:cC:D:e:E:fi:l:M:m:n:P:p:s:S:tu:U:vxz:hH")) != -1) - switch( c ){ - case 'b': - arg_bitfield_file = new char[strlen(optarg) + 1]; -@@ -109,6 +114,10 @@ - strcpy(arg_bitfield_file, optarg); - break; - -+ case 'i': // listen on ip XXXX -+ cfg_listen_ip = inet_addr(optarg); -+ break; -+ - case 'p': // listen on Port XXXX - cfg_listen_port = atoi(optarg); - break; -@@ -126,6 +135,10 @@ - cfg_seed_hours = atoi(optarg); - break; - -+ case 'E': // target seed ratio -+ cfg_seed_ratio = atof(optarg); -+ break; -+ - case 'c': // Check exist only - arg_flg_check_only = 1; - break; -@@ -137,32 +150,47 @@ - case 'M': // Max peers - cfg_max_peers = atoi(optarg); - if( cfg_max_peers > 1000 || -- cfg_max_peers < 20){ -- return -1; -+ cfg_max_peers < 20){ -+ return -1; - } - break; - - case 'm': // Min peers - cfg_min_peers = atoi(optarg); - if( cfg_min_peers > 1000 || -- cfg_min_peers < 20){ -- return -1; -+ cfg_min_peers < 1){ -+ return -1; - } - break; - -+ case 'z': // slice size -+ cfg_req_slice_size = atoi(optarg) * 1024; -+ if( cfg_req_slice_size < 1024 || cfg_req_slice_size > 128*1024 ) -+ return -1; -+ break; -+ -+ case 'n': // Which file download -+ arg_file_to_download = atoi(optarg); -+ break; -+ -+ - case 'f': // force seed mode, skip sha1 check when startup. - arg_flg_force_seed_mode = 1; - break; - -- case 'B': -- cfg_max_bandwidth = atoi(optarg); -+ case 'D': -+ cfg_max_bandwidth_down = (int)(strtod(optarg, NULL) * 1024); -+ break; -+ -+ case 'U': -+ cfg_max_bandwidth_up = (int)(strtod(optarg, NULL) * 1024); - break; - - case 'P': -- l = strlen(optarg); -- if (l > MAX_PF_LEN) {printf("-P arg must be 8 or less characters\n"); exit(1);} -- if (l == 1 && *optarg == '-') *arg_user_agent = (char) 0; -- else strcpy(arg_user_agent,optarg); -+ l = strlen(optarg); -+ if (l > MAX_PF_LEN) {printf("-P arg must be 8 or less characters\n"); exit(1);} -+ if (l == 1 && *optarg == '-') *arg_user_agent = (char) 0; -+ else strcpy(arg_user_agent,optarg); - break; - - // BELLOW OPTIONS USED FOR CREATE TORRENT. -@@ -179,17 +207,29 @@ - case 'l': // piece Length (default 262144) - arg_piece_length = atoi(optarg); - if( arg_piece_length < 65536 || -- arg_piece_length > 1310720 ){ -- // warn message: -- // piece length range is 65536 =>> 1310720 -- return -1; -+ arg_piece_length > 1310720 ){ -+ // warn message: -+ // piece length range is 65536 =>> 1310720 -+ return -1; - } - break; -+ // ABOVE OPTIONS USED FOR CREATE TORRENT. - - case 'x': - arg_flg_exam_only = 1; - break; - -+ case 'S': // CTCS server -+ if( arg_ctcs ) return -1; -+ arg_ctcs = new char[strlen(optarg) + 1]; -+ if( !strchr(optarg, ':') ) return -1; -+ strcpy(arg_ctcs, optarg); -+ break; -+ -+ case 'v': -+ arg_verbose = 1; -+ break; -+ - case 'h': - case 'H': - default: -@@ -211,14 +251,17 @@ - - void usage() - { -- fprintf(stderr,"%s Copyright: YuHong(992126018601033)",PACKAGE_STRING); -+ fprintf(stderr,"%s Original code Copyright: YuHong(992126018601033)",PACKAGE_STRING); - fprintf(stderr,"\nWARNING: THERE IS NO WARRANTY FOR CTorrent. USE AT YOUR OWN RISK!!!\n"); - fprintf(stderr,"\nGeneric Options:\n"); - fprintf(stderr,"-h/-H\t\tShow this message.\n"); - fprintf(stderr,"-x\t\tDecode metainfo(torrent) file only, don't download.\n"); - fprintf(stderr,"-c\t\tCheck exist only. don't download.\n"); -+ fprintf(stderr,"-v\t\tVerbose output (for debugging).\n"); - fprintf(stderr,"\nDownload Options:\n"); - fprintf(stderr,"-e int\t\tExit while seed <int> hours later. (default 72 hours)\n"); -+ fprintf(stderr,"-E num\t\tExit after seeding to <num> ratio (UL:DL).\n"); -+ fprintf(stderr,"-i ip\t\tListen for connection on ip. (default all ip's)\n"); - fprintf(stderr,"-p port\t\tListen port. (default 2706 -> 2106)\n"); - fprintf(stderr,"-s save_as\tSave file/directory/metainfo as... \n"); - fprintf(stderr,"-C cache_size\tCache size,unit MB. (default 16MB)\n"); -@@ -226,8 +269,12 @@ - fprintf(stderr,"-b bf_filename\tBit field filename. (use it carefully)\n"); - fprintf(stderr,"-M max_peers\tMax peers count.\n"); - fprintf(stderr,"-m min_peers\tMin peers count.\n"); -- fprintf(stderr,"-B rate\t\tMax bandwidth (unit KB/s)\n"); -+ fprintf(stderr,"-z slice_size\tDownload slice/block size, unit KB. (default 16, max 128).\n"); -+ fprintf(stderr,"-n file_number\tWhich file download.\n"); -+ fprintf(stderr,"-D rate\t\tMax bandwidth down (unit KB/s)\n"); -+ fprintf(stderr,"-U rate\t\tMax bandwidth up (unit KB/s)\n"); - fprintf(stderr,"-P peer_id\tSet Peer ID ["PEER_PFX"]\n"); -+ fprintf(stderr,"-S host:port\tUse CTCS server\n"); - fprintf(stderr,"\nMake metainfo(torrent) file Options:\n"); - fprintf(stderr,"-t\t\tWith make torrent. must specify this option.\n"); - fprintf(stderr,"-u url\t\tTracker's url.\n"); -@@ -235,5 +282,7 @@ - fprintf(stderr,"\neg.\n"); - fprintf(stderr,"hong> ctorrent -s new_filename -e 12 -C 32 -p 6881 eg.torrent\n\n"); - fprintf(stderr,"home page: http://ctorrent.sourceforge.net/\n"); -- fprintf(stderr,"bug report: %s\n\n",PACKAGE_BUGREPORT); -+ fprintf(stderr,"see also: http://www.rahul.net/dholmes/ctorrent/\n"); -+ fprintf(stderr,"bug report: %s\n",PACKAGE_BUGREPORT); -+ fprintf(stderr,"original author: bsdi@sina.com\n\n"); - } -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/bencode.Po ctorrent-1.3.4/.deps/bencode.Po ---- ctorrent-1.3.4.sav/.deps/bencode.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/bencode.Po 2006-06-28 19:24:11.000000000 +0200 -@@ -0,0 +1,137 @@ -+bencode.o bencode.o: bencode.cpp def.h config.h /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h bencode.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ -+ /usr/include/bits/stdio.h /usr/include/unistd.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \ -+ /usr/include/bits/fcntl.h /usr/include/sys/stat.h \ -+ /usr/include/bits/stat.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/xlocale.h \ -+ /usr/include/alloca.h /usr/include/string.h /usr/include/ctype.h -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+bencode.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/fcntl.h: -+ -+/usr/include/bits/fcntl.h: -+ -+/usr/include/sys/stat.h: -+ -+/usr/include/bits/stat.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/string.h: -+ -+/usr/include/ctype.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/bitfield.Po ctorrent-1.3.4/.deps/bitfield.Po ---- ctorrent-1.3.4.sav/.deps/bitfield.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/bitfield.Po 2006-06-28 19:24:12.000000000 +0200 -@@ -0,0 +1,135 @@ -+bitfield.o bitfield.o: bitfield.cpp bitfield.h /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/param.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/linux/param.h \ -+ /usr/include/asm/param.h /usr/include/asm-i386/param.h \ -+ /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/string.h \ -+ /usr/include/xlocale.h /usr/include/stdlib.h \ -+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ -+ /usr/include/alloca.h /usr/include/stdio.h /usr/include/libio.h \ -+ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ -+ /usr/include/gconv.h /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h -+ -+bitfield.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+/usr/include/sys/stat.h: -+ -+/usr/include/bits/stat.h: -+ -+/usr/include/string.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btconfig.Po ctorrent-1.3.4/.deps/btconfig.Po ---- ctorrent-1.3.4.sav/.deps/btconfig.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/btconfig.Po 2006-06-28 19:24:12.000000000 +0200 -@@ -0,0 +1,46 @@ -+btconfig.o btconfig.o: btconfig.cpp /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btcontent.Po ctorrent-1.3.4/.deps/btcontent.Po ---- ctorrent-1.3.4.sav/.deps/btcontent.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/btcontent.Po 2006-06-28 19:24:12.000000000 +0200 -@@ -0,0 +1,223 @@ -+btcontent.o btcontent.o: btcontent.cpp btcontent.h def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ -+ /usr/include/bits/stdio.h bitfield.h btfiles.h def.h \ -+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/param.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/linux/param.h /usr/include/asm/param.h \ -+ /usr/include/asm-i386/param.h /usr/include/xlocale.h \ -+ /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/stdlib.h \ -+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ -+ /usr/include/alloca.h /usr/include/string.h /usr/include/fcntl.h \ -+ /usr/include/bits/fcntl.h /usr/include/errno.h \ -+ /usr/include/bits/errno.h /usr/include/linux/errno.h \ -+ /usr/include/asm/errno.h /usr/include/asm-i386/errno.h btconfig.h \ -+ bencode.h peer.h /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \ -+ /usr/include/asm-i386/socket.h /usr/include/asm/sockios.h \ -+ /usr/include/asm-i386/sockios.h /usr/include/arpa/inet.h \ -+ /usr/include/netinet/in.h /usr/include/stdint.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h btrequest.h btstream.h bufio.h def.h \ -+ rate.h httpencode.h tracker.h /usr/include/sys/time.h sha1.h -+ -+btcontent.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+def.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/sys/stat.h: -+ -+/usr/include/bits/stat.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/string.h: -+ -+/usr/include/fcntl.h: -+ -+/usr/include/bits/fcntl.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -+ -+btconfig.h: -+ -+bencode.h: -+ -+peer.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+btrequest.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+def.h: -+ -+rate.h: -+ -+httpencode.h: -+ -+tracker.h: -+ -+/usr/include/sys/time.h: -+ -+sha1.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btfiles.Po ctorrent-1.3.4/.deps/btfiles.Po ---- ctorrent-1.3.4.sav/.deps/btfiles.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/btfiles.Po 2006-06-28 19:24:13.000000000 +0200 -@@ -0,0 +1,172 @@ -+btfiles.o btfiles.o: btfiles.cpp btfiles.h def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ -+ /usr/include/bits/stdio.h bitfield.h /usr/include/unistd.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/confname.h /usr/include/getopt.h \ -+ /usr/include/dirent.h /usr/include/bits/dirent.h \ -+ /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \ -+ /usr/include/linux/limits.h /usr/include/sys/param.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix2_lim.h \ -+ /usr/include/bits/xopen_lim.h /usr/include/linux/param.h \ -+ /usr/include/asm/param.h /usr/include/asm-i386/param.h \ -+ /usr/include/xlocale.h /usr/include/sys/stat.h /usr/include/bits/stat.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \ -+ /usr/include/string.h /usr/include/fcntl.h /usr/include/bits/fcntl.h \ -+ /usr/include/errno.h /usr/include/bits/errno.h \ -+ /usr/include/linux/errno.h /usr/include/asm/errno.h \ -+ /usr/include/asm-i386/errno.h bencode.h btconfig.h btcontent.h def.h -+ -+btfiles.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/dirent.h: -+ -+/usr/include/bits/dirent.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/sys/stat.h: -+ -+/usr/include/bits/stat.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/string.h: -+ -+/usr/include/fcntl.h: -+ -+/usr/include/bits/fcntl.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -+ -+bencode.h: -+ -+btconfig.h: -+ -+btcontent.h: -+ -+def.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btrequest.Po ctorrent-1.3.4/.deps/btrequest.Po ---- ctorrent-1.3.4.sav/.deps/btrequest.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/btrequest.Po 2006-06-28 19:24:13.000000000 +0200 -@@ -0,0 +1,100 @@ -+btrequest.o btrequest.o: btrequest.cpp /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/xlocale.h \ -+ /usr/include/alloca.h btrequest.h btcontent.h def.h config.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ -+ /usr/include/bits/stdio.h bitfield.h btfiles.h def.h btconfig.h -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/alloca.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+def.h: -+ -+btconfig.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btstream.Po ctorrent-1.3.4/.deps/btstream.Po ---- ctorrent-1.3.4.sav/.deps/btstream.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/btstream.Po 2006-06-28 19:24:13.000000000 +0200 -@@ -0,0 +1,176 @@ -+btstream.o btstream.o: btstream.cpp /usr/include/arpa/inet.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/wchar.h \ -+ /usr/include/bits/wordsize.h /usr/include/sys/socket.h \ -+ /usr/include/sys/uio.h /usr/include/sys/types.h \ -+ /usr/include/bits/types.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/bits/in.h /usr/include/bits/byteswap.h btstream.h def.h \ -+ config.h bufio.h def.h /usr/include/unistd.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/confname.h /usr/include/getopt.h peer.h \ -+ /usr/include/unistd.h /usr/include/string.h /usr/include/xlocale.h \ -+ btrequest.h btcontent.h def.h /usr/include/stdio.h /usr/include/libio.h \ -+ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \ -+ btfiles.h rate.h btconfig.h msgencode.h -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+btstream.h: -+ -+def.h: -+ -+config.h: -+ -+bufio.h: -+ -+def.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+peer.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/string.h: -+ -+/usr/include/xlocale.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+def.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+msgencode.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/bufio.Po ctorrent-1.3.4/.deps/bufio.Po ---- ctorrent-1.3.4.sav/.deps/bufio.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/bufio.Po 2006-06-28 19:24:13.000000000 +0200 -@@ -0,0 +1,178 @@ -+bufio.o bufio.o: bufio.cpp bufio.h def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/sys/socket.h \ -+ /usr/include/sys/uio.h /usr/include/bits/uio.h \ -+ /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/arpa/inet.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h /usr/include/string.h \ -+ /usr/include/xlocale.h /usr/include/errno.h /usr/include/bits/errno.h \ -+ /usr/include/linux/errno.h /usr/include/asm/errno.h \ -+ /usr/include/asm-i386/errno.h btrequest.h btcontent.h def.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \ -+ btfiles.h def.h -+ -+bufio.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/string.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+def.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+def.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/connect_nonb.Po ctorrent-1.3.4/.deps/connect_nonb.Po ---- ctorrent-1.3.4.sav/.deps/connect_nonb.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/connect_nonb.Po 2006-06-28 19:24:13.000000000 +0200 -@@ -0,0 +1,112 @@ -+connect_nonb.o connect_nonb.o: connect_nonb.cpp /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ connect_nonb.h def.h config.h /usr/include/sys/socket.h \ -+ /usr/include/sys/uio.h /usr/include/bits/uio.h \ -+ /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/errno.h /usr/include/bits/errno.h \ -+ /usr/include/linux/errno.h /usr/include/asm/errno.h \ -+ /usr/include/asm-i386/errno.h -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+connect_nonb.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/ctcs.Po ctorrent-1.3.4/.deps/ctcs.Po ---- ctorrent-1.3.4.sav/.deps/ctcs.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/ctcs.Po 2006-06-28 19:24:14.000000000 +0200 -@@ -0,0 +1,246 @@ -+ctcs.o ctcs.o: ctcs.cpp /usr/include/unistd.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/time.h \ -+ /usr/include/bits/time.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/xlocale.h /usr/include/netdb.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/wchar.h \ -+ /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/sys/types.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/bits/in.h /usr/include/bits/byteswap.h \ -+ /usr/include/rpc/netdb.h /usr/include/bits/siginfo.h \ -+ /usr/include/bits/netdb.h /usr/include/stdlib.h \ -+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ -+ /usr/include/alloca.h /usr/include/string.h /usr/include/errno.h \ -+ /usr/include/bits/errno.h /usr/include/linux/errno.h \ -+ /usr/include/asm/errno.h /usr/include/asm-i386/errno.h \ -+ /usr/include/ctype.h ctcs.h tracker.h def.h config.h bufio.h def.h \ -+ /usr/include/arpa/inet.h /usr/include/sys/param.h \ -+ /usr/include/linux/param.h /usr/include/asm/param.h \ -+ /usr/include/asm-i386/param.h btconfig.h btcontent.h def.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \ -+ btfiles.h setnonblock.h connect_nonb.h peerlist.h peer.h def.h \ -+ btrequest.h btcontent.h bitfield.h btstream.h bufio.h rate.h btconfig.h \ -+ rate.h peer.h bttime.h -+ -+/usr/include/unistd.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/time.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/netdb.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/rpc/netdb.h: -+ -+/usr/include/bits/siginfo.h: -+ -+/usr/include/bits/netdb.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/string.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -+ -+/usr/include/ctype.h: -+ -+ctcs.h: -+ -+tracker.h: -+ -+def.h: -+ -+config.h: -+ -+bufio.h: -+ -+def.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+btconfig.h: -+ -+btcontent.h: -+ -+def.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+setnonblock.h: -+ -+connect_nonb.h: -+ -+peerlist.h: -+ -+peer.h: -+ -+def.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+bitfield.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+rate.h: -+ -+peer.h: -+ -+bttime.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/ctorrent.Po ctorrent-1.3.4/.deps/ctorrent.Po ---- ctorrent-1.3.4.sav/.deps/ctorrent.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/ctorrent.Po 2006-06-28 19:24:14.000000000 +0200 -@@ -0,0 +1,246 @@ -+ctorrent.o ctorrent.o: ctorrent.cpp def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/signal.h /usr/include/bits/signum.h \ -+ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ -+ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ -+ /usr/include/asm-i386/sigcontext.h /usr/include/bits/sigstack.h \ -+ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h \ -+ /usr/include/sys/time.h /usr/include/xlocale.h /usr/include/string.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ -+ /usr/include/bits/stdio.h /usr/include/stdlib.h \ -+ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ -+ /usr/include/alloca.h btconfig.h btcontent.h def.h bitfield.h btfiles.h \ -+ downloader.h peerlist.h peer.h def.h /usr/include/sys/socket.h \ -+ /usr/include/sys/uio.h /usr/include/bits/uio.h \ -+ /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \ -+ /usr/include/asm-i386/socket.h /usr/include/asm/sockios.h \ -+ /usr/include/asm-i386/sockios.h /usr/include/arpa/inet.h \ -+ /usr/include/netinet/in.h /usr/include/stdint.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h btrequest.h btcontent.h bitfield.h \ -+ btstream.h bufio.h def.h rate.h def.h btconfig.h rate.h tracker.h \ -+ bufio.h /usr/include/sys/param.h /usr/include/linux/param.h \ -+ /usr/include/asm/param.h /usr/include/asm-i386/param.h ctcs.h config.h \ -+ sigint.h -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/signal.h: -+ -+/usr/include/bits/signum.h: -+ -+/usr/include/bits/siginfo.h: -+ -+/usr/include/bits/sigaction.h: -+ -+/usr/include/bits/sigcontext.h: -+ -+/usr/include/asm/sigcontext.h: -+ -+/usr/include/asm-i386/sigcontext.h: -+ -+/usr/include/bits/sigstack.h: -+ -+/usr/include/sys/ucontext.h: -+ -+/usr/include/bits/sigthread.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/string.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+btconfig.h: -+ -+btcontent.h: -+ -+def.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+downloader.h: -+ -+peerlist.h: -+ -+peer.h: -+ -+def.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+bitfield.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+def.h: -+ -+rate.h: -+ -+def.h: -+ -+btconfig.h: -+ -+rate.h: -+ -+tracker.h: -+ -+bufio.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+ctcs.h: -+ -+config.h: -+ -+sigint.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/downloader.Po ctorrent-1.3.4/.deps/downloader.Po ---- ctorrent-1.3.4.sav/.deps/downloader.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/downloader.Po 2006-06-28 19:24:14.000000000 +0200 -@@ -0,0 +1,214 @@ -+downloader.o downloader.o: downloader.cpp /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/xlocale.h /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/sys/time.h /usr/include/unistd.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/confname.h /usr/include/getopt.h \ -+ /usr/include/netinet/in.h /usr/include/stdint.h \ -+ /usr/include/bits/wchar.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \ -+ /usr/include/string.h peerlist.h def.h config.h peer.h def.h \ -+ btrequest.h btcontent.h def.h bitfield.h btfiles.h btstream.h bufio.h \ -+ def.h rate.h btconfig.h rate.h tracker.h bufio.h \ -+ /usr/include/sys/param.h /usr/include/linux/param.h \ -+ /usr/include/asm/param.h /usr/include/asm-i386/param.h btconfig.h \ -+ btcontent.h ctcs.h bttime.h -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/string.h: -+ -+peerlist.h: -+ -+def.h: -+ -+config.h: -+ -+peer.h: -+ -+def.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+def.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+def.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+rate.h: -+ -+tracker.h: -+ -+bufio.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+btconfig.h: -+ -+btcontent.h: -+ -+ctcs.h: -+ -+bttime.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/httpencode.Po ctorrent-1.3.4/.deps/httpencode.Po ---- ctorrent-1.3.4.sav/.deps/httpencode.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/httpencode.Po 2006-06-28 19:24:14.000000000 +0200 -@@ -0,0 +1,72 @@ -+httpencode.o httpencode.o: httpencode.cpp def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h httpencode.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/xlocale.h \ -+ /usr/include/alloca.h /usr/include/ctype.h /usr/include/string.h \ -+ config.h -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+httpencode.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/ctype.h: -+ -+/usr/include/string.h: -+ -+config.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/iplist.Po ctorrent-1.3.4/.deps/iplist.Po ---- ctorrent-1.3.4.sav/.deps/iplist.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/iplist.Po 2006-06-28 19:24:14.000000000 +0200 -@@ -0,0 +1,130 @@ -+iplist.o iplist.o: iplist.cpp /usr/include/string.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/xlocale.h iplist.h def.h config.h /usr/include/unistd.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/include/bits/typesizes.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/arpa/inet.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h -+ -+/usr/include/string.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/xlocale.h: -+ -+iplist.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/peerlist.Po ctorrent-1.3.4/.deps/peerlist.Po ---- ctorrent-1.3.4.sav/.deps/peerlist.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/peerlist.Po 2006-06-28 19:24:16.000000000 +0200 -@@ -0,0 +1,237 @@ -+peerlist.o peerlist.o: peerlist.cpp /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h peerlist.h \ -+ def.h config.h peer.h def.h /usr/include/unistd.h \ -+ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ -+ /usr/include/bits/confname.h /usr/include/getopt.h \ -+ /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/arpa/inet.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h /usr/include/string.h \ -+ /usr/include/xlocale.h btrequest.h btcontent.h def.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \ -+ btfiles.h btstream.h bufio.h def.h rate.h btconfig.h rate.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \ -+ /usr/include/errno.h /usr/include/bits/errno.h \ -+ /usr/include/linux/errno.h /usr/include/asm/errno.h \ -+ /usr/include/asm-i386/errno.h btconfig.h connect_nonb.h setnonblock.h \ -+ btcontent.h msgencode.h iplist.h def.h tracker.h bufio.h \ -+ /usr/include/sys/time.h /usr/include/sys/param.h \ -+ /usr/include/linux/param.h /usr/include/asm/param.h \ -+ /usr/include/asm-i386/param.h ctcs.h bttime.h -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+peerlist.h: -+ -+def.h: -+ -+config.h: -+ -+peer.h: -+ -+def.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/string.h: -+ -+/usr/include/xlocale.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+def.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+def.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+rate.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -+ -+btconfig.h: -+ -+connect_nonb.h: -+ -+setnonblock.h: -+ -+btcontent.h: -+ -+msgencode.h: -+ -+iplist.h: -+ -+def.h: -+ -+tracker.h: -+ -+bufio.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+ctcs.h: -+ -+bttime.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/peer.Po ctorrent-1.3.4/.deps/peer.Po ---- ctorrent-1.3.4.sav/.deps/peer.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/peer.Po 2006-06-28 19:24:15.000000000 +0200 -@@ -0,0 +1,201 @@ -+peer.o peer.o: peer.cpp peer.h def.h config.h /usr/include/unistd.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/arpa/inet.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h /usr/include/string.h \ -+ /usr/include/xlocale.h btrequest.h btcontent.h def.h \ -+ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ -+ /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \ -+ btfiles.h btstream.h bufio.h def.h rate.h btconfig.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \ -+ /usr/include/ctype.h btcontent.h msgencode.h peerlist.h def.h peer.h \ -+ rate.h btconfig.h bttime.h -+ -+peer.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/string.h: -+ -+/usr/include/xlocale.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+def.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+def.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/ctype.h: -+ -+btcontent.h: -+ -+msgencode.h: -+ -+peerlist.h: -+ -+def.h: -+ -+peer.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+bttime.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/rate.Po ctorrent-1.3.4/.deps/rate.Po ---- ctorrent-1.3.4.sav/.deps/rate.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/rate.Po 2006-06-28 19:24:16.000000000 +0200 -@@ -0,0 +1,57 @@ -+rate.o rate.o: rate.cpp rate.h def.h config.h /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/xlocale.h bttime.h -+ -+rate.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/xlocale.h: -+ -+bttime.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/setnonblock.Po ctorrent-1.3.4/.deps/setnonblock.Po ---- ctorrent-1.3.4.sav/.deps/setnonblock.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/setnonblock.Po 2006-06-28 19:24:16.000000000 +0200 -@@ -0,0 +1,120 @@ -+setnonblock.o setnonblock.o: setnonblock.cpp setnonblock.h def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/sys/socket.h /usr/include/sys/uio.h \ -+ /usr/include/bits/uio.h /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/fcntl.h /usr/include/bits/fcntl.h \ -+ /usr/include/sys/stat.h /usr/include/bits/stat.h -+ -+setnonblock.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/fcntl.h: -+ -+/usr/include/bits/fcntl.h: -+ -+/usr/include/sys/stat.h: -+ -+/usr/include/bits/stat.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/sha1.Po ctorrent-1.3.4/.deps/sha1.Po ---- ctorrent-1.3.4.sav/.deps/sha1.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/sha1.Po 2006-06-28 19:24:17.000000000 +0200 -@@ -0,0 +1,57 @@ -+sha1.o sha1.o: sha1.c /usr/include/string.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/string.h /usr/include/bits/string2.h \ -+ /usr/include/endian.h /usr/include/bits/endian.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/include/bits/typesizes.h /usr/include/stdlib.h sha1.h \ -+ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h -+ -+/usr/include/string.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/string.h: -+ -+/usr/include/bits/string2.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/stdlib.h: -+ -+sha1.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/time.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/sigint.Po ctorrent-1.3.4/.deps/sigint.Po ---- ctorrent-1.3.4.sav/.deps/sigint.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/sigint.Po 2006-06-28 19:24:16.000000000 +0200 -@@ -0,0 +1,228 @@ -+sigint.o sigint.o: sigint.cpp /usr/include/sys/types.h \ -+ /usr/include/features.h /usr/include/sys/cdefs.h \ -+ /usr/include/gnu/stubs.h /usr/include/bits/types.h \ -+ /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \ -+ /usr/include/signal.h /usr/include/bits/signum.h \ -+ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \ -+ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \ -+ /usr/include/asm-i386/sigcontext.h /usr/include/bits/sigstack.h \ -+ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h btcontent.h \ -+ def.h config.h /usr/include/stdio.h /usr/include/libio.h \ -+ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \ -+ /usr/include/gconv.h /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ -+ /usr/include/bits/stdio.h bitfield.h btfiles.h def.h tracker.h bufio.h \ -+ def.h /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/sys/socket.h \ -+ /usr/include/sys/uio.h /usr/include/bits/uio.h \ -+ /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \ -+ /usr/include/asm-i386/socket.h /usr/include/asm/sockios.h \ -+ /usr/include/asm-i386/sockios.h /usr/include/netinet/in.h \ -+ /usr/include/stdint.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \ -+ /usr/include/sys/param.h /usr/include/linux/param.h \ -+ /usr/include/asm/param.h /usr/include/asm-i386/param.h btconfig.h \ -+ peerlist.h peer.h def.h /usr/include/string.h /usr/include/xlocale.h \ -+ btrequest.h btcontent.h bitfield.h btstream.h bufio.h rate.h btconfig.h \ -+ rate.h sigint.h -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+/usr/include/signal.h: -+ -+/usr/include/bits/signum.h: -+ -+/usr/include/bits/siginfo.h: -+ -+/usr/include/bits/sigaction.h: -+ -+/usr/include/bits/sigcontext.h: -+ -+/usr/include/asm/sigcontext.h: -+ -+/usr/include/asm-i386/sigcontext.h: -+ -+/usr/include/bits/sigstack.h: -+ -+/usr/include/sys/ucontext.h: -+ -+/usr/include/bits/sigthread.h: -+ -+btcontent.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+def.h: -+ -+tracker.h: -+ -+bufio.h: -+ -+def.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+btconfig.h: -+ -+peerlist.h: -+ -+peer.h: -+ -+def.h: -+ -+/usr/include/string.h: -+ -+/usr/include/xlocale.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+bitfield.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+rate.h: -+ -+sigint.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/tracker.Po ctorrent-1.3.4/.deps/tracker.Po ---- ctorrent-1.3.4.sav/.deps/tracker.Po 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/.deps/tracker.Po 2006-06-28 19:24:17.000000000 +0200 -@@ -0,0 +1,244 @@ -+tracker.o tracker.o: tracker.cpp tracker.h def.h config.h \ -+ /usr/include/sys/types.h /usr/include/features.h \ -+ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \ -+ /usr/include/bits/types.h /usr/include/bits/wordsize.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \ -+ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ -+ /usr/include/bits/endian.h /usr/include/sys/select.h \ -+ /usr/include/bits/select.h /usr/include/bits/sigset.h \ -+ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ -+ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h bufio.h \ -+ def.h /usr/include/unistd.h /usr/include/bits/posix_opt.h \ -+ /usr/include/bits/environments.h /usr/include/bits/confname.h \ -+ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/sys/socket.h \ -+ /usr/include/sys/uio.h /usr/include/bits/uio.h \ -+ /usr/include/bits/socket.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \ -+ /usr/include/limits.h /usr/include/bits/posix1_lim.h \ -+ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ -+ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ -+ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \ -+ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \ -+ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \ -+ /usr/include/netinet/in.h /usr/include/stdint.h \ -+ /usr/include/bits/wchar.h /usr/include/bits/in.h \ -+ /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \ -+ /usr/include/sys/param.h /usr/include/linux/param.h \ -+ /usr/include/asm/param.h /usr/include/asm-i386/param.h btconfig.h \ -+ /usr/include/xlocale.h /usr/include/netdb.h /usr/include/rpc/netdb.h \ -+ /usr/include/bits/siginfo.h /usr/include/bits/netdb.h \ -+ /usr/include/stdlib.h /usr/include/bits/waitflags.h \ -+ /usr/include/bits/waitstatus.h /usr/include/alloca.h \ -+ /usr/include/string.h /usr/include/errno.h /usr/include/bits/errno.h \ -+ /usr/include/linux/errno.h /usr/include/asm/errno.h \ -+ /usr/include/asm-i386/errno.h peerlist.h peer.h def.h btrequest.h \ -+ btcontent.h /usr/include/stdio.h /usr/include/libio.h \ -+ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h \ -+ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \ -+ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \ -+ btfiles.h btstream.h bufio.h rate.h btconfig.h rate.h httpencode.h \ -+ bencode.h setnonblock.h connect_nonb.h btcontent.h iplist.h def.h \ -+ ctcs.h -+ -+tracker.h: -+ -+def.h: -+ -+config.h: -+ -+/usr/include/sys/types.h: -+ -+/usr/include/features.h: -+ -+/usr/include/sys/cdefs.h: -+ -+/usr/include/gnu/stubs.h: -+ -+/usr/include/bits/types.h: -+ -+/usr/include/bits/wordsize.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h: -+ -+/usr/include/bits/typesizes.h: -+ -+/usr/include/time.h: -+ -+/usr/include/endian.h: -+ -+/usr/include/bits/endian.h: -+ -+/usr/include/sys/select.h: -+ -+/usr/include/bits/select.h: -+ -+/usr/include/bits/sigset.h: -+ -+/usr/include/bits/time.h: -+ -+/usr/include/sys/sysmacros.h: -+ -+/usr/include/bits/pthreadtypes.h: -+ -+/usr/include/bits/sched.h: -+ -+bufio.h: -+ -+def.h: -+ -+/usr/include/unistd.h: -+ -+/usr/include/bits/posix_opt.h: -+ -+/usr/include/bits/environments.h: -+ -+/usr/include/bits/confname.h: -+ -+/usr/include/getopt.h: -+ -+/usr/include/sys/time.h: -+ -+/usr/include/sys/socket.h: -+ -+/usr/include/sys/uio.h: -+ -+/usr/include/bits/uio.h: -+ -+/usr/include/bits/socket.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h: -+ -+/usr/include/limits.h: -+ -+/usr/include/bits/posix1_lim.h: -+ -+/usr/include/bits/local_lim.h: -+ -+/usr/include/linux/limits.h: -+ -+/usr/include/bits/posix2_lim.h: -+ -+/usr/include/bits/xopen_lim.h: -+ -+/usr/include/bits/stdio_lim.h: -+ -+/usr/include/bits/sockaddr.h: -+ -+/usr/include/asm/socket.h: -+ -+/usr/include/asm-i386/socket.h: -+ -+/usr/include/asm/sockios.h: -+ -+/usr/include/asm-i386/sockios.h: -+ -+/usr/include/netinet/in.h: -+ -+/usr/include/stdint.h: -+ -+/usr/include/bits/wchar.h: -+ -+/usr/include/bits/in.h: -+ -+/usr/include/bits/byteswap.h: -+ -+/usr/include/arpa/inet.h: -+ -+/usr/include/sys/param.h: -+ -+/usr/include/linux/param.h: -+ -+/usr/include/asm/param.h: -+ -+/usr/include/asm-i386/param.h: -+ -+btconfig.h: -+ -+/usr/include/xlocale.h: -+ -+/usr/include/netdb.h: -+ -+/usr/include/rpc/netdb.h: -+ -+/usr/include/bits/siginfo.h: -+ -+/usr/include/bits/netdb.h: -+ -+/usr/include/stdlib.h: -+ -+/usr/include/bits/waitflags.h: -+ -+/usr/include/bits/waitstatus.h: -+ -+/usr/include/alloca.h: -+ -+/usr/include/string.h: -+ -+/usr/include/errno.h: -+ -+/usr/include/bits/errno.h: -+ -+/usr/include/linux/errno.h: -+ -+/usr/include/asm/errno.h: -+ -+/usr/include/asm-i386/errno.h: -+ -+peerlist.h: -+ -+peer.h: -+ -+def.h: -+ -+btrequest.h: -+ -+btcontent.h: -+ -+/usr/include/stdio.h: -+ -+/usr/include/libio.h: -+ -+/usr/include/_G_config.h: -+ -+/usr/include/wchar.h: -+ -+/usr/include/gconv.h: -+ -+/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h: -+ -+/usr/include/bits/sys_errlist.h: -+ -+/usr/include/bits/stdio.h: -+ -+bitfield.h: -+ -+btfiles.h: -+ -+btstream.h: -+ -+bufio.h: -+ -+rate.h: -+ -+btconfig.h: -+ -+rate.h: -+ -+httpencode.h: -+ -+bencode.h: -+ -+setnonblock.h: -+ -+connect_nonb.h: -+ -+btcontent.h: -+ -+iplist.h: -+ -+def.h: -+ -+ctcs.h: -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/downloader.cpp ctorrent-1.3.4/downloader.cpp ---- ctorrent-1.3.4.sav/downloader.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/downloader.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -21,21 +21,37 @@ - #include "peerlist.h" - #include "tracker.h" - #include "btcontent.h" -+#include "ctcs.h" -+#include "btconfig.h" -+#include "bttime.h" -+ -+time_t now = (time_t) 0; - - void Downloader() - { - int nfds,maxfd,r; - struct timeval timeout; -- time_t now; - fd_set rfd; - fd_set wfd; -+ int stopped = 0; - -- for(;;){ -- time(&now); -- if( BTCONTENT.SeedTimeout(&now) ) break; -+ time(&now); -+ do{ -+ if( !stopped && -+ ( BTCONTENT.SeedTimeout(&now) || -+ (( cfg_exit_zero_peers || Tracker.IsQuitting() ) && -+ !WORLD.TotalPeers()) ) ){ -+ Tracker.SetStoped(); -+ stopped = 1; -+ if( arg_ctcs ) CTCS.Send_Status(); -+ } - - FD_ZERO(&rfd); FD_ZERO(&wfd); - maxfd = Tracker.IntervalCheck(&now,&rfd, &wfd); -+ if( arg_ctcs ){ -+ r = CTCS.IntervalCheck(&now,&rfd, &wfd); -+ if( r > maxfd ) maxfd = r; -+ } - r = WORLD.FillFDSET(&now,&rfd,&wfd); - if( r > maxfd ) maxfd = r; - -@@ -43,10 +59,13 @@ - timeout.tv_usec = 0; - - nfds = select(maxfd + 1,&rfd,&wfd,(fd_set*) 0,&timeout); -+ time(&now); - -- if(nfds > 0){ -+ if(nfds > 0){ - if(T_FREE != Tracker.GetStatus()) Tracker.SocketReady(&rfd,&wfd,&nfds); -- if( nfds ) WORLD.AnyPeerReady(&rfd,&wfd,&nfds); -- } -- }/* end for(;;) */ -+ if(nfds > 0 && T_FREE != CTCS.GetStatus()) -+ CTCS.SocketReady(&rfd,&wfd,&nfds); -+ if(nfds > 0) WORLD.AnyPeerReady(&rfd,&wfd,&nfds); -+ } -+ } while(Tracker.GetStatus() != T_FINISHED || Tracker.IsPaused()); - } -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/httpencode.cpp ctorrent-1.3.4/httpencode.cpp ---- ctorrent-1.3.4.sav/httpencode.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/httpencode.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -1,6 +1,6 @@ -+#include "./def.h" - #include <sys/types.h> - --#include "./def.h" - #include "./httpencode.h" - - #include <stdlib.h> -@@ -88,7 +88,7 @@ - - /* path */ - if( *p != '/' ) return -1; -- for( ; *p && *p != '?'; p++,path++) *path = *p; -+ for( ; *p; p++,path++) *path = *p; - *path = '\0'; - return 0; - } -@@ -115,7 +115,7 @@ - hlen = p - b; - *pd = ( p + addtion ); - *dlen = n - hlen - addtion; -- }else{ // 只有首部信息???? -+ }else{ // 只有首部信息???? - hlen = n; - *pd = (char*) 0; - *dlen = 0; -@@ -131,8 +131,8 @@ - for(; n && *b != ' ' && *b != '\n'; b++,n--) ; - if( !n || *b != ' ') r = -1; - else{ -- r = atoi(b); -- if( r < 100 || r > 600 ) r = -1; -+ r = atoi(b); -+ if( r < 100 || r > 600 ) r = -1; - } - return r; - } -@@ -160,11 +160,11 @@ - - if( r > header_len ){ - if( strncasecmp(b, h, header_len) == 0){ -- /* header founded */ -- b += header_len; -- for(; *b != '\n'; v++,b++) *v = *b; -- *v = '\0'; -- return 0; -+ /* header founded */ -+ b += header_len; -+ for(; *b != '\n'; v++,b++) *v = *b; -+ *v = '\0'; -+ return 0; - } - } - b += r; -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/httpencode.h ctorrent-1.3.4/httpencode.h ---- ctorrent-1.3.4.sav/httpencode.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/httpencode.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,9 +1,13 @@ - #ifndef HTTPENCODE_H - #define HTTPENCODE_H - --#define REQ_URL_P1_FMT "GET %s?info_hash=%s&peer_id=%s&port=%d" --#define REQ_URL_P2_FMT "%s&uploaded=%d&downloaded=%d&left=%d&event=%s&compact=1 HTTP/1.0" --#define REQ_URL_P3_FMT "%s&uploaded=%d&downloaded=%d&left=%d&compact=1 HTTP/1.0" -+#define REQ_URL_P1_FMT "GET %s?info_hash=%s&peer_id=%s&port=%d&key=%s" -+#define REQ_URL_P1A_FMT "GET %s&info_hash=%s&peer_id=%s&port=%d&key=%s" -+//#define REQ_URL_P2_FMT "%s&uploaded=%d&downloaded=%d&left=%d&event=%s&compact=1 HTTP/1.0" -+//#define REQ_URL_P3_FMT "%s&uploaded=%d&downloaded=%d&left=%d&compact=1 HTTP/1.0" -+#define REQ_URL_P2_FMT "%s&uploaded=%llu&downloaded=%llu&left=%llu&compact=1&event=%s&numwant=%u&key=%s HTTP/1.0" -+#define REQ_URL_P3_FMT "%s&uploaded=%llu&downloaded=%llu&left=%llu&compact=1&numwant=%u&key=%s HTTP/1.0" -+ - - char* Http_url_encode(char *s,char *b,size_t n); - int Http_url_analyse(char *url,char *host,int *port,char *path); -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/iplist.cpp ctorrent-1.3.4/iplist.cpp ---- ctorrent-1.3.4.sav/iplist.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/iplist.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -8,8 +8,8 @@ - IPLIST *node = ipl_head; - for(; ipl_head;){ - node = ipl_head; -- delete ipl_head; - ipl_head = node->next; -+ delete node; - } - count = 0; - } -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/Makefile.am ctorrent-1.3.4/Makefile.am ---- ctorrent-1.3.4.sav/Makefile.am 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/Makefile.am 2006-06-28 19:30:02.000000000 +0200 -@@ -1,2 +1,2 @@ - bin_PROGRAMS = ctorrent --ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h -+ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctcs.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp sha1.c bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h ctcs.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h sha1.h -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/Makefile.in ctorrent-1.3.4/Makefile.in ---- ctorrent-1.3.4.sav/Makefile.in 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/Makefile.in 2006-06-28 19:30:02.000000000 +0200 -@@ -1,8 +1,8 @@ --# Makefile.in generated by automake 1.7.6 from Makefile.am. -+# Makefile.in generated by automake 1.9.1 from Makefile.am. - # @configure_input@ - --# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 --# Free Software Foundation, Inc. -+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -+# 2003, 2004 Free Software Foundation, Inc. - # This Makefile.in is free software; the Free Software Foundation - # gives unlimited permission to copy and/or distribute it, - # with or without modifications, as long as this notice is preserved. -@@ -14,6 +14,8 @@ - - @SET_MAKE@ - -+SOURCES = $(ctorrent_SOURCES) -+ - srcdir = @srcdir@ - top_srcdir = @top_srcdir@ - VPATH = @srcdir@ -@@ -21,7 +23,6 @@ - pkglibdir = $(libdir)/@PACKAGE@ - pkgincludedir = $(includedir)/@PACKAGE@ - top_builddir = . -- - am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd - INSTALL = @INSTALL@ - install_sh_DATA = $(install_sh) -c -m 644 -@@ -35,6 +36,61 @@ - NORMAL_UNINSTALL = : - PRE_UNINSTALL = : - POST_UNINSTALL = : -+bin_PROGRAMS = ctorrent$(EXEEXT) -+subdir = . -+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ -+ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ -+ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ -+ depcomp install-sh missing mkinstalldirs -+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -+am__aclocal_m4_deps = $(top_srcdir)/configure.ac -+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -+ $(ACLOCAL_M4) -+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ -+ configure.lineno configure.status.lineno -+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -+CONFIG_HEADER = config.h -+CONFIG_CLEAN_FILES = -+am__installdirs = "$(DESTDIR)$(bindir)" -+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) -+PROGRAMS = $(bin_PROGRAMS) -+am_ctorrent_OBJECTS = bencode.$(OBJEXT) bitfield.$(OBJEXT) \ -+ btconfig.$(OBJEXT) btcontent.$(OBJEXT) btfiles.$(OBJEXT) \ -+ btrequest.$(OBJEXT) btstream.$(OBJEXT) bufio.$(OBJEXT) \ -+ connect_nonb.$(OBJEXT) ctcs.$(OBJEXT) ctorrent.$(OBJEXT) \ -+ downloader.$(OBJEXT) httpencode.$(OBJEXT) iplist.$(OBJEXT) \ -+ peer.$(OBJEXT) peerlist.$(OBJEXT) rate.$(OBJEXT) \ -+ setnonblock.$(OBJEXT) sigint.$(OBJEXT) tracker.$(OBJEXT) \ -+ sha1.$(OBJEXT) -+ctorrent_OBJECTS = $(am_ctorrent_OBJECTS) -+ctorrent_LDADD = $(LDADD) -+DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -+depcomp = $(SHELL) $(top_srcdir)/depcomp -+am__depfiles_maybe = depfiles -+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -+CCLD = $(CC) -+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ -+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -+CXXLD = $(CXX) -+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -+ -o $@ -+SOURCES = $(ctorrent_SOURCES) -+DIST_SOURCES = $(ctorrent_SOURCES) -+ETAGS = etags -+CTAGS = ctags -+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -+distdir = $(PACKAGE)-$(VERSION) -+top_distdir = $(distdir) -+am__remove_distdir = \ -+ { test ! -d $(distdir) \ -+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ -+ && rm -fr $(distdir); }; } -+DIST_ARCHIVES = $(distdir).tar.gz -+GZIP_ENV = --best -+distuninstallcheck_listfiles = find . -type f -print -+distcleancheck_listfiles = find . -type f -print - ACLOCAL = @ACLOCAL@ - AMDEP_FALSE = @AMDEP_FALSE@ - AMDEP_TRUE = @AMDEP_TRUE@ -@@ -90,6 +146,8 @@ - am__include = @am__include@ - am__leading_dot = @am__leading_dot@ - am__quote = @am__quote@ -+am__tar = @am__tar@ -+am__untar = @am__untar@ - bindir = @bindir@ - build_alias = @build_alias@ - datadir = @datadir@ -@@ -102,6 +160,7 @@ - libexecdir = @libexecdir@ - localstatedir = @localstatedir@ - mandir = @mandir@ -+mkdir_p = @mkdir_p@ - oldincludedir = @oldincludedir@ - prefix = @prefix@ - program_transform_name = @program_transform_name@ -@@ -109,76 +168,44 @@ - sharedstatedir = @sharedstatedir@ - sysconfdir = @sysconfdir@ - target_alias = @target_alias@ --bin_PROGRAMS = ctorrent --ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h --subdir = . --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = config.h --CONFIG_CLEAN_FILES = --bin_PROGRAMS = ctorrent$(EXEEXT) --PROGRAMS = $(bin_PROGRAMS) -- --am_ctorrent_OBJECTS = bencode.$(OBJEXT) bitfield.$(OBJEXT) \ -- btconfig.$(OBJEXT) btcontent.$(OBJEXT) btfiles.$(OBJEXT) \ -- btrequest.$(OBJEXT) btstream.$(OBJEXT) bufio.$(OBJEXT) \ -- connect_nonb.$(OBJEXT) ctorrent.$(OBJEXT) downloader.$(OBJEXT) \ -- httpencode.$(OBJEXT) iplist.$(OBJEXT) peer.$(OBJEXT) \ -- peerlist.$(OBJEXT) rate.$(OBJEXT) setnonblock.$(OBJEXT) \ -- sigint.$(OBJEXT) tracker.$(OBJEXT) --ctorrent_OBJECTS = $(am_ctorrent_OBJECTS) --ctorrent_LDADD = $(LDADD) --ctorrent_DEPENDENCIES = --ctorrent_LDFLAGS = -- --DEFAULT_INCLUDES = -I. -I$(srcdir) -I. --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bencode.Po ./$(DEPDIR)/bitfield.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/btconfig.Po ./$(DEPDIR)/btcontent.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/btfiles.Po ./$(DEPDIR)/btrequest.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/btstream.Po ./$(DEPDIR)/bufio.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/connect_nonb.Po ./$(DEPDIR)/ctorrent.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/downloader.Po ./$(DEPDIR)/httpencode.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/iplist.Po ./$(DEPDIR)/peer.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/peerlist.Po ./$(DEPDIR)/rate.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/setnonblock.Po ./$(DEPDIR)/sigint.Po \ --@AMDEP_TRUE@ ./$(DEPDIR)/tracker.Po --CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ -- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) --CXXLD = $(CXX) --CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -- -o $@ --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --DIST_SOURCES = $(ctorrent_SOURCES) --DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ -- Makefile.in NEWS aclocal.m4 config.h.in configure configure.ac \ -- depcomp install-sh missing mkinstalldirs --SOURCES = $(ctorrent_SOURCES) -- -+ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctcs.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp sha1.c bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h ctcs.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h sha1.h - all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-am - - .SUFFIXES: --.SUFFIXES: .cpp .o .obj -- --am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ -- configure.lineno --$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4) -+.SUFFIXES: .c .cpp .o .obj -+am--refresh: -+ @: -+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) -+ @for dep in $?; do \ -+ case '$(am__configure_deps)' in \ -+ *$$dep*) \ -+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ -+ cd $(srcdir) && $(AUTOMAKE) --gnu \ -+ && exit 0; \ -+ exit 1;; \ -+ esac; \ -+ done; \ -+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) -+.PRECIOUS: Makefile -+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -+ @case '$?' in \ -+ *config.status*) \ -+ echo ' $(SHELL) ./config.status'; \ -+ $(SHELL) ./config.status;; \ -+ *) \ -+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ -+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ -+ esac; - --$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck --$(srcdir)/configure: $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) -- cd $(srcdir) && $(AUTOCONF) - --$(ACLOCAL_M4): configure.ac -+$(top_srcdir)/configure: $(am__configure_deps) -+ cd $(srcdir) && $(AUTOCONF) -+$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) - - config.h: stamp-h1 -@@ -190,24 +217,23 @@ - stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -- --$(srcdir)/config.h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4) -+$(srcdir)/config.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) -- touch $(srcdir)/config.h.in -+ rm -f stamp-h1 -+ touch $@ - - distclean-hdr: - -rm -f config.h stamp-h1 --binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) - install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) -- $(mkinstalldirs) $(DESTDIR)$(bindir) -+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ -- echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ -- $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \ -+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ -+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done - -@@ -215,8 +241,8 @@ - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ -- echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ -- rm -f $(DESTDIR)$(bindir)/$$f; \ -+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ -+ rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done - - clean-binPROGRAMS: -@@ -226,7 +252,7 @@ - $(CXXLINK) $(ctorrent_LDFLAGS) $(ctorrent_OBJECTS) $(ctorrent_LDADD) $(LIBS) - - mostlyclean-compile: -- -rm -f *.$(OBJEXT) core *.core -+ -rm -f *.$(OBJEXT) - - distclean-compile: - -rm -f *.tab.c -@@ -240,6 +266,7 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btstream.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bufio.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect_nonb.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctcs.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctorrent.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/downloader.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpencode.Po@am__quote@ -@@ -248,43 +275,39 @@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peerlist.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rate.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setnonblock.Po@am__quote@ -+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigint.Po@am__quote@ - @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tracker.Po@am__quote@ - --distclean-depend: -- -rm -rf ./$(DEPDIR) -+.c.o: -+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(COMPILE) -c $< -+ -+.c.obj: -+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - - .cpp.o: --@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ --@am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ --@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ --@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ --@am__fastdepCXX_TRUE@ fi -+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi - @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< -+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - - .cpp.obj: --@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ --@am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ --@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ --@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ --@am__fastdepCXX_TRUE@ fi -+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi - @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` -+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - uninstall-info-am: - --ETAGS = etags --ETAGSFLAGS = -- --CTAGS = ctags --CTAGSFLAGS = -- --tags: TAGS -- - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ -@@ -293,6 +316,7 @@ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -+tags: TAGS - - TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -@@ -304,10 +328,11 @@ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ -- test -z "$(ETAGS_ARGS)$$tags$$unique" \ -- || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique -- -+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -+ test -n "$$unique" || unique=$$empty_fix; \ -+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -+ $$tags $$unique; \ -+ fi - ctags: CTAGS - CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) -@@ -330,19 +355,6 @@ - - distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -- --top_distdir = . --distdir = $(PACKAGE)-$(VERSION) -- --am__remove_distdir = \ -- { test ! -d $(distdir) \ -- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ -- && rm -fr $(distdir); }; } -- --GZIP_ENV = --best --distuninstallcheck_listfiles = find . -type f -print --distcleancheck_listfiles = find . -type f -print - - distdir: $(DISTFILES) - $(am__remove_distdir) -@@ -358,7 +370,7 @@ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ -- $(mkinstalldirs) "$(distdir)$$dir"; \ -+ $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ -@@ -379,19 +391,46 @@ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) - dist-gzip: distdir -- $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz -+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz -+ $(am__remove_distdir) -+ -+dist-bzip2: distdir -+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 -+ $(am__remove_distdir) -+ -+dist-tarZ: distdir -+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z -+ $(am__remove_distdir) -+ -+dist-shar: distdir -+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz -+ $(am__remove_distdir) -+ -+dist-zip: distdir -+ -rm -f $(distdir).zip -+ zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - - dist dist-all: distdir -- $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz -+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - - # This target untars the dist file and tries a VPATH configuration. Then - # it guarantees that the distribution is self-contained by making another - # tarfile. - distcheck: dist -- $(am__remove_distdir) -- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - -+ case '$(DIST_ARCHIVES)' in \ -+ *.tar.gz*) \ -+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ -+ *.tar.bz2*) \ -+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ -+ *.tar.Z*) \ -+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ -+ *.shar.gz*) \ -+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ -+ *.zip*) \ -+ unzip $(distdir).zip ;;\ -+ esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst -@@ -411,19 +450,20 @@ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ -- (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ -+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ -- && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ -- && rm -f $(distdir).tar.gz \ -+ && $(MAKE) $(AM_MAKEFLAGS) dist \ -+ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck - $(am__remove_distdir) -- @echo "$(distdir).tar.gz is ready for distribution" | \ -- sed 'h;s/./=/g;p;x;p;x' -+ @(echo "$(distdir) archives ready for distribution: "; \ -+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ -+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' - distuninstallcheck: - @cd $(distuninstallcheck_dir) \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ -@@ -445,9 +485,10 @@ - check-am: all-am - check: check-am - all-am: Makefile $(PROGRAMS) config.h -- - installdirs: -- $(mkinstalldirs) $(DESTDIR)$(bindir) -+ for dir in "$(DESTDIR)$(bindir)"; do \ -+ test -z "$$dir" || $(mkdir_p) "$$dir"; \ -+ done - install: install-am - install-exec: install-exec-am - install-data: install-data-am -@@ -459,7 +500,7 @@ - installcheck: installcheck-am - install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- INSTALL_STRIP_FLAG=-s \ -+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install - mostlyclean-generic: -@@ -467,7 +508,7 @@ - clean-generic: - - distclean-generic: -- -rm -f Makefile $(CONFIG_CLEAN_FILES) -+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - - maintainer-clean-generic: - @echo "This command is intended for maintainers to use" -@@ -478,13 +519,17 @@ - - distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) --distclean-am: clean-am distclean-compile distclean-depend \ -- distclean-generic distclean-hdr distclean-tags -+ -rm -rf ./$(DEPDIR) -+ -rm -f Makefile -+distclean-am: clean-am distclean-compile distclean-generic \ -+ distclean-hdr distclean-tags - - dvi: dvi-am - - dvi-am: - -+html: html-am -+ - info: info-am - - info-am: -@@ -502,6 +547,8 @@ - maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache -+ -rm -rf ./$(DEPDIR) -+ -rm -f Makefile - maintainer-clean-am: distclean-am maintainer-clean-generic - - mostlyclean: mostlyclean-am -@@ -518,11 +565,12 @@ - - uninstall-am: uninstall-binPROGRAMS uninstall-info-am - --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ -- clean-generic ctags dist dist-all dist-gzip distcheck distclean \ -- distclean-compile distclean-depend distclean-generic \ -- distclean-hdr distclean-tags distcleancheck distdir \ -- distuninstallcheck dvi dvi-am info info-am install install-am \ -+.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ -+ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \ -+ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ -+ distclean-compile distclean-generic distclean-hdr \ -+ distclean-tags distcleancheck distdir distuninstallcheck dvi \ -+ dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peer.cpp ctorrent-1.3.4/peer.cpp ---- ctorrent-1.3.4.sav/peer.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/peer.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -2,14 +2,74 @@ - - #include <stdlib.h> - #include <string.h> -+#include <ctype.h> - -+#include "btstream.h" - #include "./btcontent.h" - #include "./msgencode.h" - #include "./peerlist.h" - #include "./btconfig.h" -+#include "bttime.h" - -+size_t get_nl(char *sfrom) -+{ -+ unsigned char *from = (unsigned char *)sfrom; -+ size_t t; -+ t = (*from++) << 24; -+ t |= (*from++) << 16; -+ t |= (*from++) << 8; -+ t |= *from; -+ return t; -+} -+ -+void set_nl(char *sto, size_t from) -+{ -+ unsigned char *to = (unsigned char *)sto; -+ *to++ = (from >> 24) & 0xff; -+ *to++ = (from >> 16) & 0xff; -+ *to++ = (from >> 8) & 0xff; -+ *to = from & 0xff; -+} -+ -+// Convert a peer ID to a printable string. -+int TextPeerID(unsigned char *peerid, char *txtid) -+{ -+ int i, j; -+ -+ for(i=j=0; i < PEER_ID_LEN; i++){ -+ if( i==j && isprint(peerid[i]) && !isspace(peerid[i]) ) -+ txtid[j++] = peerid[i]; -+ else{ -+ if(i==j){ sprintf(txtid+j, "0x"); j+=2; } -+ snprintf(txtid+j, 3, "%.2X", (int)(peerid[i])); -+ j += 2; -+ } -+ } -+ txtid[j] = '\0'; -+ -+ return 0; -+} -+ -+ -+/* g_next_up is used to rotate uploading. If we have the opportunity to -+ upload to a peer but skip it due to bw limiting, the var is set to point to -+ that peer and it will be given priority at the next opportunity. -+ g_next_dn is similar, but for downloading. -+ g_defer_up/dn is used to let the g_next peer object know if it skipped. -+*/ -+btPeer *g_next_up = (btPeer *)0; -+btPeer *g_next_dn = (btPeer *)0; -+unsigned char g_defer_up = 0; -+unsigned char g_defer_dn = 0; - btBasic Self; - -+void btBasic::SetCurrentRates() -+{ -+ m_current_dl = rate_dl.RateMeasure(); -+ m_current_ul = rate_ul.RateMeasure(); -+ m_use_current = 1; -+} -+ - void btBasic::SetIp(struct sockaddr_in addr) - { - memcpy(&m_sin.sin_addr,&addr.sin_addr,sizeof(struct in_addr)); -@@ -24,7 +84,7 @@ - { - // fprintf(stdout,"IpEquiv: %s <=> ", inet_ntoa(m_sin.sin_addr)); - // fprintf(stdout,"%s\n", inet_ntoa(addr.sin_addr)); -- return (memcmp(&m_sin.sin_addr,&addr.sin_addr,sizeof(struct in_addr)) == 0) ? -+ return (memcmp(&m_sin.sin_addr,&addr.sin_addr,sizeof(struct in_addr)) == 0) ? - 1 : 0; - } - -@@ -44,11 +104,13 @@ - - int btPeer::Need_Remote_Data() - { -+ - if( BTCONTENT.pBF->IsFull()) return 0; - else if( bitfield.IsFull() ) return 1; - else{ - BitField tmpBitfield = bitfield; - tmpBitfield.Except(*BTCONTENT.pBF); -+ tmpBitfield.Except(*BTCONTENT.pBFilter); - return tmpBitfield.IsEmpty() ? 0 : 1; - } - return 0; -@@ -59,12 +121,19 @@ - m_f_keepalive = 0; - m_status = P_CONNECTING; - m_unchoke_timestamp = (time_t) 0; -- time(&m_last_timestamp); -+ m_last_timestamp = now; - m_state.remote_choked = m_state.local_choked = 1; - m_state.remote_interested = m_state.local_interested = 0; - - m_err_count = 0; - m_cached_idx = BTCONTENT.GetNPieces(); -+ m_standby = 0; -+ m_req_send = 5; -+ m_req_out = 0; -+ m_latency = 0; -+ m_prev_dlrate = 0; -+ m_health_time = m_receive_time = m_choketime = m_last_timestamp; -+ m_bad_health = 0; - } - - int btPeer::SetLocal(unsigned char s) -@@ -72,21 +141,37 @@ - switch(s){ - case M_CHOKE: - if( m_state.local_choked ) return 0; -+ m_unchoke_timestamp = now; -+// if(arg_verbose) fprintf(stderr, "Choking %p\n", this); -+ if(arg_verbose) fprintf(stderr, "Choking %p (D=%lluMB@%uK/s)\n", this, -+ TotalDL() >> 20, RateDL() >> 10); - m_state.local_choked = 1; -+ if( g_next_up == this ) g_next_up = (btPeer *)0; -+ if( !reponse_q.IsEmpty()) reponse_q.Empty(); - break; - case M_UNCHOKE: - if( !reponse_q.IsEmpty() ) StartULTimer(); - if( !m_state.local_choked ) return 0; -- time(&m_unchoke_timestamp); -+ m_unchoke_timestamp = now; -+// if(arg_verbose) fprintf(stderr, "Unchoking %p\n", this); -+ if(arg_verbose) fprintf(stderr, "Unchoking %p (D=%lluMB@%uK/s)\n", this, -+ TotalDL() >> 20, RateDL() >> 10); - m_state.local_choked = 0; - break; - case M_INTERESTED: -+ m_standby = 0; - if( m_state.local_interested ) return 0; -+ if(arg_verbose) fprintf(stderr, "Interested in %p\n", this); - m_state.local_interested = 1; - break; - case M_NOT_INTERESTED: - if( !m_state.local_interested ) return 0; -+ if(arg_verbose) fprintf(stderr, "Not interested in %p\n", this); - m_state.local_interested = 0; -+ if( !request_q.IsEmpty() ){ -+ CancelRequest(request_q.GetHead()); -+ request_q.Empty(); -+ } - break; - default: - return -1; // BUG ??? -@@ -97,103 +182,195 @@ - int btPeer::RequestPiece() - { - size_t idx; -+ int endgame = 0; - -- PENDINGQUEUE.ReAssign(&request_q,bitfield); -+ size_t qsize = request_q.Qsize(); -+ size_t psize = BTCONTENT.GetPieceLength() / cfg_req_slice_size; - -- if( !request_q.IsEmpty() ) return SendRequest(); -+ // See if there's room in the queue for a new piece. -+ // Also, don't queue another piece if we still have a full piece queued. -+ if( cfg_req_queue_length - qsize < psize || qsize >= psize ){ -+ m_req_send = m_req_out; // don't come back until you receive something. -+ return 0; -+ } -+ -+ if( PENDINGQUEUE.ReAssign(&request_q,bitfield) ){ -+ if(arg_verbose) fprintf(stderr, "Assigning to %p from Pending\n", this); -+ return SendRequest(); -+ } - -- if( m_cached_idx < BTCONTENT.GetNPieces() ){ -+ if( m_cached_idx < BTCONTENT.GetNPieces() && !BTCONTENT.pBF->IsEmpty() ){ -+ // A HAVE msg already selected what we want from this peer -+ // but ignore it in initial-piece mode. - idx = m_cached_idx; - m_cached_idx = BTCONTENT.GetNPieces(); - if( !BTCONTENT.pBF->IsSet(idx) && -- !PENDINGQUEUE.Exist(idx) && -- !WORLD.AlreadyRequested(idx) ){ -+ !PENDINGQUEUE.Exist(idx) && -+ !WORLD.AlreadyRequested(idx) ){ -+ if(arg_verbose) fprintf(stderr, "Assigning #%u to %p\n", idx, this); - return (request_q.CreateWithIdx(idx) < 0) ? -1 : SendRequest(); - } -- }else{ -+ } // If we didn't want the cached piece, select another. -+ if( BTCONTENT.pBF->IsEmpty() ){ -+ // If we don't have a complete piece yet, try to get one that's already -+ // in progress. (Initial-piece mode) -+ BitField tmpBitField = bitfield; -+ idx = WORLD.What_Can_Duplicate(tmpBitField, this, BTCONTENT.GetNPieces()); -+ if( idx < BTCONTENT.GetNPieces() ){ -+ if(arg_verbose) fprintf(stderr, "Want to dup #%u to %p\n", idx, this); -+ btPeer *peer = WORLD.WhoHas(idx); -+ if(peer){ -+ if(arg_verbose) fprintf( stderr, "Duping: %p to %p (#%u)\n", -+ peer, this, idx ); -+ return (request_q.CopyShuffle(&peer->request_q, idx) < 0) ? -+ -1 : SendRequest(); -+ } -+ }else if(arg_verbose) fprintf(stderr, "Nothing to dup to %p\n", this); -+ } // Doesn't have a piece that's already in progress--choose another. - BitField tmpBitField; - if( bitfield.IsFull() ){ -+ // peer is a seed - tmpBitField = *BTCONTENT.pBF; - tmpBitField.Invert(); - }else{ - tmpBitField = bitfield; - tmpBitField.Except(*BTCONTENT.pBF); - } -+ // The filter tells what we don't want. -+ tmpBitField.Except(*BTCONTENT.pBFilter); -+ // tmpBitField tells what we need from this peer... - - if( !tmpBitField.IsEmpty() ){ -- WORLD.CheckBitField(tmpBitField); -- if(tmpBitField.IsEmpty()){ -- -- btPeer *peer = WORLD.Who_Can_Abandon(this); -- if(peer){ -- peer->StopDLTimer(); -- request_q = peer->request_q; -- -- if(peer->CancelRequest(request_q.GetHead()) < 0 || -- peer->RequestCheck() < 0){ -- peer->CloseConnection(); -- } -- -- return SendRequest(); -- } -- -+ BitField tmpBitField2 = tmpBitField; -+ WORLD.CheckBitField(tmpBitField2); -+ // [tmpBitField2]... that we haven't requested from anyone. -+ if(tmpBitField2.IsEmpty()){ -+ // Everything this peer has that I want, I've already requested. -+ if( arg_file_to_download ){ -+ BitField afdBitField = *BTCONTENT.pBF; -+ afdBitField.Except(*BTCONTENT.pBFilter); -+ endgame = ( BTCONTENT.getFilePieces(arg_file_to_download) -+ - afdBitField.Count() ) < WORLD.TotalPeers(); -+ }else -+ endgame = ( WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() ) -+ < WORLD.TotalPeers(); -+ if(endgame){ // OK to duplicate a request. -+// idx = tmpBitField.Random(); -+ idx = 0; // flag for Who_Can_Duplicate() -+ BitField tmpBitField3 = tmpBitField2; -+ idx = WORLD.What_Can_Duplicate(tmpBitField3, this, idx); -+ if( idx < BTCONTENT.GetNPieces() ){ -+ if(arg_verbose) fprintf(stderr,"Want to dup #%u to %p\n",idx,this); -+ btPeer *peer = WORLD.WhoHas(idx); -+ if(peer){ -+ if(arg_verbose) fprintf( stderr, "Duping: %p to %p (#%u)\n", -+ peer, this, idx ); -+ return (request_q.CopyShuffle(&peer->request_q, idx) < 0) ? -+ -1 : SendRequest(); -+ } -+ }else if(arg_verbose) fprintf(stderr, "Nothing to dup to %p\n",this); -+ }else{ // not endgame mode -+ btPeer *peer = WORLD.Who_Can_Abandon(this); // slowest choice -+ if(peer){ -+ // Cancel a request to the slowest peer & request it from this one. -+ if(arg_verbose) fprintf( stderr, "Reassigning %p to %p (#%u)\n", -+ peer, this, peer->request_q.GetRequestIdx() ); -+ // RequestQueue class "moves" rather than "copies" in assignment! -+ if( request_q.Copy(&peer->request_q) < 0 ) return -1; -+ if(peer->CancelPiece() < 0 || peer->RequestCheck() < 0) -+ peer->CloseConnection(); -+ return SendRequest(); -+ }else{ -+ if(arg_verbose) fprintf(stderr, "%p standby\n", this); -+ m_standby = 1; // nothing to do at the moment -+ } -+ } - }else{ -- idx = tmpBitField.Random(); -- return (request_q.CreateWithIdx(idx) < 0) ? -1 : SendRequest(); -+ // Request something that we haven't requested yet (most common case). -+ // Try to make it something that has good trade value. -+ BitField tmpBitField3 = tmpBitField2; -+ WORLD.FindValuedPieces(tmpBitField3, this, BTCONTENT.pBF->IsEmpty()); -+ if( tmpBitField3.IsEmpty() ) tmpBitField3 = tmpBitField2; -+ idx = tmpBitField3.Random(); -+ if(arg_verbose) fprintf(stderr, "Assigning #%u to %p\n", idx, this); -+ return (request_q.CreateWithIdx(idx) < 0) ? -1 : SendRequest(); - } -+ }else{ -+ // We don't need anything from the peer. How'd we get here? -+ return SetLocal(M_NOT_INTERESTED); - } -- } - return 0; - } - - int btPeer::MsgDeliver() - { - size_t r,idx,off,len; -+ int retval = 0; - - char *msgbuf = stream.in_buffer.BasePointer(); - -- r = ntohl(*(size_t*) msgbuf); -+ r = get_nl(msgbuf); - -+ // Don't require keepalives if we're receiving other messages. -+ m_last_timestamp = now; - if( 0 == r ){ -- time(&m_last_timestamp); - if( !m_f_keepalive ) if( stream.Send_Keepalive() < 0 ) return -1; - m_f_keepalive = 0; -- return (!m_state.remote_choked && request_q.IsEmpty()) ? RequestCheck() : 0; -+ return 0; - }else{ - switch(msgbuf[4]){ - case M_CHOKE: - if(H_BASE_LEN != r){ return -1;} -+ if(arg_verbose) fprintf(stderr, "%p choked me\n", this); -+ if( m_lastmsg == M_UNCHOKE && m_last_timestamp <= m_choketime+1 ){ -+ m_err_count+=2; -+ if(arg_verbose) fprintf(stderr,"err: %p (%d) Choke oscillation\n", -+ this, m_err_count); -+ } -+ m_choketime = m_last_timestamp; - m_state.remote_choked = 1; - StopDLTimer(); -+ if( g_next_dn == this ) g_next_dn = (btPeer *)0; - if( !request_q.IsEmpty()){ -- PSLICE ps = request_q.GetHead(); -- PENDINGQUEUE.Pending(&request_q); -- if( CancelRequest(ps) < 0) return -1; -+ m_req_out = 0; -+ PENDINGQUEUE.Pending(&request_q); - } -- return 0; -+ break; -+ - case M_UNCHOKE: - if(H_BASE_LEN != r){return -1;} -+ if(arg_verbose) fprintf(stderr, "%p unchoked me\n", this); -+ if( m_lastmsg == M_CHOKE && m_last_timestamp <= m_choketime+1 ){ -+ m_err_count+=2; -+ if(arg_verbose) fprintf(stderr,"err: %p (%d) Choke oscillation\n", -+ this, m_err_count); -+ } -+ m_choketime = m_last_timestamp; - m_state.remote_choked = 0; -- return RequestCheck(); -+ retval = RequestCheck(); -+ break; - - case M_INTERESTED: - if(H_BASE_LEN != r){return -1;} -+ if(arg_verbose) fprintf(stderr, "%p is interested\n", this); - m_state.remote_interested = 1; - break; - - case M_NOT_INTERESTED: - if(r != H_BASE_LEN){return -1;} -+ if(arg_verbose) fprintf(stderr, "%p is not interested\n", this); - - m_state.remote_interested = 0; - StopULTimer(); - - /* remove peer's reponse queue */ - if( !reponse_q.IsEmpty()) reponse_q.Empty(); -- return 0; -+ break; -+ - case M_HAVE: - if(H_HAVE_LEN != r){return -1;} - -- idx = ntohl(*(size_t*) (msgbuf + 5)); -+ idx = get_nl(msgbuf + 5); - - if( idx >= BTCONTENT.GetNPieces() || bitfield.IsSet(idx)) return -1; - -@@ -201,54 +378,90 @@ - - if( bitfield.IsFull() && BTCONTENT.pBF->IsFull() ){ return -2; } - -- if( !BTCONTENT.pBF->IsSet(idx) ) m_cached_idx = idx; -+ if( !BTCONTENT.pBF->IsSet(idx) && !BTCONTENT.pBFilter->IsSet(idx) ){ -+ m_cached_idx = idx; -+ if(arg_verbose && m_standby) fprintf(stderr, "%p un-standby\n", this); -+ m_standby = 0; -+ } -+ // if( !BTCONTENT.pBF->IsSet(idx) ) m_cached_idx = idx; - -- return ( !m_state.remote_choked && request_q.IsEmpty() ) ? RequestCheck() : 0; -+ // see if we're Interested now -+ if(!m_standby) retval = RequestCheck(); -+ break; - - case M_REQUEST: - if(H_REQUEST_LEN != r || !m_state.remote_interested){ return -1; } - -- idx = ntohl(*(size_t*)(msgbuf + 5)); -+ idx = get_nl(msgbuf + 5); - - if( !BTCONTENT.pBF->IsSet(idx) ) return -1; - -- off = ntohl(*(size_t*)(msgbuf + 9)); -- len = ntohl(*(size_t*)(msgbuf + 13)); -+ off = get_nl(msgbuf + 9); -+ len = get_nl(msgbuf + 13); - - if( !reponse_q.IsValidRequest(idx, off, len) ) return -1; -- -- return reponse_q.Add(idx, off, len); -+ -+ if( m_state.local_choked ){ -+ if( (m_latency && m_last_timestamp - m_unchoke_timestamp > m_latency) || -+ (!m_latency && m_last_timestamp - m_unchoke_timestamp > 60) ){ -+ m_err_count++; -+ if(arg_verbose) fprintf(stderr,"err: %p (%d) choked request\n", -+ this, m_err_count); -+ if( stream.Send_State(M_CHOKE) < 0 ) return -1; -+ // This will mess with the unchoke rotation (to this peer's -+ // disadvantage), but otherwise we may spam them with choke msgs. -+ m_unchoke_timestamp = m_last_timestamp; -+ } -+ }else retval = reponse_q.Add(idx, off, len); -+ break; - - case M_PIECE: -+ m_receive_time = m_last_timestamp; - if( request_q.IsEmpty() || !m_state.local_interested){ -- m_err_count++; -- return 0; -- } -- return PieceDeliver(r); -+ m_err_count++; -+ if(arg_verbose) fprintf(stderr,"err: %p (%d) Unwanted piece\n", -+ this, m_err_count); -+ }else retval = PieceDeliver(r); -+ break; - - case M_BITFIELD: - if( (r - 1) != bitfield.NBytes() || !bitfield.IsEmpty()) return -1; - bitfield.SetReferBuffer(msgbuf + 5); -- if(bitfield.IsFull() && BTCONTENT.pBF->IsFull()) return -2; -- return 0; -+ if(bitfield.IsFull()){ -+ if(arg_verbose) fprintf(stderr, "%p is a seed\n", this); -+ if(BTCONTENT.pBF->IsFull()) return -2; -+ } -+ -+ //This is needed in order to set our Interested state -+ retval = RequestCheck(); // fixed client stall -+ break; - - case M_CANCEL: - if(r != H_CANCEL_LEN || !m_state.remote_interested) return -1; - -- idx = ntohl(*(size_t*)(msgbuf + 5)); -- off = ntohl(*(size_t*)(msgbuf + 9)); -- len = ntohl(*(size_t*)(msgbuf + 13)); -+ idx = get_nl(msgbuf + 5); -+ off = get_nl(msgbuf + 9); -+ len = get_nl(msgbuf + 13); - if( reponse_q.Remove(idx,off,len) < 0 ){ -- m_err_count++; -- return 0; -+ m_err_count++; -+ if(arg_verbose) fprintf(stderr, "err: %p (%d) Bad cancel\n", -+ this, m_err_count); -+ }else{ -+ if( reponse_q.IsEmpty() ) StopULTimer(); -+ if( reponse_q.IsEmpty() || !CouldReponseSlice() ){ -+ if( g_next_up == this ) g_next_up = (btPeer *)0; -+ } - } -- if( reponse_q.IsEmpty() ) StopULTimer(); -- return 0; -+ break; -+ - default: -- return -1; // unknow message type -- } -+ if(arg_verbose) fprintf(stderr, "Unknown message type %u from peer %p\n", -+ msgbuf[4], this); -+ } // switch -+ -+ if( retval >= 0 ) m_lastmsg = msgbuf[4]; - } -- return 0; -+ return retval; - } - - int btPeer::ReponseSlice() -@@ -270,6 +483,8 @@ - - Self.DataSended(len); - DataSended(len); -+ if(arg_verbose) fprintf(stderr, "Sending %d/%d/%d to %p\n", -+ (int)idx, (int)off, (int)len, this); - return stream.Send_Piece(idx,off,BTCONTENT.global_piece_buffer,len); - } - -@@ -278,32 +493,153 @@ - - int btPeer::SendRequest() - { -+ int first = 1; -+ PSLICE ps = request_q.NextSend(); -+ -+ if( m_req_out > cfg_req_queue_length ){ -+ if(arg_verbose) -+ fprintf(stderr, "ERROR@5: %p m_req_out underflow, resetting\n", this); -+ m_req_out = 0; -+ } -+ if( ps && m_req_out < m_req_send ){ -+ if(arg_verbose) -+ fprintf(stderr, "Requesting #%u from %p (%d left, %d slots):", -+ ps->index, this, request_q.Qsize(), m_req_send); -+ for( int i=0; ps && m_req_out < m_req_send && i<5; ps = ps->next, i++ ){ -+ if( first && (!RateDL() || -+ 0 >= (m_req_out+1) * ps->length / (double)RateDL() - m_latency) ){ -+ request_q.SetReqTime(ps, now); -+ first = 0; -+ } else request_q.SetReqTime(ps, (time_t)0); -+ if(arg_verbose) fprintf(stderr, "."); -+ if(stream.Send_Request(ps->index,ps->offset,ps->length) < 0){ return -1; } -+ request_q.SetNextSend(ps->next); -+ m_req_out++; -+ } -+ if(arg_verbose) fprintf(stderr, "\n"); -+ m_receive_time = now; -+ } -+ return ( m_req_out < m_req_send ) ? RequestPiece() : 0; -+} -+ -+int btPeer::CancelPiece() -+{ - PSLICE ps = request_q.GetHead(); -- for( ; ps ; ps = ps->next ) -- if(stream.Send_Request(ps->index,ps->offset,ps->length) < 0){ return -1; } -+ size_t idx; -+ int cancel = 1; -+ int retval; -+ -+ idx = ps->index; -+ for( ; ps; ps = ps->next){ -+ if( ps->index != idx ) break; -+ if( ps == request_q.NextSend() ) cancel = 0; -+ if( cancel ){ -+ if(stream.Send_Cancel(ps->index,ps->offset,ps->length) < 0) -+ return -1; -+ m_req_out--; -+ if( m_req_out > cfg_req_queue_length ){ -+ if(arg_verbose) -+ fprintf(stderr, "ERROR@1: %p m_req_out underflow, resetting\n", this); -+ m_req_out = 0; -+ } -+ } -+ request_q.Remove(ps->index, ps->offset, ps->length); -+ } -+ if( !m_req_out && g_next_dn == this ) g_next_dn = (btPeer *)0; - -- return stream.Flush(); -+ return 0; - } - - int btPeer::CancelRequest(PSLICE ps) - { -+ int retval; -+ - for( ; ps; ps = ps->next){ -+ if( ps == request_q.NextSend() ) break; - if(stream.Send_Cancel(ps->index,ps->offset,ps->length) < 0) - return -1; -+ m_req_out--; -+ if( m_req_out > cfg_req_queue_length ){ -+ if(arg_verbose) -+ fprintf(stderr, "ERROR@2: %p m_req_out underflow, resetting\n", this); -+ m_req_out = 0; -+ } - } -- return stream.Flush(); -+ if( !m_req_out && g_next_dn == this ) g_next_dn = (btPeer *)0; -+ -+ return 0; -+} -+ -+int btPeer::CancelSliceRequest(size_t idx, size_t off, size_t len) -+{ -+ PSLICE ps; -+ int cancel = 1; -+ int idxfound = 0; -+ int retval; -+ -+ for(ps = request_q.GetHead() ; ps; ps = ps->next){ -+ if( ps == request_q.NextSend() ) cancel = 0; -+ if( idx == ps->index ){ -+ if( off == ps->offset && len == ps->length ){ -+ if( request_q.Remove(idx,off,len) < 0 ){ -+ m_err_count++; -+ if(arg_verbose) fprintf(stderr,"err: %p (%d) Bad CS remove\n", -+ this, m_err_count); -+ } -+ if(cancel){ -+ if(stream.Send_Cancel(idx,off,len) < 0) -+ return -1; -+ m_req_out--; -+ if( m_req_out > cfg_req_queue_length ){ -+ if(arg_verbose) fprintf(stderr, -+ "ERROR@3: %p m_req_out underflow, resetting\n", this); -+ m_req_out = 0; -+ } -+ if( !m_req_out && g_next_dn == this ) g_next_dn = (btPeer *)0; -+ -+ // Don't call RequestCheck() here since that could cause the slice -+ // we're cancelling to be dup'd from another peer. -+ return 0; -+ } -+ break; -+ } -+ idxfound = 1; -+ }else if( idxfound ) break; -+ } -+ return 0; - } - - int btPeer::ReportComplete(size_t idx) - { - if( BTCONTENT.APieceComplete(idx) ){ -+ if(arg_verbose) fprintf(stderr, "Piece #%u completed\n", idx); - WORLD.Tell_World_I_Have(idx); -+ PENDINGQUEUE.Delete(idx); - if( BTCONTENT.pBF->IsFull() ){ - ResetDLTimer(); - WORLD.CloseAllConnectionToSeed(); - } -- }else -+ -+ if( arg_file_to_download ){ -+ BitField tmpBitField = *BTCONTENT.pBF; -+ tmpBitField.Except(*BTCONTENT.pBFilter); -+ -+ while( arg_file_to_download && -+ tmpBitField.Count() >= BTCONTENT.getFilePieces(arg_file_to_download) ){ -+ //when the file is complete, we go after the next -+ ++arg_file_to_download; -+ BTCONTENT.FlushCache(); -+ BTCONTENT.SetFilter(); -+ tmpBitField = *BTCONTENT.pBF; -+ tmpBitField.Except(*BTCONTENT.pBFilter); -+ } -+ WORLD.CheckInterest(); -+ } -+ }else{ - m_err_count++; -+ if(arg_verbose) fprintf(stderr, "err: %p (%d) Bad complete\n", -+ this, m_err_count); -+ } - return (P_FAILED == m_status) ? -1 : RequestCheck(); - } - -@@ -311,17 +647,37 @@ - { - size_t idx,off,len; - char *msgbuf = stream.in_buffer.BasePointer(); -+ time_t t; -+ int dup = 0, requested = 1; - -- idx = ntohl(*(size_t*) (msgbuf + 5)); -- off = ntohl(*(size_t*) (msgbuf + 9)); -+ idx = get_nl(msgbuf + 5); -+ off = get_nl(msgbuf + 9); - len = mlen - 9; - -+ if(arg_verbose) fprintf(stderr, "Receiving piece %d/%d/%d from %p\n", -+ (int)idx, (int)off, (int)len, this); -+ -+ t = request_q.GetReqTime(idx,off,len); -+ -+ PSLICE ps = request_q.GetHead(); -+ if( request_q.NextSend() ) -+ for( ; ps; ps = ps->next){ -+ if( ps == request_q.NextSend() ){ -+ requested = 0; -+ break; -+ } -+ if( idx==ps->index && off==ps->offset && len==ps->length ) break; -+ } -+ - if( request_q.Remove(idx,off,len) < 0 ){ - m_err_count++; -+ if(arg_verbose) fprintf(stderr, "err: %p (%d) Bad remove\n", -+ this, m_err_count); - return 0; - } - - if(BTCONTENT.WriteSlice((char*)(msgbuf + 13),idx,off,len) < 0){ -+ fprintf(stderr, "warn, WriteSlice failed; is filesystem full?\n"); - return 0; - } - -@@ -329,48 +685,172 @@ - Self.DataRecved(len); - DataRecved(len); - -+ // Check for & cancel requests for this slice from other peers in initial -+ // and endgame modes. -+ if( BTCONTENT.pBF->Count() < 2 || -+ WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() < WORLD.TotalPeers() ) -+ dup = 1; -+ else if( arg_file_to_download ){ -+ BitField afdBitField = *BTCONTENT.pBF; -+ afdBitField.Except(*BTCONTENT.pBFilter); -+ if( BTCONTENT.getFilePieces(arg_file_to_download) - afdBitField.Count() -+ < WORLD.TotalPeers() ) -+ dup = 1; -+ } -+ if( dup ){ -+ WORLD.CancelSlice(idx, off, len); -+ PENDINGQUEUE.DeleteSlice(idx, off, len); -+ } -+ -+ // Determine how many outstanding requests we should maintain, roughly: -+ // (request turnaround latency) / (time to transmit one slice) -+ if(t){ -+ m_latency = (m_last_timestamp <= t) ? 1 : m_last_timestamp - t; -+ if(arg_verbose) fprintf(stderr, "%p latency is %d sec\n", -+ this, (int)m_latency); -+ m_latency_timestamp = m_last_timestamp; -+ } -+ -+ if( RateDL() > len/20 ){ -+ m_req_send = (int)( m_latency / (len / (double)RateDL()) + 1 ); -+ m_req_send = (m_req_send < 2) ? 2 : m_req_send; -+ -+ // If latency increases, we will see this as a dlrate decrease. -+ if( RateDL() < m_prev_dlrate ) m_req_send++; -+ else if( m_last_timestamp - m_latency_timestamp >= 30 && -+ // Try to force latency measurement every 30 seconds. -+ m_req_out == m_req_send - 1 ){ -+ m_req_send--; -+ m_latency_timestamp = m_last_timestamp; -+ } -+ m_prev_dlrate = RateDL(); -+ }else if (m_req_send < 5) m_req_send = 5; -+ -+ if( requested ) m_req_out--; -+ - /* if piece download complete. */ -- return request_q.IsEmpty() ? ReportComplete(idx) : 0; -+ return ( request_q.IsEmpty() || !request_q.HasIdx(idx) ) ? -+ ReportComplete(idx) : RequestCheck(); - } - - int btPeer::RequestCheck() - { -- if( BandWidthLimit() ) return 0; -- - if( BTCONTENT.pBF->IsFull() ){ -- if( bitfield.IsFull() ){ return -1; } -+ if( bitfield.IsFull() ){ return -2; } - return SetLocal(M_NOT_INTERESTED); - } - - if( Need_Remote_Data() ){ - if(!m_state.local_interested && SetLocal(M_INTERESTED) < 0) return -1; -- if(request_q.IsEmpty() && !m_state.remote_choked){ -- if( RequestPiece() < 0 ) return -1; -+ if( !m_state.remote_choked ){ -+ if( m_req_out > cfg_req_queue_length ){ -+ if(arg_verbose) -+ fprintf(stderr, "ERROR@4: %p m_req_out underflow, resetting\n", this); -+ m_req_out = 0; -+ } -+ if( request_q.IsEmpty() && RequestPiece() < 0 ) return -1; -+ else if( m_req_out < m_req_send && -+ (m_req_out < 2 || !RateDL() || -+ 1 >= (m_req_out+1) * request_q.GetRequestLen() / -+ (double)RateDL() - m_latency) -+ // above formula is to try to allow delay between sending batches of reqs -+ && SendRequest() < 0 ) return -1; - } -- } -+ }else -+ if(m_state.local_interested && SetLocal(M_NOT_INTERESTED) < 0) return -1; - - if(!request_q.IsEmpty()) StartDLTimer(); -+ else StopDLTimer(); - return 0; - } - - void btPeer::CloseConnection() - { -+ if(arg_verbose) fprintf(stderr, "%p closed\n", this); - if( P_FAILED != m_status ){ - m_status = P_FAILED; - stream.Close(); -+ if( !request_q.IsEmpty() ) -+ PENDINGQUEUE.Pending(&request_q); - } -+ if( g_next_up == this ) g_next_up = (btPeer *)0; -+ if( g_next_dn == this ) g_next_dn = (btPeer *)0; - } - - int btPeer::HandShake() - { -+ char txtid[PEER_ID_LEN*2+3]; - ssize_t r = stream.Feed(); -- if( r < 0 ) return -1; -+ if( r < 0 ){ -+// if(arg_verbose) fprintf(stderr, "hs: r<0 (%d)\n", r); -+ return -1; -+ } - else if( r < 68 ){ -- if(r && memcmp(stream.in_buffer.BasePointer(),BTCONTENT.GetShakeBuffer(),r) != 0) return -1; -+ if(r >= 21){ // Ignore 8 reserved bytes following protocol ID. -+ if( memcmp(stream.in_buffer.BasePointer()+20, -+ BTCONTENT.GetShakeBuffer()+20, (r<28) ? r-20 : 8) != 0 ){ -+ if(arg_verbose){ -+ fprintf( stderr, "\npeer %p gave 0x", this); -+ for(int i=20; i<r && i<27; i++) fprintf(stderr, "%2.2hx", -+ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i])); -+ fprintf( stderr, " as reserved bytes (partial)\n" ); -+ } -+ memcpy(stream.in_buffer.BasePointer()+20, BTCONTENT.GetShakeBuffer()+20, -+ (r<28) ? r-20 : 8); -+ } -+ } -+ if(r && memcmp(stream.in_buffer.BasePointer(),BTCONTENT.GetShakeBuffer(), -+ (r<48) ? r : 48) != 0){ -+ if(arg_verbose){ -+ fprintf(stderr, "\nmine: 0x"); -+ for(int i=0; i<r && i<48; i++) fprintf(stderr, "%2.2hx", -+ (unsigned short)(unsigned char)(BTCONTENT.GetShakeBuffer()[i])); -+ fprintf(stderr, "\npeer: 0x"); -+ for(int i=0; i<r && i<48; i++) fprintf(stderr, "%2.2hx", -+ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i])); -+ fprintf(stderr, "\n"); -+ if( r>48 ){ -+ TextPeerID((unsigned char *)(stream.in_buffer.BasePointer()+48), -+ txtid); -+ fprintf(stderr, "peer is %s\n", txtid); -+ } -+ } -+ return -1; -+ } - return 0; - } - -- if( memcmp(stream.in_buffer.BasePointer(),BTCONTENT.GetShakeBuffer(),48) != 0 ) return -1; -+ // If the reserved bytes differ, make them the same. -+ // If they mean anything important, the handshake is likely to fail anyway. -+ if( memcmp(stream.in_buffer.BasePointer()+20, BTCONTENT.GetShakeBuffer()+20, -+ 8) != 0 ){ -+ if(arg_verbose){ -+ fprintf(stderr, "\npeer %p gave 0x", this); -+ for(int i=20; i<27; i++) fprintf(stderr, "%2.2hx", -+ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i])); -+ fprintf( stderr, " as reserved bytes\n" ); -+ } -+ memcpy(stream.in_buffer.BasePointer()+20, BTCONTENT.GetShakeBuffer()+20, 8); -+ } -+ if( memcmp(stream.in_buffer.BasePointer(), -+ BTCONTENT.GetShakeBuffer(),48) != 0 ){ -+ if(arg_verbose){ -+ fprintf(stderr, "\nmine: 0x"); -+ for(int i=0; i<48; i++) fprintf(stderr, "%2.2hx", -+ (unsigned short)(unsigned char)(BTCONTENT.GetShakeBuffer()[i])); -+ fprintf(stderr, "\npeer: 0x"); -+ for(int i=0; i<48; i++) fprintf(stderr, "%2.2hx", -+ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i])); -+ fprintf(stderr, "\n"); -+ } -+ return -1; -+ } -+ -+ memcpy(id, stream.in_buffer.BasePointer()+48, PEER_ID_LEN); -+ if(arg_verbose){ -+ TextPeerID((unsigned char *)(stream.in_buffer.BasePointer()+48), txtid); -+ fprintf(stderr, "Peer %p ID: %s\n", this, txtid); -+ } - - // ignore peer id verify - if( !BTCONTENT.pBF->IsEmpty()){ -@@ -395,20 +875,63 @@ - return stream.Send_Buffer((char*)BTCONTENT.GetShakeBuffer(),68); - } - --int btPeer::BandWidthLimit() -+int btPeer::BandWidthLimitUp() - { -- if( cfg_max_bandwidth <= 0 ) return 0; -- return ((Self.RateDL() + Self.RateUL()*2) / 1024 >= cfg_max_bandwidth) ? -+ if( cfg_max_bandwidth_up <= 0 ) return 0; -+ return ((Self.RateUL()) >= cfg_max_bandwidth_up) ? -+ 1:0; -+} -+ -+int btPeer::BandWidthLimitDown() -+{ -+ if( cfg_max_bandwidth_down <= 0 ) return 0; -+ return ((Self.RateDL()) >= cfg_max_bandwidth_down) ? - 1:0; - } - - int btPeer::NeedWrite() - { - int yn = 0; -+ -+ if( m_standby && WORLD.Endgame() ){ -+ if(arg_verbose) fprintf(stderr, "%p un-standby (endgame)\n", this); -+ m_standby = 0; -+ } -+ - if( stream.out_buffer.Count() || // data need send in buffer. -- (!reponse_q.IsEmpty() && CouldReponseSlice() && !BandWidthLimit()) || -- P_CONNECTING == m_status ) // peer is connecting -+ // can upload a slice -+ (!reponse_q.IsEmpty() && CouldReponseSlice() && !BandWidthLimitUp()) || -+ -+ ( (request_q.NextSend() && m_req_out < m_req_send && -+ (m_req_out < 2 || !RateDL() || -+ 1 >= (m_req_out+1) * request_q.GetRequestLen() / -+ (double)RateDL() - m_latency)) // can send queued request -+ || -+ (request_q.IsEmpty() && !m_state.remote_choked -+ && m_state.local_interested && !m_standby) // can request a new piece -+ ) // ok to send requests -+ -+ || P_CONNECTING == m_status ){ // peer is connecting -+ - yn = 1; -+ -+ if( g_next_up==this && g_defer_up ){ -+ if(arg_verbose) fprintf(stderr, "%p skipped UL\n", this); -+ g_next_up = (btPeer *)0; -+ } -+ } -+ return yn; -+} -+ -+int btPeer::NeedRead() -+{ -+ int yn = 1; -+ if( !request_q.IsEmpty() && BandWidthLimitDown() ) -+ yn = 0; -+ else if( g_next_dn==this && g_defer_dn ){ -+ if(arg_verbose) fprintf(stderr, "%p skipped DL\n", this); -+ g_next_dn = (btPeer *)0; -+ } - return yn; - } - -@@ -432,20 +955,35 @@ - ssize_t r; - - if ( 64 < m_err_count ) return -1; -- -- r = stream.Feed(); - -- if( r < 0 && r != -2 ) -- return -1; -- else if ( r == -2 ) -- f_peer_closed = 1; -+ if( request_q.IsEmpty() || !BandWidthLimitDown() ){ -+ if ( request_q.IsEmpty() || !g_next_dn || g_next_dn==this ){ -+ if( g_next_dn ) g_next_dn = (btPeer *)0; -+ -+ r = stream.Feed(); -+ -+ if( r < 0 && r != -2 ) -+ return -1; -+ else if ( r == -2 ) -+ f_peer_closed = 1; - -- r = stream.HaveMessage(); -- for( ; r;){ -- if( r < 0 ) return -1; -- if(MsgDeliver() < 0 || stream.PickMessage() < 0) return -1; -- r = stream.HaveMessage(); -+ r = stream.HaveMessage(); -+ for( ; r;){ -+ if( r < 0 ) return -1; -+ if(MsgDeliver() < 0 || stream.PickMessage() < 0) return -1; -+ r = stream.HaveMessage(); -+ } -+ }else{ -+ if(arg_verbose) -+ fprintf(stderr, "%p deferring DL to %p\n", this, g_next_dn); -+ if( !g_defer_dn ) g_defer_dn = 1; -+ } -+ }else if( !g_next_dn ){ -+ if(arg_verbose) fprintf(stderr, "%p waiting for DL bandwidth\n", this); -+ g_next_dn = this; -+ if( g_defer_dn ) g_defer_dn = 0; - } -+ - return f_peer_closed ? -1 : 0; - } - -@@ -453,27 +991,80 @@ - { - if( stream.out_buffer.Count() && stream.Flush() < 0) return -1; - -- if(! reponse_q.IsEmpty() && CouldReponseSlice() ) { -- StartULTimer(); -- Self.StartULTimer(); -- } -+ if( !reponse_q.IsEmpty() && CouldReponseSlice() ) { -+ if( !BandWidthLimitUp() ){ -+ if( !g_next_up || g_next_up==this ){ -+ if( g_next_up ) g_next_up = (btPeer *)0; -+ -+ StartULTimer(); -+ Self.StartULTimer(); -+ if( ReponseSlice() < 0 ) return -1; -+ }else{ -+ if(arg_verbose) -+ fprintf(stderr, "%p deferring UL to %p\n", this, g_next_up); -+ if( !g_defer_up ) g_defer_up = 1; -+ } -+ }else if( !g_next_up ){ -+ if(arg_verbose) fprintf(stderr, "%p waiting for UL bandwidth\n", this); -+ g_next_up = this; -+ if( g_defer_up ) g_defer_up = 0; -+ } -+ }else if( g_next_up == this ) g_next_up = (btPeer *)0; - -- for(; !reponse_q.IsEmpty() && CouldReponseSlice(); ) -- if( ReponseSlice() < 0) return -1; -+ return (!m_state.remote_choked) ? RequestCheck() : 0; -+} - -+// Prevent a peer object from holding g_next_up when it's not ready to write. -+void btPeer::CheckSendStatus() -+{ -+ if( g_next_up == this && !BandWidthLimitUp() ){ -+ if(arg_verbose) fprintf(stderr, "%p is not write-ready\n", this); -+ g_next_up = (btPeer *)0; -+ } -+} -+ -+/* Detect if a peer ignored, discarded, or lost my request and we're waiting -+ for a piece that may never arrive. */ -+int btPeer::HealthCheck(time_t now) -+{ -+ if( m_health_time <= now - 60 ){ -+ m_health_time = now; -+ if( !m_state.remote_choked && m_req_out && -+ m_receive_time < now - (!m_latency ? 300 : -+ ((m_latency < 30) ? 60 : 2*m_latency)) ){ -+ // if a repeat occurrence, get rid of the peer -+ if( m_bad_health ) return -1; -+ m_bad_health = 1; -+ if(arg_verbose) -+ fprintf(stderr, "%p unresponsive; resetting request queue\n", this); -+ PSLICE ps = request_q.GetHead(); -+ int retval = CancelRequest(ps); -+ PENDINGQUEUE.Pending(&request_q); -+ return (retval < 0) ? -1 : RequestCheck(); -+ } else m_bad_health = 0; -+ } - return 0; - } - -+// This handles peers that suppress HAVE messages so that we don't always think -+// that they're empty. If we've sent the peer an amount of data equivalent to -+// two pieces, assume that they now have at least one complete piece. -+int btPeer::IsEmpty() const -+{ -+ return ( bitfield.IsEmpty() && TotalUL() < BTCONTENT.GetPieceLength()*2 ) ? -+ 1:0; -+} -+ - void btPeer::dump() - { - struct sockaddr_in sin; - - GetAddress(&sin); - printf("%s: %d -> %d:%d %lud:%lud\n", inet_ntoa(sin.sin_addr), -- bitfield.Count(), -- Is_Remote_UnChoked() ? 1 : 0, -- request_q.IsEmpty() ? 0 : 1, -- (unsigned long)TotalDL(), -- (unsigned long)TotalUL()); -+ bitfield.Count(), -+ Is_Remote_UnChoked() ? 1 : 0, -+ request_q.IsEmpty() ? 0 : 1, -+ (unsigned long)TotalDL(), -+ (unsigned long)TotalUL()); - } - -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peer.h ctorrent-1.3.4/peer.h ---- ctorrent-1.3.4.sav/peer.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/peer.h 2006-06-28 19:30:02.000000000 +0200 -@@ -19,6 +19,7 @@ - #include "btstream.h" - #include "bitfield.h" - #include "rate.h" -+#include "btconfig.h" - - #define P_CONNECTING (unsigned char) 0 // connecting - #define P_HANDSHAKE (unsigned char) 1 // handshaking -@@ -34,14 +35,24 @@ - unsigned char reserved:4; /* unused */ - }BTSTATUS; - -+size_t get_nl(char *from); -+void set_nl(char *to, size_t from); -+ -+int TextPeerID(unsigned char *peerid, char *txtid); -+ - class btBasic - { - private: - Rate rate_dl; - Rate rate_ul; -+ size_t m_current_dl, m_current_ul; -+ unsigned char m_use_current:1; -+ unsigned char m_reserved:7; - public: - struct sockaddr_in m_sin; - -+ btBasic() { m_use_current = 0; } -+ - //IP地址相关函数 - int IpEquiv(struct sockaddr_in addr); - void SetIp(struct sockaddr_in addr); -@@ -60,8 +71,10 @@ - void DataRecved(size_t nby) { rate_dl.CountAdd(nby); } - void DataSended(size_t nby) { rate_ul.CountAdd(nby); } - -- size_t RateDL() const { return rate_dl.RateMeasure(); } -- size_t RateUL() const { return rate_ul.RateMeasure();} -+ size_t RateDL() const { return m_use_current ? m_current_dl : rate_dl.RateMeasure(); } -+ size_t RateUL() const { return m_use_current ? m_current_ul : rate_ul.RateMeasure(); } -+ void SetCurrentRates(); -+ void ClearCurrentRates() { m_use_current = 0; } - - void StartDLTimer() { rate_dl.StartTimer(); } - void StartULTimer() { rate_ul.StartTimer(); } -@@ -78,17 +91,28 @@ - - unsigned char m_f_keepalive:1; - unsigned char m_status:4; -- unsigned char m_reserved:3; -+ unsigned char m_bad_health:1; -+ unsigned char m_standby:1; -+ unsigned char m_reserved:1; - - BTSTATUS m_state; - - size_t m_cached_idx; - size_t m_err_count; -+ size_t m_req_send; // target number of outstanding requests -+ size_t m_req_out; // actual number of outstanding requests -+ size_t m_latency; -+ size_t m_prev_dlrate; -+ time_t m_latency_timestamp; -+ time_t m_health_time, m_receive_time; -+ char m_lastmsg; -+ time_t m_choketime; - - int PieceDeliver(size_t mlen); - int ReportComplete(size_t idx); - int RequestCheck(); - int SendRequest(); -+ int CancelPiece(); - int CancelRequest(PSLICE ps); - int ReponseSlice(); - int RequestPiece(); -@@ -96,7 +120,10 @@ - int CouldReponseSlice(); - - int BandWidthLimit(); -+ int BandWidthLimitUp(); -+ int BandWidthLimitDown(); - public: -+ unsigned char id[PEER_ID_LEN]; - BitField bitfield; - btStream stream; - RequestQueue request_q; -@@ -106,6 +133,8 @@ - - int RecvModule(); - int SendModule(); -+ int HealthCheck(time_t now); -+ void CheckSendStatus(); - - time_t SetLastTimestamp() { return time(&m_last_timestamp); } - time_t GetLastTimestamp() const { return m_last_timestamp; } -@@ -118,10 +147,14 @@ - int Is_Local_UnChoked() const { return m_state.local_choked ? 0 : 1; } - int SetLocal(unsigned char s); - -+ int IsEmpty() const; -+ -+ int CancelSliceRequest(size_t idx, size_t off, size_t len); - - void SetStatus(unsigned char s){ m_status = s; } - unsigned char GetStatus() const { return m_status; } - int NeedWrite(); -+ int NeedRead(); - - - void CloseConnection(); -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peerlist.cpp ctorrent-1.3.4/peerlist.cpp ---- ctorrent-1.3.4.sav/peerlist.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/peerlist.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -5,6 +5,7 @@ - #include <stdlib.h> - - #include <stdio.h> -+#include <errno.h> - - #include <string.h> - -@@ -16,11 +17,15 @@ - - #include "iplist.h" - #include "tracker.h" -+#include "ctcs.h" -+#include "bttime.h" - - - #define MAX_UNCHOKE 3 - #define UNCHOKE_INTERVAL 10 - -+#define OPT_INTERVAL 30 -+ - #define KEEPALIVE_INTERVAL 117 - - #define LISTEN_PORT_MAX 2706 -@@ -36,12 +41,13 @@ - - PeerList::PeerList() - { -- m_unchoke_check_timestamp = -- m_keepalive_check_timestamp = time((time_t*) 0); -+ m_unchoke_check_timestamp = -+ m_keepalive_check_timestamp = -+ m_opt_timestamp = time((time_t*) 0); - - m_head = (PEERNODE*) 0; - m_listen_sock = INVALID_SOCKET; -- m_peers_count = 0; -+ m_peers_count = m_seeds_count = 0; - m_live_idx = 0; - } - -@@ -61,25 +67,6 @@ - return m_peers_count ? 0 : 1; - } - --void PeerList::Sort() --{ -- PEERNODE *newhead = (PEERNODE*) 0; -- PEERNODE *p, *pp, *spn; -- -- if( m_peers_count < 10 ) return; -- -- for(; m_head;){ -- pp = (PEERNODE*) 0; -- for(p = newhead; p && m_head->click < p->click; pp = p, p = p->next) ; -- -- spn = m_head->next; -- m_head->next = p; -- if( pp ) pp->next = m_head; else newhead = m_head; -- m_head = spn; -- } -- m_head = newhead; --} -- - void PeerList::CloseAll() - { - PEERNODE *p; -@@ -118,6 +105,8 @@ - - if( setfd_nonblock(sk) < 0) goto err; - -+ if(arg_verbose) fprintf(stderr, "Connecting to %s:%hu\n", -+ inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); - if( -1 == (r = connect_nonb(sk,(struct sockaddr*)&addr)) ) return -1; - - peer = new btPeer; -@@ -154,7 +143,6 @@ - m_peers_count++; - - p->peer = peer; -- p->click = 0; - - p->next = m_head; - m_head = p; -@@ -177,28 +165,65 @@ - struct sockaddr_in addr; - btPeer * UNCHOKER[MAX_UNCHOKE + 1]; - -- for( ;NEED_MORE_PEERS() && !IPQUEUE.IsEmpty(); ){ -- if(IPQUEUE.Pop(&addr) < 0) break; -- if(NewPeer(addr,INVALID_SOCKET) == -4) break; -- } -+ if( !Tracker.IsPaused() && !Tracker.IsQuitting() ) -+ for( ;NEED_MORE_PEERS() && !IPQUEUE.IsEmpty(); ){ -+ if(IPQUEUE.Pop(&addr) < 0) break; -+ if(NewPeer(addr,INVALID_SOCKET) == -4) break; -+ } -+ -+ Self.SetCurrentRates(); - - // show status line. - if( m_pre_dlrate.TimeUsed(pnow) ){ -- printf("\r "); -- printf("\r%c %u,[%u/%u/%u],%u,%u | %u,%u E:%u", -- LIVE_CHAR[m_live_idx], -- m_peers_count, -- BTCONTENT.pBF->Count(), -- BTCONTENT.pBF->NBits(), -- Pieces_I_Can_Get(), -- Self.RateDL(), Self.RateUL(), -- m_pre_dlrate.RateMeasure(Self.GetDLRate()), -- m_pre_ulrate.RateMeasure(Self.GetULRate()), -- Tracker.GetRefuseClick()); -+ char partial[30] = ""; -+ if(arg_file_to_download){ -+ BitField tmpBitField = *BTCONTENT.pBF; -+ tmpBitField.Except(*BTCONTENT.pBFilter); -+ sprintf( partial, "P:%u/%u ", -+ tmpBitField.Count(), -+ BTCONTENT.getFilePieces(arg_file_to_download) ); -+ } -+ printf("\r "); -+ printf("\r%c %u/%u/%u [%u/%u/%u] %lluMB,%lluMB | %u,%uK/s | %u,%uK E:%u,%u %s%s ", -+ LIVE_CHAR[m_live_idx], -+ -+ m_seeds_count, -+ m_peers_count - m_seeds_count, -+ Tracker.GetPeersCount(), -+ -+ BTCONTENT.pBF->Count(), -+ BTCONTENT.pBF->NBits(), -+ Pieces_I_Can_Get(), -+ -+ Self.TotalDL() >> 20, Self.TotalUL() >> 20, -+ -+ Self.RateDL() >> 10, Self.RateUL() >> 10, -+ -+ m_pre_dlrate.RateMeasure(Self.GetDLRate()) >> 10, -+ m_pre_ulrate.RateMeasure(Self.GetULRate()) >> 10, -+ -+ Tracker.GetRefuseClick(), -+ Tracker.GetOkClick(), -+ -+ partial, -+ -+ (Tracker.GetStatus()==T_CONNECTING) ? "Connecting" : -+ ( (Tracker.GetStatus()==T_READY) ? "Connected" : -+ (Tracker.IsPaused() ? -+ ((Tracker.GetStatus()==T_FINISHED) ? "Paused" : "Pausing") : -+ (Tracker.IsQuitting() ? "Quitting" : "")) ) -+ ); - fflush(stdout); - m_pre_dlrate = Self.GetDLRate(); - m_pre_ulrate = Self.GetULRate(); - m_live_idx++; -+ -+ if(arg_ctcs) CTCS.Report_Status( -+ m_seeds_count, m_peers_count - m_seeds_count, -+ BTCONTENT.pBF->Count(), BTCONTENT.pBF->NBits(), Pieces_I_Can_Get(), -+ Self.RateDL(), Self.RateUL(), -+ Self.TotalDL(), Self.TotalUL(), -+ cfg_max_bandwidth_down, cfg_max_bandwidth_up); - } - - if(KEEPALIVE_INTERVAL <= (*pnow - m_keepalive_check_timestamp)){ -@@ -211,11 +236,14 @@ - m_unchoke_check_timestamp = *pnow; - f_unchoke_check = 1; - -- Sort(); - } - -- if( f_unchoke_check ) memset(UNCHOKER, 0, (MAX_UNCHOKE + 1) * sizeof(btPeer*)); -+ if( f_unchoke_check ) { -+ memset(UNCHOKER, 0, (MAX_UNCHOKE + 1) * sizeof(btPeer*)); -+ if (OPT_INTERVAL <= *pnow - m_opt_timestamp) m_opt_timestamp = 0; -+ } - -+ m_seeds_count = 0; - for(p = m_head; p;){ - if( PEER_IS_FAILED(p->peer)){ - if( pp ) pp->next = p->next; else m_head = p->next; -@@ -225,38 +253,38 @@ - if( pp ) p = pp->next; else p = m_head; - continue; - }else{ -+ if (p->peer->bitfield.IsFull()) m_seeds_count++; - if( f_keepalive_check ){ - -- if(3 * KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp())){ -- p->peer->CloseConnection(); -- goto skip_continue; -- } -- -- if(PEER_IS_SUCCESS(p->peer) && -- KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp()) && -- p->peer->AreYouOK() < 0){ -- p->peer->CloseConnection(); -- goto skip_continue; -- } -- } -- -- if( f_unchoke_check ){ -- -- if(PEER_IS_SUCCESS(p->peer) && p->peer->Need_Local_Data()){ -- -- if((time_t) 0 == p->peer->GetLastUnchokeTime()){ -- if(p->peer->SetLocal(M_UNCHOKE) < 0){ -- p->peer->CloseConnection(); -- goto skip_continue; -- } -- }else -- UnChokeCheck(p->peer, UNCHOKER); -- } -+ if(3 * KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp())){ -+ if(arg_verbose) fprintf(stderr, "close: keepalive expired\n"); -+ p->peer->CloseConnection(); -+ goto skip_continue; -+ } -+ -+ if(PEER_IS_SUCCESS(p->peer) && -+ KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp()) && -+ p->peer->AreYouOK() < 0){ -+ if(arg_verbose) fprintf(stderr, "close: keepalive death\n"); -+ p->peer->CloseConnection(); -+ goto skip_continue; -+ } -+ } -+ -+ if( f_unchoke_check && PEER_IS_SUCCESS(p->peer) ){ -+ -+ if( p->peer->Is_Remote_Interested() && p->peer->Need_Local_Data() ) -+ UnChokeCheck(p->peer, UNCHOKER); -+ else if(p->peer->SetLocal(M_CHOKE) < 0){ -+ if(arg_verbose) fprintf(stderr, "close: Can't choke peer\n"); -+ p->peer->CloseConnection(); -+ goto skip_continue; -+ } - } - - sk = p->peer->stream.GetSocket(); - if(maxfd < sk) maxfd = sk; -- FD_SET(sk,rfdp); -+ if( p->peer->NeedRead() ) FD_SET(sk,rfdp); - - if( p->peer->NeedWrite() ) FD_SET(sk,wfdp); - skip_continue: -@@ -272,25 +300,40 @@ - } - - if( f_unchoke_check ){ -+ if(arg_verbose) fprintf(stderr, "\nUnchoker "); -+ if (!m_opt_timestamp){ -+ if(arg_verbose) fprintf(stderr, "(opt) "); -+ m_opt_timestamp = *pnow; -+ } - for( i = 0; i < MAX_UNCHOKE + 1; i++){ - - if( (btPeer*) 0 == UNCHOKER[i]) break; - - if( PEER_IS_FAILED(UNCHOKER[i]) ) continue; - -+ if(arg_verbose){ -+ fprintf(stderr, "D=%lluMB@%uK/s:U=%lluMB ", -+ UNCHOKER[i]->TotalDL() >> 20, UNCHOKER[i]->RateDL() >> 10, -+ UNCHOKER[i]->TotalUL() >> 20); -+ if( UNCHOKER[i]->bitfield.IsEmpty() ) fprintf(stderr, "(empty) "); -+ } - if( UNCHOKER[i]->SetLocal(M_UNCHOKE) < 0){ -- UNCHOKER[i]->CloseConnection(); -- continue; -+ if(arg_verbose) fprintf(stderr, "close: Can't unchoke peer\n"); -+ UNCHOKER[i]->CloseConnection(); -+ continue; - } - - sk = UNCHOKER[i]->stream.GetSocket(); - - if(!FD_ISSET(sk,wfdp) && UNCHOKER[i]->NeedWrite()){ -- FD_SET(sk,wfdp); -- if( maxfd < sk) maxfd = sk; -+ FD_SET(sk,wfdp); -+ if( maxfd < sk) maxfd = sk; - } - } // end for -+ if(arg_verbose) fprintf(stderr, "\n"); - } -+ -+ Self.ClearCurrentRates(); - - return maxfd; - } -@@ -305,15 +348,148 @@ - - if(proposer->bitfield.IsSet(p->peer->request_q.GetRequestIdx())){ - if(!peer){ -- if( p->peer->RateDL() < proposer->RateDL() ) peer = p->peer; -+ if( p->peer->RateDL() < proposer->RateDL() ) peer = p->peer; - }else{ -- if( p->peer->RateDL() < peer->RateDL() ) peer = p->peer; -+ if( p->peer->RateDL() < peer->RateDL() ) peer = p->peer; - } - } - }//end for - return peer; - } - -+// This takes an index parameter to facilitate modification of the function to -+// allow targeting of a specific piece. It's currently only used as a flag to -+// specify endgame or initial-piece mode though. -+size_t PeerList::What_Can_Duplicate(BitField &bf, btPeer *proposer, size_t idx) -+{ -+ PEERNODE *p; -+ btPeer *peer = (btPeer*) 0; -+ int endgame; -+ PSLICE ps; -+ size_t piece, piece1, qsize, mark, bench; -+ unsigned long rndbits; -+ int r=0; -+ -+ endgame = idx < BTCONTENT.GetNPieces(); // else initial-piece mode -+ if(endgame) mark = 0; -+ else mark = cfg_req_queue_length; -+ bench = BTCONTENT.GetNPieces(); -+ -+ // In initial mode, only dup a piece with trade value. -+ // In endgame mode, dup any if there are no pieces with trade value. -+ FindValuedPieces(bf, proposer, !endgame); -+ if( bf.IsEmpty() ){ -+ if(endgame) bf = proposer->bitfield; -+ else return BTCONTENT.GetNPieces(); -+ } -+ -+ /* In endgame mode, select from peers with the longest request queue. -+ In initial mode, select from peers with the shortest non-empty request -+ queue. */ -+ for(p = m_head; p; p = p->next){ -+ if( !PEER_IS_SUCCESS(p->peer) || p->peer == proposer ) continue; -+ -+ if( p->peer->request_q.IsEmpty() ) continue; -+ -+ piece = BTCONTENT.GetNPieces(); -+ ps = p->peer->request_q.GetHead(); -+ for( ; ps; ps = ps->next){ -+ if( piece == ps->index || bench == ps->index || piece1 == ps->index || -+ !bf.IsSet(ps->index) || proposer->request_q.HasIdx(ps->index) ) -+ continue; -+ piece = ps->index; -+ -+ qsize = p->peer->request_q.Qlen(piece); -+ if( (endgame && qsize > mark) || -+ (!endgame && (qsize < mark || !peer)) ){ -+ mark = qsize; -+ peer = p->peer; -+ piece1 = piece; -+ }else if( qsize == mark ){ -+ if( !r-- ){ -+ rndbits = random(); -+ r = 30; -+ } -+ if( bench != piece && (rndbits>>=1)&01 ){ -+ bench = piece1; -+ peer = p->peer; -+ piece1 = piece; -+ } -+ } -+ } -+ } -+ return peer ? piece1 : BTCONTENT.GetNPieces(); -+} -+ -+void PeerList::FindValuedPieces(BitField &bf, btPeer *proposer, int initial) -+{ -+ PEERNODE *p; -+ BitField bf_all_have = bf, bf_int_have = bf, -+ bf_others_have, bf_only_he_has = bf, bf_prefer; -+ -+ for(p = m_head; p; p = p->next){ -+ if( !PEER_IS_SUCCESS(p->peer) || p->peer == proposer ) continue; -+ if( p->peer->Need_Remote_Data() ) -+ bf_int_have.And(p->peer->bitfield); -+ bf_all_have.And(p->peer->bitfield); -+ if( !initial && !p->peer->bitfield.IsFull() ) -+ bf_only_he_has.Except(p->peer->bitfield); -+ else bf_others_have.Comb(p->peer->bitfield); -+ } -+ /* bf_all_have is now pertinent pieces that all peers have -+ bf_int_have is pertinent pieces that all peers in which I'm interested have -+ We prefer to get pieces that those peers need, if we can. Otherwise go -+ for pieces that any peer needs in hopes of future reciprocation. */ -+ if( !bf_int_have.IsFull() ) -+ bf_all_have = bf_int_have; -+ bf_all_have.Invert(); -+ bf.And(bf_all_have); // bf is now pertinent pieces that not everyone has -+ -+ bf_prefer = initial ? bf_others_have : bf_only_he_has; -+ -+ BitField tmpBitField = bf; -+ tmpBitField.And(bf_prefer); -+ /* If initial mode, tmpBitField is now pertinent pieces that more than one -+ peer has, but not everyone. -+ Otherwise, it's pertinent pieces that only the proposer has (not -+ considering what other seeders have). -+ In either case if there are no such pieces, revert to the simple answer.*/ -+ if( !tmpBitField.IsEmpty() ) bf = tmpBitField; -+} -+ -+/* Find a peer with the given piece in its request queue. -+ Duplicating a request queue that's in progress rather than creating a new -+ one helps avoid requesting slices that we already have. */ -+btPeer *PeerList::WhoHas(size_t idx) -+{ -+ PEERNODE *p; -+ btPeer *peer = (btPeer*) 0; -+ -+ for( p = m_head; p; p = p->next){ -+ if( p->peer->request_q.HasIdx(idx) ){ -+ peer = p->peer; -+ break; -+ } -+ } -+ return peer; -+} -+ -+void PeerList::CancelSlice(size_t idx, size_t off, size_t len) -+{ -+ PEERNODE *p; -+ PSLICE ps; -+ -+ for( p = m_head; p; p = p->next){ -+ -+ if( !PEER_IS_SUCCESS(p->peer) ) continue; -+ -+ if (p->peer->CancelSliceRequest(idx,off,len) < 0) { -+ if(arg_verbose) fprintf(stderr, "close: CancelSlice\n"); -+ p->peer->CloseConnection(); -+ } -+ } -+} -+ - void PeerList::Tell_World_I_Have(size_t idx) - { - PEERNODE *p; -@@ -325,12 +501,18 @@ - - if( !PEER_IS_SUCCESS(p->peer) ) continue; - -- if( p->peer->stream.Send_Have(idx) < 0) -+ // Don't send HAVE to seeders, except for our first piece. -+ if( (!p->peer->bitfield.IsFull() || 1==BTCONTENT.pBF->Count()) && -+ p->peer->stream.Send_Have(idx) < 0) - p->peer->CloseConnection(); - - if( f_seed ){ - if( !p->peer->request_q.IsEmpty() ) p->peer->request_q.Empty(); -- if(p->peer->SetLocal(M_NOT_INTERESTED) < 0) p->peer->CloseConnection(); -+ if(p->peer->SetLocal(M_NOT_INTERESTED) < 0) { -+ if(arg_verbose) -+ fprintf(stderr, "close: Can't set self not interested (T_W_I_H)\n"); -+ p->peer->CloseConnection(); -+ } - } - - } // end for -@@ -350,6 +532,11 @@ - CLOSE_SOCKET(newsk); - return -1; - } -+ -+ if( Tracker.IsPaused() || Tracker.IsQuitting() ){ -+ CLOSE_SOCKET(newsk); -+ return -1; -+ } - - return NewPeer(addr,newsk); - } -@@ -359,18 +546,23 @@ - int r = 0; - struct sockaddr_in lis_addr; - memset(&lis_addr,0, sizeof(sockaddr_in)); -+ lis_addr.sin_family = AF_INET; - lis_addr.sin_addr.s_addr = INADDR_ANY; - - m_listen_sock = socket(AF_INET,SOCK_STREAM,0); - - if( INVALID_SOCKET == m_listen_sock ) return -1; - -+ if ( cfg_listen_ip != 0 ) -+ lis_addr.sin_addr.s_addr = cfg_listen_ip; -+ - if(cfg_listen_port && cfg_listen_port != LISTEN_PORT_MAX){ - lis_addr.sin_port = htons(cfg_listen_port); - if(bind(m_listen_sock,(struct sockaddr*)&lis_addr,sizeof(struct sockaddr_in)) == 0) - r = 1; - else -- fprintf(stderr,"warn,couldn't bind on specified port: %d\n",cfg_listen_port); -+ fprintf(stderr,"warn,couldn't bind on specified port %d: %s\n", -+ cfg_listen_port,strerror(errno)); - } - - if( !r ){ -@@ -380,20 +572,21 @@ - lis_addr.sin_port = htons(cfg_listen_port); - r = bind(m_listen_sock,(struct sockaddr*)&lis_addr,sizeof(struct sockaddr_in)); - if(r != 0){ -- cfg_listen_port--; -- if(cfg_listen_port < cfg_min_listen_port){ -- CLOSE_SOCKET(m_listen_sock); -- fprintf(stderr,"error,couldn't bind port from %d to %d.\n", -- cfg_min_listen_port,cfg_max_listen_port); -- return -1; -- } -+ cfg_listen_port--; -+ if(cfg_listen_port < cfg_min_listen_port){ -+ CLOSE_SOCKET(m_listen_sock); -+ fprintf(stderr,"error,couldn't bind port from %d to %d: %s\n", -+ cfg_min_listen_port,cfg_max_listen_port,strerror(errno)); -+ return -1; -+ } - } - } /* end for(; r != 0;) */ - } - - if(listen(m_listen_sock,5) == -1){ - CLOSE_SOCKET(m_listen_sock); -- fprintf(stderr,"error, couldn't listen on port %d.\n",cfg_listen_port); -+ fprintf(stderr,"error, couldn't listen on port %d: %s\n", -+ cfg_listen_port,strerror(errno)); - return -1; - } - -@@ -402,6 +595,9 @@ - fprintf(stderr,"error, couldn't set socket to nonblock mode.\n"); - return -1; - } -+ -+ printf("Listening on %s:%d\n", inet_ntoa(lis_addr.sin_addr), -+ ntohs(lis_addr.sin_port)); - - return 0; - } -@@ -425,7 +621,7 @@ - PEERNODE *p; - for(p = m_head; p; p = p->next){ - if( !PEER_IS_SUCCESS(p->peer) || p->peer->request_q.IsEmpty()) continue; -- if( idx == p->peer->request_q.GetRequestIdx() ) return 1; -+ if( p->peer->request_q.HasIdx(idx) ) return 1; - } - return 0; - } -@@ -433,9 +629,18 @@ - void PeerList::CheckBitField(BitField &bf) - { - PEERNODE *p; -+ PSLICE ps; -+ size_t idx; - for(p = m_head; p ; p = p->next){ - if( !PEER_IS_SUCCESS(p->peer) || p->peer->request_q.IsEmpty()) continue; -- bf.UnSet(p->peer->request_q.GetRequestIdx()); -+ ps = p->peer->request_q.GetHead(); -+ idx = BTCONTENT.GetNPieces(); -+ for( ; ps; ps = ps->next){ -+ if( ps->index != idx ){ -+ bf.UnSet(ps->index); -+ idx = ps->index; -+ } -+ } - } - } - -@@ -445,8 +650,8 @@ - struct sockaddr_in sin; - printf("\nPEER LIST\n"); - for( ; p ; p = p->next){ -- if(PEER_IS_FAILED(p->peer)) continue; -- p->peer->dump(); -+ if(PEER_IS_FAILED(p->peer)) continue; -+ p->peer->dump(); - } - } - -@@ -470,42 +675,55 @@ - - if( P_CONNECTING == peer->GetStatus()){ - if(FD_ISSET(sk,wfdp)){ -- (*nready)--; -- FD_CLR(sk,wfdp); -+ (*nready)--; -+ FD_CLR(sk,wfdp); - -- if(FD_ISSET(sk,rfdp)){ // connect failed. -- FD_CLR(sk,rfdp); -- peer->CloseConnection(); -- }else{ -- if(peer->Send_ShakeInfo() < 0){ -- peer->CloseConnection(); -- } -- else -- peer->SetStatus(P_HANDSHAKE); -- } -+ if(FD_ISSET(sk,rfdp)){ // connect failed. -+ (*nready)--; -+ FD_CLR(sk,rfdp); -+ peer->CloseConnection(); -+ }else{ -+ if(peer->Send_ShakeInfo() < 0){ -+ if(arg_verbose) fprintf(stderr, "close: Sending handshake\n"); -+ peer->CloseConnection(); -+ } -+ else -+ peer->SetStatus(P_HANDSHAKE); -+ } -+ }else if(FD_ISSET(sk,rfdp)){ -+ (*nready)--; -+ peer->CloseConnection(); - } - }else{ - if(FD_ISSET(sk,rfdp)){ -- p->click++; -- if( !(p->click) ) -- for(p2 = m_head; p2; p2=p2->next) p2->click = 0; -- -- (*nready)--; -- FD_CLR(sk,rfdp); -- if(peer->GetStatus() == P_HANDSHAKE){ -- if( peer->HandShake() < 0 ) peer->CloseConnection(); -- }else{ -- if( peer->RecvModule() < 0 ) peer->CloseConnection(); -- } -- }else if(PEER_IS_SUCCESS(peer) && FD_ISSET(sk,wfdp)){ -- p->click++; -- if( !(p->click) ) -- for(p2 = m_head; p2; p2=p2->next) p2->click = 0; -- -- (*nready)--; -- FD_CLR(sk,wfdp); -- if( peer->SendModule() < 0 ) peer->CloseConnection(); -+ (*nready)--; -+ FD_CLR(sk,rfdp); -+ if(peer->GetStatus() == P_HANDSHAKE){ -+ if( peer->HandShake() < 0 ) { -+ if(arg_verbose) fprintf(stderr, "close: bad handshake\n"); -+ peer->CloseConnection(); -+ } -+ } // fixed client stall -+ if(peer->GetStatus() == P_SUCCESS){ -+ if( peer->RecvModule() < 0 ) { -+ if(arg_verbose) fprintf(stderr, "close: receive\n"); -+ peer->CloseConnection(); -+ } -+ } -+ }else if( peer->HealthCheck(now) < 0 ){ -+ if(arg_verbose) fprintf(stderr, "close: unresponsive\n"); -+ peer->CloseConnection(); - } -+ -+ if( (PEER_IS_SUCCESS(peer) || peer->GetStatus() == P_HANDSHAKE) && -+ FD_ISSET(sk,wfdp) ){ -+ (*nready)--; -+ FD_CLR(sk,wfdp); -+ if( peer->SendModule() < 0 ) { -+ if(arg_verbose) fprintf(stderr, "close: send\n"); -+ peer->CloseConnection(); -+ } -+ }else peer->CheckSendStatus(); - } - }// end for - } -@@ -514,7 +732,10 @@ - { - PEERNODE *p = m_head; - for( ; p; p = p->next) -- if(p->peer->bitfield.IsFull()) p->peer->CloseConnection(); -+ if(p->peer->bitfield.IsFull()) { -+ if(arg_verbose) fprintf(stderr, "close: seed<->seed\n"); -+ p->peer->CloseConnection(); -+ } - } - - void PeerList::UnChokeCheck(btPeer* peer, btPeer *peer_array[]) -@@ -523,51 +744,170 @@ - int cancel_idx = 0; - btPeer *loster = (btPeer*) 0; - int f_seed = BTCONTENT.pBF->IsFull(); -- -- for( cancel_idx = i = 0; i < MAX_UNCHOKE; i++ ){ -- if((btPeer*) 0 == peer_array[i] || PEER_IS_FAILED(peer_array[i]) ){ // 有空位 -+ int no_opt = 0; -+ unsigned long rndbits; -+ int r=0; -+ -+ if (m_opt_timestamp) no_opt = 1; -+ -+// Find my 3 or 4 fastest peers. -+// The MAX_UNCHOKE+1 (4th) slot is for the optimistic unchoke when it happens. -+ -+ // Find a slot for the candidate--the slowest peer, or an available slot. -+ for( cancel_idx = i = 0; i < MAX_UNCHOKE+no_opt; i++ ){ -+ if((btPeer*) 0 == peer_array[i] || -+ PEER_IS_FAILED(peer_array[i]) ){ // 有空位 - cancel_idx = i; - break; - }else{ - if(cancel_idx == i) continue; - - if(f_seed){ -- // compare upload rate. -- if(peer_array[cancel_idx]->RateUL() > peer_array[i]->RateUL()) -- cancel_idx = i; -+ // compare upload rate. -+ if(peer_array[cancel_idx]->RateUL() > peer_array[i]->RateUL()) -+ cancel_idx = i; - }else{ -- // compare download rate. -- if(peer_array[cancel_idx]->RateDL() > peer_array[i]->RateDL()) -- cancel_idx = i; -+ // compare download rate. -+ if( peer_array[cancel_idx]->RateDL() > peer_array[i]->RateDL() -+ //if equal, reciprocate to the peer we've sent less to, proportionally -+ ||(peer_array[cancel_idx]->RateDL() == peer_array[i]->RateDL() -+ && peer_array[cancel_idx]->TotalUL() -+ / (peer_array[cancel_idx]->TotalDL()+.001) -+ < peer_array[i]->TotalUL() / (peer_array[i]->TotalDL()+.001)) ) -+ cancel_idx = i; - } - } - } // end for - -- if( (btPeer*) 0 != peer_array[cancel_idx] && PEER_IS_SUCCESS(peer_array[cancel_idx]) ){ -+ if( (btPeer*) 0 != peer_array[cancel_idx] && -+ PEER_IS_SUCCESS(peer_array[cancel_idx]) ){ - if(f_seed){ - if(peer->RateUL() > peer_array[cancel_idx]->RateUL()){ -- loster = peer_array[cancel_idx]; -- peer_array[cancel_idx] = peer; -+ loster = peer_array[cancel_idx]; -+ peer_array[cancel_idx] = peer; - }else -- loster = peer; -+ loster = peer; - }else{ -- if(peer->RateDL() > peer_array[cancel_idx]->RateDL()){ -- loster = peer_array[cancel_idx]; -- peer_array[cancel_idx] = peer; -+ if( peer->RateDL() > peer_array[cancel_idx]->RateDL() -+ // If equal, reciprocate to the peer we've sent less to, proportionally -+ ||(peer_array[cancel_idx]->RateDL() == peer->RateDL() -+ && peer_array[cancel_idx]->TotalUL() -+ / (peer_array[cancel_idx]->TotalDL()+.001) -+ > peer->TotalUL() / (peer->TotalDL()+.001)) ){ -+ loster = peer_array[cancel_idx]; -+ peer_array[cancel_idx] = peer; - }else -- loster = peer; -+ loster = peer; - } - - // opt unchoke -- if((btPeer*) 0 == peer_array[MAX_UNCHOKE] || PEER_IS_FAILED(peer_array[MAX_UNCHOKE]) ) -+ if (no_opt) { -+ if(loster->SetLocal(M_CHOKE) < 0) loster->CloseConnection(); -+ } -+ else -+ // The last slot is for the optimistic unchoke. -+ if( (btPeer*) 0 == peer_array[MAX_UNCHOKE] || -+ PEER_IS_FAILED(peer_array[MAX_UNCHOKE]) ) - peer_array[MAX_UNCHOKE] = loster; -- else{ -- if(loster->GetLastUnchokeTime() < peer_array[MAX_UNCHOKE]->GetLastUnchokeTime()) -- peer_array[MAX_UNCHOKE] = loster; -- else{ -- if(loster->SetLocal(M_CHOKE) < 0) loster->CloseConnection(); -+ else { -+ if( !r-- ){ -+ rndbits = random(); -+ r = 15; -+ } -+ // if loser is empty and current is not, loser gets 75% chance. -+ if( loster->IsEmpty() && !peer_array[MAX_UNCHOKE]->IsEmpty() -+ && (rndbits>>=2)&3 ) { -+ btPeer* tmp = peer_array[MAX_UNCHOKE]; -+ peer_array[MAX_UNCHOKE] = loster; -+ loster = tmp; -+ } else -+ // This mess chooses the loser: -+ // if loser is choked and current is not -+ // OR if both are choked and loser has waited longer -+ // OR if both are unchoked and loser has had less time unchoked. -+ if( (!loster->Is_Local_UnChoked() && -+ ( peer_array[MAX_UNCHOKE]->Is_Local_UnChoked() || -+ loster->GetLastUnchokeTime() < -+ peer_array[MAX_UNCHOKE]->GetLastUnchokeTime() )) || -+ (peer_array[MAX_UNCHOKE]->Is_Local_UnChoked() && -+ peer_array[MAX_UNCHOKE]->GetLastUnchokeTime() < -+ loster->GetLastUnchokeTime()) ){ -+ // if current is empty and loser is not, loser gets 25% chance; -+ // else loser wins. -+ // transformed to: if loser is empty or current isn't, or 25% chance, -+ // then loser wins. -+ if( !peer_array[MAX_UNCHOKE]->IsEmpty() || loster->IsEmpty() -+ || !((rndbits>>=2)&3) ) { -+ btPeer* tmp = peer_array[MAX_UNCHOKE]; -+ peer_array[MAX_UNCHOKE] = loster; -+ loster = tmp; -+ } - } -+ if(loster->SetLocal(M_CHOKE) < 0) loster->CloseConnection(); - } - }else //else if((btPeer*) 0 != peer_array[cancel_idx]..... - peer_array[cancel_idx] = peer; - } -+ -+// When we change what we're going after, we need to evaluate & set our -+// interest with each peer appropriately. -+void PeerList::CheckInterest() -+{ -+ PEERNODE *p = m_head; -+ for( ; p; p = p->next) { -+ // Don't shortcut by checking Is_Local_Interested(), as we need to let -+ // SetLocal() reset the m_standby flag. -+ if( p->peer->Need_Remote_Data() ) { -+ if( p->peer->SetLocal(M_INTERESTED) < 0 ) -+ p->peer->CloseConnection(); -+ } else { -+ if( p->peer->SetLocal(M_NOT_INTERESTED) < 0 ) -+ p->peer->CloseConnection(); -+ } -+ } -+} -+ -+btPeer* PeerList::GetNextPeer(btPeer *peer) -+{ -+ static PEERNODE *p = m_head; -+ -+ if( 0==peer ) p = m_head; -+ else if( p->peer == peer ){ -+ p = p->next; -+ }else{ -+ for( p=m_head; p && (p->peer != peer); p = p->next); -+ if( 0 == p->peer ){ -+ p = m_head; -+ }else{ -+ p = p->next; -+ } -+ } -+ for( ; p; p = p->next) -+ if( p->peer && PEER_IS_SUCCESS(p->peer) ) break; -+ -+ if(p) return p->peer; -+ else return (btPeer*) 0; -+} -+ -+// This is used to un-standby peers when we enter endgame mode. -+// It re-evaluates at most once per second for CPU efficiency, so isn't used -+// when greatest accuracy is desired. -+int PeerList::Endgame() -+{ -+ static time_t timestamp = 0; -+ static int endgame = 0; -+ -+ if( now > timestamp ){ -+ timestamp = now; -+ if( arg_file_to_download ){ -+ BitField afdBitField = *BTCONTENT.pBF; -+ afdBitField.Except(*BTCONTENT.pBFilter); -+ endgame = ( BTCONTENT.getFilePieces(arg_file_to_download) -+ - afdBitField.Count() ) < WORLD.TotalPeers(); -+ }else -+ endgame = ( WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() ) -+ < WORLD.TotalPeers(); -+ } -+ return endgame; -+} -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peerlist.h ctorrent-1.3.4/peerlist.h ---- ctorrent-1.3.4.sav/peerlist.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/peerlist.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,14 +1,13 @@ - #ifndef PEERLIST_H - #define PEERLIST_H - --#include <sys/types.h> - #include "./def.h" -+#include <sys/types.h> - #include "./peer.h" - #include "./rate.h" - - typedef struct _peernode{ - btPeer *peer; -- size_t click; - struct _peernode *next; - }PEERNODE; - -@@ -18,7 +17,8 @@ - SOCKET m_listen_sock; - PEERNODE *m_head; - size_t m_peers_count; -- time_t m_unchoke_check_timestamp, m_keepalive_check_timestamp, m_last_progress_timestamp; -+ size_t m_seeds_count; -+ time_t m_unchoke_check_timestamp, m_keepalive_check_timestamp, m_last_progress_timestamp, m_opt_timestamp; - - unsigned char m_live_idx:2; - unsigned char m_reserved:6; -@@ -26,7 +26,6 @@ - Rate m_pre_dlrate, m_pre_ulrate; - - int Accepter(); -- void Sort(); - void UnChokeCheck(btPeer* peer,btPeer *peer_array[]); - - public: -@@ -50,9 +49,16 @@ - - void Tell_World_I_Have(size_t idx); - btPeer* Who_Can_Abandon(btPeer *proposer); -+ size_t What_Can_Duplicate(BitField &bf, btPeer *proposer, size_t idx); -+ void FindValuedPieces(BitField &bf, btPeer *proposer, int initial); -+ btPeer *WhoHas(size_t idx); -+ void CancelSlice(size_t idx, size_t off, size_t len); - void CheckBitField(BitField &bf); - int AlreadyRequested(size_t idx); - size_t Pieces_I_Can_Get(); -+ void CheckInterest(); -+ btPeer* GetNextPeer(btPeer *peer); -+ int Endgame(); - }; - - extern PeerList WORLD; -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/rate.cpp ctorrent-1.3.4/rate.cpp ---- ctorrent-1.3.4.sav/rate.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/rate.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -1,14 +1,17 @@ - #include "rate.h" -+#include "bttime.h" -+ -+#define RATE_INTERVAL 20 - - void Rate::StartTimer() - { -- if( !m_last_timestamp ) time(&m_last_timestamp); -+ if( !m_last_timestamp ) m_last_timestamp = now; - } - - void Rate::StopTimer() - { -- if( !m_last_timestamp ){ -- m_total_timeused += (time((time_t*) 0) - m_last_timestamp); -+ if( m_last_timestamp ){ -+ m_total_timeused += (now - m_last_timestamp); - m_last_timestamp = 0; - } - } -@@ -16,27 +19,61 @@ - void Rate::CountAdd(size_t nbytes) - { - m_count_bytes += nbytes; -+ -+ // save bandwidth history data -+ for (int i=0; i <= n_samples; i++) -+ { -+ if (i < MAX_SAMPLES) -+ { -+ if (now == m_timestamp_sample[i]) { -+ m_bytes_sample[i] += nbytes; -+ break; -+ } -+ else if (now - RATE_INTERVAL > m_timestamp_sample[i]) { -+ m_timestamp_sample[i] = now; -+ m_bytes_sample[i] = nbytes; -+ if (n_samples < MAX_SAMPLES) n_samples++; -+ break; -+ } -+ } -+ } - } - - void Rate::operator=(const Rate &ra) - { -- m_last_timestamp = time((time_t*) 0); -+ m_last_timestamp = now; - m_count_bytes = ra.m_count_bytes; - } - - size_t Rate::RateMeasure() const - { -- time_t timeused = m_total_timeused; -- if( m_last_timestamp ) timeused += (time((time_t*) 0) - m_last_timestamp); -+ // calculate rate based on bandwidth history data -+ time_t timestamp = now; -+ u_int64_t countbytes = 0; -+ time_t timeused = 0; -+ -+ if( !m_last_timestamp ) return 0; // no current rate -+ -+ timeused = (TimeUsed(×tamp) < RATE_INTERVAL) ? -+ TimeUsed(×tamp) : RATE_INTERVAL; - if( timeused < 1 ) timeused = 1; -- return (size_t)(m_count_bytes / timeused); -+ -+ for (int i=0; i<n_samples; i++) -+ { -+ if (timestamp - m_timestamp_sample[i] <= timeused) -+ countbytes += m_bytes_sample[i]; -+ } -+ return (size_t)(countbytes / timeused); - } - - size_t Rate::RateMeasure(const Rate &ra_to) const - { -- time_t timeused = time((time_t*) 0) - m_last_timestamp; -+ int tmp; -+ time_t timeused = now - m_last_timestamp; - if( timeused < 1 ) timeused = 1; -- return (size_t)((ra_to.m_count_bytes - m_count_bytes) / timeused); -+ tmp = (ra_to.m_count_bytes - ra_to.m_recent_base) -+ - (m_count_bytes - m_recent_base); -+ return (size_t)( (tmp>0) ? (tmp/timeused) : 0 ); - } - - time_t Rate::TimeUsed(const time_t *pnow) const -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/rate.h ctorrent-1.3.4/rate.h ---- ctorrent-1.3.4.sav/rate.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/rate.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,18 +1,33 @@ - #ifndef RATE_H - #define RATE_H - -+#include "def.h" - #include <sys/types.h> - #include <time.h> --#include "def.h" -+ -+#define MAX_SAMPLES 20 - - class Rate{ - private: - time_t m_last_timestamp; - time_t m_total_timeused; - u_int64_t m_count_bytes; -+ u_int64_t m_recent_base; -+ -+ // bandwidth history data -+ size_t n_samples; -+ time_t m_timestamp_sample[MAX_SAMPLES]; -+ u_int64_t m_bytes_sample[MAX_SAMPLES]; -+ - public: -- Rate(){ m_last_timestamp = m_total_timeused = (time_t)0; m_count_bytes = 0; } -- void Reset(){ m_last_timestamp = m_total_timeused = (time_t)0; m_count_bytes = 0;} -+ Rate(){ m_last_timestamp = m_total_timeused = (time_t)0; -+ m_recent_base = m_count_bytes = 0; -+ n_samples=0; for(int i=0;i<MAX_SAMPLES;i++) m_timestamp_sample[i]=0; -+ } -+ void Reset(){ m_last_timestamp = m_total_timeused = (time_t)0; -+ m_recent_base = m_count_bytes; -+ n_samples = 0; for(int i=0;i<MAX_SAMPLES;i++) m_timestamp_sample[i]=0; -+ } - void StartTimer(); - void StopTimer(); - void CountAdd(size_t nbytes); -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/README-DNH.TXT ctorrent-1.3.4/README-DNH.TXT ---- ctorrent-1.3.4.sav/README-DNH.TXT 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/README-DNH.TXT 2006-06-28 19:30:02.000000000 +0200 -@@ -0,0 +1,239 @@ -+ -+ Enhanced CTorrent -+ -+ [ [1]Overview | [2]News | [3]Changes | [4]CTCS | [5]Download | -+ [6]Resources | [7]Contact ] -+ _________________________________________________________________ -+ -+ Overview -+ -+ [8]CTorrent is a [9]BitTorrent client implemented in C++ to be -+ lightweight and quick. It has fallen a little behind in updates and -+ bug fixes though. -+ -+ The files here contain the good work of those who wrote the original -+ CTorrent base code and a number of patches that provide fixes and -+ enhancements, as well as additional fixes and enhancements that I am -+ contributing. I am not the original author, current maintainer, or any -+ other official representative of CTorrent. The files on this page are -+ not the original or official CTorrent distribution. I encourage you to -+ visit the [10]CTorrent project page on SourceForge for further -+ information. -+ -+ Features -+ -+ The purpose of the Enhanced CTorrent effort is to fix problems that -+ remain in the code, modernize existing features and algorithms, and -+ implement new features while maintaining low overhead requirements and -+ a high standard of performance (both part of the original CTorrent -+ design philosophy). Highlights of the enhanced client include: -+ * Support for large files (>2GB) and large torrents (>255 files) -+ * Strategic selection of pieces to request for download -+ * Continuous queueing of download requests, tuned based on latency -+ and throughput for each peer -+ * Improved download performance, including parallel requests in -+ initial and endgame modes -+ * Improved bandwidth regulation -+ * Improved compatibility with other peers -+ * Performance optimization and bug fixes -+ * An interface for monitoring and managing multiple clients -+ -+ Status Line -+ -+ The status line that is output by the client has changed since the -+ original and deserves some explanation. -+ -+ / 0/33/110 [672/672/672] 0MB,1130MB | 0,20K/s | 0,0K E:0,31 -+ - - -- --- --- --- --- --- ------ - -- - - - -- -+ A B C D E F G H I J K L M N O -+ -+ A: Ticker; this character changes to indicate that the client is -+ running. -+ B: Number of seeders (complete peers) to which you are connected. -+ C: Number of leechers (incomplete peers) to which you are connected. -+ D: Total number of peers in the swarm, as last reported by the -+ tracker. -+ E: Number of pieces of the torrent that you have completed. -+ F: Number of pieces currently available from you and your connected -+ peers. -+ G: Total number of pieces in the torrent. -+ H: Total amount of data you have downloaded. -+ I: Total amount of data you have uploaded. -+ J: Your current total download rate. -+ K: Your current total upload rate. -+ L: Amount of data downloaded since the last status line update. -+ M: Amount of data uploaded since the last status line update. -+ N: Number of tracker connection errors. -+ O: Number of successful tracker connections. -+ -+ Peer ID -+ -+ Beginning with dnh1.1 the default peer ID has been changed for -+ convenience, as some other clients and trackers assume that Ctorrent -+ is "buggy" and won't cooperate with it. [Guess what, there are plenty -+ of others with bugs too.] The -P option is still available if you wish -+ to use a different peer ID, but it is no longer necessary to do so in -+ order to avoid this "ban". -+ -+ The new default peer ID prefix is "-CDversion-", where version is an -+ indication of the version number (0101 for dnh1.1). -+ -+ CTCS -+ -+ [11]CTorrent Control Server (CTCS) is an interface for monitoring and -+ managing Enhanced CTorrent clients. It can manage allocation of -+ bandwidth, provide status information, and allow changes to the -+ running configuration of each client. Support for this interface was -+ added in the dnh2 release. -+ _________________________________________________________________ -+ -+ News -+ -+ 2006-01-15 -+ Version dnh2 is released! This version includes a number of -+ significant [12]changes, including large file support, piece -+ selection, tuned request queue depth, and support for -+ [13]CTorrent Control Server. -+ _________________________________________________________________ -+ -+ Changes -+ -+ For a list of changes in the current and previous versions, see the -+ [14]ChangeLog file. -+ _________________________________________________________________ -+ -+ Download -+ -+ Release dnh2 -+ The patch files for this version are significantly larger -+ than in previous releases. It will be faster and easier to just -+ download the patched source distribution below. -+ -+ [15]dnh1.2 to dnh2 patch file -+ A patch file of changes to release dnh1.2 to bring it up to dnh2. -+ -+ [16]Patch file -+ A patch file of changes to the CTorrent 1.3.4 base. -+ -+ [17]Patched source -+ A complete source distribution for all platforms. -+ ___________________________________ -+ -+ Release dnh1.2 -+ Note: If you get a message about needing to install OpenSSL, you might -+ want to try the FreeBSD patch/version even if you are not using -+ FreeBSD. -+ -+ [18]dnh1.1 to dnh1.2 patch file -+ A patch file of changes to release dnh1.1 to bring it up to dnh1.2. -+ -+ [19]FreeBSD patch file -+ A patch file of changes to the CTorrent 1.3.4 base, including the -+ patches from the FreeBSD ports tree. -+ -+ [20]Patch file -+ A patch file of changes to the CTorrent 1.3.4 base. -+ -+ [21]FreeBSD patched source -+ This includes the patches from the FreeBSD ports tree. -+ -+ [22]Linux/Windows/Other patched source -+ Please [23]let me know if you encounter any portability issues, as I -+ don't have a test environment set up for these platforms. -+ ___________________________________ -+ -+ Bitfield::Invert patch -+ -+ [24]Bitfield::Invert patch -+ See notes in the change log; this is needed if you are using dnh1.1, -+ dnh1, or ctorrent-1.3.4. -+ ___________________________________ -+ -+ Release dnh1.1 -+ -+ [25]dnh1 to dnh1.1 patch file -+ A patch file of changes to release dnh1 to bring it up to dnh1.1. -+ ___________________________________ -+ -+ Release dnh1 -+ -+ [26]FreeBSD patch file -+ A patch file of changes to the CTorrent 1.3.4 base, including the -+ patches from the FreeBSD ports tree. -+ Note: Thanks to Florent Thoumie, as of 29 Jul 2005 this patchset is -+ included in the FreeBSD port. If you update your ports tree (or at -+ least net/ctorrent) and install from there, you will have these -+ updates without downloading the file and patching manually. -+ -+ [27]Patch file -+ A patch file of changes to the CTorrent 1.3.4 base. -+ -+ [28]FreeBSD patched source -+ This includes the patches from the FreeBSD ports tree. -+ -+ [29]Linux/Windows/Other patched source -+ Please [30]let me know if you encounter any portability issues, as I -+ don't have a test environment set up for these platforms. -+ _________________________________________________________________ -+ -+ Resources -+ -+ [31]CTorrent Home Page -+ Outdated, but you may find some useful info (particularly the FAQ). -+ -+ [32]CTorrent SourceForge Project -+ Hosts the CTorrent codebase, bug reports, patches, and forum. -+ -+ [33]Custom CTorrent -+ A page by the author of the "get1file" patch and other fixes. It -+ contains a custom version and a GUI for CTorrent. -+ -+ [34]BitTorrent -+ The official BitTorrent home page. -+ -+ [35]BitTorrent wiki -+ Various documentation. -+ -+ [36]BitTorrent protocol specification (official version) -+ -+ [37]BitTorrent protocol specification (wiki version) -+ -+References -+ -+ 1. http://www.rahul.net/dholmes/ctorrent/index.html#info -+ 2. http://www.rahul.net/dholmes/ctorrent/index.html#news -+ 3. http://www.rahul.net/dholmes/ctorrent/changelog.html -+ 4. http://www.rahul.net/dholmes/ctorrent/ctcs.html -+ 5. http://www.rahul.net/dholmes/ctorrent/index.html#download -+ 6. http://www.rahul.net/dholmes/ctorrent/index.html#resources -+ 7. mailto:dholmes@ct.boxmail.com -+ 8. http://ctorrent.sourceforge.net/ -+ 9. http://www.bittorrent.com/ -+ 10. http://sourceforge.net/projects/ctorrent/ -+ 11. http://www.rahul.net/dholmes/ctorrent/ctcs.html -+ 12. http://www.rahul.net/dholmes/ctorrent/changelog.html -+ 13. http://www.rahul.net/dholmes/ctorrent/ctcs.html -+ 14. http://www.rahul.net/dholmes/ctorrent/changelog.html -+ 15. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-dnh1.2-dnh2.diff -+ 16. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh2.diff -+ 17. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh2.tar.gz -+ 18. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-dnh1.1-dnh1.2.diff -+ 19. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1.2-fbsd.diff -+ 20. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1.2.diff -+ 21. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1.2-fbsd.tar.gz -+ 22. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1.2.tar.gz -+ 23. mailto:dholmes@ct.boxmail.com -+ 24. http://www.rahul.net/dholmes/ctorrent/patch-invert.diff -+ 25. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-dnh1-dnh1.1.diff -+ 26. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1-fbsd.diff -+ 27. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1.diff -+ 28. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1-fbsd.tar.gz -+ 29. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1.tar.gz -+ 30. mailto:dholmes@ct.boxmail.com -+ 31. http://ctorrent.sourceforge.net/ -+ 32. http://sourceforge.net/projects/ctorrent/ -+ 33. http://customctorrent.ifreepages.com/ -+ 34. http://bittorrent.com/ -+ 35. http://wiki.theory.org/CategoryBitTorrent -+ 36. http://www.bittorrent.com/protocol.html -+ 37. http://wiki.theory.org/BitTorrentSpecification -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sha1.c ctorrent-1.3.4/sha1.c ---- ctorrent-1.3.4.sav/sha1.c 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/sha1.c 2006-06-28 19:30:02.000000000 +0200 -@@ -0,0 +1,146 @@ -+#include <string.h> -+ -+#include "sha1.h" -+ -+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) -+ -+/* blk0() and blk() perform the initial expand. */ -+/* I got the idea of expanding during the round function from SSLeay */ -+#if (defined(BYTE_ORDER) && BYTE_ORDER==LITTLE_ENDIAN) || (!defined(BYTE_ORDER) && defined(LITTLE_ENDIAN)) -+#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ -+ |(rol(block->l[i],8)&0x00FF00FF)) -+#else -+#define blk0(i) block->l[i] -+#endif -+#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ -+ ^block->l[(i+2)&15]^block->l[i&15],1)) -+ -+/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ -+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); -+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); -+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); -+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); -+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); -+ -+ -+/* Hash a single 512-bit block. This is the core of the algorithm. */ -+ -+void SHA1Transform(unsigned long state[5], unsigned char buffer[64]) -+{ -+unsigned long a, b, c, d, e; -+typedef union { -+ unsigned char c[64]; -+ unsigned long l[16]; -+} CHAR64LONG16; -+CHAR64LONG16* block; -+#ifdef SHA1HANDSOFF -+static unsigned char workspace[64]; -+ block = (CHAR64LONG16*)workspace; -+ memcpy(block, buffer, 64); -+#else -+ block = (CHAR64LONG16*)buffer; -+#endif -+ /* Copy context->state[] to working vars */ -+ a = state[0]; -+ b = state[1]; -+ c = state[2]; -+ d = state[3]; -+ e = state[4]; -+ /* 4 rounds of 20 operations each. Loop unrolled. */ -+ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); -+ R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); -+ R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); -+ R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); -+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); -+ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); -+ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); -+ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); -+ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); -+ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); -+ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); -+ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); -+ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); -+ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); -+ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); -+ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); -+ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); -+ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); -+ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); -+ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); -+ /* Add the working vars back into context.state[] */ -+ state[0] += a; -+ state[1] += b; -+ state[2] += c; -+ state[3] += d; -+ state[4] += e; -+ /* Wipe variables */ -+ a = b = c = d = e = 0; -+} -+ -+ -+/* SHA1Init - Initialize new context */ -+ -+void SHA1Init(SHA1_CTX* context) -+{ -+ /* SHA1 initialization constants */ -+ context->state[0] = 0x67452301; -+ context->state[1] = 0xEFCDAB89; -+ context->state[2] = 0x98BADCFE; -+ context->state[3] = 0x10325476; -+ context->state[4] = 0xC3D2E1F0; -+ context->count[0] = context->count[1] = 0; -+} -+ -+ -+/* Run your data through this. */ -+ -+void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len) -+{ -+unsigned int i, j; -+ -+ j = (context->count[0] >> 3) & 63; -+ if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; -+ context->count[1] += (len >> 29); -+ if ((j + len) > 63) { -+ memcpy(&context->buffer[j], data, (i = 64-j)); -+ SHA1Transform(context->state, context->buffer); -+ for ( ; i + 63 < len; i += 64) { -+ SHA1Transform(context->state, &data[i]); -+ } -+ j = 0; -+ } -+ else i = 0; -+ memcpy(&context->buffer[j], &data[i], len - i); -+} -+ -+ -+/* Add padding and return the message digest. */ -+ -+void SHA1Final(unsigned char digest[20], SHA1_CTX* context) -+{ -+unsigned long i, j; -+unsigned char finalcount[8]; -+ -+ for (i = 0; i < 8; i++) { -+ finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] -+ >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ -+ } -+ SHA1Update(context, (unsigned char *)"\200", 1); -+ while ((context->count[0] & 504) != 448) { -+ SHA1Update(context, (unsigned char *)"\0", 1); -+ } -+ SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ -+ for (i = 0; i < 20; i++) { -+ digest[i] = (unsigned char) -+ ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); -+ } -+ /* Wipe variables */ -+ i = j = 0; -+ memset(context->buffer, 0, 64); -+ memset(context->state, 0, 20); -+ memset(context->count, 0, 8); -+ memset(&finalcount, 0, 8); -+#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */ -+ SHA1Transform(context->state, context->buffer); -+#endif -+} -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sha1.h ctorrent-1.3.4/sha1.h ---- ctorrent-1.3.4.sav/sha1.h 1970-01-01 01:00:00.000000000 +0100 -+++ ctorrent-1.3.4/sha1.h 2006-06-28 19:30:02.000000000 +0200 -@@ -0,0 +1,43 @@ -+#ifndef SHA1_H -+#define SHA1_H -+ -+/* -+SHA-1 in C -+By Steve Reid <steve@edmweb.com> -+100% Public Domain -+ -+Test Vectors (from FIPS PUB 180-1) -+"abc" -+ A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D -+"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" -+ 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 -+A million repetitions of "a" -+ 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F -+*/ -+ -+#include <sys/types.h> -+ -+/* #define LITTLE_ENDIAN * This should be #define'd if true. */ -+/* #define SHA1HANDSOFF * Copies data before messing with it. */ -+#define SHA1HANDSOFF -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+typedef struct { -+ unsigned long state[5]; -+ unsigned long count[2]; -+ unsigned char buffer[64]; -+} SHA1_CTX; -+ -+void SHA1Transform(unsigned long state[5], unsigned char buffer[64]); -+void SHA1Init(SHA1_CTX* context); -+void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len); -+void SHA1Final(unsigned char digest[20], SHA1_CTX* context); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sigint.cpp ctorrent-1.3.4/sigint.cpp ---- ctorrent-1.3.4.sav/sigint.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/sigint.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -4,17 +4,28 @@ - #include <signal.h> - - #include "btcontent.h" -+#include "tracker.h" - #include "peerlist.h" - #include "btconfig.h" -+#include "sigint.h" - --void sigint_catch(int sig_no) -+void sig_catch(int sig_no) - { -- if(SIGINT == sig_no){ -+ if(SIGINT == sig_no || SIGTERM == sig_no){ -+ if( Tracker.IsPaused() ) Tracker.ClearPause(); -+ Tracker.SetStoped(); -+ signal(sig_no,sig_catch2); -+ } -+} -+ -+static void sig_catch2(int sig_no) -+{ -+ if(SIGINT == sig_no || SIGTERM == sig_no){ - if( cfg_cache_size ) BTCONTENT.FlushCache(); - if( arg_bitfield_file ) BTCONTENT.pBF->WriteToFile(arg_bitfield_file); - WORLD.CloseAll(); -- signal(SIGINT,SIG_DFL); -- raise(SIGINT); -+ signal(sig_no,SIG_DFL); -+ raise(sig_no); - } - } - -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sigint.h ctorrent-1.3.4/sigint.h ---- ctorrent-1.3.4.sav/sigint.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/sigint.h 2006-06-28 19:30:02.000000000 +0200 -@@ -2,7 +2,8 @@ - #define SIGINT_H - - #ifndef WINDOWS --void sigint_catch(int sig_no); -+void sig_catch(int sig_no); -+static void sig_catch2(int sig_no); - #endif - - #endif -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/tracker.cpp ctorrent-1.3.4/tracker.cpp ---- ctorrent-1.3.4.sav/tracker.cpp 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/tracker.cpp 2006-06-28 19:30:02.000000000 +0200 -@@ -20,6 +20,7 @@ - #include "iplist.h" - - #include "btconfig.h" -+#include "ctcs.h" - - btTracker Tracker; - -@@ -27,15 +28,19 @@ - { - memset(m_host,0,MAXHOSTNAMELEN); - memset(m_path,0,MAXPATHLEN); -+ memset(m_trackerid,0,PEER_ID_LEN+1); - - m_sock = INVALID_SOCKET; - m_port = 80; - m_status = T_FREE; -- m_f_started = m_f_stoped = m_f_pause = 0; -+ m_f_started = m_f_stoped = m_f_pause = m_f_completed = 0; -+ m_f_softquit = m_f_restart = 0; -+ - m_interval = 15; - - m_connect_refuse_click = 0; - m_last_timestamp = (time_t) 0; -+ m_prevpeers = 0; - } - - btTracker::~btTracker() -@@ -54,7 +59,11 @@ - - m_reponse_buffer.Reset(); - time(&m_last_timestamp); -- m_status = T_FREE; -+ if (m_f_stoped){ -+ m_status = T_FINISHED; -+ if( m_f_restart ) Resume(); -+ } -+ else m_status = T_FREE; - } - - int btTracker:: _IPsin(char *h, int p, struct sockaddr_in *psin) -@@ -74,8 +83,8 @@ - if(psin->sin_addr.s_addr == INADDR_NONE){ - struct hostent *ph = gethostbyname(h); - if( !ph || ph->h_addrtype != AF_INET){ -- memset(psin,0,sizeof(struct sockaddr_in)); -- return -1; -+ memset(psin,0,sizeof(struct sockaddr_in)); -+ return -1; - } - memcpy(&psin->sin_addr,ph->h_addr_list[0],sizeof(struct in_addr)); - } -@@ -93,7 +102,7 @@ - - struct sockaddr_in addr; - -- if( decode_query(buf,bufsiz,"failure reason",&ps,&i,QUERY_STR) ){ -+ if( decode_query(buf,bufsiz,"failure reason",&ps,&i,(int64_t*) 0,QUERY_STR) ){ - char failreason[1024]; - if( i < 1024 ){ - memcpy(failreason, ps, i); -@@ -104,14 +113,55 @@ - strcat(failreason,"..."); - } - fprintf(stderr,"TRACKER FAILURE REASON: %s\n",failreason); -+ if(arg_ctcs){ -+ char ctcsinfo[1048]; -+ snprintf(ctcsinfo,1048,"TRACKER FAILURE REASON: %s",failreason); -+ CTCS.Send_Info(ctcsinfo); -+ } - return -1; - } -+ if( decode_query(buf,bufsiz,"warning message",&ps,&i,(int64_t*) 0,QUERY_STR) ){ -+ char warnmsg[1024]; -+ if( i < 1024 ){ -+ memcpy(warnmsg, ps, i); -+ warnmsg[i] = '\0'; -+ }else{ -+ memcpy(warnmsg, ps, 1000); -+ warnmsg[1000] = '\0'; -+ strcat(warnmsg,"..."); -+ } -+ fprintf(stderr,"TRACKER WARNING: %s\n",warnmsg); -+ if(arg_ctcs){ -+ char ctcsinfo[1048]; -+ snprintf(ctcsinfo,1048,"TRACKER WARNING: %s",warnmsg); -+ CTCS.Send_Info(ctcsinfo); -+ } -+ } - -- if(!decode_query(buf,bufsiz,"interval",(const char**) 0,&i,QUERY_INT)){return -1;} -+ m_peers_count = 0; -+ -+ if( decode_query(buf,bufsiz,"tracker id",&ps,&i,(int64_t*) 0,QUERY_STR) ){ -+ if( i <= PEER_ID_LEN ){ -+ memcpy(m_trackerid, ps, i); -+ m_trackerid[i] = '\0'; -+ }else{ -+ memcpy(m_trackerid, ps, PEER_ID_LEN); -+ m_trackerid[PEER_ID_LEN] = '\0'; -+ } -+ } -+ -+ if(!decode_query(buf,bufsiz,"interval",(const char**) 0,&i,(int64_t*) 0,QUERY_INT)){return -1;} - - if(m_interval != (time_t)i) m_interval = (time_t)i; - -- pos = decode_query(buf,bufsiz,"peers",(const char**) 0,(size_t *) 0,QUERY_POS); -+ if(decode_query(buf,bufsiz,"complete",(const char**) 0,&i,(int64_t*) 0,QUERY_INT)) { -+ m_peers_count += i; -+ } -+ if(decode_query(buf,bufsiz,"incomplete",(const char**) 0,&i,(int64_t*) 0,QUERY_INT)) { -+ m_peers_count += i; -+ } -+ -+ pos = decode_query(buf,bufsiz,"peers",(const char**) 0,(size_t *) 0,(int64_t*) 0,QUERY_POS); - - if( !pos ){ - return -1; -@@ -123,32 +173,32 @@ - - ps = buf-1; - if (*ps != 'l') { // binary peers section if not 'l' -- addr.sin_family = AF_INET; -- i = 0; -- while (*ps != ':' ) i = i * 10 + (*ps++ - '0'); -- i /= 6; -- ps++; -- while (i-- > 0) { -- // if peer is not us -- if(memcmp(&Self.m_sin.sin_addr,ps,sizeof(struct in_addr))) { -- memcpy(&addr.sin_addr,ps,sizeof(struct in_addr)); -- memcpy(&addr.sin_port,ps+sizeof(struct in_addr),sizeof(unsigned short)); -- cnt++; -- IPQUEUE.Add(&addr); -- } -- ps += 6; -- } -+ addr.sin_family = AF_INET; -+ i = 0; -+ while (*ps != ':' ) i = i * 10 + (*ps++ - '0'); -+ i /= 6; -+ ps++; -+ while (i-- > 0) { -+ // if peer is not us -+ if(memcmp(&Self.m_sin.sin_addr,ps,sizeof(struct in_addr))) { -+ memcpy(&addr.sin_addr,ps,sizeof(struct in_addr)); -+ memcpy(&addr.sin_port,ps+sizeof(struct in_addr),sizeof(unsigned short)); -+ cnt++; -+ IPQUEUE.Add(&addr); -+ } -+ ps += 6; -+ } - } - else - for( ;bufsiz && *buf!='e'; buf += pos, bufsiz -= pos ){ - pos = decode_dict(buf,bufsiz,(char*) 0); - if(!pos) break; -- if(!decode_query(buf,pos,"ip",&ps,&i,QUERY_STR) || MAXHOSTNAMELEN < i) continue; -+ if(!decode_query(buf,pos,"ip",&ps,&i,(int64_t*) 0,QUERY_STR) || MAXHOSTNAMELEN < i) continue; - memcpy(tmphost,ps,i); tmphost[i] = '\0'; - -- if(!decode_query(buf,pos,"port",(const char**) 0,&tmpport,QUERY_INT)) continue; -+ if(!decode_query(buf,pos,"port",(const char**) 0,&tmpport,(int64_t*) 0,QUERY_INT)) continue; - -- if(!decode_query(buf,pos,"peer id",&ps,&i,QUERY_STR) && i != 20 ) continue; -+ if(!decode_query(buf,pos,"peer id",&ps,&i,(int64_t*) 0,QUERY_STR) && i != 20 ) continue; - - if(_IPsin(tmphost,tmpport,&addr) < 0){ - fprintf(stderr,"warn, detected invalid ip address %s.\n",tmphost); -@@ -161,14 +211,17 @@ - } - } - -- if( !cnt ) fprintf(stderr,"warn, peers list received from tracker is empty.\n"); -+ if(arg_verbose) -+ fprintf(stderr, "\nnew peers=%u; next check in %u sec\n", cnt, m_interval); -+// moved to CheckResponse--this function isn't called if no peer data. -+// if( !cnt ) fprintf(stderr,"warn, peers list received from tracker is empty.\n"); - return 0; - } - - int btTracker::CheckReponse() - { - #define MAX_LINE_SIZ 32 -- char *pdata; -+ char *pdata, *format; - ssize_t r; - size_t q, hlen, dlen; - -@@ -186,6 +239,12 @@ - if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 || - error != 0 ){ - fprintf(stderr,"warn, received nothing from tracker! %s\n",strerror(error)); -+ if(arg_ctcs){ -+ char ctcsinfo[256]; -+ snprintf(ctcsinfo,256, -+ "warn, received nothing from tracker! %s",strerror(error)); -+ CTCS.Send_Info(ctcsinfo); -+ } - } - return -1; - } -@@ -194,6 +253,8 @@ - - if( !hlen ){ - fprintf(stderr,"warn, tracker reponse invalid. No html header found.\n"); -+ if(arg_ctcs) -+ CTCS.Send_Info("warn, tracker reponse invalid. No html header found."); - return -1; - } - -@@ -202,21 +263,32 @@ - if( r == 301 || r == 302 ){ - char redirect[MAXPATHLEN],ih_buf[20 * 3 + 1],pi_buf[20 * 3 + 1],tmppath[MAXPATHLEN]; - if( Http_get_header(m_reponse_buffer.BasePointer(), hlen, "Location", redirect) < 0 ) -- return -1; -+ return -1; - - if( Http_url_analyse(redirect,m_host,&m_port,m_path) < 0){ -- fprintf(stderr,"warn, tracker redirect to an invalid url %s!\n", redirect); -- return -1; -+ fprintf(stderr,"warn, tracker redirect to an invalid url %s!\n", redirect); -+ if(arg_ctcs){ -+ char ctcsinfo[256]; -+ snprintf(ctcsinfo,256, -+ "warn, tracker redirect to an invalid url %s!", redirect); -+ CTCS.Send_Info(ctcsinfo); -+ } -+ return -1; - } - - strcpy(tmppath,m_path); -+ -+ if(strchr(m_path, '?')) -+ format=REQ_URL_P1A_FMT; -+ else format=REQ_URL_P1_FMT; - -- if(MAXPATHLEN < snprintf(m_path,MAXPATHLEN,REQ_URL_P1_FMT, -- tmppath, -- Http_url_encode(ih_buf, (char*)BTCONTENT.GetInfoHash(), 20), -- Http_url_encode(pi_buf, (char*)BTCONTENT.GetPeerId(), 20), -- cfg_listen_port)){ -- return -1; -+ if(MAXPATHLEN < snprintf(m_path,MAXPATHLEN,format, -+ tmppath, -+ Http_url_encode(ih_buf, (char*)BTCONTENT.GetInfoHash(), 20), -+ Http_url_encode(pi_buf, (char*)BTCONTENT.GetPeerId(), 20), -+ cfg_listen_port, -+ m_key)){ -+ return -1; - } - - return Connect(); -@@ -230,10 +302,14 @@ - return 0; - } - -- if ( !pdata ) return 0; -+ if ( !pdata ){ -+ fprintf(stderr,"warn, peers list received from tracker is empty.\n"); -+ return 0; -+ } - - if( !m_f_started ) m_f_started = 1; - m_connect_refuse_click = 0; -+ m_ok_click++; - - return _UpdatePeerList(pdata,dlen); - } -@@ -241,6 +317,7 @@ - int btTracker::Initial() - { - char ih_buf[20 * 3 + 1],pi_buf[20 * 3 + 1],tmppath[MAXPATHLEN]; -+ char *format; - - if(Http_url_analyse(BTCONTENT.GetAnnounce(),m_host,&m_port,m_path) < 0){ - fprintf(stderr,"error, invalid tracker url format!\n"); -@@ -249,40 +326,50 @@ - - strcpy(tmppath,m_path); - -- if(MAXPATHLEN < snprintf((char*)m_path,MAXPATHLEN,REQ_URL_P1_FMT, -- tmppath, -- Http_url_encode(ih_buf,(char*)BTCONTENT.GetInfoHash(),20), -- Http_url_encode(pi_buf,(char*)BTCONTENT.GetPeerId(),20), -- cfg_listen_port)){ -+ if(strchr(m_path, '?')) -+ format=REQ_URL_P1A_FMT; -+ else format=REQ_URL_P1_FMT; -+ -+ char chars[37] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; -+ for(int i=0; i<8; i++) -+ m_key[i] = chars[random()%36]; -+ m_key[8] = 0; -+ -+ if(MAXPATHLEN < snprintf((char*)m_path,MAXPATHLEN,format, -+ tmppath, -+ Http_url_encode(ih_buf,(char*)BTCONTENT.GetInfoHash(),20), -+ Http_url_encode(pi_buf,(char*)BTCONTENT.GetPeerId(),20), -+ cfg_listen_port, -+ m_key)){ - return -1; - } -- -+ - /* get local ip address */ - // 1st: if behind firewall, this only gets local side - { - struct sockaddr_in addr; - socklen_t addrlen = sizeof(struct sockaddr_in); - if(getsockname(m_sock,(struct sockaddr*)&addr,&addrlen) == 0) -- Self.SetIp(addr); -+ Self.SetIp(addr); - } - // 2nd: better to use addr of our domain - { -- struct hostent *h; -- char hostname[128]; -- char *hostdots[2]={0,0}, *hdptr=hostname; -- -- if (gethostname(hostname, 128) == -1) return -1; --// printf("%s\n", hostname); -- while(*hdptr) if(*hdptr++ == '.') { -- hostdots[0] = hostdots[1]; -- hostdots[1] = hdptr; -- } -- if (hostdots[0] == 0) return -1; --// printf("%s\n", hostdots[0]); -- if ((h = gethostbyname(hostdots[0])) == NULL) return -1; -- //printf("Host domain : %s\n", h->h_name); -- //printf("IP Address : %s\n", inet_ntoa(*((struct in_addr *)h->h_addr))); -- memcpy(&Self.m_sin.sin_addr,h->h_addr,sizeof(struct in_addr)); -+ struct hostent *h; -+ char hostname[128]; -+ char *hostdots[2]={0,0}, *hdptr=hostname; -+ -+ if (gethostname(hostname, 128) == -1) return -1; -+// printf("%s\n", hostname); -+ while(*hdptr) if(*hdptr++ == '.') { -+ hostdots[0] = hostdots[1]; -+ hostdots[1] = hdptr; -+ } -+ if (hostdots[0] == 0) return -1; -+// printf("%s\n", hostdots[0]); -+ if ((h = gethostbyname(hostdots[0])) == NULL) return -1; -+ //printf("Host domain : %s\n", h->h_name); -+ //printf("IP Address : %s\n", inet_ntoa(*((struct in_addr *)h->h_addr))); -+ memcpy(&Self.m_sin.sin_addr,h->h_addr,sizeof(struct in_addr)); - } - return 0; - } -@@ -294,12 +381,33 @@ - - if(_s2sin(m_host,m_port,&m_sin) < 0) { - fprintf(stderr,"warn, get tracker's ip address failed."); -+ if(arg_ctcs) CTCS.Send_Info("warn, get tracker's ip address failed."); - return -1; - } - - m_sock = socket(AF_INET,SOCK_STREAM,0); - if(INVALID_SOCKET == m_sock) return -1; - -+ // we only need to bind if we have specified an ip -+ // we need it to bind here before the connect!!!! -+ if ( cfg_listen_ip != 0 ) { -+ struct sockaddr_in addr; -+ // clear the struct as requested in the manpages -+ memset(&addr,0, sizeof(sockaddr_in)); -+ // set the type -+ addr.sin_family = AF_INET; -+ // we want the system to choose port -+ addr.sin_port = 0; -+ // set the defined ip from the commandline -+ addr.sin_addr.s_addr = cfg_listen_ip; -+ // bind it or return... -+ if(bind(m_sock,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) != 0){ -+ fprintf(stderr, "warn, can't set up tracker connection: %s\n", -+ strerror(errno)); -+ return -1; -+ } -+ } -+ - if(setfd_nonblock(m_sock) < 0) {CLOSE_SOCKET(m_sock); return -1; } - - r = connect_nonb(m_sock,(struct sockaddr*)&m_sin); -@@ -329,34 +437,42 @@ - // fprintf(stdout,"Old Set Self:"); - // fprintf(stdout,"%s\n", inet_ntoa(Self.m_sin.sin_addr)); - -- if( m_f_stoped ) /* stopped */ -- event = str_event[1]; -- else if( BTCONTENT.pBF->IsFull()) /* download complete */ -- event = str_event[2]; -- else if( m_f_started ) /* interval */ -- event = (char*) 0; -- else -+ if( m_f_stoped ) -+ event = str_event[1]; /* stopped */ -+ else if( m_f_started == 0 ) { -+ if( BTCONTENT.pBF->IsFull() ) m_f_completed = 1; - event = str_event[0]; /* started */ -+ } else if( BTCONTENT.pBF->IsFull() && !m_f_completed){ -+ event = str_event[2]; /* download complete */ -+ m_f_completed = 1; /* only send download complete once */ -+ } else -+ event = (char*) 0; /* interval */ - - if(event){ - if(MAXPATHLEN < snprintf(REQ_BUFFER,MAXPATHLEN,REQ_URL_P2_FMT, -- m_path, -- (size_t)Self.TotalUL(), -- (size_t)Self.TotalDL(), -- (size_t)BTCONTENT.GetLeftBytes(), -- event)){ -+ m_path, -+ Self.TotalUL(), -+ Self.TotalDL(), -+ BTCONTENT.GetLeftBytes(), -+ event, -+ cfg_max_peers, -+ m_key)){ - return -1; - } - }else{ - if(MAXPATHLEN < snprintf(REQ_BUFFER,MAXPATHLEN,REQ_URL_P3_FMT, -- m_path, -- (size_t)Self.TotalUL(), -- (size_t)Self.TotalDL(), -- (size_t)BTCONTENT.GetLeftBytes() -- )){ -+ m_path, -+ Self.TotalUL(), -+ Self.TotalDL(), -+ BTCONTENT.GetLeftBytes(), -+ cfg_max_peers, -+ m_key)){ - return -1; - } - } -+ if( *m_trackerid && -+ MAXPATHLEN - strlen(m_path) > 11 + strlen(m_trackerid) ) -+ strcat(strcat(m_path, "&trackerid="), m_trackerid); - - if(_IPsin(m_host, m_port, &addr) < 0){ - char REQ_HOST[MAXHOSTNAMELEN]; -@@ -370,6 +486,12 @@ - - if( 0 != m_reponse_buffer.PutFlush(m_sock,REQ_BUFFER,strlen((char*)REQ_BUFFER))){ - fprintf(stderr,"warn, send request to tracker failed. %s\n",strerror(errno)); -+ if(arg_ctcs){ -+ char ctcsinfo[256]; -+ snprintf(ctcsinfo,256, -+ "warn, send request to tracker failed. %s",strerror(errno)); -+ CTCS.Send_Info(ctcsinfo); -+ } - return -1; - } - -@@ -380,23 +502,29 @@ - { - /* tracker communication */ - if( T_FREE == m_status ){ -- if((*pnow - m_last_timestamp >= m_interval) && -- (cfg_min_peers > WORLD.TotalPeers())){ -+ if( *pnow - m_last_timestamp >= m_interval || -+ // Connect to tracker early if we run low on peers. -+ (WORLD.TotalPeers() < cfg_min_peers && m_prevpeers >= cfg_min_peers && -+ *pnow - m_last_timestamp >= 15) || -+ (m_f_pause && !WORLD.TotalPeers()) ){ -+ m_prevpeers = WORLD.TotalPeers(); - - if(Connect() < 0){ Reset(15); return -1; } - - if( m_status == T_CONNECTING ){ -- FD_SET(m_sock, rfdp); -- FD_SET(m_sock, wfdp); -+ FD_SET(m_sock, rfdp); -+ FD_SET(m_sock, wfdp); - }else{ -- FD_SET(m_sock, rfdp); -+ FD_SET(m_sock, rfdp); - } -+ -+ if( m_f_pause && !WORLD.TotalPeers() ) m_f_stoped = 1; - } - }else{ - if( m_status == T_CONNECTING ){ - FD_SET(m_sock, rfdp); - FD_SET(m_sock, wfdp); -- }else{ -+ }else if (INVALID_SOCKET != m_sock){ - FD_SET(m_sock, rfdp); - } - } -@@ -407,28 +535,60 @@ - { - if( T_FREE == m_status ) return 0; - -- if( T_CONNECTING == m_status && -- (FD_ISSET(m_sock, wfdp) || FD_ISSET(m_sock,wfdp)) ){ -+ if( T_CONNECTING == m_status && FD_ISSET(m_sock,wfdp) ){ - int error = 0; - socklen_t n = sizeof(error); - (*nfds)--; - FD_CLR(m_sock, wfdp); - if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 || - error != 0 ){ -- if( ECONNREFUSED != error ) -- fprintf(stderr,"warn, connect to tracker failed. %s\n",strerror(error)); -- else -- m_connect_refuse_click++; -+ if( ECONNREFUSED != error ){ -+ fprintf(stderr,"warn, connect to tracker failed. %s\n",strerror(error)); -+ if(arg_ctcs){ -+ char ctcsinfo[256]; -+ snprintf(ctcsinfo,256, -+ "warn, connect to tracker failed. %s\n",strerror(error)); -+ CTCS.Send_Info(ctcsinfo); -+ } -+ }else -+ m_connect_refuse_click++; - Reset(15); - return -1; - }else{ - if( SendRequest() == 0 ) m_status = T_READY; - else { Reset(15); return -1; } - } -- }else if(FD_ISSET(m_sock, rfdp) ){ -+ }else if( T_CONNECTING == m_status && FD_ISSET(m_sock,rfdp) ){ -+ int error = 0; -+ socklen_t n = sizeof(error); -+ (*nfds)--; -+ FD_CLR(m_sock, rfdp); -+ getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n); -+ fprintf(stderr,"warn, connect to tracker failed. %s\n",strerror(error)); -+ if(arg_ctcs){ -+ char ctcsinfo[256]; -+ snprintf(ctcsinfo,256, -+ "warn, connect to tracker failed. %s\n",strerror(error)); -+ CTCS.Send_Info(ctcsinfo); -+ } -+ Reset(15); -+ return -1; -+ }else if(INVALID_SOCKET != m_sock && FD_ISSET(m_sock, rfdp) ){ - (*nfds)--; - FD_CLR(m_sock,rfdp); - CheckReponse(); - } - return 0; - } -+ -+void btTracker::Resume() -+{ -+ m_f_pause = m_f_stoped = 0; -+ -+ if( T_FINISHED == m_status ){ -+ m_status = T_FREE; -+ m_f_started = 0; -+ m_interval = 15; -+ } -+} -+ -diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/tracker.h ctorrent-1.3.4/tracker.h ---- ctorrent-1.3.4.sav/tracker.h 2006-06-28 19:00:54.000000000 +0200 -+++ ctorrent-1.3.4/tracker.h 2006-06-28 19:30:02.000000000 +0200 -@@ -1,9 +1,9 @@ - #ifndef TRACKER_H - #define TRACKER_H - -+#include "./def.h" - #include <sys/types.h> - --#include "./def.h" - #include "./bufio.h" - - #ifdef WINDOWS -@@ -18,9 +18,12 @@ - #include <sys/param.h> - #endif - -+#include "btconfig.h" -+ - #define T_FREE 0 - #define T_CONNECTING 1 - #define T_READY 2 -+#define T_FINISHED 3 - - class btTracker - { -@@ -28,21 +31,29 @@ - char m_host[MAXHOSTNAMELEN]; - char m_path[MAXPATHLEN]; - int m_port; -+ char m_key[9]; -+ char m_trackerid[PEER_ID_LEN+1]; - - struct sockaddr_in m_sin; - - unsigned char m_status:2; - unsigned char m_f_started:1; - unsigned char m_f_stoped:1; -+ unsigned char m_f_completed:1; - - unsigned char m_f_pause:1; -- unsigned char m_f_reserved:3; -+ unsigned char m_f_softquit:1; -+ unsigned char m_f_restart:1; - - - time_t m_interval; // 与Tracker通信的时间间隔 - time_t m_last_timestamp; // 最后一次成功与Tracker通信的时间 - size_t m_connect_refuse_click; - -+ size_t m_ok_click; // tracker ok response counter -+ size_t m_peers_count; // total number of peers -+ size_t m_prevpeers; // number of peers previously seen -+ - SOCKET m_sock; - BufIo m_reponse_buffer; - -@@ -65,6 +76,14 @@ - - void SetPause() { m_f_pause = 1; } - void ClearPause() { m_f_pause = 0; } -+ int IsPaused() const { return m_f_pause; } -+ void Resume(); -+ void SoftQuit() { m_f_softquit = 1; } -+ void DontQuit() { m_f_softquit = 0; } -+ int IsQuitting() const { return m_f_softquit; } -+ void SetRestart() { m_f_restart = 1; } -+ -+ void SetStoped() { Reset(15); m_f_stoped = 1; m_last_timestamp -= 15;} - - int Connect(); - int SendRequest(); -@@ -73,6 +92,8 @@ - int SocketReady(fd_set *rfdp, fd_set *wfdp, int *nfds); - - size_t GetRefuseClick() const { return m_connect_refuse_click; } -+ size_t GetOkClick() const { return m_ok_click; } -+ size_t GetPeersCount() const { return m_peers_count; } - }; - - extern btTracker Tracker; |