diff -Nur ./CVS/Entries ../mldonkey/CVS/Entries --- ./CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/CVS/Entries Mon Sep 13 21:58:34 2004 @@ -0,0 +1,17 @@ +/.cvsignore/1.25/Thu Jul 29 10:25:32 2004//Trelease-2-5-23 +/.depend.mingw/1.3/Thu Apr 24 12:45:45 2003//Trelease-2-5-23 +/ChangeLog/1.3/Sat May 18 07:53:04 2002//Trelease-2-5-23 +/Copying.txt/1.1/Thu Feb 5 23:28:59 2004//Trelease-2-5-23 +/Developers.txt/1.2/Tue Apr 22 22:33:38 2003//Trelease-2-5-23 +/Install.txt/1.3/Fri Apr 16 17:14:52 2004//Trelease-2-5-23 +/Makefile/1.137/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/configure/1.8/Sun Mar 7 09:34:24 2004//Trelease-2-5-23 +D/build//// +D/config//// +D/distrib//// +D/docs//// +D/icons//// +D/packages//// +D/patches//// +D/src//// +D/tools//// diff -Nur ./CVS/Repository ../mldonkey/CVS/Repository --- ./CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/CVS/Repository Mon Sep 13 21:50:51 2004 @@ -0,0 +1 @@ +mldonkey diff -Nur ./CVS/Root ../mldonkey/CVS/Root --- ./CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/CVS/Root Mon Sep 13 21:50:51 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./CVS/Tag ../mldonkey/CVS/Tag --- ./CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/CVS/Tag Mon Sep 13 21:50:55 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./Makefile ../mldonkey/Makefile --- ./Makefile Thu Jul 29 12:32:48 2004 +++ ../mldonkey/Makefile Wed Aug 4 18:59:26 2004 @@ -304,10 +304,11 @@ $(SRC_DONKEY)/donkeyNeighbours.ml \ $(SRC_DONKEY)/donkeyStats.ml \ $(SRC_DONKEY)/donkeyOneFile.ml \ - $(SRC_DONKEY)/donkeyClient.ml \ - $(SRC_DONKEY)/donkeyProtoOvernet.ml \ \ $(SRC_DONKEY)/donkeyOvernet.ml \ + $(SRC_DONKEY)/donkeyProtoKademlia.ml \ + $(SRC_DONKEY)/donkeyClient.ml \ + $(SRC_DONKEY)/donkeyProtoOvernet.ml \ $(SRC_DONKEY)/donkeyUdp.ml \ $(SRC_DONKEY)/donkeyFiles.ml \ $(SRC_DONKEY)/donkeyServers.ml \ diff -Nur ./build/CVS/Entries ../mldonkey/build/CVS/Entries --- ./build/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/build/CVS/Entries Mon Sep 13 21:51:00 2004 @@ -0,0 +1,2 @@ +/.cvsignore/1.1/Mon Apr 14 06:47:25 2003//Trelease-2-5-23 +D diff -Nur ./build/CVS/Repository ../mldonkey/build/CVS/Repository --- ./build/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/build/CVS/Repository Mon Sep 13 21:51:00 2004 @@ -0,0 +1 @@ +mldonkey/build diff -Nur ./build/CVS/Root ../mldonkey/build/CVS/Root --- ./build/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/build/CVS/Root Mon Sep 13 21:51:00 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./build/CVS/Tag ../mldonkey/build/CVS/Tag --- ./build/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/build/CVS/Tag Mon Sep 13 21:51:00 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./config/CVS/Entries ../mldonkey/config/CVS/Entries --- ./config/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/config/CVS/Entries Mon Sep 13 21:58:30 2004 @@ -0,0 +1,18 @@ +/.cvsignore/1.7/Wed Jan 14 20:43:56 2004//Trelease-2-5-23 +/Makefile.config.i386.in/1.9/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/Makefile.config.i486.in/1.9/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/Makefile.config.i586.in/1.9/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/Makefile.config.i686.in/1.9/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/Makefile.config.in/1.34/Thu Jul 29 10:25:32 2004//Trelease-2-5-23 +/Makefile.in/1.76/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/aclocal.m4/1.1/Wed Feb 26 07:53:54 2003//Trelease-2-5-23 +/config.guess/1.3/Wed Mar 17 23:42:31 2004//Trelease-2-5-23 +/config.h.in/1.6/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/config.sub/1.3/Wed Mar 17 23:42:31 2004//Trelease-2-5-23 +/configure/1.152/Wed Aug 4 18:39:32 2004//Trelease-2-5-23 +/configure.in/1.153/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/install-sh/1.1/Sat Feb 9 09:45:18 2002//Trelease-2-5-23 +/mldonkey.ico/1.1/Sun Nov 23 11:29:30 2003//Trelease-2-5-23 +/mldonkey.rc.in/1.1/Sun Nov 23 11:29:30 2003//Trelease-2-5-23 +/wget.c/1.3/Fri Nov 21 23:17:23 2003//Trelease-2-5-23 +D diff -Nur ./config/CVS/Repository ../mldonkey/config/CVS/Repository --- ./config/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/config/CVS/Repository Mon Sep 13 21:51:04 2004 @@ -0,0 +1 @@ +mldonkey/config diff -Nur ./config/CVS/Root ../mldonkey/config/CVS/Root --- ./config/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/config/CVS/Root Mon Sep 13 21:51:04 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./config/CVS/Tag ../mldonkey/config/CVS/Tag --- ./config/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/config/CVS/Tag Mon Sep 13 21:51:11 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./config/Makefile.config.i386.in ../mldonkey/config/Makefile.config.i386.in --- ./config/Makefile.config.i386.in Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/Makefile.config.i386.in Wed Aug 4 18:59:26 2004 @@ -71,3 +71,4 @@ EXTRA_DIRS=@EXTRA_DIRS@ CC=@CPP@ +GTK=@GTK@ diff -Nur ./config/Makefile.config.i486.in ../mldonkey/config/Makefile.config.i486.in --- ./config/Makefile.config.i486.in Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/Makefile.config.i486.in Wed Aug 4 18:59:26 2004 @@ -71,3 +71,4 @@ EXTRA_DIRS=@EXTRA_DIRS@ CC=@CPP@ +GTK=@GTK@ diff -Nur ./config/Makefile.config.i586.in ../mldonkey/config/Makefile.config.i586.in --- ./config/Makefile.config.i586.in Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/Makefile.config.i586.in Wed Aug 4 18:59:26 2004 @@ -71,3 +71,4 @@ EXTRA_DIRS=@EXTRA_DIRS@ CC=@CPP@ +GTK=@GTK@ diff -Nur ./config/Makefile.config.i686.in ../mldonkey/config/Makefile.config.i686.in --- ./config/Makefile.config.i686.in Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/Makefile.config.i686.in Wed Aug 4 18:59:26 2004 @@ -71,3 +71,4 @@ EXTRA_DIRS=@EXTRA_DIRS@ CC=@CPP@ +GTK=@GTK@ diff -Nur ./config/Makefile.in ../mldonkey/config/Makefile.in --- ./config/Makefile.in Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/Makefile.in Wed Aug 4 18:59:26 2004 @@ -304,10 +304,11 @@ $(SRC_DONKEY)/donkeyNeighbours.ml \ $(SRC_DONKEY)/donkeyStats.ml \ $(SRC_DONKEY)/donkeyOneFile.ml \ - $(SRC_DONKEY)/donkeyClient.ml \ - $(SRC_DONKEY)/donkeyProtoOvernet.ml \ \ $(SRC_DONKEY)/donkeyOvernet.ml \ + $(SRC_DONKEY)/donkeyProtoKademlia.ml \ + $(SRC_DONKEY)/donkeyClient.ml \ + $(SRC_DONKEY)/donkeyProtoOvernet.ml \ $(SRC_DONKEY)/donkeyUdp.ml \ $(SRC_DONKEY)/donkeyFiles.ml \ $(SRC_DONKEY)/donkeyServers.ml \ diff -Nur ./config/configure ../mldonkey/config/configure --- ./config/configure Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/configure Wed Aug 4 20:39:32 2004 @@ -50,7 +50,7 @@ ac_help="$ac_help --disable-cymes: allows you to remove support for Cymes" ac_help="$ac_help ---enable-ocamlver=3.07: allows you to change the required version of ocaml" +--enable-ocamlver=3.08.0: allows you to change the required version of ocaml" ac_help="$ac_help --enable-gtk2: allows you to compile using GTK2" ac_help="$ac_help @@ -580,10 +580,10 @@ echo $MYCONFIG_ARGS CURRENT_VERSION=2.5 -CURRENT_RELEASE=22 +CURRENT_RELEASE=23 -REQUIRED_OCAML=3.07 -DOWNLOAD_OCAML=3.07pl2 +REQUIRED_OCAML=3.08.0 +DOWNLOAD_OCAML=3.08.0 REQUIRED_LABLGTK=1.2.6 @@ -1494,6 +1494,7 @@ "$REQUIRED_OCAML"*) ;; 3.06*);; 3.07*);; + 3.08*);; "$REQUIRED_OCAML_REG") ;; *) echo "Need build" BUILD_OCAML=yes;; @@ -1505,7 +1506,7 @@ ac_safe=`echo ""$LOCAL_OCAML"/ocamlc.opt" | sed 'y%./+-%__p_%'` echo $ac_n "checking for "$LOCAL_OCAML"/ocamlc.opt""... $ac_c" 1>&6 -echo "configure:1509: checking for "$LOCAL_OCAML"/ocamlc.opt" >&5 +echo "configure:1510: checking for "$LOCAL_OCAML"/ocamlc.opt" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1542,7 +1543,7 @@ # Extract the first word of "rpmbuild", so it can be a program name with args. set dummy rpmbuild; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1546: checking for $ac_word" >&5 +echo "configure:1547: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RPMBUILD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1571,7 +1572,7 @@ # Extract the first word of "rpm", so it can be a program name with args. set dummy rpm; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1575: checking for $ac_word" >&5 +echo "configure:1576: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RPMBUILD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1600,7 +1601,7 @@ # Extract the first word of "wget", so it can be a program name with args. set dummy wget; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1604: checking for $ac_word" >&5 +echo "configure:1605: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1631,7 +1632,7 @@ # Extract the first word of "wget", so it can be a program name with args. set dummy wget; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1635: checking for $ac_word" >&5 +echo "configure:1636: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_WGET'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1692,7 +1693,7 @@ cd $BUILD_DIR rm -rf ocaml-"$REQUIRED_OCAML" gzip -cd $PATCH_DIR/ocaml-"$DOWNLOAD_OCAML".tar.gz | tar vxf - - cd ocaml-"$REQUIRED_OCAML" + cd ocaml-"$DOWNLOAD_OCAML" if test -f $PATCH_DIR/ocaml-"$REQUIRED_OCAML".patch; then echo Patching ... patch -p1 < $PATCH_DIR/ocaml-"$REQUIRED_OCAML".patch @@ -1759,7 +1760,7 @@ # Extract the first word of "ocamlopt.opt", so it can be a program name with args. set dummy ocamlopt.opt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1763: checking for $ac_word" >&5 +echo "configure:1764: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLOPT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1788,7 +1789,7 @@ # Extract the first word of "ocamlopt", so it can be a program name with args. set dummy ocamlopt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1792: checking for $ac_word" >&5 +echo "configure:1793: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLOPT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1818,7 +1819,7 @@ # Extract the first word of "ocamldep", so it can be a program name with args. set dummy ocamldep; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1822: checking for $ac_word" >&5 +echo "configure:1823: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLDEP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1847,7 +1848,7 @@ # Extract the first word of "ocamllex.opt", so it can be a program name with args. set dummy ocamllex.opt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1851: checking for $ac_word" >&5 +echo "configure:1852: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLLEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1876,7 +1877,7 @@ # Extract the first word of "ocamllex", so it can be a program name with args. set dummy ocamllex; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1880: checking for $ac_word" >&5 +echo "configure:1881: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLLEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1905,7 +1906,7 @@ # Extract the first word of "ocamlyacc", so it can be a program name with args. set dummy ocamlyacc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1909: checking for $ac_word" >&5 +echo "configure:1910: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLYACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1934,7 +1935,7 @@ # Extract the first word of "ocamlmktop", so it can be a program name with args. set dummy ocamlmktop; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1938: checking for $ac_word" >&5 +echo "configure:1939: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_OCAMLMKTOP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1963,7 +1964,7 @@ # Extract the first word of "camlp4", so it can be a program name with args. set dummy camlp4; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1967: checking for $ac_word" >&5 +echo "configure:1968: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CAMLP4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1997,7 +1998,7 @@ # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2001: checking for $ac_word" >&5 +echo "configure:2002: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2064,7 +2065,7 @@ # Sizes of various common basic types echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:2068: checking size of int" >&5 +echo "configure:2069: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2072,7 +2073,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2083,7 +2084,7 @@ return(0); } EOF -if { (eval echo configure:2087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -2103,7 +2104,7 @@ echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:2107: checking size of long" >&5 +echo "configure:2108: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2111,7 +2112,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2122,7 +2123,7 @@ return(0); } EOF -if { (eval echo configure:2126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -2142,7 +2143,7 @@ echo $ac_n "checking size of void *""... $ac_c" 1>&6 -echo "configure:2146: checking size of void *" >&5 +echo "configure:2147: checking size of void *" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_void_p'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2150,7 +2151,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2161,7 +2162,7 @@ return(0); } EOF -if { (eval echo configure:2165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_void_p=`cat conftestval` else @@ -2181,7 +2182,7 @@ echo $ac_n "checking size of char""... $ac_c" 1>&6 -echo "configure:2185: checking size of char" >&5 +echo "configure:2186: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2189,7 +2190,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2200,7 +2201,7 @@ return(0); } EOF -if { (eval echo configure:2204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_char=`cat conftestval` else @@ -2220,7 +2221,7 @@ echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:2224: checking size of short" >&5 +echo "configure:2225: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2228,7 +2229,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2239,7 +2240,7 @@ return(0); } EOF -if { (eval echo configure:2243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -2259,7 +2260,7 @@ echo $ac_n "checking size of float""... $ac_c" 1>&6 -echo "configure:2263: checking size of float" >&5 +echo "configure:2264: checking size of float" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_float'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2267,7 +2268,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2278,7 +2279,7 @@ return(0); } EOF -if { (eval echo configure:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_float=`cat conftestval` else @@ -2298,7 +2299,7 @@ echo $ac_n "checking size of double""... $ac_c" 1>&6 -echo "configure:2302: checking size of double" >&5 +echo "configure:2303: checking size of double" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2306,7 +2307,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < int main() @@ -2317,7 +2318,7 @@ return(0); } EOF -if { (eval echo configure:2321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_double=`cat conftestval` else @@ -2342,17 +2343,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2346: checking for $ac_hdr" >&5 +echo "configure:2347: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2356: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2382,17 +2383,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2386: checking for $ac_hdr" >&5 +echo "configure:2387: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2396: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2397: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2424,17 +2425,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2428: checking for $ac_hdr" >&5 +echo "configure:2429: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2439: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2463,12 +2464,12 @@ for ac_func in poll do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2467: checking for $ac_func" >&5 +echo "configure:2468: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2518,7 +2519,7 @@ ZLIB=no echo $ac_n "checking for inflate in -lz""... $ac_c" 1>&6 -echo "configure:2522: checking for inflate in -lz" >&5 +echo "configure:2523: checking for inflate in -lz" >&5 ac_lib_var=`echo z'_'inflate | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2526,7 +2527,7 @@ ac_save_LIBS="$LIBS" LIBS="-lz $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2561,17 +2562,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2565: checking for $ac_hdr" >&5 +echo "configure:2566: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2575: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2576: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2604,14 +2605,12 @@ ZLIB__UNCOMPRESS_STRING2="Zlib.uncompress_string2 s" ZLIB__COMPRESS_STRING="Zlib.compress_string s" else - HAS_ZLIB=false - ZLIB__UNCOMPRESS_STRING2="s" - ZLIB__COMPRESS_STRING="s" + echo "Zlib missing, did you install zlib and zlib-developer packages?"; exit 1 fi ICONV=no echo $ac_n "checking for iconv_open in -liconv""... $ac_c" 1>&6 -echo "configure:2615: checking for iconv_open in -liconv" >&5 +echo "configure:2614: checking for iconv_open in -liconv" >&5 ac_lib_var=`echo iconv'_'iconv_open | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2619,7 +2618,7 @@ ac_save_LIBS="$LIBS" LIBS="-liconv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2656,17 +2655,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2660: checking for $ac_hdr" >&5 +echo "configure:2659: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2670: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2707,17 +2706,17 @@ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2711: checking for $ac_hdr" >&5 +echo "configure:2710: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2721: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2720: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2744,17 +2743,17 @@ CPPFLAGS="-I /usr/src/linux/include" ac_safe=`echo "linux/types.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for linux/types.h""... $ac_c" 1>&6 -echo "configure:2748: checking for linux/types.h" >&5 +echo "configure:2747: checking for linux/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2758: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2757: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2790,7 +2789,7 @@ fi echo $ac_n "checking Additionnal includes""... $ac_c" 1>&6 -echo "configure:2794: checking Additionnal includes" >&5 +echo "configure:2793: checking Additionnal includes" >&5 echo "$ac_t""$CONFIG_INCLUDES" 1>&6 OCAMLLIB=`$OCAMLC -where` @@ -2808,7 +2807,7 @@ ac_safe=`echo "../src/networks/donkey" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/donkey""... $ac_c" 1>&6 -echo "configure:2812: checking for ../src/networks/donkey" >&5 +echo "configure:2811: checking for ../src/networks/donkey" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2846,7 +2845,7 @@ ac_safe=`echo "../src/networks/audio_galaxy" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/audio_galaxy""... $ac_c" 1>&6 -echo "configure:2850: checking for ../src/networks/audio_galaxy" >&5 +echo "configure:2849: checking for ../src/networks/audio_galaxy" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2879,7 +2878,7 @@ ac_safe=`echo "../src/networks/opennap" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/opennap""... $ac_c" 1>&6 -echo "configure:2883: checking for ../src/networks/opennap" >&5 +echo "configure:2882: checking for ../src/networks/opennap" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2912,7 +2911,7 @@ ac_safe=`echo "../src/networks/direct_connect" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/direct_connect""... $ac_c" 1>&6 -echo "configure:2916: checking for ../src/networks/direct_connect" >&5 +echo "configure:2915: checking for ../src/networks/direct_connect" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2946,7 +2945,7 @@ ac_safe=`echo "../src/networks/gnutella" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/gnutella""... $ac_c" 1>&6 -echo "configure:2950: checking for ../src/networks/gnutella" >&5 +echo "configure:2949: checking for ../src/networks/gnutella" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2985,7 +2984,7 @@ ac_safe=`echo "../src/networks/gnutella2" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/gnutella2""... $ac_c" 1>&6 -echo "configure:2989: checking for ../src/networks/gnutella2" >&5 +echo "configure:2988: checking for ../src/networks/gnutella2" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3023,7 +3022,7 @@ ac_safe=`echo "../src/networks/bittorrent" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/bittorrent""... $ac_c" 1>&6 -echo "configure:3027: checking for ../src/networks/bittorrent" >&5 +echo "configure:3026: checking for ../src/networks/bittorrent" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3056,7 +3055,7 @@ ac_safe=`echo "../src/networks/fileTP" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/fileTP""... $ac_c" 1>&6 -echo "configure:3060: checking for ../src/networks/fileTP" >&5 +echo "configure:3059: checking for ../src/networks/fileTP" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3090,7 +3089,7 @@ ac_safe=`echo "../src/networks/soulseek" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/soulseek""... $ac_c" 1>&6 -echo "configure:3094: checking for ../src/networks/soulseek" >&5 +echo "configure:3093: checking for ../src/networks/soulseek" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3128,7 +3127,7 @@ ac_safe=`echo "../src/networks/openFT" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/openFT""... $ac_c" 1>&6 -echo "configure:3132: checking for ../src/networks/openFT" >&5 +echo "configure:3131: checking for ../src/networks/openFT" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3161,7 +3160,7 @@ ac_safe=`echo "../src/networks/fasttrack" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/fasttrack""... $ac_c" 1>&6 -echo "configure:3165: checking for ../src/networks/fasttrack" >&5 +echo "configure:3164: checking for ../src/networks/fasttrack" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3194,7 +3193,7 @@ ac_safe=`echo "../src/networks/cymes" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/cymes""... $ac_c" 1>&6 -echo "configure:3198: checking for ../src/networks/cymes" >&5 +echo "configure:3197: checking for ../src/networks/cymes" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3228,7 +3227,7 @@ ac_safe=`echo "../src/networks/donkey" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/donkey""... $ac_c" 1>&6 -echo "configure:3232: checking for ../src/networks/donkey" >&5 +echo "configure:3231: checking for ../src/networks/donkey" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3249,7 +3248,7 @@ ac_safe=`echo "../src/networks/server" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/networks/server""... $ac_c" 1>&6 -echo "configure:3253: checking for ../src/networks/server" >&5 +echo "configure:3252: checking for ../src/networks/server" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3296,7 +3295,7 @@ # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3300: checking for $ac_word" >&5 +echo "configure:3299: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3327,7 +3326,7 @@ # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3331: checking for $ac_word" >&5 +echo "configure:3330: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3372,7 +3371,7 @@ LABLGTK_CONFIG=no else echo $ac_n "checking Checking for native code lablgtk""... $ac_c" 1>&6 -echo "configure:3376: checking Checking for native code lablgtk" >&5 +echo "configure:3375: checking Checking for native code lablgtk" >&5 if test -f `$OCAMLC -where`/labl$GTK/lablgtk.$OCAMLLIB_EXT; then echo "$ac_t""yes" 1>&6 LABLGTK_CONFIG=yes @@ -3433,7 +3432,7 @@ ac_safe=`echo "../src/im" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/im""... $ac_c" 1>&6 -echo "configure:3437: checking for ../src/im" >&5 +echo "configure:3436: checking for ../src/im" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3465,7 +3464,7 @@ if test "$IM" = "yes"; then CRYPTOKIT=no echo $ac_n "checking Checking for CryptoKit""... $ac_c" 1>&6 -echo "configure:3469: checking Checking for CryptoKit" >&5 +echo "configure:3468: checking Checking for CryptoKit" >&5 if test -f $OCAMLLIB/cryptokit.$OCAMLLIB_EXT; then CRYPTOKIT=yes echo "$ac_t""yes" 1>&6 @@ -3476,7 +3475,7 @@ if test "$CRYPTOKIT" = "yes"; then YAXPO=no echo $ac_n "checking Checking for Yaxpo""... $ac_c" 1>&6 -echo "configure:3480: checking Checking for Yaxpo" >&5 +echo "configure:3479: checking Checking for Yaxpo" >&5 if test -f $OCAMLLIB/yaxpo.$OCAMLLIB_EXT; then YAXPO=yes echo "$ac_t""yes" 1>&6 @@ -3488,7 +3487,7 @@ if test "$YAXPO" = "yes"; then JABBR=no echo $ac_n "checking Checking for Jabbr""... $ac_c" 1>&6 -echo "configure:3492: checking Checking for Jabbr" >&5 +echo "configure:3491: checking Checking for Jabbr" >&5 if test -f $OCAMLLIB/jabbr.$OCAMLLIB_EXT; then JABBR=yes echo "$ac_t""yes" 1>&6 @@ -3527,9 +3526,9 @@ save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" echo $ac_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS""... $ac_c" 1>&6 -echo "configure:3531: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 +echo "configure:3530: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* acx_pthread_ok=yes else @@ -3607,18 +3606,18 @@ case $flag in none) echo $ac_n "checking whether pthreads work without any flags""... $ac_c" 1>&6 -echo "configure:3611: checking whether pthreads work without any flags" >&5 +echo "configure:3610: checking whether pthreads work without any flags" >&5 ;; -*) echo $ac_n "checking whether pthreads work with $flag""... $ac_c" 1>&6 -echo "configure:3616: checking whether pthreads work with $flag" >&5 +echo "configure:3615: checking whether pthreads work with $flag" >&5 PTHREAD_CFLAGS="$flag" ;; *) echo $ac_n "checking for the pthreads library -l$flag""... $ac_c" 1>&6 -echo "configure:3622: checking for the pthreads library -l$flag" >&5 +echo "configure:3621: checking for the pthreads library -l$flag" >&5 PTHREAD_LIBS="-l$flag" ;; esac @@ -3638,7 +3637,7 @@ # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat > conftest.$ac_ext < int main() { @@ -3647,7 +3646,7 @@ pthread_create(0,0,0,0); pthread_cleanup_pop(0); ; return 0; } EOF -if { (eval echo configure:3651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* acx_pthread_ok=yes else @@ -3679,16 +3678,16 @@ # Detect AIX lossage: threads are created detached by default # and the JOINABLE attribute has a nonstandard name (UNDETACHED). echo $ac_n "checking for joinable pthread attribute""... $ac_c" 1>&6 -echo "configure:3683: checking for joinable pthread attribute" >&5 +echo "configure:3682: checking for joinable pthread attribute" >&5 cat > conftest.$ac_ext < int main() { int attr=PTHREAD_CREATE_JOINABLE; ; return 0; } EOF -if { (eval echo configure:3692: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ok=PTHREAD_CREATE_JOINABLE else @@ -3700,14 +3699,14 @@ rm -f conftest* if test x"$ok" = xunknown; then cat > conftest.$ac_ext < int main() { int attr=PTHREAD_CREATE_UNDETACHED; ; return 0; } EOF -if { (eval echo configure:3711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ok=PTHREAD_CREATE_UNDETACHED else @@ -3730,7 +3729,7 @@ fi echo $ac_n "checking if more special flags are required for pthreads""... $ac_c" 1>&6 -echo "configure:3734: checking if more special flags are required for pthreads" >&5 +echo "configure:3733: checking if more special flags are required for pthreads" >&5 flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; @@ -3748,7 +3747,7 @@ # Extract the first word of "cc_r", so it can be a program name with args. set dummy cc_r; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3752: checking for $ac_word" >&5 +echo "configure:3751: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_PTHREAD_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3806,7 +3805,7 @@ echo $ac_n "checking compile GTK GUI""... $ac_c" 1>&6 -echo "configure:3810: checking compile GTK GUI" >&5 +echo "configure:3809: checking compile GTK GUI" >&5 if test "$LABLGTK_CONFIG" = "no"; then echo "$ac_t""no" 1>&6 BAD_TARGETS="$BAD_TARGETS $GUIS" @@ -3826,9 +3825,14 @@ GTK_VERSION=`$GTK_CONFIG --version` COMPILE_GUI=yes echo "$ac_t""yes" 1>&6 + if test "$BUILD_NEWGUI" = "yes"; then + echo "compiling newgui" + else + echo "compiling oldgui" + fi fi echo $ac_n "checking GToolbox.popup_menu args""... $ac_c" 1>&6 -echo "configure:3832: checking GToolbox.popup_menu args" >&5 +echo "configure:3836: checking GToolbox.popup_menu args" >&5 if test "$OS_FILES" = "mingw"; then GTOOLBOX="`$OCAMLC -where`\lablgtk\gToolbox.mli" else @@ -3857,7 +3861,7 @@ # Extract the first word of "bzip2", so it can be a program name with args. set dummy bzip2; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3861: checking for $ac_word" >&5 +echo "configure:3865: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_COMPRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3886,7 +3890,7 @@ # Extract the first word of "gzip", so it can be a program name with args. set dummy gzip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:3890: checking for $ac_word" >&5 +echo "configure:3894: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_COMPRESS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3940,7 +3944,7 @@ ARCH=$arch case "$OCAMLVERSION" in - 3.06* | 3.07* ) TYPE_FORMAT="";; + 3.06* | 3.07* | 3.08* ) TYPE_FORMAT="";; *) TYPE_FORMAT="type ('a,'b,'c) ml_format = ('a,'b, 'c,'c) format type ('a,'b,'c) format = ('a,'b, 'c) ml_format";; esac @@ -3951,7 +3955,7 @@ ac_safe=`echo "../src/pic/picMain.ml" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/pic/picMain.ml""... $ac_c" 1>&6 -echo "configure:3955: checking for ../src/pic/picMain.ml" >&5 +echo "configure:3959: checking for ../src/pic/picMain.ml" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3976,7 +3980,7 @@ ac_safe=`echo "../src/spider/ecrawler/spiderMain.ml" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/spider/ecrawler/spiderMain.ml""... $ac_c" 1>&6 -echo "configure:3980: checking for ../src/spider/ecrawler/spiderMain.ml" >&5 +echo "configure:3984: checking for ../src/spider/ecrawler/spiderMain.ml" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4001,7 +4005,7 @@ ac_safe=`echo "../src/btview/btviewMain.ml" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/btview/btviewMain.ml""... $ac_c" 1>&6 -echo "configure:4005: checking for ../src/btview/btviewMain.ml" >&5 +echo "configure:4009: checking for ../src/btview/btviewMain.ml" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4026,7 +4030,7 @@ ac_safe=`echo "../src/cluster/clusterMain.ml" | sed 'y%./+-%__p_%'` echo $ac_n "checking for ../src/cluster/clusterMain.ml""... $ac_c" 1>&6 -echo "configure:4030: checking for ../src/cluster/clusterMain.ml" >&5 +echo "configure:4034: checking for ../src/cluster/clusterMain.ml" >&5 if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4573,6 +4577,11 @@ cd .. if test "$OS_FILES" = "mingw"; then + echo "compiling win32 resource file" + windres -o resfile.o config/mldonkey.rc +fi + +if test "$OS_FILES" = "cygwin"; then echo "compiling win32 resource file" windres -o resfile.o config/mldonkey.rc fi diff -Nur ./config/configure.in ../mldonkey/config/configure.in --- ./config/configure.in Thu Jul 29 12:32:40 2004 +++ ../mldonkey/config/configure.in Wed Aug 4 18:59:26 2004 @@ -11,10 +11,10 @@ echo $MYCONFIG_ARGS CURRENT_VERSION=2.5 -CURRENT_RELEASE=22 +CURRENT_RELEASE=23 -REQUIRED_OCAML=3.07 -DOWNLOAD_OCAML=3.07pl2 +REQUIRED_OCAML=3.08.0 +DOWNLOAD_OCAML=3.08.0 REQUIRED_LABLGTK=1.2.6 @@ -97,7 +97,7 @@ AC_ARG_ENABLE(cymes, [--disable-cymes: allows you to remove support for Cymes], [CYMES="$enableval"]) -AC_ARG_ENABLE(ocamlver, [--enable-ocamlver=3.07: allows you to change the required version of ocaml], [REQUIRED_OCAML="$enableval"]) +AC_ARG_ENABLE(ocamlver, [--enable-ocamlver=3.08.0: allows you to change the required version of ocaml], [REQUIRED_OCAML="$enableval"]) AC_ARG_ENABLE(gtk2, [--enable-gtk2: allows you to compile using GTK2], [USE_GTK2="$enableval"]) @@ -194,6 +194,7 @@ "$REQUIRED_OCAML"*) ;; 3.06*);; 3.07*);; + 3.08*);; "$REQUIRED_OCAML_REG") ;; *) echo "Need build" BUILD_OCAML=yes;; @@ -250,7 +251,7 @@ cd $BUILD_DIR rm -rf ocaml-"$REQUIRED_OCAML" gzip -cd $PATCH_DIR/ocaml-"$DOWNLOAD_OCAML".tar.gz | tar vxf - - cd ocaml-"$REQUIRED_OCAML" + cd ocaml-"$DOWNLOAD_OCAML" if test -f $PATCH_DIR/ocaml-"$REQUIRED_OCAML".patch; then echo Patching ... patch -p1 < $PATCH_DIR/ocaml-"$REQUIRED_OCAML".patch @@ -386,9 +387,7 @@ ZLIB__UNCOMPRESS_STRING2="Zlib.uncompress_string2 s" ZLIB__COMPRESS_STRING="Zlib.compress_string s" else - HAS_ZLIB=false - ZLIB__UNCOMPRESS_STRING2="s" - ZLIB__COMPRESS_STRING="s" + echo "Zlib missing, did you install zlib and zlib-developer packages?"; exit 1 fi ICONV=no @@ -736,6 +735,11 @@ GTK_VERSION=`$GTK_CONFIG --version` COMPILE_GUI=yes AC_MSG_RESULT(yes) + if test "$BUILD_NEWGUI" = "yes"; then + echo "compiling newgui" + else + echo "compiling oldgui" + fi fi AC_MSG_CHECKING(GToolbox.popup_menu args) if test "$OS_FILES" = "mingw"; then @@ -793,7 +797,7 @@ ARCH=$arch case "$OCAMLVERSION" in - 3.06* | 3.07* ) TYPE_FORMAT="";; + 3.06* | 3.07* | 3.08* ) TYPE_FORMAT="";; *) TYPE_FORMAT="type ('a,'b,'c) ml_format = ('a,'b, 'c,'c) format type ('a,'b,'c) format = ('a,'b, 'c) ml_format";; esac @@ -898,6 +902,11 @@ cd .. if test "$OS_FILES" = "mingw"; then + echo "compiling win32 resource file" + windres -o resfile.o config/mldonkey.rc +fi + +if test "$OS_FILES" = "cygwin"; then echo "compiling win32 resource file" windres -o resfile.o config/mldonkey.rc fi diff -Nur ./distrib/CVS/Entries ../mldonkey/distrib/CVS/Entries --- ./distrib/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/CVS/Entries Mon Sep 13 21:58:28 2004 @@ -0,0 +1,21 @@ +/Authors.txt/1.2/Wed Feb 4 22:35:57 2004//Trelease-2-5-23 +/Bugs.txt/1.2/Wed Feb 4 12:13:36 2004//Trelease-2-5-23 +/ChangeLog/1.193/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/Copying.txt/1.2/Thu Feb 5 23:23:35 2004//Trelease-2-5-23 +/Developers.txt/1.6/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/FAQ.html/1.5/Tue Feb 25 07:54:17 2003//Trelease-2-5-23 +/Install.txt/1.4/Fri Apr 16 17:14:52 2004//Trelease-2-5-23 +/Readme.txt/1.15/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/Todo.txt/1.5/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/directconnect.ini/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/ed2k_links.txt/1.1/Wed Aug 28 09:20:30 2002//Trelease-2-5-23 +/kill_mldonkey/1.1/Tue Apr 30 19:49:45 2002//Trelease-2-5-23 +/make_buginfo/1.1/Wed Feb 4 12:13:36 2004//Trelease-2-5-23 +/mldonkey_command/1.1/Thu Oct 10 09:51:04 2002//Trelease-2-5-23 +/mldonkey_gui_started_for_macosx/1.1/Sat Feb 9 09:47:12 2002//Trelease-2-5-23 +/mldonkey_previewer/1.4/Sun May 25 00:29:50 2003//Trelease-2-5-23 +D/docs//// +D/ed2k_mozilla//// +D/ed2k_submit//// +D/html_themes//// +D/i18n//// diff -Nur ./distrib/CVS/Repository ../mldonkey/distrib/CVS/Repository --- ./distrib/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/CVS/Repository Mon Sep 13 21:51:15 2004 @@ -0,0 +1 @@ +mldonkey/distrib diff -Nur ./distrib/CVS/Root ../mldonkey/distrib/CVS/Root --- ./distrib/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/CVS/Root Mon Sep 13 21:51:15 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/CVS/Tag ../mldonkey/distrib/CVS/Tag --- ./distrib/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/CVS/Tag Mon Sep 13 21:51:22 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/ChangeLog ../mldonkey/distrib/ChangeLog --- ./distrib/ChangeLog Thu Jul 29 12:32:40 2004 +++ ../mldonkey/distrib/ChangeLog Wed Aug 4 18:59:26 2004 @@ -1,6 +1,36 @@ ChangeLog ========= +2004/08/04: Fabrice (version 2.5.23 = 2.6pre5, tag release-2-5-23) + - ocaml-3.08 is required to compile now. + - Overnet and Emule-Kademlia share the same (partial) implementation: + * Use global options "enable_overnet", "enable_kademlia" and + "enable_servers" to choose which modes you want to use. + * See the options for Kademlia and Overnet in donkey.ini. + * Use kad_ and ov_ prefixes to call commands for these networks + ("kad_buckets" gives the current connection status, "kad_boots" + gives the number of known peers to bootstrap, "kad_stats" gives + the current status of searches, "kad_store" for what is published + on the client) + * Currently working: + * Search for keywords (normal searches) + * Search for files (localisation of sources) + * Replies to external searches + +2004/08/01: Fabrice + - Applied Savannah patches: #3249 (no udp), #3250 (mem_stats), + #3251 (verify_chunks) + +2004/07/30: Fabrice + - Applied patches: #3053 (configure), #3064 (bt share), #3146 (ed2k servers), + #3160 (emule mods), #3183 (config saved), #3235 (zlib), #3242 (Makefile), + #3245 (bt nuploaders), #3246 (bt cookies) + - Added src/networks/donkey/donkeyProtoKademlia.ml. Rewritting DonkeyOvernet + to fix the implementation of Overnet, and to make it usable for Kademlia. + +2004/07/29: Fabrice + - CommonSwarming: re-implemented chunk duplication. + 2004/07/29: Fabrice (version 2.5.22 = 2.6pre4, tag release-2-5-22) - Fixed a bug in number of sources computation. diff -Nur ./distrib/Todo.txt ../mldonkey/distrib/Todo.txt --- ./distrib/Todo.txt Thu Jul 29 12:32:40 2004 +++ ../mldonkey/distrib/Todo.txt Wed Aug 4 18:59:26 2004 @@ -10,6 +10,16 @@ the downloaded size to decrease instead of increasing. We should not maybe allow verification during this phase to have a correct computation. * When a file is cancelled, remove all the downloaders immediatly. + * What currently happens with common chunks ? + * Why aren't file_sources.ini sources loaded on startup ? + * Remove this error message: + Exception Failure("Unix32.read on destroyed FD") in send_small_block + ERROR: Client source can not be NOne + * a lot of Unexpected UDP message: + UDP QUERY LOCATIONS: 34AAEA22BB6344AC0AC2AEB5D50D6B0D + * in Edonkey: we should be able to activate/desactivate + Servers/Overnet/Kademlia, and know, for each of them, whether we + are connected or not (in particular for Overnet/Kademlia). BUGS: diff -Nur ./distrib/docs/CVS/Entries ../mldonkey/distrib/docs/CVS/Entries --- ./distrib/docs/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/docs/CVS/Entries Mon Sep 13 21:51:24 2004 @@ -0,0 +1,5 @@ +/mlchat/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/mldonkey/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/mldonkey_gui/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/mldonkey_gui2/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +D diff -Nur ./distrib/docs/CVS/Repository ../mldonkey/distrib/docs/CVS/Repository --- ./distrib/docs/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/docs/CVS/Repository Mon Sep 13 21:51:23 2004 @@ -0,0 +1 @@ +mldonkey/distrib/docs diff -Nur ./distrib/docs/CVS/Root ../mldonkey/distrib/docs/CVS/Root --- ./distrib/docs/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/docs/CVS/Root Mon Sep 13 21:51:23 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/docs/CVS/Tag ../mldonkey/distrib/docs/CVS/Tag --- ./distrib/docs/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/docs/CVS/Tag Mon Sep 13 21:51:25 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/ed2k_mozilla/CVS/Entries ../mldonkey/distrib/ed2k_mozilla/CVS/Entries --- ./distrib/ed2k_mozilla/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/CVS/Entries Mon Sep 13 21:58:28 2004 @@ -0,0 +1,3 @@ +/README/1.5/Wed Aug 4 18:39:32 2004//Trelease-2-5-23 +/mldonkey_protocol_handler-1.4.xpi/1.1/Sat Jul 17 23:26:03 2004//Trelease-2-5-23 +D/src//// diff -Nur ./distrib/ed2k_mozilla/CVS/Repository ../mldonkey/distrib/ed2k_mozilla/CVS/Repository --- ./distrib/ed2k_mozilla/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/CVS/Repository Mon Sep 13 21:51:25 2004 @@ -0,0 +1 @@ +mldonkey/distrib/ed2k_mozilla diff -Nur ./distrib/ed2k_mozilla/CVS/Root ../mldonkey/distrib/ed2k_mozilla/CVS/Root --- ./distrib/ed2k_mozilla/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/CVS/Root Mon Sep 13 21:51:25 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/ed2k_mozilla/CVS/Tag ../mldonkey/distrib/ed2k_mozilla/CVS/Tag --- ./distrib/ed2k_mozilla/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/CVS/Tag Mon Sep 13 21:51:26 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/ed2k_mozilla/src/CVS/Entries ../mldonkey/distrib/ed2k_mozilla/src/CVS/Entries --- ./distrib/ed2k_mozilla/src/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/CVS/Entries Mon Sep 13 21:58:28 2004 @@ -0,0 +1,4 @@ +/contents.rdf/1.2/Sun Jun 8 12:48:08 2003//Trelease-2-5-23 +/install.js/1.5/Wed Aug 4 18:39:32 2004//Trelease-2-5-23 +/install.rdf/1.1/Sat Jul 17 23:26:03 2004//Trelease-2-5-23 +D/components//// diff -Nur ./distrib/ed2k_mozilla/src/CVS/Repository ../mldonkey/distrib/ed2k_mozilla/src/CVS/Repository --- ./distrib/ed2k_mozilla/src/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/CVS/Repository Mon Sep 13 21:51:26 2004 @@ -0,0 +1 @@ +mldonkey/distrib/ed2k_mozilla/src diff -Nur ./distrib/ed2k_mozilla/src/CVS/Root ../mldonkey/distrib/ed2k_mozilla/src/CVS/Root --- ./distrib/ed2k_mozilla/src/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/CVS/Root Mon Sep 13 21:51:26 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/ed2k_mozilla/src/CVS/Tag ../mldonkey/distrib/ed2k_mozilla/src/CVS/Tag --- ./distrib/ed2k_mozilla/src/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/CVS/Tag Mon Sep 13 21:51:28 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/ed2k_mozilla/src/components/CVS/Entries ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Entries --- ./distrib/ed2k_mozilla/src/components/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Entries Mon Sep 13 21:51:28 2004 @@ -0,0 +1,2 @@ +/ed2kprotocol.js/1.1/Sat Jul 17 23:26:03 2004//Trelease-2-5-23 +D diff -Nur ./distrib/ed2k_mozilla/src/components/CVS/Repository ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Repository --- ./distrib/ed2k_mozilla/src/components/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Repository Mon Sep 13 21:51:28 2004 @@ -0,0 +1 @@ +mldonkey/distrib/ed2k_mozilla/src/components diff -Nur ./distrib/ed2k_mozilla/src/components/CVS/Root ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Root --- ./distrib/ed2k_mozilla/src/components/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Root Mon Sep 13 21:51:28 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/ed2k_mozilla/src/components/CVS/Tag ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Tag --- ./distrib/ed2k_mozilla/src/components/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_mozilla/src/components/CVS/Tag Mon Sep 13 21:51:29 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/ed2k_submit/CVS/Entries ../mldonkey/distrib/ed2k_submit/CVS/Entries --- ./distrib/ed2k_submit/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_submit/CVS/Entries Mon Sep 13 21:51:30 2004 @@ -0,0 +1,5 @@ +/README.MLdonkeySubmit/1.1/Thu Mar 28 13:01:00 2002//Trelease-2-5-23 +/ed2k.protocol/1.3/Tue Mar 4 21:56:10 2003//Trelease-2-5-23 +/mldonkey/1.1/Thu Mar 28 13:01:00 2002//Trelease-2-5-23 +/mldonkey_submit/1.3/Mon Mar 3 21:03:34 2003//Trelease-2-5-23 +D diff -Nur ./distrib/ed2k_submit/CVS/Repository ../mldonkey/distrib/ed2k_submit/CVS/Repository --- ./distrib/ed2k_submit/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_submit/CVS/Repository Mon Sep 13 21:51:29 2004 @@ -0,0 +1 @@ +mldonkey/distrib/ed2k_submit diff -Nur ./distrib/ed2k_submit/CVS/Root ../mldonkey/distrib/ed2k_submit/CVS/Root --- ./distrib/ed2k_submit/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_submit/CVS/Root Mon Sep 13 21:51:29 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/ed2k_submit/CVS/Tag ../mldonkey/distrib/ed2k_submit/CVS/Tag --- ./distrib/ed2k_submit/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/ed2k_submit/CVS/Tag Mon Sep 13 21:51:30 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/html_themes/CVS/Entries ../mldonkey/distrib/html_themes/CVS/Entries --- ./distrib/html_themes/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/CVS/Entries Mon Sep 13 21:58:27 2004 @@ -0,0 +1,2 @@ +D/ease//// +D/old//// diff -Nur ./distrib/html_themes/CVS/Repository ../mldonkey/distrib/html_themes/CVS/Repository --- ./distrib/html_themes/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/CVS/Repository Mon Sep 13 21:51:31 2004 @@ -0,0 +1 @@ +mldonkey/distrib/html_themes diff -Nur ./distrib/html_themes/CVS/Root ../mldonkey/distrib/html_themes/CVS/Root --- ./distrib/html_themes/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/CVS/Root Mon Sep 13 21:51:31 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/html_themes/CVS/Tag ../mldonkey/distrib/html_themes/CVS/Tag --- ./distrib/html_themes/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/CVS/Tag Mon Sep 13 21:51:31 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./distrib/html_themes/ease/CVS/Entries ../mldonkey/distrib/html_themes/ease/CVS/Entries --- ./distrib/html_themes/ease/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/ease/CVS/Entries Mon Sep 13 21:51:35 2004 @@ -0,0 +1,9 @@ +/commands.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/dh.css/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/dheader.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/di.js/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/frames.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/h.css/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/header.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/i.js/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +D diff -Nur ./distrib/html_themes/ease/CVS/Repository ../mldonkey/distrib/html_themes/ease/CVS/Repository --- ./distrib/html_themes/ease/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/ease/CVS/Repository Mon Sep 13 21:51:31 2004 @@ -0,0 +1 @@ +mldonkey/distrib/html_themes/ease diff -Nur ./distrib/html_themes/ease/CVS/Root ../mldonkey/distrib/html_themes/ease/CVS/Root --- ./distrib/html_themes/ease/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/ease/CVS/Root Mon Sep 13 21:51:31 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/html_themes/ease/CVS/Tag ../mldonkey/distrib/html_themes/ease/CVS/Tag --- ./distrib/html_themes/ease/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/ease/CVS/Tag Mon Sep 13 21:51:35 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/html_themes/old/CVS/Entries ../mldonkey/distrib/html_themes/old/CVS/Entries --- ./distrib/html_themes/old/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/old/CVS/Entries Mon Sep 13 21:51:40 2004 @@ -0,0 +1,9 @@ +/commands.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/dh.css/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/dheader.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/di.js/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/frames.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/h.css/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/header.html/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/i.js/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +D diff -Nur ./distrib/html_themes/old/CVS/Repository ../mldonkey/distrib/html_themes/old/CVS/Repository --- ./distrib/html_themes/old/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/old/CVS/Repository Mon Sep 13 21:51:36 2004 @@ -0,0 +1 @@ +mldonkey/distrib/html_themes/old diff -Nur ./distrib/html_themes/old/CVS/Root ../mldonkey/distrib/html_themes/old/CVS/Root --- ./distrib/html_themes/old/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/old/CVS/Root Mon Sep 13 21:51:36 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/html_themes/old/CVS/Tag ../mldonkey/distrib/html_themes/old/CVS/Tag --- ./distrib/html_themes/old/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/html_themes/old/CVS/Tag Mon Sep 13 21:51:40 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./distrib/i18n/CVS/Entries ../mldonkey/distrib/i18n/CVS/Entries --- ./distrib/i18n/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/i18n/CVS/Entries Mon Sep 13 21:51:48 2004 @@ -0,0 +1,20 @@ +/gui_messages.ini.catalan/1.2/Fri Nov 21 14:13:21 2003//Trelease-2-5-23 +/gui_messages.ini.de/1.1/Wed Oct 23 09:54:57 2002//Trelease-2-5-23 +/gui_messages.ini.dutch/1.1/Mon Dec 1 23:40:43 2003//Trelease-2-5-23 +/gui_messages.ini.en/1.1/Wed Oct 23 09:54:57 2002//Trelease-2-5-23 +/gui_messages.ini.fr/1.1/Wed Oct 23 09:54:57 2002//Trelease-2-5-23 +/gui_messages.ini.fr.noaccents/1.1/Wed Oct 23 09:54:57 2002//Trelease-2-5-23 +/gui_messages.ini.ga/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/gui_messages.ini.pt_BR/1.1/Thu Mar 13 00:44:25 2003//Trelease-2-5-23 +/gui_messages.ini.sp/1.1/Thu Feb 20 00:00:16 2003//Trelease-2-5-23 +/gui_messages.ini.sv/1.2/Sun May 25 00:29:50 2003//Trelease-2-5-23 +/mlnet_strings.catalan/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.de/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.dutch/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.fr/1.2/Wed Feb 4 00:21:45 2004//Trelease-2-5-23 +/mlnet_strings.fr.noaccents/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.ga/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.pt_BR/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.sp/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/mlnet_strings.sv/1.1/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +D diff -Nur ./distrib/i18n/CVS/Repository ../mldonkey/distrib/i18n/CVS/Repository --- ./distrib/i18n/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/i18n/CVS/Repository Mon Sep 13 21:51:40 2004 @@ -0,0 +1 @@ +mldonkey/distrib/i18n diff -Nur ./distrib/i18n/CVS/Root ../mldonkey/distrib/i18n/CVS/Root --- ./distrib/i18n/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/i18n/CVS/Root Mon Sep 13 21:51:40 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./distrib/i18n/CVS/Tag ../mldonkey/distrib/i18n/CVS/Tag --- ./distrib/i18n/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/distrib/i18n/CVS/Tag Mon Sep 13 21:51:49 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./docs/CVS/Entries ../mldonkey/docs/CVS/Entries --- ./docs/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/CVS/Entries Mon Sep 13 21:58:27 2004 @@ -0,0 +1,22 @@ +/BitTorrent.html/1.1/Wed Apr 2 05:52:24 2003//Trelease-2-5-23 +/OpenFT-nodes.txt/1.2/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/OpenFT.txt/1.5/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/dc.txt/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/dc1.txt/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/dc2.html/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/dc3.txt/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/gnutella.txt/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/gnutella_protocol_0.4.pdf/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/http-1.1.txt/1.1/Wed Apr 2 05:52:24 2003//Trelease-2-5-23 +/interface_protocol.txt/1.2/Sat Sep 21 14:46:52 2002//Trelease-2-5-23 +/mldonkey-design.tex/1.1/Wed Apr 2 05:52:24 2003//Trelease-2-5-23 +/napster-protocol.txt/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/napster-undocumented-messages.txt/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/opennap-readme.txt/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/overnet.txt/1.1/Wed Jan 22 23:31:52 2003//Trelease-2-5-23 +/slavanap.txt/1.1/Sun Aug 4 22:59:28 2002//Trelease-2-5-23 +/soulseek_protocol.html/1.1/Wed Apr 2 05:52:24 2003//Trelease-2-5-23 +/uri-res.txt/1.1/Wed Apr 2 05:52:24 2003//Trelease-2-5-23 +/uri.txt/1.1/Wed Apr 2 05:52:24 2003//Trelease-2-5-23 +D/developers//// +D/images//// diff -Nur ./docs/CVS/Repository ../mldonkey/docs/CVS/Repository --- ./docs/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/CVS/Repository Mon Sep 13 21:51:49 2004 @@ -0,0 +1 @@ +mldonkey/docs diff -Nur ./docs/CVS/Root ../mldonkey/docs/CVS/Root --- ./docs/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/CVS/Root Mon Sep 13 21:51:49 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./docs/CVS/Tag ../mldonkey/docs/CVS/Tag --- ./docs/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/CVS/Tag Mon Sep 13 21:51:56 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./docs/developers/CVS/Entries ../mldonkey/docs/developers/CVS/Entries --- ./docs/developers/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/developers/CVS/Entries Mon Sep 13 21:51:59 2004 @@ -0,0 +1,5 @@ +/Developers.txt/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/interface_protocol.txt/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkey-design.tex/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/sources_tree.txt/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./docs/developers/CVS/Repository ../mldonkey/docs/developers/CVS/Repository --- ./docs/developers/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/developers/CVS/Repository Mon Sep 13 21:51:57 2004 @@ -0,0 +1 @@ +mldonkey/docs/developers diff -Nur ./docs/developers/CVS/Root ../mldonkey/docs/developers/CVS/Root --- ./docs/developers/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/developers/CVS/Root Mon Sep 13 21:51:57 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./docs/developers/CVS/Tag ../mldonkey/docs/developers/CVS/Tag --- ./docs/developers/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/developers/CVS/Tag Mon Sep 13 21:51:59 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./docs/images/CVS/Entries ../mldonkey/docs/images/CVS/Entries --- ./docs/images/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/images/CVS/Entries Mon Sep 13 21:52:02 2004 @@ -0,0 +1,9 @@ +/c2c.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/c2cf.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/c2s.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/c2sf.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/s2c.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/s2cf.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/s2s.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/s2sf.gif/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +D diff -Nur ./docs/images/CVS/Repository ../mldonkey/docs/images/CVS/Repository --- ./docs/images/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/images/CVS/Repository Mon Sep 13 21:51:59 2004 @@ -0,0 +1 @@ +mldonkey/docs/images diff -Nur ./docs/images/CVS/Root ../mldonkey/docs/images/CVS/Root --- ./docs/images/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/images/CVS/Root Mon Sep 13 21:51:59 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./docs/images/CVS/Tag ../mldonkey/docs/images/CVS/Tag --- ./docs/images/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/docs/images/CVS/Tag Mon Sep 13 21:52:03 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/CVS/Entries ../mldonkey/icons/CVS/Entries --- ./icons/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/CVS/Entries Mon Sep 13 21:58:24 2004 @@ -0,0 +1,9 @@ +/.cvsignore/1.1/Wed Dec 11 10:56:00 2002//Trelease-2-5-23 +D/big//// +D/dcgui//// +D/giFT//// +D/hwd//// +D/kde//// +D/lopster//// +D/small//// +D/tux//// diff -Nur ./icons/CVS/Repository ../mldonkey/icons/CVS/Repository --- ./icons/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/CVS/Repository Mon Sep 13 21:52:10 2004 @@ -0,0 +1 @@ +mldonkey/icons diff -Nur ./icons/CVS/Root ../mldonkey/icons/CVS/Root --- ./icons/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/CVS/Root Mon Sep 13 21:52:10 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/CVS/Tag ../mldonkey/icons/CVS/Tag --- ./icons/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/CVS/Tag Mon Sep 13 21:52:11 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/big/CVS/Entries ../mldonkey/icons/big/CVS/Entries --- ./icons/big/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/big/CVS/Entries Mon Sep 13 21:52:18 2004 @@ -0,0 +1,20 @@ +/.cvsignore/1.3/Sun Dec 15 16:06:07 2002//Trelease-2-5-23 +/add_to_friends.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/cancel.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/connect.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/connect_more.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/disconnect.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/download.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/edit_mp3.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/extend_search.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/get_format.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/local_search.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/preview.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/refres.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/save.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/save_all.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/save_as.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/trash.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/verify_chunks.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/view_users.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +D diff -Nur ./icons/big/CVS/Repository ../mldonkey/icons/big/CVS/Repository --- ./icons/big/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/big/CVS/Repository Mon Sep 13 21:52:11 2004 @@ -0,0 +1 @@ +mldonkey/icons/big diff -Nur ./icons/big/CVS/Root ../mldonkey/icons/big/CVS/Root --- ./icons/big/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/big/CVS/Root Mon Sep 13 21:52:11 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/big/CVS/Tag ../mldonkey/icons/big/CVS/Tag --- ./icons/big/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/big/CVS/Tag Mon Sep 13 21:52:18 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/dcgui/CVS/Entries ../mldonkey/icons/dcgui/CVS/Entries --- ./icons/dcgui/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/dcgui/CVS/Entries Mon Sep 13 21:52:20 2004 @@ -0,0 +1,7 @@ +/icon_operator.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/icon_user.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/icon_user_away.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/offline.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/online.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/world2.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +D diff -Nur ./icons/dcgui/CVS/Repository ../mldonkey/icons/dcgui/CVS/Repository --- ./icons/dcgui/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/dcgui/CVS/Repository Mon Sep 13 21:52:18 2004 @@ -0,0 +1 @@ +mldonkey/icons/dcgui diff -Nur ./icons/dcgui/CVS/Root ../mldonkey/icons/dcgui/CVS/Root --- ./icons/dcgui/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/dcgui/CVS/Root Mon Sep 13 21:52:18 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/dcgui/CVS/Tag ../mldonkey/icons/dcgui/CVS/Tag --- ./icons/dcgui/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/dcgui/CVS/Tag Mon Sep 13 21:52:21 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/giFT/CVS/Entries ../mldonkey/icons/giFT/CVS/Entries --- ./icons/giFT/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/giFT/CVS/Entries Mon Sep 13 21:52:24 2004 @@ -0,0 +1,12 @@ +/binary.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/document2.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/html.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/image.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/local.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/mime_empty.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/network.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/pdf.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/sound.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/unknown.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/video.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +D diff -Nur ./icons/giFT/CVS/Repository ../mldonkey/icons/giFT/CVS/Repository --- ./icons/giFT/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/giFT/CVS/Repository Mon Sep 13 21:52:21 2004 @@ -0,0 +1 @@ +mldonkey/icons/giFT diff -Nur ./icons/giFT/CVS/Root ../mldonkey/icons/giFT/CVS/Root --- ./icons/giFT/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/giFT/CVS/Root Mon Sep 13 21:52:21 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/giFT/CVS/Tag ../mldonkey/icons/giFT/CVS/Tag --- ./icons/giFT/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/giFT/CVS/Tag Mon Sep 13 21:52:24 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/hwd/CVS/Entries ../mldonkey/icons/hwd/CVS/Entries --- ./icons/hwd/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/hwd/CVS/Entries Mon Sep 13 21:52:42 2004 @@ -0,0 +1,42 @@ +/acbutton.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/batterybutton.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/batterycharged.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/batterylow.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/bolt.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/displayswitch.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/economy.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/fan.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/fanoff.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/fanon.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/fullbulb.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/fullpower.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/hand.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/hibernate.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/highbulb.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/highvolume.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/hwsetup.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/keys.ppm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/lowbulb.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/lowpower.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/lowvolume.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/mediumbulb.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/mediumvolume.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/minus.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/minusdisabled.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/password.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/plus.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/plusdisabled.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/resumeoff.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/resumeon.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/speakeroff.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/suspend.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/tdocked.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/thotswap.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/toshiba.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/tuxtime.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/userbulb.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/userpower.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/warning.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/wmtuxtime.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/wmtuxtime_mask.xbm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +D diff -Nur ./icons/hwd/CVS/Repository ../mldonkey/icons/hwd/CVS/Repository --- ./icons/hwd/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/hwd/CVS/Repository Mon Sep 13 21:52:24 2004 @@ -0,0 +1 @@ +mldonkey/icons/hwd diff -Nur ./icons/hwd/CVS/Root ../mldonkey/icons/hwd/CVS/Root --- ./icons/hwd/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/hwd/CVS/Root Mon Sep 13 21:52:24 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/hwd/CVS/Tag ../mldonkey/icons/hwd/CVS/Tag --- ./icons/hwd/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/hwd/CVS/Tag Mon Sep 13 21:52:43 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/kde/CVS/Entries ../mldonkey/icons/kde/CVS/Entries --- ./icons/kde/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/kde/CVS/Entries Mon Sep 13 21:52:58 2004 @@ -0,0 +1,46 @@ +/.cvsignore/1.2/Tue Feb 18 00:26:25 2003//Trelease-2-5-23 +/add_to_friends.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/add_to_friends_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/cancel.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/cancel_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/connect.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/connect_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/connect_more.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/connect_more_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/disconnect.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/disconnect_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/display_all_servers.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/display_all_servers_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/download.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/download_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/edit_mp3.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/edit_mp3_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/extend_search.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/extend_search_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/get_format.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/get_format_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/local_search.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/local_search_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/pause_resume.xpm/1.2/Tue Feb 18 00:16:25 2003//Trelease-2-5-23 +/pause_resume_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/preview.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/preview_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/refres.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/refres_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/remove_all_friends.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/remove_all_friends_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/save.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/save_all.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/save_all_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/save_as.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/save_as_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/save_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/search.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/search_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/trash.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/trash_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/verify_chunks.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/verify_chunks_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +/view_users.xpm/1.1/Sat Dec 21 17:28:43 2002//Trelease-2-5-23 +/view_users_mini.xpm/1.1/Tue Feb 18 00:18:42 2003//Trelease-2-5-23 +D diff -Nur ./icons/kde/CVS/Repository ../mldonkey/icons/kde/CVS/Repository --- ./icons/kde/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/kde/CVS/Repository Mon Sep 13 21:52:43 2004 @@ -0,0 +1 @@ +mldonkey/icons/kde diff -Nur ./icons/kde/CVS/Root ../mldonkey/icons/kde/CVS/Root --- ./icons/kde/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/kde/CVS/Root Mon Sep 13 21:52:43 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/kde/CVS/Tag ../mldonkey/icons/kde/CVS/Tag --- ./icons/kde/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/kde/CVS/Tag Mon Sep 13 21:52:58 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/lopster/CVS/Entries ../mldonkey/icons/lopster/CVS/Entries --- ./icons/lopster/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/lopster/CVS/Entries Mon Sep 13 21:53:05 2004 @@ -0,0 +1,37 @@ +/arrowd.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/arrowl.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/arrowr.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/arrowu.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/book1.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/book2.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/bug.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/chat.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/d16x16.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/download.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/email.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/enemy.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/enemy2.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/folder.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/folder_open.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/forum.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/friend.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/home16b.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/hotlist.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/ignore.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/info.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/library.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/logo.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/logo1.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/mini-folder.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/project.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/search.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/server.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/speedgray.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/speedgreen.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/speedred.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/speedyellow.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/statistic.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/transfer.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/user1.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/user2.xpm/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +D diff -Nur ./icons/lopster/CVS/Repository ../mldonkey/icons/lopster/CVS/Repository --- ./icons/lopster/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/lopster/CVS/Repository Mon Sep 13 21:52:58 2004 @@ -0,0 +1 @@ +mldonkey/icons/lopster diff -Nur ./icons/lopster/CVS/Root ../mldonkey/icons/lopster/CVS/Root --- ./icons/lopster/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/lopster/CVS/Root Mon Sep 13 21:52:58 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/lopster/CVS/Tag ../mldonkey/icons/lopster/CVS/Tag --- ./icons/lopster/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/lopster/CVS/Tag Mon Sep 13 21:53:05 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/small/CVS/Entries ../mldonkey/icons/small/CVS/Entries --- ./icons/small/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/small/CVS/Entries Mon Sep 13 21:53:09 2004 @@ -0,0 +1,20 @@ +/.cvsignore/1.1/Wed Dec 11 00:03:43 2002//Trelease-2-5-23 +/add_to_friends_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/cancel_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/connect_more_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/connect_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/disconnect_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/download_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/edit_mp3_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/extend_search_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/get_format_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/local_search_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/preview_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/refres_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/save_all_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/save_as_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/save_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/trash_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/verify_chunks_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +/view_users_small.xpm/1.1/Mon Dec 9 21:29:28 2002//Trelease-2-5-23 +D diff -Nur ./icons/small/CVS/Repository ../mldonkey/icons/small/CVS/Repository --- ./icons/small/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/small/CVS/Repository Mon Sep 13 21:53:05 2004 @@ -0,0 +1 @@ +mldonkey/icons/small diff -Nur ./icons/small/CVS/Root ../mldonkey/icons/small/CVS/Root --- ./icons/small/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/small/CVS/Root Mon Sep 13 21:53:05 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/small/CVS/Tag ../mldonkey/icons/small/CVS/Tag --- ./icons/small/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/small/CVS/Tag Mon Sep 13 21:53:09 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./icons/tux/CVS/Entries ../mldonkey/icons/tux/CVS/Entries --- ./icons/tux/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/tux/CVS/Entries Mon Sep 13 21:53:38 2004 @@ -0,0 +1,117 @@ +/.cvsignore/1.1/Wed Nov 19 15:25:47 2003//Trelease-2-5-23 +/about.xpm/1.1/Tue Nov 18 10:42:00 2003//Trelease-2-5-23 +/add_server.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/add_server_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/add_shared_directory.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/add_shared_directory_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/album_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/blacklistedhost.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/bt.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/bt_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/close_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/close_search_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/complex_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/connect_m.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/connect_n.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/connect_y.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/contact_user.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/dc.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/dc_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/download_directory.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/download_directory_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/downloading.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/ed2k.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/ed2k_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/exit.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/extend_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/extend_search_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/fasttrack.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/files_listed.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/freedb_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/friend_user.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/ftt_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/gnut_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/gnutella.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/gui.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/im.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/imdb_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/jigle_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/kill_core.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/local_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/local_search_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_binary.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_cdimage.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_debian.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_html.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_images.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_java.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_pdf.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_postscript.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_real.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_recycled.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_rpm.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_shellscript.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_soffice.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_sound.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_source.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_spreadsheet.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_tex.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_text.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_tgz.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_unknown.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_video.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mimetype_wordprocessing.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mld_tux_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/movie_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/mp3_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nap_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/napster.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_console_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_console_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_downloads_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_downloads_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_friends_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_friends_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_graphs_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_graphs_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_networks_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_networks_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_rooms_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_rooms_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_search_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_search_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_servers_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_servers_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_uploads_menu.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/nbk_uploads_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/normal_user.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/priority_0.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/priority_1.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/priority_2.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/removedhost.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/server_c.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/server_c_high.xpm/1.1/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/server_c_low.xpm/1.1/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/server_ci.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/server_nc.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/settings.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/sharereactor_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/slsk.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/slsk_net_on.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/splash_screen.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/stop_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/stop_search_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/submit_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/submit_search_mini.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/subscribe_search.xpm/1.1/Tue Nov 18 10:42:01 2003//Trelease-2-5-23 +/subscribe_search_mini.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/toggle_display_all_servers.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/toggle_display_all_servers_mini.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/trash.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/trash_mini.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/tree_closed.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/tree_opened.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/unknown.xpm/1.1/Tue Nov 18 10:42:02 2003//Trelease-2-5-23 +/view_pending_slots.xpm/1.1/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/view_pending_slots_mini.xpm/1.1/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +D diff -Nur ./icons/tux/CVS/Repository ../mldonkey/icons/tux/CVS/Repository --- ./icons/tux/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/tux/CVS/Repository Mon Sep 13 21:53:09 2004 @@ -0,0 +1 @@ +mldonkey/icons/tux diff -Nur ./icons/tux/CVS/Root ../mldonkey/icons/tux/CVS/Root --- ./icons/tux/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/tux/CVS/Root Mon Sep 13 21:53:09 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./icons/tux/CVS/Tag ../mldonkey/icons/tux/CVS/Tag --- ./icons/tux/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/icons/tux/CVS/Tag Mon Sep 13 21:53:38 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./packages/CVS/Entries ../mldonkey/packages/CVS/Entries --- ./packages/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/CVS/Entries Mon Sep 13 21:58:23 2004 @@ -0,0 +1,3 @@ +D/debian//// +D/rpm//// +D/windows//// diff -Nur ./packages/CVS/Repository ../mldonkey/packages/CVS/Repository --- ./packages/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/CVS/Repository Mon Sep 13 21:53:41 2004 @@ -0,0 +1 @@ +mldonkey/packages diff -Nur ./packages/CVS/Root ../mldonkey/packages/CVS/Root --- ./packages/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/CVS/Root Mon Sep 13 21:53:41 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./packages/CVS/Tag ../mldonkey/packages/CVS/Tag --- ./packages/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/CVS/Tag Mon Sep 13 21:53:42 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./packages/debian/CVS/Entries ../mldonkey/packages/debian/CVS/Entries --- ./packages/debian/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/debian/CVS/Entries Mon Sep 13 21:53:42 2004 @@ -0,0 +1,12 @@ +/changelog/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/control/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/copyright/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/dirs/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-byte.sh/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-cvs-byte.install/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-cvs-gui-byte.install/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-cvs-gui.install/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-cvs.install/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey.sh/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/rules/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +D diff -Nur ./packages/debian/CVS/Repository ../mldonkey/packages/debian/CVS/Repository --- ./packages/debian/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/debian/CVS/Repository Mon Sep 13 21:53:42 2004 @@ -0,0 +1 @@ +mldonkey/packages/debian diff -Nur ./packages/debian/CVS/Root ../mldonkey/packages/debian/CVS/Root --- ./packages/debian/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/debian/CVS/Root Mon Sep 13 21:53:42 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./packages/debian/CVS/Tag ../mldonkey/packages/debian/CVS/Tag --- ./packages/debian/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/debian/CVS/Tag Mon Sep 13 21:53:42 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./packages/rpm/CVS/Entries ../mldonkey/packages/rpm/CVS/Entries --- ./packages/rpm/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/rpm/CVS/Entries Mon Sep 13 21:53:45 2004 @@ -0,0 +1,11 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/Makefile/1.6/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/Makefile.in/1.1/Thu May 8 07:21:47 2003//Trelease-2-5-23 +/mldonkey-icon-16.png/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-icon-32.png/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey-icon-48.png/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey.init/1.2/Fri May 9 06:12:30 2003//Trelease-2-5-23 +/mldonkey.sh/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mldonkey.spec.in/1.3/Sun May 11 16:01:52 2003//Trelease-2-5-23 +/mldonkey.sysconfig/1.2/Fri May 9 06:12:30 2003//Trelease-2-5-23 +D diff -Nur ./packages/rpm/CVS/Repository ../mldonkey/packages/rpm/CVS/Repository --- ./packages/rpm/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/rpm/CVS/Repository Mon Sep 13 21:53:42 2004 @@ -0,0 +1 @@ +mldonkey/packages/rpm diff -Nur ./packages/rpm/CVS/Root ../mldonkey/packages/rpm/CVS/Root --- ./packages/rpm/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/rpm/CVS/Root Mon Sep 13 21:53:42 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./packages/rpm/CVS/Tag ../mldonkey/packages/rpm/CVS/Tag --- ./packages/rpm/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/rpm/CVS/Tag Mon Sep 13 21:53:45 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./packages/rpm/Makefile ../mldonkey/packages/rpm/Makefile --- ./packages/rpm/Makefile Thu Jul 29 12:32:42 2004 +++ ../mldonkey/packages/rpm/Makefile Wed Aug 4 18:59:26 2004 @@ -1,4 +1,3 @@ -# Generated automatically from Makefile.in by configure. ## cvs -d:pserver:anoncvs@subversions.gnu.org:/cvsroot/mldonkey login diff -Nur ./packages/windows/CVS/Entries ../mldonkey/packages/windows/CVS/Entries --- ./packages/windows/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/windows/CVS/Entries Mon Sep 13 21:53:48 2004 @@ -0,0 +1,7 @@ +/.cvsignore/1.1/Thu May 1 05:55:27 2003//Trelease-2-5-23 +/MldonkeyEASE.nsi/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mld.ico/1.1/Thu May 1 05:55:27 2003//Trelease-2-5-23 +/mldonkey.bmp/1.1/Thu May 1 05:55:27 2003//Trelease-2-5-23 +/mlfixed2.reg/1.1/Sun Apr 20 09:56:58 2003//Trelease-2-5-23 +/mlnet.nsi.in/1.2/Thu Apr 24 12:45:45 2003//Trelease-2-5-23 +D diff -Nur ./packages/windows/CVS/Repository ../mldonkey/packages/windows/CVS/Repository --- ./packages/windows/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/windows/CVS/Repository Mon Sep 13 21:53:45 2004 @@ -0,0 +1 @@ +mldonkey/packages/windows diff -Nur ./packages/windows/CVS/Root ../mldonkey/packages/windows/CVS/Root --- ./packages/windows/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/windows/CVS/Root Mon Sep 13 21:53:45 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./packages/windows/CVS/Tag ../mldonkey/packages/windows/CVS/Tag --- ./packages/windows/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/packages/windows/CVS/Tag Mon Sep 13 21:53:48 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./patches/CVS/Entries ../mldonkey/patches/CVS/Entries --- ./patches/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/patches/CVS/Entries Mon Sep 13 21:53:48 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.5/Fri Nov 21 14:36:57 2003//Trelease-2-5-23 +/Makefile.ocamldoc/1.1/Tue Sep 10 04:22:08 2002//Trelease-2-5-23 +D diff -Nur ./patches/CVS/Repository ../mldonkey/patches/CVS/Repository --- ./patches/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/patches/CVS/Repository Mon Sep 13 21:53:48 2004 @@ -0,0 +1 @@ +mldonkey/patches diff -Nur ./patches/CVS/Root ../mldonkey/patches/CVS/Root --- ./patches/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/patches/CVS/Root Mon Sep 13 21:53:48 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./patches/CVS/Tag ../mldonkey/patches/CVS/Tag --- ./patches/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/patches/CVS/Tag Mon Sep 13 21:53:48 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/CVS/Entries ../mldonkey/src/CVS/Entries --- ./src/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,8 @@ +D/applets//// +D/config//// +D/daemon//// +D/gtk//// +D/gtk2//// +D/im//// +D/networks//// +D/utils//// diff -Nur ./src/CVS/Repository ../mldonkey/src/CVS/Repository --- ./src/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/CVS/Repository Mon Sep 13 21:53:50 2004 @@ -0,0 +1 @@ +mldonkey/src diff -Nur ./src/CVS/Root ../mldonkey/src/CVS/Root --- ./src/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/CVS/Root Mon Sep 13 21:53:50 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/CVS/Tag ../mldonkey/src/CVS/Tag --- ./src/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/CVS/Tag Mon Sep 13 21:53:50 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/applets/CVS/Entries ../mldonkey/src/applets/CVS/Entries --- ./src/applets/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,3 @@ +D/api//// +D/gnome//// +D/kde//// diff -Nur ./src/applets/CVS/Repository ../mldonkey/src/applets/CVS/Repository --- ./src/applets/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/CVS/Repository Mon Sep 13 21:53:50 2004 @@ -0,0 +1 @@ +mldonkey/src/applets diff -Nur ./src/applets/CVS/Root ../mldonkey/src/applets/CVS/Root --- ./src/applets/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/CVS/Root Mon Sep 13 21:53:50 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/applets/CVS/Tag ../mldonkey/src/applets/CVS/Tag --- ./src/applets/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/CVS/Tag Mon Sep 13 21:53:50 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/applets/api/CVS/Entries ../mldonkey/src/applets/api/CVS/Entries --- ./src/applets/api/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/api/CVS/Entries Mon Sep 13 21:53:52 2004 @@ -0,0 +1,6 @@ +/endianess.c/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/endianess.h/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_protocol.c/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_protocol.h/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/main.c/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/applets/api/CVS/Repository ../mldonkey/src/applets/api/CVS/Repository --- ./src/applets/api/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/api/CVS/Repository Mon Sep 13 21:53:51 2004 @@ -0,0 +1 @@ +mldonkey/src/applets/api diff -Nur ./src/applets/api/CVS/Root ../mldonkey/src/applets/api/CVS/Root --- ./src/applets/api/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/api/CVS/Root Mon Sep 13 21:53:51 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/applets/api/CVS/Tag ../mldonkey/src/applets/api/CVS/Tag --- ./src/applets/api/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/api/CVS/Tag Mon Sep 13 21:53:52 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/applets/gnome/CVS/Entries ../mldonkey/src/applets/gnome/CVS/Entries --- ./src/applets/gnome/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/gnome/CVS/Entries Mon Sep 13 21:53:53 2004 @@ -0,0 +1,6 @@ +/Makefile/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/edonkey.xpm/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkey_applet.c/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkey_applet.desktop/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkey_applet.gnorba/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/applets/gnome/CVS/Repository ../mldonkey/src/applets/gnome/CVS/Repository --- ./src/applets/gnome/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/gnome/CVS/Repository Mon Sep 13 21:53:52 2004 @@ -0,0 +1 @@ +mldonkey/src/applets/gnome diff -Nur ./src/applets/gnome/CVS/Root ../mldonkey/src/applets/gnome/CVS/Root --- ./src/applets/gnome/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/gnome/CVS/Root Mon Sep 13 21:53:52 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/applets/gnome/CVS/Tag ../mldonkey/src/applets/gnome/CVS/Tag --- ./src/applets/gnome/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/gnome/CVS/Tag Mon Sep 13 21:53:53 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/applets/kde/CVS/Entries ../mldonkey/src/applets/kde/CVS/Entries --- ./src/applets/kde/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,14 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/Makefile.am/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/Makefile.cvs/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/authors/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/config.h.bot/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/configure.in.in/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/copying/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/install/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/install-sh/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/missing/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mkinstalldirs/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/readme/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D/admin//// +D/src//// diff -Nur ./src/applets/kde/CVS/Repository ../mldonkey/src/applets/kde/CVS/Repository --- ./src/applets/kde/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/CVS/Repository Mon Sep 13 21:53:53 2004 @@ -0,0 +1 @@ +mldonkey/src/applets/kde diff -Nur ./src/applets/kde/CVS/Root ../mldonkey/src/applets/kde/CVS/Root --- ./src/applets/kde/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/CVS/Root Mon Sep 13 21:53:53 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/applets/kde/CVS/Tag ../mldonkey/src/applets/kde/CVS/Tag --- ./src/applets/kde/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/CVS/Tag Mon Sep 13 21:53:53 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/applets/kde/admin/CVS/Entries ../mldonkey/src/applets/kde/admin/CVS/Entries --- ./src/applets/kde/admin/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/admin/CVS/Entries Mon Sep 13 21:53:59 2004 @@ -0,0 +1,23 @@ +/ChangeLog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/Makefile.common/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/acinclude.m4.in/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/am_edit/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/am_edit.py/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/conf.change.pl/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/config.guess/1.2/Fri Feb 6 07:31:07 2004//Trelease-2-5-23 +/config.pl/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/config.sub/1.2/Fri Feb 6 07:31:07 2004//Trelease-2-5-23 +/configure.in.min/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/debianrules/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/depcomp/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/install-sh/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/libtool.m4.in/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/ltcf-c.sh/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/ltcf-cxx.sh/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/ltcf-gcj.sh/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/ltconfig/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/ltmain.sh/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/missing/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mkinstalldirs/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/ylwrap/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/applets/kde/admin/CVS/Repository ../mldonkey/src/applets/kde/admin/CVS/Repository --- ./src/applets/kde/admin/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/admin/CVS/Repository Mon Sep 13 21:53:53 2004 @@ -0,0 +1 @@ +mldonkey/src/applets/kde/admin diff -Nur ./src/applets/kde/admin/CVS/Root ../mldonkey/src/applets/kde/admin/CVS/Root --- ./src/applets/kde/admin/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/admin/CVS/Root Mon Sep 13 21:53:53 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/applets/kde/admin/CVS/Tag ../mldonkey/src/applets/kde/admin/CVS/Tag --- ./src/applets/kde/admin/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/admin/CVS/Tag Mon Sep 13 21:53:59 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/applets/kde/src/CVS/Entries ../mldonkey/src/applets/kde/src/CVS/Entries --- ./src/applets/kde/src/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/src/CVS/Entries Mon Sep 13 21:54:00 2004 @@ -0,0 +1,6 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/Makefile.am/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkeyapplet.cpp/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkeyapplet.desktop/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mldonkeyapplet.h/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/applets/kde/src/CVS/Repository ../mldonkey/src/applets/kde/src/CVS/Repository --- ./src/applets/kde/src/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/src/CVS/Repository Mon Sep 13 21:53:59 2004 @@ -0,0 +1 @@ +mldonkey/src/applets/kde/src diff -Nur ./src/applets/kde/src/CVS/Root ../mldonkey/src/applets/kde/src/CVS/Root --- ./src/applets/kde/src/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/src/CVS/Root Mon Sep 13 21:53:59 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/applets/kde/src/CVS/Tag ../mldonkey/src/applets/kde/src/CVS/Tag --- ./src/applets/kde/src/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/applets/kde/src/CVS/Tag Mon Sep 13 21:54:00 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/config/CVS/Entries ../mldonkey/src/config/CVS/Entries --- ./src/config/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,2 @@ +D/mingw//// +D/unix//// diff -Nur ./src/config/CVS/Repository ../mldonkey/src/config/CVS/Repository --- ./src/config/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/CVS/Repository Mon Sep 13 21:54:00 2004 @@ -0,0 +1 @@ +mldonkey/src/config diff -Nur ./src/config/CVS/Root ../mldonkey/src/config/CVS/Root --- ./src/config/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/CVS/Root Mon Sep 13 21:54:00 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/config/CVS/Tag ../mldonkey/src/config/CVS/Tag --- ./src/config/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/CVS/Tag Mon Sep 13 21:54:00 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/config/mingw/CVS/Entries ../mldonkey/src/config/mingw/CVS/Entries --- ./src/config/mingw/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/mingw/CVS/Entries Mon Sep 13 21:54:01 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/mlUnix.ml/1.2/Sun Feb 8 22:58:17 2004//Trelease-2-5-23 +/os_stubs_c.c/1.4/Fri May 9 06:12:30 2003//Trelease-2-5-23 +D diff -Nur ./src/config/mingw/CVS/Repository ../mldonkey/src/config/mingw/CVS/Repository --- ./src/config/mingw/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/mingw/CVS/Repository Mon Sep 13 21:54:01 2004 @@ -0,0 +1 @@ +mldonkey/src/config/mingw diff -Nur ./src/config/mingw/CVS/Root ../mldonkey/src/config/mingw/CVS/Root --- ./src/config/mingw/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/mingw/CVS/Root Mon Sep 13 21:54:01 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/config/mingw/CVS/Tag ../mldonkey/src/config/mingw/CVS/Tag --- ./src/config/mingw/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/mingw/CVS/Tag Mon Sep 13 21:54:01 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/config/unix/CVS/Entries ../mldonkey/src/config/unix/CVS/Entries --- ./src/config/unix/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/unix/CVS/Entries Mon Sep 13 21:54:02 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/mlUnix.ml/1.4/Fri Apr 16 17:14:52 2004//Trelease-2-5-23 +/os_stubs_c.c/1.5/Fri Apr 16 17:14:53 2004//Trelease-2-5-23 +D diff -Nur ./src/config/unix/CVS/Repository ../mldonkey/src/config/unix/CVS/Repository --- ./src/config/unix/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/unix/CVS/Repository Mon Sep 13 21:54:01 2004 @@ -0,0 +1 @@ +mldonkey/src/config/unix diff -Nur ./src/config/unix/CVS/Root ../mldonkey/src/config/unix/CVS/Root --- ./src/config/unix/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/unix/CVS/Root Mon Sep 13 21:54:01 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/config/unix/CVS/Tag ../mldonkey/src/config/unix/CVS/Tag --- ./src/config/unix/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/config/unix/CVS/Tag Mon Sep 13 21:54:02 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/daemon/CVS/Entries ../mldonkey/src/daemon/CVS/Entries --- ./src/daemon/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,3 @@ +D/chat//// +D/common//// +D/driver//// diff -Nur ./src/daemon/CVS/Repository ../mldonkey/src/daemon/CVS/Repository --- ./src/daemon/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/CVS/Repository Mon Sep 13 21:54:02 2004 @@ -0,0 +1 @@ +mldonkey/src/daemon diff -Nur ./src/daemon/CVS/Root ../mldonkey/src/daemon/CVS/Root --- ./src/daemon/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/CVS/Root Mon Sep 13 21:54:02 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/daemon/CVS/Tag ../mldonkey/src/daemon/CVS/Tag --- ./src/daemon/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/CVS/Tag Mon Sep 13 21:54:03 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/daemon/chat/CVS/Entries ../mldonkey/src/daemon/chat/CVS/Entries --- ./src/daemon/chat/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/chat/CVS/Entries Mon Sep 13 21:54:05 2004 @@ -0,0 +1,16 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/chat_app.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_args.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_config.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_data.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_icons.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_main.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_messages.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_misc.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_options.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_options.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_proto.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/chat_types.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mlchat.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/mlchat.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/daemon/chat/CVS/Repository ../mldonkey/src/daemon/chat/CVS/Repository --- ./src/daemon/chat/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/chat/CVS/Repository Mon Sep 13 21:54:03 2004 @@ -0,0 +1 @@ +mldonkey/src/daemon/chat diff -Nur ./src/daemon/chat/CVS/Root ../mldonkey/src/daemon/chat/CVS/Root --- ./src/daemon/chat/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/chat/CVS/Root Mon Sep 13 21:54:03 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/daemon/chat/CVS/Tag ../mldonkey/src/daemon/chat/CVS/Tag --- ./src/daemon/chat/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/chat/CVS/Tag Mon Sep 13 21:54:05 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/daemon/common/CVS/Entries ../mldonkey/src/daemon/common/CVS/Entries --- ./src/daemon/common/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/common/CVS/Entries Mon Sep 13 21:54:20 2004 @@ -0,0 +1,55 @@ +/.cvsignore/1.2/Fri Nov 21 14:35:19 2003//Trelease-2-5-23 +/commonBitzi.ml/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonChat.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/commonChunks.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonChunks.mli/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonClient.ml/1.10/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonClient.mli/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonComplexOptions.ml/1.17/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonComplexOptions.mli/1.7/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonDownloads.ml/1.9/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonEvent.ml/1.2/Thu Nov 20 16:43:13 2003//Trelease-2-5-23 +/commonFile.ml/1.21/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonFile.mli/1.6/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonGlobals.ml/1.21/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonHasher.ml/1.3/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/commonHasher.mli/1.2/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/commonHasher_c.c/1.4/Sun Mar 7 09:34:24 2004//Trelease-2-5-23 +/commonHosts.ml/1.1/Wed Jun 4 16:14:00 2003//Trelease-2-5-23 +/commonHosts.mli/1.1/Wed Jun 4 16:14:00 2003//Trelease-2-5-23 +/commonInteractive.ml/1.20/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonMain.ml/1.2/Sun May 11 16:01:53 2003//Trelease-2-5-23 +/commonMessages.ml/1.14/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonMultimedia.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/commonMultimedia.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/commonNetwork.ml/1.12/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonNetwork.mli/1.8/Wed Feb 4 18:58:16 2004//Trelease-2-5-23 +/commonOptions.ml/1.42/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonResult.ml/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonResult.mli/1.3/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonRoom.ml/1.3/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonRoom.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/commonSearch.ml/1.9/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonSearch.mli/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonServer.ml/1.7/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonShared.ml/1.10/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonShared.mli/1.2/Fri Jan 30 06:11:05 2004//Trelease-2-5-23 +/commonSources.ml/1.10/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonSources.mli/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonSwarming.ml/1.20/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonSwarming.mli/1.15/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonTypes.ml/1.29/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/commonUploads.ml/1.17/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/commonUser.ml/1.3/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/commonWeb.ml/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/giftDecoding.ml/1.2/Thu Nov 20 16:43:14 2003//Trelease-2-5-23 +/giftEncoding.ml/1.3/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/giftLexer.mll/1.2/Thu Nov 20 16:43:14 2003//Trelease-2-5-23 +/giftParser.mly/1.2/Thu Nov 20 16:43:14 2003//Trelease-2-5-23 +/guiDecoding.ml/1.27/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/guiDecoding.mli/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/guiEncoding.ml/1.26/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/guiEncoding.mli/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/guiProto.ml/1.9/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/guiTypes.ml/1.16/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/daemon/common/CVS/Repository ../mldonkey/src/daemon/common/CVS/Repository --- ./src/daemon/common/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/common/CVS/Repository Mon Sep 13 21:54:06 2004 @@ -0,0 +1 @@ +mldonkey/src/daemon/common diff -Nur ./src/daemon/common/CVS/Root ../mldonkey/src/daemon/common/CVS/Root --- ./src/daemon/common/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/common/CVS/Root Mon Sep 13 21:54:06 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/daemon/common/CVS/Tag ../mldonkey/src/daemon/common/CVS/Tag --- ./src/daemon/common/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/common/CVS/Tag Mon Sep 13 21:54:20 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/daemon/common/commonComplexOptions.ml ../mldonkey/src/daemon/common/commonComplexOptions.ml --- ./src/daemon/common/commonComplexOptions.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonComplexOptions.ml Wed Aug 4 18:59:26 2004 @@ -149,6 +149,7 @@ | String s -> string_to_value s | Addr _ -> assert false | Fint64 i -> int64_to_value i + | Uint16 n | Uint8 n -> int_to_value n ) module ResultOption = struct diff -Nur ./src/daemon/common/commonDownloads.ml ../mldonkey/src/daemon/common/commonDownloads.ml --- ./src/daemon/common/commonDownloads.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonDownloads.ml Wed Aug 4 18:59:26 2004 @@ -100,7 +100,7 @@ *) buf_used b b.len; if d.download_pos > file_downloaded file then - add_file_downloaded (as_file_impl file) + add_file_downloaded file (Int64.sub d.download_pos (file_downloaded file)); if file_downloaded file = file_size file then file_complete d diff -Nur ./src/daemon/common/commonFile.ml ../mldonkey/src/daemon/common/commonFile.ml --- ./src/daemon/common/commonFile.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonFile.ml Wed Aug 4 18:59:26 2004 @@ -391,7 +391,8 @@ impl.impl_file_last_rate <- rate; rate -let add_file_downloaded impl n = +let add_file_downloaded file n = + let impl = as_file_impl file in impl.impl_file_downloaded <- Int64.add impl.impl_file_downloaded n; (* you cannot remove received bytes *) if Int64.compare n Int64.zero > 0 then diff -Nur ./src/daemon/common/commonFile.mli ../mldonkey/src/daemon/common/commonFile.mli --- ./src/daemon/common/commonFile.mli Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonFile.mli Wed Aug 4 18:59:26 2004 @@ -95,7 +95,7 @@ val last : (int64 * int) list -> int64 * int val sample_timer : unit -> unit val file_download_rate : 'a file_impl -> float -val add_file_downloaded : 'a file_impl -> Int64.t -> unit +val add_file_downloaded : CommonTypes.file -> Int64.t -> unit val files_by_num : unit val file_downloaders : CommonTypes.file -> CommonTypes.ui_conn -> int -> bool val colored_chunks : int array -> string diff -Nur ./src/daemon/common/commonGlobals.ml ../mldonkey/src/daemon/common/commonGlobals.ml --- ./src/daemon/common/commonGlobals.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonGlobals.ml Wed Aug 4 18:59:26 2004 @@ -400,6 +400,7 @@ lprintf " \"%s\" = " (tag_name tag); begin match tag.tag_value with + | Uint16 n | Uint8 n -> lprintf "%d" n | Uint64 n -> lprintf "%s" (Int64.to_string n) | Fint64 n -> lprintf "%s" (Int64.to_string n) | Addr ip -> lprintf "%s" (Ip.to_string ip) @@ -415,6 +416,7 @@ Printf.fprintf oc "%s = " (tag_name tag); begin match tag.tag_value with + | Uint8 n | Uint16 n -> Printf.fprintf oc "%d" n | Uint64 n -> Printf.fprintf oc "%s" (Int64.to_string n) | Fint64 n -> Printf.fprintf oc "%s" (Int64.to_string n) | Addr ip -> Printf.fprintf oc "%s" (Ip.to_string ip) @@ -430,6 +432,7 @@ Printf.bprintf buf "%s = " (tag_name tag); begin match tag.tag_value with + | Uint8 n | Uint16 n -> Printf.bprintf buf "%d" n | Uint64 n -> Printf.bprintf buf "%s" (Int64.to_string n) | Fint64 n -> Printf.bprintf buf "%s" (Int64.to_string n) | Addr ip -> Printf.bprintf buf "%s" (Ip.to_string ip) @@ -646,18 +649,33 @@ Uint64 i | Fint64 i -> f (Int64.to_int i) | String _ -> () | Addr _ -> () + | Uint16 n | Uint8 n -> f n let for_int64_tag tag f = match tag.tag_value with Uint64 i | Fint64 i -> f i | String _ -> () | Addr _ -> () + | Uint8 n | Uint16 n -> f (Int64.of_int n) +let for_two_int16_tag tag f = + match tag.tag_value with + Uint64 i | Fint64 i -> + let i1 = Int64.to_int (right64 i 16) in + let i0 = Int64.to_int i in + let i0 = i0 land 0xffff in + let i1 = i1 land 0xffff in + f i0 i1 + | String _ -> () + | Addr _ -> () + | Uint8 n | Uint16 n -> f n 0 + let for_string_tag tag f = match tag.tag_value with Uint64 _ | Fint64 _ -> () | String s -> f s | Addr _ -> () + | Uint16 _ | Uint8 _ -> () (* Name,FrameHeight *) let html_mods_styles = ref diff -Nur ./src/daemon/common/commonMessages.ml ../mldonkey/src/daemon/common/commonMessages.ml --- ./src/daemon/common/commonMessages.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonMessages.ml Wed Aug 4 18:59:26 2004 @@ -486,7 +486,7 @@ onClick=\"mSub('output','gstats')\">Gnutella Memory +onClick=\"mSub('output','mem_stats 0')\">Memory Sources diff -Nur ./src/daemon/common/commonOptions.ml ../mldonkey/src/daemon/common/commonOptions.ml --- ./src/daemon/common/commonOptions.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonOptions.ml Wed Aug 4 18:59:26 2004 @@ -368,6 +368,16 @@ ["enable_overnet"] "Set to true if you also want mldonkey to run as an overnet client (enable_donkey must be true)" bool_option false + +let enable_kademlia = define_option current_section + ["enable_kademlia"] + "Set to true if you also want mldonkey to run as an kademlia client (enable_donkey must be true, and only experimental)" + bool_option false + +let enable_servers = define_option current_section + ["enable_servers"] + "Set to true if you also want mldonkey to run with edonkey servers (enable_donkey must be true, and only experimental)" + bool_option true let enable_bittorrent = define_option current_section ["enable_bittorrent"] diff -Nur ./src/daemon/common/commonSwarming.ml ../mldonkey/src/daemon/common/commonSwarming.ml --- ./src/daemon/common/commonSwarming.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonSwarming.ml Wed Aug 4 18:59:26 2004 @@ -53,6 +53,7 @@ module CommonTypes : sig type file type client + type uid_type end open CommonTypes @@ -67,6 +68,7 @@ val file_best_name : file -> string val file_state : file -> file_state val file_fd : file -> Unix32.t + val add_file_downloaded : file -> int64 -> unit end end) = struct @@ -108,6 +110,8 @@ type t = { t_file : file; + + mutable t_checksums : uid_type array; mutable t_size : int64; mutable t_block_size : int64; @@ -174,6 +178,11 @@ mutable up_ranges : (int64 * int64 * range) list; } +type chunk = { + chunk_uid : uid_type; + chunk_size : int64; + } + let basic_write _ _ _ _ = () @@ -252,6 +261,8 @@ t_file = file; + t_checksums = [||]; + t_size = size; t_block_size = chunk_size; t_range_size = range_size; @@ -274,7 +285,7 @@ HS.add swarmers_by_num t; t - + (*************************************************************************) (* *) (* clear_uploader_ranges *) @@ -497,6 +508,11 @@ (*************************************************************************) let set_completed_block t i = + begin + match t.t_blocks.(i) with + PartialBlock b -> close_ranges t b.block_ranges + | _ -> () + end; match t.t_blocks.(i) with CompleteBlock | VerifiedBlock -> () | _ -> @@ -535,15 +551,7 @@ let block_end = block_begin ++ t.t_block_size in let block_end = min block_end t.t_size in if f i block_begin block_end then begin - begin - match t.t_blocks.(i) with - PartialBlock b -> - t.t_ncomplete_blocks <- t.t_ncomplete_blocks + 1; - close_ranges t b.block_ranges - | EmptyBlock -> - t.t_ncomplete_blocks <- t.t_ncomplete_blocks + 1; - | _ -> () - end; + set_toverify_block t i; set_verified_block t i end else begin @@ -707,6 +715,17 @@ | Some rr -> f rr *) + +(*************************************************************************) +(* *) +(* add_all_downloaded *) +(* *) +(*************************************************************************) + +let add_all_downloaded t old_downloaded = + let new_downloaded = t.t_downloaded in + if new_downloaded <> old_downloaded then + add_file_downloaded t.t_file (new_downloaded -- old_downloaded) (*************************************************************************) (* *) @@ -759,14 +778,6 @@ (*************************************************************************) (* *) -(* recompute_downloaded (internal) *) -(* *) -(*************************************************************************) - -let recompute_downloaded t = () - -(*************************************************************************) -(* *) (* set_present_block (internal) *) (* *) (*************************************************************************) @@ -797,6 +808,8 @@ (*************************************************************************) let set_present t chunks = + + let old_downloaded = t.t_downloaded in apply_intervals t (fun i block_begin block_end chunk_begin chunk_end -> (* lprintf "interval: %Ld-%Ld in block %d [%Ld-%Ld]" chunk_begin chunk_end i block_begin block_end; *) @@ -822,8 +835,8 @@ (* lprintf " Other\n"; *) () ) chunks; - recompute_downloaded () - + add_all_downloaded t old_downloaded + (*************************************************************************) (* *) (* end_present (internal) *) @@ -1487,76 +1500,83 @@ (Int64.to_string file_end); (* TODO: check that everything we received has been required *) - - List.iter (fun (_,_,r) -> - if r.range_current_begin < file_end && - r.range_end > file_begin then begin - - let new_current_begin = min file_end r.range_end in - let written_len = new_current_begin -- r.range_current_begin in - - let t = up.up_t in + let t = up.up_t in + let old_downloaded = t.t_downloaded in + try + + List.iter (fun (_,_,r) -> + if r.range_current_begin < file_end && + r.range_end > file_begin then begin + + let new_current_begin = min file_end r.range_end in + let written_len = new_current_begin -- r.range_current_begin in + + + begin + match file_state t.t_file with + | FilePaused + | FileAborted _ + | FileCancelled -> () + | _ -> + + let string_pos = string_begin + + Int64.to_int (r.range_current_begin -- file_begin) in + let string_length = Int64.to_int written_len in + + if + string_pos < 0 || + string_pos < string_begin || + string_len > string_length then begin + lprintf "[ERROR CommonSwarming]: BAD WRITE\n"; + lprintf " received: file_pos:%Ld string:%d %d\n" + file_begin string_begin string_len; + lprintf " ranges:\n"; + List.iter (fun (_,_,r) -> + lprintf " range: %Ld-[%Ld]-%Ld" + r.range_begin r.range_current_begin + r.range_end; + (match r.range_next with + None -> () + | Some rr -> + lprintf " next: %Ld" rr.range_begin); + (match r.range_prev with + None -> () + | Some rr -> + lprintf " prev: %Ld" rr.range_begin); + lprintf "\n"; + let b = r.range_block in + lprintf " block: %d[%c] %Ld-%Ld [%s]" + b.block_num + t.t_verified_bitmap.[b.block_num] + b.block_begin b.block_end + (match t.t_blocks.(b.block_num) with + EmptyBlock -> "empty" + | PartialBlock _ -> "partial" + | CompleteBlock -> "complete" + | VerifiedBlock -> "verified" + ); + let br = b.block_ranges in + lprintf " first range: %Ld(%Ld)" + br.range_begin + (br.range_end -- br.range_current_begin); + lprintf "\n"; + ) up.up_ranges; + end else + t.t_write + r.range_current_begin + s string_pos string_length; + end; + range_received r r.range_current_begin file_end; - begin - match file_state t.t_file with - | FilePaused - | FileAborted _ - | FileCancelled -> () - | _ -> - - let string_pos = string_begin + - Int64.to_int (r.range_current_begin -- file_begin) in - let string_length = Int64.to_int written_len in - - if - string_pos < 0 || - string_pos < string_begin || - string_len > string_length then begin - lprintf "[ERROR CommonSwarming]: BAD WRITE\n"; - lprintf " received: file_pos:%Ld string:%d %d\n" - file_begin string_begin string_len; - lprintf " ranges:\n"; - List.iter (fun (_,_,r) -> - lprintf " range: %Ld-[%Ld]-%Ld" - r.range_begin r.range_current_begin - r.range_end; - (match r.range_next with - None -> () - | Some rr -> - lprintf " next: %Ld" rr.range_begin); - (match r.range_prev with - None -> () - | Some rr -> - lprintf " prev: %Ld" rr.range_begin); - lprintf "\n"; - let b = r.range_block in - lprintf " block: %d[%c] %Ld-%Ld [%s]" - b.block_num - t.t_verified_bitmap.[b.block_num] - b.block_begin b.block_end - (match t.t_blocks.(b.block_num) with - EmptyBlock -> "empty" - | PartialBlock _ -> "partial" - | CompleteBlock -> "complete" - | VerifiedBlock -> "verified" - ); - let br = b.block_ranges in - lprintf " first range: %Ld(%Ld)" - br.range_begin - (br.range_end -- br.range_current_begin); - lprintf "\n"; - ) up.up_ranges; - end else - t.t_write - r.range_current_begin - s string_pos string_length; - end; - range_received r r.range_current_begin file_end; - - end - ) up.up_ranges; - clean_ranges up - + end + ) up.up_ranges; + clean_ranges up; + add_all_downloaded t old_downloaded + with e -> + add_all_downloaded t old_downloaded; + raise e + + (*************************************************************************) (* *) (* present_chunks *) @@ -1668,6 +1688,77 @@ (*************************************************************************) (* *) +(* propagate_chunk *) +(* *) +(*************************************************************************) + +let propagate_chunk t1 ts pos1 size = + List.iter (fun (t2, i2, pos2) -> + lprintf "Should propagate chunk from %s %Ld to %s %Ld [%Ld]\n" + (file_best_name t1.t_file) pos1 + (file_best_name t2.t_file) pos2 size; + Unix32.copy_chunk (file_fd t1.t_file) (file_fd t2.t_file) + pos1 pos2 (Int64.to_int size); + + let old_downloaded = t2.t_downloaded in + set_toverify_block t2 i2; + set_verified_block t2 i2; + add_all_downloaded t2 old_downloaded + + ) ts + +(*************************************************************************) +(* *) +(* duplicate_chunks *) +(* *) +(*************************************************************************) + +(* This is the least aggressive version. I was thinking of computing +checksums for all possible schemas for all files, to be able to +move chunks from/to BT files from/to ED2k files. *) + +let duplicate_chunks () = + let chunks = Hashtbl.create 100 in + HS.iter (fun t -> + let rec iter i len pos bsize size = + if i < len then + let c = { + chunk_uid = t.t_checksums.(i); + chunk_size = min (size -- pos) bsize; + } in + let (has, has_not) = try + Hashtbl.find chunks c + with _ -> + let sw = (ref [], ref []) in + Hashtbl.add chunks c sw; + sw + in + let sw = if t.t_verified_bitmap.[i] = '3' then has else has_not in + sw := (t, i, pos) :: !sw; + iter (i+1) len (pos ++ bsize) bsize size + in + iter 0 (Array.length t.t_checksums) zero t.t_block_size t.t_size + ) swarmers_by_num; + Hashtbl.iter (fun c (has, has_not) -> + match !has, !has_not with + _ , [] + | [], _ -> () + | (t, _, pos) :: _, ts -> + propagate_chunk t ts pos c.chunk_size + ) chunks + + +(*************************************************************************) +(* *) +(* set_checksums *) +(* *) +(*************************************************************************) + +let set_checksums t tab = match t with + None -> () | Some t -> t.t_checksums <- tab + +(*************************************************************************) +(* *) (* set_verified_bitmap *) (* *) (*************************************************************************) @@ -1687,8 +1778,7 @@ set_completed_block t i; verify_block t i | _ -> () - done; - recompute_downloaded t + done (*************************************************************************) (* *) @@ -1865,6 +1955,8 @@ with e -> ()); + add_all_downloaded t zero; + () (*************************************************************************) @@ -1911,7 +2003,8 @@ (* Compute an approximation of the storage used by this module *) - let _ = +let _ = + BasicSocket.add_infinite_timer 300. duplicate_chunks; Heap.add_memstat "CommonSources" (fun level buf -> let counter = ref 0 in let nchunks = ref 0 in diff -Nur ./src/daemon/common/commonSwarming.mli ../mldonkey/src/daemon/common/commonSwarming.mli --- ./src/daemon/common/commonSwarming.mli Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonSwarming.mli Wed Aug 4 18:59:26 2004 @@ -24,6 +24,7 @@ module CommonTypes : sig type file type client + type uid_type end open CommonTypes @@ -38,6 +39,7 @@ val file_best_name : file -> string val file_state : file -> file_state val file_fd : file -> Unix32.t + val add_file_downloaded : file -> int64 -> unit end end) : sig @@ -110,6 +112,7 @@ (* raise Exit if one block checksum has been computed *) val verify_one_block : t -> unit + val set_checksums : t option -> CommonTypes.uid_type array -> unit val compute_last_seen : t -> int array val print_uploaders : t -> unit diff -Nur ./src/daemon/common/commonTypes.ml ../mldonkey/src/daemon/common/commonTypes.ml --- ./src/daemon/common/commonTypes.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/commonTypes.ml Wed Aug 4 18:59:26 2004 @@ -267,9 +267,11 @@ type tag_value = | Uint64 of int64 -| Fint64 of int64 (* Why do we keep that one ?? *) +| Fint64 of int64 (* Why do we keep that one, it is supposed to be a float ? *) | String of string | Addr of Ip.t +| Uint16 of int +| Uint8 of int type tag = { mutable tag_name : string; @@ -683,7 +685,8 @@ Uint64 i| Fint64 i -> Int64.to_string i | Addr x -> Ip.to_string x | String s -> s - + | Uint16 n | Uint8 n -> string_of_int n + type arg_handler = ui_conn -> string type arg_kind = Arg_none of arg_handler diff -Nur ./src/daemon/common/guiDecoding.ml ../mldonkey/src/daemon/common/guiDecoding.ml --- ./src/daemon/common/guiDecoding.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/guiDecoding.ml Wed Aug 4 18:59:26 2004 @@ -258,6 +258,8 @@ | 2 -> let s, pos = get_string s (pos+1) in String s, pos | 3 -> Addr (get_ip s (pos+1)), pos+5 + | 4 -> Uint16 (get_int16 s (pos+1)), pos+3 + | 5 -> Uint8 (get_uint8 s (pos+1)), pos+2 | _ -> assert false in { tag_name = name; tag_value = value }, pos diff -Nur ./src/daemon/common/guiEncoding.ml ../mldonkey/src/daemon/common/guiEncoding.ml --- ./src/daemon/common/guiEncoding.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/common/guiEncoding.ml Wed Aug 4 18:59:26 2004 @@ -172,7 +172,9 @@ | Fint64 s -> buf_int8 buf 1; buf_int64_32 buf s | String s -> buf_int8 buf 2; buf_string buf s | Addr ip -> buf_int8 buf 3; buf_ip buf ip - + | Uint16 n -> buf_int8 buf 4; buf_int16 buf n + | Uint8 n -> buf_int8 buf 5; buf_int8 buf n + let buf_host_state proto buf t = if proto < 12 then buf_int8 buf ( diff -Nur ./src/daemon/driver/CVS/Entries ../mldonkey/src/daemon/driver/CVS/Entries --- ./src/daemon/driver/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/driver/CVS/Entries Mon Sep 13 21:54:22 2004 @@ -0,0 +1,11 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/driverCommands.ml/1.35/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/driverCommands.mli/1.3/Wed Feb 4 18:58:17 2004//Trelease-2-5-23 +/driverControlers.ml/1.23/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/driverControlers.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/driverInteractive.ml/1.22/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/driverInterface.ml/1.20/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/driverInterface.mli/1.2/Thu Nov 20 16:43:16 2003//Trelease-2-5-23 +/driverLink.ml/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/driverMain.ml/1.26/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +D diff -Nur ./src/daemon/driver/CVS/Repository ../mldonkey/src/daemon/driver/CVS/Repository --- ./src/daemon/driver/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/driver/CVS/Repository Mon Sep 13 21:54:20 2004 @@ -0,0 +1 @@ +mldonkey/src/daemon/driver diff -Nur ./src/daemon/driver/CVS/Root ../mldonkey/src/daemon/driver/CVS/Root --- ./src/daemon/driver/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/driver/CVS/Root Mon Sep 13 21:54:20 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/daemon/driver/CVS/Tag ../mldonkey/src/daemon/driver/CVS/Tag --- ./src/daemon/driver/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/daemon/driver/CVS/Tag Mon Sep 13 21:54:22 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/daemon/driver/driverCommands.ml ../mldonkey/src/daemon/driver/driverCommands.ml --- ./src/daemon/driver/driverCommands.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/driver/driverCommands.ml Wed Aug 4 18:59:26 2004 @@ -2031,7 +2031,7 @@ match args with [arg] -> let num = int_of_string arg in - if o.conn_output = HTML then +(* if o.conn_output = HTML then *) List.iter (fun file -> if (as_file_impl file).impl_file_num = num then begin diff -Nur ./src/daemon/driver/driverInteractive.ml ../mldonkey/src/daemon/driver/driverInteractive.ml --- ./src/daemon/driver/driverInteractive.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/driver/driverInteractive.ml Wed Aug 4 18:59:26 2004 @@ -187,16 +187,22 @@ value onclick end +let initialization_completed = ref false + let save_config () = (try Unix32.flush () with e -> Printf2.lprintf "Exception %s while flushing\n" (Printexc2.to_string e) ); - Options.save_with_help downloads_ini; - CommonComplexOptions.save (); - networks_iter_all (fun r -> - List.iter (fun opfile -> - Options.save_with_help opfile - ) r.network_config_file); + if !initialization_completed then ( + Options.save_with_help downloads_ini; + CommonComplexOptions.save (); + networks_iter_all (fun r -> + List.iter (fun opfile -> + Options.save_with_help opfile + ) r.network_config_file); + ) else ( + Printf2.lprintf "Initialization not completed, bypassing state saving\n" + ); () let age_to_day date = diff -Nur ./src/daemon/driver/driverMain.ml ../mldonkey/src/daemon/driver/driverMain.ml --- ./src/daemon/driver/driverMain.ml Thu Jul 29 12:32:43 2004 +++ ../mldonkey/src/daemon/driver/driverMain.ml Wed Aug 4 18:59:26 2004 @@ -450,7 +450,7 @@ Options.prune_file downloads_ini; (* Options.prune_file downloads_expert_ini; *) - (try CommonWeb.load_web_infos () with _ -> ()); + add_timer 20. (fun _ -> try CommonWeb.load_web_infos () with _ -> ()); lprintf (_b "Welcome to MLdonkey client\n"); lprintf (_b "Check http://www.mldonkey.net/ for updates\n"); lprintf (_b "To command: telnet %s %d\n") @@ -503,6 +503,7 @@ end; if !!create_mlsubmit then save_mlsubmit_reg (); + DriverInteractive.initialization_completed := true; DriverInteractive.save_config (); Unix32.max_cache_size := MlUnix.max_filedescs diff -Nur ./src/gtk/CVS/Entries ../mldonkey/src/gtk/CVS/Entries --- ./src/gtk/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,9 @@ +D/chat//// +D/configwin//// +D/gpattern//// +D/gui//// +D/gui2//// +D/im//// +D/newgui//// +D/okey//// +D/progress//// diff -Nur ./src/gtk/CVS/Repository ../mldonkey/src/gtk/CVS/Repository --- ./src/gtk/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/CVS/Repository Mon Sep 13 21:54:22 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk diff -Nur ./src/gtk/CVS/Root ../mldonkey/src/gtk/CVS/Root --- ./src/gtk/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/CVS/Root Mon Sep 13 21:54:22 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/CVS/Tag ../mldonkey/src/gtk/CVS/Tag --- ./src/gtk/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/CVS/Tag Mon Sep 13 21:54:22 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/gtk/chat/CVS/Entries ../mldonkey/src/gtk/chat/CVS/Entries --- ./src/gtk/chat/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/chat/CVS/Entries Mon Sep 13 21:54:23 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/chat_gui.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/chat_gui_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/chat/CVS/Repository ../mldonkey/src/gtk/chat/CVS/Repository --- ./src/gtk/chat/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/chat/CVS/Repository Mon Sep 13 21:54:22 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/chat diff -Nur ./src/gtk/chat/CVS/Root ../mldonkey/src/gtk/chat/CVS/Root --- ./src/gtk/chat/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/chat/CVS/Root Mon Sep 13 21:54:22 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/chat/CVS/Tag ../mldonkey/src/gtk/chat/CVS/Tag --- ./src/gtk/chat/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/chat/CVS/Tag Mon Sep 13 21:54:23 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/configwin/CVS/Entries ../mldonkey/src/gtk/configwin/CVS/Entries --- ./src/gtk/configwin/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/configwin/CVS/Entries Mon Sep 13 21:54:24 2004 @@ -0,0 +1,7 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/configwin.ml/1.2/Sun Oct 12 18:29:36 2003//Trelease-2-5-23 +/configwin_ihm.ml/1.4/Fri Nov 28 17:45:44 2003//Trelease-2-5-23 +/configwin_messages.ml/1.2/Wed Feb 4 00:21:45 2004//Trelease-2-5-23 +/configwin_types.ml/1.2/Sun Oct 12 18:29:37 2003//Trelease-2-5-23 +/readme/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/gtk/configwin/CVS/Repository ../mldonkey/src/gtk/configwin/CVS/Repository --- ./src/gtk/configwin/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/configwin/CVS/Repository Mon Sep 13 21:54:23 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/configwin diff -Nur ./src/gtk/configwin/CVS/Root ../mldonkey/src/gtk/configwin/CVS/Root --- ./src/gtk/configwin/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/configwin/CVS/Root Mon Sep 13 21:54:23 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/configwin/CVS/Tag ../mldonkey/src/gtk/configwin/CVS/Tag --- ./src/gtk/configwin/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/configwin/CVS/Tag Mon Sep 13 21:54:24 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/gpattern/CVS/Entries ../mldonkey/src/gtk/gpattern/CVS/Entries --- ./src/gtk/gpattern/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gpattern/CVS/Entries Mon Sep 13 21:54:25 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/gpattern.ml/1.6/Sun Mar 7 09:34:25 2004//Trelease-2-5-23 +/gpattern.mli/1.2/Mon Nov 17 21:12:49 2003//Trelease-2-5-23 +D diff -Nur ./src/gtk/gpattern/CVS/Repository ../mldonkey/src/gtk/gpattern/CVS/Repository --- ./src/gtk/gpattern/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gpattern/CVS/Repository Mon Sep 13 21:54:25 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/gpattern diff -Nur ./src/gtk/gpattern/CVS/Root ../mldonkey/src/gtk/gpattern/CVS/Root --- ./src/gtk/gpattern/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gpattern/CVS/Root Mon Sep 13 21:54:25 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/gpattern/CVS/Tag ../mldonkey/src/gtk/gpattern/CVS/Tag --- ./src/gtk/gpattern/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gpattern/CVS/Tag Mon Sep 13 21:54:25 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/gui/CVS/Entries ../mldonkey/src/gtk/gui/CVS/Entries --- ./src/gtk/gui/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui/CVS/Entries Mon Sep 13 21:54:36 2004 @@ -0,0 +1,40 @@ +/.cvsignore/1.2/Sun May 11 16:06:34 2003//Trelease-2-5-23 +/gui_cdget.ml/1.5/Sun Mar 7 09:37:37 2004//Trelease-2-5-23 +/gui_cdget_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_columns.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_com.ml/1.8/Sun Mar 7 09:37:37 2004//Trelease-2-5-23 +/gui_com.mli/1.3/Thu Nov 20 16:43:16 2003//Trelease-2-5-23 +/gui_config.ml/1.6/Mon Feb 2 10:34:08 2004//Trelease-2-5-23 +/gui_console.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_console_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_downloads.ml/1.6/Fri Jan 30 06:11:05 2004//Trelease-2-5-23 +/gui_downloads_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_friends.ml/1.5/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/gui_friends_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_global.ml/1.4/Mon May 19 21:28:35 2003//Trelease-2-5-23 +/gui_help.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_help_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_installer.ml/1.2/Tue Dec 2 17:04:40 2003//Trelease-2-5-23 +/gui_installer_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_keys.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_main.ml/1.12/Sun Mar 7 09:37:37 2004//Trelease-2-5-23 +/gui_messages.ml/1.6/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_misc.ml/1.4/Mon Feb 2 10:34:08 2004//Trelease-2-5-23 +/gui_options.ml/1.4/Wed Jan 14 22:54:17 2004//Trelease-2-5-23 +/gui_progress.ml/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/gui_queries.ml/1.4/Fri Jan 30 06:11:05 2004//Trelease-2-5-23 +/gui_queries_base.ml/1.2/Sun May 11 16:06:34 2003//Trelease-2-5-23 +/gui_results.ml/1.3/Thu Jan 15 23:22:01 2004//Trelease-2-5-23 +/gui_results_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_rooms.ml/1.2/Thu Jan 15 23:22:01 2004//Trelease-2-5-23 +/gui_rooms_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_servers.ml/1.5/Thu Jan 15 23:22:01 2004//Trelease-2-5-23 +/gui_servers_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_starter.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_uploads.ml/1.3/Thu Jan 15 23:22:01 2004//Trelease-2-5-23 +/gui_uploads_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_users.ml/1.2/Thu Jan 15 23:22:01 2004//Trelease-2-5-23 +/gui_users_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui_window.ml/1.3/Mon Feb 2 10:34:08 2004//Trelease-2-5-23 +/gui_window_base.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/gtk/gui/CVS/Repository ../mldonkey/src/gtk/gui/CVS/Repository --- ./src/gtk/gui/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui/CVS/Repository Mon Sep 13 21:54:25 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/gui diff -Nur ./src/gtk/gui/CVS/Root ../mldonkey/src/gtk/gui/CVS/Root --- ./src/gtk/gui/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui/CVS/Root Mon Sep 13 21:54:25 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/gui/CVS/Tag ../mldonkey/src/gtk/gui/CVS/Tag --- ./src/gtk/gui/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui/CVS/Tag Mon Sep 13 21:54:36 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/gui2/CVS/Entries ../mldonkey/src/gtk/gui2/CVS/Entries --- ./src/gtk/gui2/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui2/CVS/Entries Mon Sep 13 21:54:39 2004 @@ -0,0 +1,14 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/gui2.zog/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_GList.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_config.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_handler.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_keys.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_main.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_messages.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_misc.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/gui2_options.ml/1.2/Tue Dec 2 17:04:41 2003//Trelease-2-5-23 +/gui2_options.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/myCList.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/myCList.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/gtk/gui2/CVS/Repository ../mldonkey/src/gtk/gui2/CVS/Repository --- ./src/gtk/gui2/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui2/CVS/Repository Mon Sep 13 21:54:36 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/gui2 diff -Nur ./src/gtk/gui2/CVS/Root ../mldonkey/src/gtk/gui2/CVS/Root --- ./src/gtk/gui2/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui2/CVS/Root Mon Sep 13 21:54:36 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/gui2/CVS/Tag ../mldonkey/src/gtk/gui2/CVS/Tag --- ./src/gtk/gui2/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/gui2/CVS/Tag Mon Sep 13 21:54:39 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/im/CVS/Entries ../mldonkey/src/gtk/im/CVS/Entries --- ./src/gtk/im/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/CVS/Entries Mon Sep 13 21:58:22 2004 @@ -0,0 +1,19 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im_main.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im_rooms.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imAccount.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imChat.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imEvent.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imIdentity.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imMain.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imOptions.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imProtocol.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imRoom.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imTypes.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D/icq//// +D/irc//// +D/msn//// +D/toc//// +D/yahoo//// diff -Nur ./src/gtk/im/CVS/Repository ../mldonkey/src/gtk/im/CVS/Repository --- ./src/gtk/im/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/CVS/Repository Mon Sep 13 21:54:39 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/im diff -Nur ./src/gtk/im/CVS/Root ../mldonkey/src/gtk/im/CVS/Root --- ./src/gtk/im/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/CVS/Root Mon Sep 13 21:54:39 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/im/CVS/Tag ../mldonkey/src/gtk/im/CVS/Tag --- ./src/gtk/im/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/CVS/Tag Mon Sep 13 21:54:41 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/im/icq/CVS/Entries ../mldonkey/src/gtk/im/icq/CVS/Entries --- ./src/gtk/im/icq/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/icq/CVS/Entries Mon Sep 13 21:54:42 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/icq.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/im/icq/CVS/Repository ../mldonkey/src/gtk/im/icq/CVS/Repository --- ./src/gtk/im/icq/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/icq/CVS/Repository Mon Sep 13 21:54:42 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/im/icq diff -Nur ./src/gtk/im/icq/CVS/Root ../mldonkey/src/gtk/im/icq/CVS/Root --- ./src/gtk/im/icq/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/icq/CVS/Root Mon Sep 13 21:54:41 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/im/icq/CVS/Tag ../mldonkey/src/gtk/im/icq/CVS/Tag --- ./src/gtk/im/icq/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/icq/CVS/Tag Mon Sep 13 21:54:42 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/im/irc/CVS/Entries ../mldonkey/src/gtk/im/irc/CVS/Entries --- ./src/gtk/im/irc/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/irc/CVS/Entries Mon Sep 13 21:54:43 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/irc.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/im/irc/CVS/Repository ../mldonkey/src/gtk/im/irc/CVS/Repository --- ./src/gtk/im/irc/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/irc/CVS/Repository Mon Sep 13 21:54:42 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/im/irc diff -Nur ./src/gtk/im/irc/CVS/Root ../mldonkey/src/gtk/im/irc/CVS/Root --- ./src/gtk/im/irc/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/irc/CVS/Root Mon Sep 13 21:54:42 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/im/irc/CVS/Tag ../mldonkey/src/gtk/im/irc/CVS/Tag --- ./src/gtk/im/irc/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/irc/CVS/Tag Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/im/msn/CVS/Entries ../mldonkey/src/gtk/im/msn/CVS/Entries --- ./src/gtk/im/msn/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/msn/CVS/Entries Mon Sep 13 21:54:43 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/msn.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/im/msn/CVS/Repository ../mldonkey/src/gtk/im/msn/CVS/Repository --- ./src/gtk/im/msn/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/msn/CVS/Repository Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/im/msn diff -Nur ./src/gtk/im/msn/CVS/Root ../mldonkey/src/gtk/im/msn/CVS/Root --- ./src/gtk/im/msn/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/msn/CVS/Root Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/im/msn/CVS/Tag ../mldonkey/src/gtk/im/msn/CVS/Tag --- ./src/gtk/im/msn/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/msn/CVS/Tag Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/im/toc/CVS/Entries ../mldonkey/src/gtk/im/toc/CVS/Entries --- ./src/gtk/im/toc/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/toc/CVS/Entries Mon Sep 13 21:54:43 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/toc.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/im/toc/CVS/Repository ../mldonkey/src/gtk/im/toc/CVS/Repository --- ./src/gtk/im/toc/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/toc/CVS/Repository Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/im/toc diff -Nur ./src/gtk/im/toc/CVS/Root ../mldonkey/src/gtk/im/toc/CVS/Root --- ./src/gtk/im/toc/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/toc/CVS/Root Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/im/toc/CVS/Tag ../mldonkey/src/gtk/im/toc/CVS/Tag --- ./src/gtk/im/toc/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/toc/CVS/Tag Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/im/yahoo/CVS/Entries ../mldonkey/src/gtk/im/yahoo/CVS/Entries --- ./src/gtk/im/yahoo/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/yahoo/CVS/Entries Mon Sep 13 21:54:44 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/yahoo.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/im/yahoo/CVS/Repository ../mldonkey/src/gtk/im/yahoo/CVS/Repository --- ./src/gtk/im/yahoo/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/yahoo/CVS/Repository Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/im/yahoo diff -Nur ./src/gtk/im/yahoo/CVS/Root ../mldonkey/src/gtk/im/yahoo/CVS/Root --- ./src/gtk/im/yahoo/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/yahoo/CVS/Root Mon Sep 13 21:54:43 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/im/yahoo/CVS/Tag ../mldonkey/src/gtk/im/yahoo/CVS/Tag --- ./src/gtk/im/yahoo/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/im/yahoo/CVS/Tag Mon Sep 13 21:54:44 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/newgui/CVS/Entries ../mldonkey/src/gtk/newgui/CVS/Entries --- ./src/gtk/newgui/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/newgui/CVS/Entries Mon Sep 13 21:54:55 2004 @@ -0,0 +1,42 @@ +/.cvsignore/1.2/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/gui_cdget.ml/1.7/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/gui_cdget_base.ml/1.1/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/gui_columns.ml/1.7/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_com.ml/1.12/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/gui_com.mli/1.3/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/gui_config.ml/1.6/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_console.ml/1.1/Mon Nov 17 21:12:51 2003//Trelease-2-5-23 +/gui_console_base.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_downloads.ml/1.13/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_downloads_base.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_friends.ml/1.12/Fri Apr 16 17:14:54 2004//Trelease-2-5-23 +/gui_friends_base.ml/1.4/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/gui_global.ml/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_graph.ml/1.1/Mon Nov 17 21:12:51 2003//Trelease-2-5-23 +/gui_graph_base.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_help_base.ml/1.1/Mon Nov 17 21:12:51 2003//Trelease-2-5-23 +/gui_installer.ml/1.4/Sun Mar 7 09:34:25 2004//Trelease-2-5-23 +/gui_installer_base.ml/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_keys.ml/1.1/Mon Nov 17 21:12:51 2003//Trelease-2-5-23 +/gui_main.ml/1.15/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_messages.ml/1.9/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gui_misc.ml/1.5/Sun Mar 7 09:34:25 2004//Trelease-2-5-23 +/gui_networks.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_options.ml/1.10/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gui_queries.ml/1.6/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gui_queries_base.ml/1.4/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_results.ml/1.8/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_results_base.ml/1.1/Mon Nov 17 21:12:51 2003//Trelease-2-5-23 +/gui_rooms.ml/1.4/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_rooms_base.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_servers.ml/1.7/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/gui_servers_base.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_starter.ml/1.2/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_types.ml/1.7/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_uploads.ml/1.5/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/gui_uploads_base.ml/1.4/Tue Feb 10 23:25:08 2004//Trelease-2-5-23 +/gui_users.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/gui_users_base.ml/1.1/Mon Nov 17 21:12:51 2003//Trelease-2-5-23 +/gui_window.ml/1.6/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_window_base.ml/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/newgui/CVS/Repository ../mldonkey/src/gtk/newgui/CVS/Repository --- ./src/gtk/newgui/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/newgui/CVS/Repository Mon Sep 13 21:54:44 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/newgui diff -Nur ./src/gtk/newgui/CVS/Root ../mldonkey/src/gtk/newgui/CVS/Root --- ./src/gtk/newgui/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/newgui/CVS/Root Mon Sep 13 21:54:44 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/newgui/CVS/Tag ../mldonkey/src/gtk/newgui/CVS/Tag --- ./src/gtk/newgui/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/newgui/CVS/Tag Mon Sep 13 21:54:55 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/okey/CVS/Entries ../mldonkey/src/gtk/okey/CVS/Entries --- ./src/gtk/okey/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/okey/CVS/Entries Mon Sep 13 21:54:56 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/okey.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/okey.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/gtk/okey/CVS/Repository ../mldonkey/src/gtk/okey/CVS/Repository --- ./src/gtk/okey/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/okey/CVS/Repository Mon Sep 13 21:54:55 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/okey diff -Nur ./src/gtk/okey/CVS/Root ../mldonkey/src/gtk/okey/CVS/Root --- ./src/gtk/okey/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/okey/CVS/Root Mon Sep 13 21:54:55 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/okey/CVS/Tag ../mldonkey/src/gtk/okey/CVS/Tag --- ./src/gtk/okey/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/okey/CVS/Tag Mon Sep 13 21:54:56 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk/progress/CVS/Entries ../mldonkey/src/gtk/progress/CVS/Entries --- ./src/gtk/progress/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/progress/CVS/Entries Mon Sep 13 21:54:57 2004 @@ -0,0 +1,5 @@ +/.cvsignore/1.1/Mon Feb 16 14:04:01 2004//Trelease-2-5-23 +/gui_progress.ml/1.1/Wed Jan 14 21:25:19 2004//Trelease-2-5-23 +/gui_progress.mli/1.1/Wed Jan 14 21:25:19 2004//Trelease-2-5-23 +/gui_progress_main.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk/progress/CVS/Repository ../mldonkey/src/gtk/progress/CVS/Repository --- ./src/gtk/progress/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/progress/CVS/Repository Mon Sep 13 21:54:56 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk/progress diff -Nur ./src/gtk/progress/CVS/Root ../mldonkey/src/gtk/progress/CVS/Root --- ./src/gtk/progress/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/progress/CVS/Root Mon Sep 13 21:54:56 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk/progress/CVS/Tag ../mldonkey/src/gtk/progress/CVS/Tag --- ./src/gtk/progress/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk/progress/CVS/Tag Mon Sep 13 21:54:57 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/CVS/Entries ../mldonkey/src/gtk2/CVS/Entries --- ./src/gtk2/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/CVS/Entries Mon Sep 13 21:58:21 2004 @@ -0,0 +1,7 @@ +D/chat//// +D/configwin//// +D/gpattern//// +D/im//// +D/newgui//// +D/okey//// +D/progress//// diff -Nur ./src/gtk2/CVS/Repository ../mldonkey/src/gtk2/CVS/Repository --- ./src/gtk2/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/CVS/Repository Mon Sep 13 21:54:57 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2 diff -Nur ./src/gtk2/CVS/Root ../mldonkey/src/gtk2/CVS/Root --- ./src/gtk2/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/CVS/Root Mon Sep 13 21:54:57 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/CVS/Tag ../mldonkey/src/gtk2/CVS/Tag --- ./src/gtk2/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/CVS/Tag Mon Sep 13 21:54:57 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/gtk2/chat/CVS/Entries ../mldonkey/src/gtk2/chat/CVS/Entries --- ./src/gtk2/chat/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/chat/CVS/Entries Mon Sep 13 21:54:58 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/chat_gui.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/chat_gui_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/chat/CVS/Repository ../mldonkey/src/gtk2/chat/CVS/Repository --- ./src/gtk2/chat/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/chat/CVS/Repository Mon Sep 13 21:54:57 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/chat diff -Nur ./src/gtk2/chat/CVS/Root ../mldonkey/src/gtk2/chat/CVS/Root --- ./src/gtk2/chat/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/chat/CVS/Root Mon Sep 13 21:54:57 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/chat/CVS/Tag ../mldonkey/src/gtk2/chat/CVS/Tag --- ./src/gtk2/chat/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/chat/CVS/Tag Mon Sep 13 21:54:58 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/configwin/CVS/Entries ../mldonkey/src/gtk2/configwin/CVS/Entries --- ./src/gtk2/configwin/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/configwin/CVS/Entries Mon Sep 13 21:54:59 2004 @@ -0,0 +1,6 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/configwin.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/configwin_ihm.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/configwin_messages.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/configwin_types.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/configwin/CVS/Repository ../mldonkey/src/gtk2/configwin/CVS/Repository --- ./src/gtk2/configwin/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/configwin/CVS/Repository Mon Sep 13 21:54:58 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/configwin diff -Nur ./src/gtk2/configwin/CVS/Root ../mldonkey/src/gtk2/configwin/CVS/Root --- ./src/gtk2/configwin/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/configwin/CVS/Root Mon Sep 13 21:54:58 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/configwin/CVS/Tag ../mldonkey/src/gtk2/configwin/CVS/Tag --- ./src/gtk2/configwin/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/configwin/CVS/Tag Mon Sep 13 21:54:59 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/gpattern/CVS/Entries ../mldonkey/src/gtk2/gpattern/CVS/Entries --- ./src/gtk2/gpattern/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/gpattern/CVS/Entries Mon Sep 13 21:55:00 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gpattern.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gpattern.mli/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/gpattern/CVS/Repository ../mldonkey/src/gtk2/gpattern/CVS/Repository --- ./src/gtk2/gpattern/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/gpattern/CVS/Repository Mon Sep 13 21:54:59 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/gpattern diff -Nur ./src/gtk2/gpattern/CVS/Root ../mldonkey/src/gtk2/gpattern/CVS/Root --- ./src/gtk2/gpattern/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/gpattern/CVS/Root Mon Sep 13 21:54:59 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/gpattern/CVS/Tag ../mldonkey/src/gtk2/gpattern/CVS/Tag --- ./src/gtk2/gpattern/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/gpattern/CVS/Tag Mon Sep 13 21:55:00 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/im/CVS/Entries ../mldonkey/src/gtk2/im/CVS/Entries --- ./src/gtk2/im/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/CVS/Entries Mon Sep 13 21:58:21 2004 @@ -0,0 +1,19 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im_main.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_im_rooms.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imAccount.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imChat.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imEvent.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imIdentity.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imMain.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imOptions.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imProtocol.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imRoom.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/imTypes.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D/icq//// +D/irc//// +D/msn//// +D/toc//// +D/yahoo//// diff -Nur ./src/gtk2/im/CVS/Repository ../mldonkey/src/gtk2/im/CVS/Repository --- ./src/gtk2/im/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/CVS/Repository Mon Sep 13 21:55:00 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/im diff -Nur ./src/gtk2/im/CVS/Root ../mldonkey/src/gtk2/im/CVS/Root --- ./src/gtk2/im/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/CVS/Root Mon Sep 13 21:55:00 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/im/CVS/Tag ../mldonkey/src/gtk2/im/CVS/Tag --- ./src/gtk2/im/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/CVS/Tag Mon Sep 13 21:55:02 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/im/icq/CVS/Entries ../mldonkey/src/gtk2/im/icq/CVS/Entries --- ./src/gtk2/im/icq/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/icq/CVS/Entries Mon Sep 13 21:55:03 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/icq.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/im/icq/CVS/Repository ../mldonkey/src/gtk2/im/icq/CVS/Repository --- ./src/gtk2/im/icq/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/icq/CVS/Repository Mon Sep 13 21:55:03 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/im/icq diff -Nur ./src/gtk2/im/icq/CVS/Root ../mldonkey/src/gtk2/im/icq/CVS/Root --- ./src/gtk2/im/icq/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/icq/CVS/Root Mon Sep 13 21:55:03 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/im/icq/CVS/Tag ../mldonkey/src/gtk2/im/icq/CVS/Tag --- ./src/gtk2/im/icq/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/icq/CVS/Tag Mon Sep 13 21:55:03 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/im/irc/CVS/Entries ../mldonkey/src/gtk2/im/irc/CVS/Entries --- ./src/gtk2/im/irc/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/irc/CVS/Entries Mon Sep 13 21:55:04 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/irc.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/im/irc/CVS/Repository ../mldonkey/src/gtk2/im/irc/CVS/Repository --- ./src/gtk2/im/irc/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/irc/CVS/Repository Mon Sep 13 21:55:03 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/im/irc diff -Nur ./src/gtk2/im/irc/CVS/Root ../mldonkey/src/gtk2/im/irc/CVS/Root --- ./src/gtk2/im/irc/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/irc/CVS/Root Mon Sep 13 21:55:03 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/im/irc/CVS/Tag ../mldonkey/src/gtk2/im/irc/CVS/Tag --- ./src/gtk2/im/irc/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/irc/CVS/Tag Mon Sep 13 21:55:04 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/im/msn/CVS/Entries ../mldonkey/src/gtk2/im/msn/CVS/Entries --- ./src/gtk2/im/msn/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/msn/CVS/Entries Mon Sep 13 21:55:05 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/msn.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/im/msn/CVS/Repository ../mldonkey/src/gtk2/im/msn/CVS/Repository --- ./src/gtk2/im/msn/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/msn/CVS/Repository Mon Sep 13 21:55:04 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/im/msn diff -Nur ./src/gtk2/im/msn/CVS/Root ../mldonkey/src/gtk2/im/msn/CVS/Root --- ./src/gtk2/im/msn/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/msn/CVS/Root Mon Sep 13 21:55:04 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/im/msn/CVS/Tag ../mldonkey/src/gtk2/im/msn/CVS/Tag --- ./src/gtk2/im/msn/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/msn/CVS/Tag Mon Sep 13 21:55:05 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/im/toc/CVS/Entries ../mldonkey/src/gtk2/im/toc/CVS/Entries --- ./src/gtk2/im/toc/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/toc/CVS/Entries Mon Sep 13 21:55:05 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/toc.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/im/toc/CVS/Repository ../mldonkey/src/gtk2/im/toc/CVS/Repository --- ./src/gtk2/im/toc/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/toc/CVS/Repository Mon Sep 13 21:55:05 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/im/toc diff -Nur ./src/gtk2/im/toc/CVS/Root ../mldonkey/src/gtk2/im/toc/CVS/Root --- ./src/gtk2/im/toc/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/toc/CVS/Root Mon Sep 13 21:55:05 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/im/toc/CVS/Tag ../mldonkey/src/gtk2/im/toc/CVS/Tag --- ./src/gtk2/im/toc/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/toc/CVS/Tag Mon Sep 13 21:55:05 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/im/yahoo/CVS/Entries ../mldonkey/src/gtk2/im/yahoo/CVS/Entries --- ./src/gtk2/im/yahoo/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/yahoo/CVS/Entries Mon Sep 13 21:55:06 2004 @@ -0,0 +1,3 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/yahoo.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/im/yahoo/CVS/Repository ../mldonkey/src/gtk2/im/yahoo/CVS/Repository --- ./src/gtk2/im/yahoo/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/yahoo/CVS/Repository Mon Sep 13 21:55:06 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/im/yahoo diff -Nur ./src/gtk2/im/yahoo/CVS/Root ../mldonkey/src/gtk2/im/yahoo/CVS/Root --- ./src/gtk2/im/yahoo/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/yahoo/CVS/Root Mon Sep 13 21:55:05 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/im/yahoo/CVS/Tag ../mldonkey/src/gtk2/im/yahoo/CVS/Tag --- ./src/gtk2/im/yahoo/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/im/yahoo/CVS/Tag Mon Sep 13 21:55:06 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/newgui/CVS/Entries ../mldonkey/src/gtk2/newgui/CVS/Entries --- ./src/gtk2/newgui/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/newgui/CVS/Entries Mon Sep 13 21:55:10 2004 @@ -0,0 +1,42 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_cdget.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_cdget_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_columns.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_com.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_com.mli/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_config.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_console.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_console_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_downloads.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_downloads_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_friends.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_friends_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_global.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_graph.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_graph_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_help_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_installer.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_installer_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_keys.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_main.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_messages.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_misc.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_networks.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_options.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_queries.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_queries_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_results.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_results_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_rooms.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_rooms_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_servers.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_servers_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_starter.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_types.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_uploads.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_uploads_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_users.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_users_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_window.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_window_base.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/newgui/CVS/Repository ../mldonkey/src/gtk2/newgui/CVS/Repository --- ./src/gtk2/newgui/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/newgui/CVS/Repository Mon Sep 13 21:55:06 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/newgui diff -Nur ./src/gtk2/newgui/CVS/Root ../mldonkey/src/gtk2/newgui/CVS/Root --- ./src/gtk2/newgui/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/newgui/CVS/Root Mon Sep 13 21:55:06 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/newgui/CVS/Tag ../mldonkey/src/gtk2/newgui/CVS/Tag --- ./src/gtk2/newgui/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/newgui/CVS/Tag Mon Sep 13 21:55:10 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/okey/CVS/Entries ../mldonkey/src/gtk2/okey/CVS/Entries --- ./src/gtk2/okey/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/okey/CVS/Entries Mon Sep 13 21:55:11 2004 @@ -0,0 +1,4 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/okey.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/okey.mli/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/okey/CVS/Repository ../mldonkey/src/gtk2/okey/CVS/Repository --- ./src/gtk2/okey/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/okey/CVS/Repository Mon Sep 13 21:55:10 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/okey diff -Nur ./src/gtk2/okey/CVS/Root ../mldonkey/src/gtk2/okey/CVS/Root --- ./src/gtk2/okey/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/okey/CVS/Root Mon Sep 13 21:55:10 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/okey/CVS/Tag ../mldonkey/src/gtk2/okey/CVS/Tag --- ./src/gtk2/okey/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/okey/CVS/Tag Mon Sep 13 21:55:11 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/gtk2/progress/CVS/Entries ../mldonkey/src/gtk2/progress/CVS/Entries --- ./src/gtk2/progress/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/progress/CVS/Entries Mon Sep 13 21:55:12 2004 @@ -0,0 +1,5 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_progress.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_progress.mli/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gui_progress_main.ml/1.1/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/gtk2/progress/CVS/Repository ../mldonkey/src/gtk2/progress/CVS/Repository --- ./src/gtk2/progress/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/progress/CVS/Repository Mon Sep 13 21:55:11 2004 @@ -0,0 +1 @@ +mldonkey/src/gtk2/progress diff -Nur ./src/gtk2/progress/CVS/Root ../mldonkey/src/gtk2/progress/CVS/Root --- ./src/gtk2/progress/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/progress/CVS/Root Mon Sep 13 21:55:11 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/gtk2/progress/CVS/Tag ../mldonkey/src/gtk2/progress/CVS/Tag --- ./src/gtk2/progress/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/gtk2/progress/CVS/Tag Mon Sep 13 21:55:12 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/im/CVS/Entries ../mldonkey/src/im/CVS/Entries --- ./src/im/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/im/CVS/Entries Mon Sep 13 21:58:21 2004 @@ -0,0 +1,2 @@ +/.cvsignore/1.2/Mon Feb 2 20:00:22 2004//Trelease-2-5-23 +D diff -Nur ./src/im/CVS/Repository ../mldonkey/src/im/CVS/Repository --- ./src/im/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/im/CVS/Repository Mon Sep 13 21:55:12 2004 @@ -0,0 +1 @@ +mldonkey/src/im diff -Nur ./src/im/CVS/Root ../mldonkey/src/im/CVS/Root --- ./src/im/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/im/CVS/Root Mon Sep 13 21:55:12 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/im/CVS/Tag ../mldonkey/src/im/CVS/Tag --- ./src/im/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/im/CVS/Tag Mon Sep 13 21:55:12 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/CVS/Entries ../mldonkey/src/networks/CVS/Entries --- ./src/networks/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/CVS/Entries Mon Sep 13 21:58:20 2004 @@ -0,0 +1,13 @@ +D/audio_galaxy//// +D/bittorrent//// +D/direct_connect//// +D/donkey//// +D/donkey_devel//// +D/fasttrack//// +D/fileTP//// +D/gnutella//// +D/gnutella2//// +D/openFT//// +D/opennap//// +D/server//// +D/soulseek//// diff -Nur ./src/networks/CVS/Repository ../mldonkey/src/networks/CVS/Repository --- ./src/networks/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/CVS/Repository Mon Sep 13 21:55:15 2004 @@ -0,0 +1 @@ +mldonkey/src/networks diff -Nur ./src/networks/CVS/Root ../mldonkey/src/networks/CVS/Root --- ./src/networks/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/CVS/Root Mon Sep 13 21:55:15 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/CVS/Tag ../mldonkey/src/networks/CVS/Tag --- ./src/networks/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/CVS/Tag Mon Sep 13 21:55:16 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/networks/audio_galaxy/CVS/Entries ../mldonkey/src/networks/audio_galaxy/CVS/Entries --- ./src/networks/audio_galaxy/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/audio_galaxy/CVS/Entries Mon Sep 13 21:55:22 2004 @@ -0,0 +1,12 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/agClients.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agComplexOptions.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agGlobals.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agHttpForward.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agInteractive.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agMain.ml/1.3/Sat May 24 01:23:34 2003//Trelease-2-5-23 +/agOptions.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agProtocol.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agServers.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/agTypes.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/audio_galaxy/CVS/Repository ../mldonkey/src/networks/audio_galaxy/CVS/Repository --- ./src/networks/audio_galaxy/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/audio_galaxy/CVS/Repository Mon Sep 13 21:55:16 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/audio_galaxy diff -Nur ./src/networks/audio_galaxy/CVS/Root ../mldonkey/src/networks/audio_galaxy/CVS/Root --- ./src/networks/audio_galaxy/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/audio_galaxy/CVS/Root Mon Sep 13 21:55:16 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/audio_galaxy/CVS/Tag ../mldonkey/src/networks/audio_galaxy/CVS/Tag --- ./src/networks/audio_galaxy/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/audio_galaxy/CVS/Tag Mon Sep 13 21:55:23 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/bittorrent/CVS/Entries ../mldonkey/src/networks/bittorrent/CVS/Entries --- ./src/networks/bittorrent/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/bittorrent/CVS/Entries Mon Sep 13 21:55:28 2004 @@ -0,0 +1,14 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/bTChooser.ml/1.4/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bTClients.ml/1.31/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bTComplexOptions.ml/1.14/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bTGlobals.ml/1.23/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bTInteractive.ml/1.33/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bTMain.ml/1.11/Wed Feb 4 00:21:45 2004//Trelease-2-5-23 +/bTOptions.ml/1.13/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bTProtocol.ml/1.13/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/bTRate.ml/1.2/Wed Jan 14 22:54:17 2004//Trelease-2-5-23 +/bTTracker.ml/1.9/Sun Mar 7 09:34:25 2004//Trelease-2-5-23 +/bTTypes.ml/1.19/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/bencode.ml/1.2/Thu Apr 24 12:45:46 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/bittorrent/CVS/Repository ../mldonkey/src/networks/bittorrent/CVS/Repository --- ./src/networks/bittorrent/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/bittorrent/CVS/Repository Mon Sep 13 21:55:23 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/bittorrent diff -Nur ./src/networks/bittorrent/CVS/Root ../mldonkey/src/networks/bittorrent/CVS/Root --- ./src/networks/bittorrent/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/bittorrent/CVS/Root Mon Sep 13 21:55:23 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/bittorrent/CVS/Tag ../mldonkey/src/networks/bittorrent/CVS/Tag --- ./src/networks/bittorrent/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/bittorrent/CVS/Tag Mon Sep 13 21:55:28 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/bittorrent/bTChooser.ml ../mldonkey/src/networks/bittorrent/bTChooser.ml --- ./src/networks/bittorrent/bTChooser.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTChooser.ml Wed Aug 4 18:59:26 2004 @@ -24,9 +24,8 @@ open BasicSocket open CommonTypes open List2 - -let max_uploaders = 5 - +open BTOptions +open Options (*given some files choose the next uploaders based on their behavior @@ -69,7 +68,7 @@ (*sort by biggest contributor*) let sortl = List.sort fun_comp filtl in - let to_add,next = keepn !max_list sortl (max_uploaders - 1) in + let to_add,next = keepn !max_list sortl (!!max_uploaders_per_torrent - 1) in max_list:= to_add; (* clients in optim are current optimistic uploaders (30 seconds) @@ -84,10 +83,10 @@ *) let notoptim = List.sort (fun a b -> compare a.client_last_optimist b.client_last_optimist) notoptim in - let to_add,next = keepn !max_list (optim) (max_uploaders) in + let to_add,next = keepn !max_list (optim) (!!max_uploaders_per_torrent) in max_list := to_add; let to_add,_ = keepn !max_list (notoptim) - (max_uploaders) in + (!!max_uploaders_per_torrent) in full_list := !full_list @ to_add; ) files; diff -Nur ./src/networks/bittorrent/bTClients.ml ../mldonkey/src/networks/bittorrent/bTClients.ml --- ./src/networks/bittorrent/bTClients.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTClients.ml Wed Aug 4 18:59:26 2004 @@ -94,10 +94,16 @@ let downloaded = Int64Swarmer.downloaded swarmer in let args,must_check_delay, downloaded = match event with - | "completed" -> [("event", "completed")],true, zero - | "started" -> [("event", "started")],true, downloaded - | "stopped" -> [("event", "stopped")],false, downloaded - | _ -> [], true, downloaded + | "completed" -> +(* ok, when downloading, "completed" shoud be sent immediatly! But +when sharing, only every interval *) + if file_state file = FileDownloading then + [("event", "completed")],false,(Int64Swarmer.downloaded swarmer) + else + [("event", "completed")],true,(Int64.of_int 0) + | "started" -> [("event", "started")],true,(Int64Swarmer.downloaded swarmer) + | "stopped" -> [("event", "stopped")],false,(Int64Swarmer.downloaded swarmer) + | _ -> [],true,(Int64Swarmer.downloaded swarmer) in if (not must_check_delay) || (file.file_tracker_last_conn + file.file_tracker_interval @@ -131,7 +137,7 @@ f fileres ) else - () + lprintf "Request NOT sent to tracker - remaning: %d\n" (file.file_tracker_interval - (last_time () - file.file_tracker_last_conn)) (** In this function we decide which peers will be @@ -277,9 +283,18 @@ if List.memq file !current_files then begin (*CommonComplexOptions.file_completed*) file_completed (as_file file); - current_files := List2.removeq file !current_files; + remove_file file; disconnect_clients file; - connect_tracker file "completed" (fun _ -> ()) + connect_tracker file "stopped" (fun _ -> ()); +(* start sharing! - Copy file from torrents/download to torrent/seeded *) + try + let s = File.to_string file.file_torr_fname in + if String.length s = 0 then raise Not_found; + let filename = Filename.concat seeded_directory + ((String2.replace file.file_name '/' "") ^ ".torrent") in + File.from_string filename s + with _ -> + lprintf "Unable to start sharing %s\n" file.file_torr_fname end @@ -707,7 +722,7 @@ if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file + add_file_downloaded (as_file file) (new_downloaded -- old_downloaded); end; begin @@ -718,7 +733,7 @@ c.client_ranges <- tail; end; get_from_client sock c; - if (List.length !current_uploaders < (max_uploaders-1)) && + if (List.length !current_uploaders < (!!max_uploaders_per_torrent-1)) && (List.mem c (!current_uploaders)) == false && c.client_interested then begin (*we are probably an optimistic uploaders for this client diff -Nur ./src/networks/bittorrent/bTComplexOptions.ml ../mldonkey/src/networks/bittorrent/bTComplexOptions.ml --- ./src/networks/bittorrent/bTComplexOptions.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTComplexOptions.ml Wed Aug 4 18:59:26 2004 @@ -127,9 +127,6 @@ None -> () | Some swarmer -> Int64Swarmer.value_to_swarmer swarmer assocs; - add_file_downloaded file.file_file - (Int64Swarmer.downloaded swarmer); - ); (try @@ -140,6 +137,14 @@ lprintf "Exception %s while loading sources\n" (Printexc2.to_string e); ); + + let file_torr_fname = + try + get_value "file_torrent_name" value_to_string + with _ -> "/dev/null" + in + file.file_torr_fname <- file_torr_fname; + as_file file let file_to_value file = @@ -153,6 +158,7 @@ "file_uploaded", int64_to_value (file.file_uploaded); "file_id", string_to_value (Sha1.to_string file.file_id); "file_tracker", string_to_value file.file_tracker; + "file_torrent_name", string_to_value file.file_torr_fname; (* OK, but I still don't like the idea of forgetting all the clients. We should have a better strategy, ie rating the clients and connecting to them depending on the results of our last connections. And then, diff -Nur ./src/networks/bittorrent/bTGlobals.ml ../mldonkey/src/networks/bittorrent/bTGlobals.ml --- ./src/networks/bittorrent/bTGlobals.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTGlobals.ml Wed Aug 4 18:59:26 2004 @@ -159,6 +159,7 @@ file_files = []; file_blocks_downloaded = []; file_uploaded = Int64.zero; + file_torr_fname = ""; } and file_impl = { dummy_file_impl with impl_file_fd = file_u; diff -Nur ./src/networks/bittorrent/bTInteractive.ml ../mldonkey/src/networks/bittorrent/bTInteractive.ml --- ./src/networks/bittorrent/bTInteractive.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTInteractive.ml Wed Aug 4 18:59:26 2004 @@ -146,8 +146,9 @@ in file.file_files <- torrent.torrent_files; file.file_chunks <- torrent.torrent_pieces; + file.file_torr_fname <- "/dev/null"; BTClients.get_sources_from_tracker file; - () + file let load_torrent_file filename = let s = File.to_string filename in @@ -155,7 +156,9 @@ let download_filename = Filename.concat downloads_directory (Filename.basename filename) in File.from_string download_filename s; - load_torrent_string s + lprintf "BTInteractive.load_torrent_file %s\n" download_filename; + let file = load_torrent_string s in + file.file_torr_fname <- download_filename let parse_tracker_reply file filename = (*This is the function which will be called by the http client @@ -165,7 +168,7 @@ let v = Bencode.decode (File.to_string filename) in lprintf "Received: %s\n" (Bencode.print v); - let interval = ref 600 in + file.file_tracker_interval <- 600; match v with Dictionary list -> List.iter (fun (key,value) -> @@ -179,10 +182,12 @@ let try_share_file filename = (* lprintf "BTInteractive.try_share_file: %s\n" filename; *) + let ss = filename in let s = File.to_string filename in let file_id, torrent = BTTracker.decode_torrent s in - let filename = Filename.concat !!incoming_directory torrent.torrent_name in + let filename = Filename.concat (Filename.concat !!incoming_directory !!commit_in_subdir) torrent.torrent_name in + if Sys.file_exists filename then let file_u = if torrent.torrent_files <> [] then @@ -199,6 +204,7 @@ torrent.torrent_announce torrent.torrent_piece_size torrent.torrent_files filename FileShared in + file.file_torr_fname <- ss; let swarmer = match file.file_swarmer with None -> assert false @@ -225,7 +231,17 @@ let filename = Filename.concat dir file in try_share_file filename ) filenames - ) [seeded_directory; tracked_directory] + ) [seeded_directory; tracked_directory]; + let copy_shfiles = current_files in + List.iter (fun file -> + if not (Sys.file_exists file.file_torr_fname) && file_state file = FileShared then + begin + lprintf "Removing torrent share for %s\n" file.file_torr_fname; + BTClients.file_stop file; + remove_file file; + BTClients.disconnect_clients file + end + ) !copy_shfiles let _ = @@ -240,12 +256,23 @@ with e -> lprintf "Exception %s while loading\n" (Printexc2.to_string e); let module H = Http_client in + let u = Url.of_string url in let r = { H.basic_request with - H.req_url = Url.of_string url; + H.req_url = u; H.req_proxy = !CommonOptions.http_proxy; H.req_user_agent = Printf.sprintf "MLdonkey %s" Autoconf.current_version; + H.req_headers = try + let cookies = List.assoc u.Url.server !!BTOptions.cookies in + [ ( "Cookie", List.fold_left (fun res (key, value) -> + if res = "" then + key ^ "=" ^ value + else + res ^ "; " ^ key ^ "=" ^ value + ) "" cookies + ) ] + with Not_found -> []; } in H.wget r load_torrent_file; @@ -406,7 +433,16 @@ else _s "Tracker not activated (tracker_port = 0)" ), _s " : print all .torrent files on this server"; - + + "seeded_torrents", "Network/Bittorrent", Arg_none (fun o -> + + List.iter (fun file -> + if file_state file = FileShared then + Printf.bprintf o.conn_buf "%s [%s]\n" file.file_name (Int64.to_string file.file_uploaded) + ) !current_files; + _s "done" + + ), _s " : print all sedded .torrent files on this server"; (* "print_torrent", Arg_one (fun filename o -> @@ -422,7 +458,8 @@ match get_int16 s 0 with 0 -> let text = String.sub s 2 (String.length s - 2) in - load_torrent_string text + let _ = load_torrent_string text in + () | opcode -> failwith (Printf.sprintf "BT: Unknown message opcode %d" opcode) let _ = diff -Nur ./src/networks/bittorrent/bTOptions.ml ../mldonkey/src/networks/bittorrent/bTOptions.ml --- ./src/networks/bittorrent/bTOptions.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTOptions.ml Wed Aug 4 18:59:26 2004 @@ -87,3 +87,17 @@ let ask_tracker_threshold = define_option bittorrent_section ["ask_tracker_threshold"] "Ask the tracker for new sources only if you have fewer than that number of sources" int_option 20 + +let max_uploaders_per_torrent = define_option bittorrent_section ["max_uploaders_per_torrent"] + "Maximum number of uploaders for one torrent" + int_option 5 + +let _ = + option_hook max_uploaders_per_torrent + (fun _ -> + if !!max_uploaders_per_torrent < 1 then max_uploaders_per_torrent =:= 5) + + +let cookies = define_option bittorrent_section ["cookies"] + "Cookies send with http request to get .torrent file" + (list_option (tuple2_option (string_option, list_option (tuple2_option (string_option, string_option))))) [] diff -Nur ./src/networks/bittorrent/bTTypes.ml ../mldonkey/src/networks/bittorrent/bTTypes.ml --- ./src/networks/bittorrent/bTTypes.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/bittorrent/bTTypes.ml Wed Aug 4 18:59:26 2004 @@ -88,4 +88,5 @@ mutable file_blocks_downloaded : (int * int64 * int64) list; (* vvv probably a network specific value vvv ?what about file_downloaded?*) mutable file_uploaded : int64; + mutable file_torr_fname : string; } diff -Nur ./src/networks/direct_connect/CVS/Entries ../mldonkey/src/networks/direct_connect/CVS/Entries --- ./src/networks/direct_connect/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/direct_connect/CVS/Entries Mon Sep 13 21:55:34 2004 @@ -0,0 +1,15 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/che3.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/che3_c.c/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/che3_c.h/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/dcClients.ml/1.9/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/dcComplexOptions.ml/1.4/Fri Jan 30 06:11:05 2004//Trelease-2-5-23 +/dcGlobals.ml/1.8/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/dcInteractive.ml/1.17/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/dcKey.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/dcMain.ml/1.5/Thu Nov 20 16:43:18 2003//Trelease-2-5-23 +/dcOptions.ml/1.4/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/dcProtocol.ml/1.2/Thu Nov 20 16:43:18 2003//Trelease-2-5-23 +/dcServers.ml/1.9/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/dcTypes.ml/1.4/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +D diff -Nur ./src/networks/direct_connect/CVS/Repository ../mldonkey/src/networks/direct_connect/CVS/Repository --- ./src/networks/direct_connect/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/direct_connect/CVS/Repository Mon Sep 13 21:55:28 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/direct_connect diff -Nur ./src/networks/direct_connect/CVS/Root ../mldonkey/src/networks/direct_connect/CVS/Root --- ./src/networks/direct_connect/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/direct_connect/CVS/Root Mon Sep 13 21:55:28 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/direct_connect/CVS/Tag ../mldonkey/src/networks/direct_connect/CVS/Tag --- ./src/networks/direct_connect/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/direct_connect/CVS/Tag Mon Sep 13 21:55:34 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/direct_connect/dcClients.ml ../mldonkey/src/networks/direct_connect/dcClients.ml --- ./src/networks/direct_connect/dcClients.ml Thu Jul 29 12:32:44 2004 +++ ../mldonkey/src/networks/direct_connect/dcClients.ml Wed Aug 4 18:59:26 2004 @@ -364,7 +364,7 @@ *) buf_used b b.len; if c.client_pos > (file_downloaded file) then begin - add_file_downloaded file.file_file + add_file_downloaded (as_file file.file_file) (Int64.sub c.client_pos (file_downloaded file)); end; if (file_downloaded file) = (file_size file) then begin diff -Nur ./src/networks/donkey/CVS/Entries ../mldonkey/src/networks/donkey/CVS/Entries --- ./src/networks/donkey/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/CVS/Entries Mon Sep 13 21:55:51 2004 @@ -0,0 +1,50 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/donkeyChunks.ml/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/donkeyClient.ml/1.35/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyClient.mli/1.3/Wed May 5 20:55:37 2004//Trelease-2-5-23 +/donkeyComplexOptions.ml/1.18/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyComplexOptions.mli/1.5/Fri Apr 16 17:14:54 2004//Trelease-2-5-23 +/donkeyFiles.ml/1.8/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/donkeyFiles.mli/1.2/Thu Nov 27 07:02:52 2003//Trelease-2-5-23 +/donkeyGlobals.ml/1.29/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyImport.ml/1.4/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyIndexer.ml/1.4/Fri Jan 30 06:11:05 2004//Trelease-2-5-23 +/donkeyIndexer.mli/1.2/Sat May 10 18:58:13 2003//Trelease-2-5-23 +/donkeyInteractive.ml/1.32/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyInteractive.mli/1.2/Fri May 23 17:39:27 2003//Trelease-2-5-23 +/donkeyMain.ml/1.21/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyMain.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/donkeyMftp.ml/1.7/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyMftp.mli/1.4/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyNeighbours.ml/1.3/Fri Apr 16 17:14:55 2004//Trelease-2-5-23 +/donkeyNeighbours.mli/1.2/Fri Apr 16 17:14:55 2004//Trelease-2-5-23 +/donkeyOneFile.ml/1.16/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyOneFile.mli/1.5/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/donkeyOpenProtocol.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/donkeyOptions.ml/1.18/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyOvernet.ml/1.20/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyOvernet.mli/1.1/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyPandora.ml/1.1/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/donkeyProtoClient.ml/1.14/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/donkeyProtoCom.ml/1.12/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyProtoCom.mli/1.4/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/donkeyProtoKademlia.ml/1.1/Wed Aug 4 18:40:15 2004//Trelease-2-5-23 +/donkeyProtoKademlia.mli/1.1/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyProtoOvernet.ml/1.8/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyProtoOvernet.mli/1.1/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyProtoServer.ml/1.12/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/donkeyProtoUdp.ml/1.8/Wed May 5 20:55:37 2004//Trelease-2-5-23 +/donkeyReliability.ml/1.4/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeySearch.ml/1.6/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/donkeySearch.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/donkeyServers.ml/1.20/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyServers.mli/1.2/Fri May 23 17:39:27 2003//Trelease-2-5-23 +/donkeyShare.ml/1.14/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/donkeyShare.mli/1.2/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyStats.ml/1.11/Wed Aug 4 16:59:26 2004//Trelease-2-5-23 +/donkeyStats.mli/1.3/Wed Jan 14 22:54:17 2004//Trelease-2-5-23 +/donkeySupernode.ml/1.6/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/donkeyThieves.ml/1.4/Tue Dec 2 22:56:42 2003//Trelease-2-5-23 +/donkeyTypes.ml/1.21/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/donkeyUdp.ml/1.10/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +D diff -Nur ./src/networks/donkey/CVS/Repository ../mldonkey/src/networks/donkey/CVS/Repository --- ./src/networks/donkey/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/CVS/Repository Mon Sep 13 21:55:34 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/donkey diff -Nur ./src/networks/donkey/CVS/Root ../mldonkey/src/networks/donkey/CVS/Root --- ./src/networks/donkey/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/CVS/Root Mon Sep 13 21:55:34 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/donkey/CVS/Tag ../mldonkey/src/networks/donkey/CVS/Tag --- ./src/networks/donkey/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/CVS/Tag Mon Sep 13 21:55:51 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/donkey/donkeyClient.ml ../mldonkey/src/networks/donkey/donkeyClient.ml --- ./src/networks/donkey/donkeyClient.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyClient.ml Wed Aug 4 18:59:26 2004 @@ -437,6 +437,7 @@ ("pille", Brand_mod_pille); ("morphkad", Brand_mod_morphkad); ("ef-mod", Brand_mod_efmod); + ("efmod", Brand_mod_efmod); ("xtreme", Brand_mod_xtreme); ("bionic", Brand_mod_bionic); ("pawcio", Brand_mod_pawcio); @@ -477,6 +478,7 @@ ("stormit", Brand_mod_stormit); ("omax", Brand_mod_omax); ("spiders", Brand_mod_spiders); + ("ib\233ricaxt", Brand_mod_ibericaxt); ("ib\233rica", Brand_mod_iberica); ("stonehenge", Brand_mod_stonehenge); ("mison", Brand_mod_mison); @@ -493,11 +495,38 @@ ("morphxt", Brand_mod_morphxt); ("ngdonkey", Brand_mod_ngdonkey); ("morph", Brand_mod_morph); + ("emule.de", Brand_mod_emulede); + ("aldo", Brand_mod_aldo); ("dm", Brand_mod_dm); ("lc", Brand_mod_lc); ("lh", Brand_mod_lh); - ("ice", Brand_mod_ice); - ("cyrex", Brand_mod_cyrex) + ("l!onetwork", Brand_mod_lh); + ("lionetwork", Brand_mod_lh); + ("hawkstar", Brand_mod_hawkstar); + ("neo mule", Brand_mod_neomule); + ("cyrex", Brand_mod_cyrex); + ("zx", Brand_mod_zx); + ("ackronic", Brand_mod_ackronic); + ("rappis", Brand_mod_rappis); + ("overdose", Brand_mod_overdose); + ("hebmule", Brand_mod_hebmule); + ("senfei", Brand_mod_senfei); + ("spoofmod", Brand_mod_spoofmod); + ("fusspilz", Brand_mod_fusspilz); + ("rocket", Brand_mod_rocket); + ("warezfaw", Brand_mod_warezfaw); + ("emusicmule", Brand_mod_emusicmule); + ("aideadsl", Brand_mod_aideadsl); + ("a i d e a d s l", Brand_mod_aideadsl); + ("epo", Brand_mod_epo); + ("kalitsch", Brand_mod_kalitsch); + ("raynz", Brand_mod_raynz); + ("serverclient", Brand_mod_serverclient); + ("bl4ckbird", Brand_mod_bl4ckbird); + ("bl4ckf0x", Brand_mod_bl4ckf0x); + ("candy-mule", Brand_mod_candymule); + ("rt", Brand_mod_rt); + ("ice", Brand_mod_ice) |] let to_lowercase s = String.lowercase s @@ -541,7 +570,14 @@ match tag.tag_name with | "name" -> () | "version" -> () - | "emule_udpports" -> () + | "emule_udpports" -> + for_two_int16_tag tag (fun ed2k_port kad_port -> +(* Kademlia: we should use this client to bootstrap Kademlia *) + if kad_port <> 0 then + DonkeyProtoKademlia.Kademlia.bootstrap + c.client_ip kad_port + ) + | "emule_miscoptions1" -> for_int64_tag tag (fun i -> DonkeyProtoClient.update_emule_proto_from_miscoptions1 @@ -604,13 +640,13 @@ match s.server_sock with NoConnection | ConnectionWaiting _ -> - DonkeyProtoCom.udp_send (get_udp_sock ()) +(* DonkeyProtoCom.udp_send (get_udp_sock ()) ip (port+4) (DonkeyProtoUdp.QueryCallUdpReq { Q.ip = client_ip; - Q.port = !client_port; + Q.port = !!donkey_port; Q.id = id; - }) + }) *) () | Connection sock -> printf_string "[QUERY ID]"; server_send sock ( @@ -677,7 +713,7 @@ (* Nice to see some emule devels here... It's always possible to crack a protocol, but let's try to make it as boring as possible... *) - external hash_param : int -> int -> 'a -> int = "hash_univ_param" "noalloc" + external hash_param : int -> int -> 'a -> int = "caml_hash_univ_param" "noalloc" let hash x = hash_param 10 100 x let shared_of_file file = @@ -1189,6 +1225,8 @@ end else if file.file_nchunks = 1 then begin lprintf "[ERROR]: one chunk file without md4\n"; + Int64Swarmer.set_checksums file.file_swarmer + [| Ed2k file.file_md4 |]; file.file_md4s <- [|file.file_md4|] end else if t.Q.chunks = [||] then begin @@ -1218,6 +1256,8 @@ lprintf "[ERROR]: Bad list of MD4s, discarding\n"; end else begin file_md4s_to_register := file :: !file_md4s_to_register; + Int64Swarmer.set_checksums file.file_swarmer + (Array.map (fun m -> Ed2k m) md4s); file.file_md4s <- md4s end @@ -1829,7 +1869,7 @@ M.ConnectReplyReq { C.md4 = overnet_md4; C.ip = client_ip (Some sock); - C.port = !overnet_client_port; + C.port = !!overnet_port; C.tags = !overnet_connectreply_tags; C.server_info = Some (!overnet_server_ip, !overnet_server_port); C.left_bytes = left_bytes; @@ -1852,7 +1892,7 @@ M.ConnectReplyReq { C.md4 = !!client_md4; C.ip = client_ip (Some sock); - C.port = !client_port; + C.port = !!donkey_port; C.tags = !client_to_client_tags; C.server_info = t.CR.server_info; C.left_bytes = left_bytes; @@ -1955,7 +1995,7 @@ M.ConnectReq { C.md4 = overnet_md4; C.ip = client_ip None; - C.port = !overnet_client_port; + C.port = !!overnet_port; C.tags = !overnet_connect_tags; C.version = 16; C.server_info = Some (!overnet_server_ip, @@ -1966,7 +2006,7 @@ M.ConnectReq { C.md4 = !!client_md4; C.ip = client_ip None; - C.port = !client_port; + C.port = !!donkey_port; C.tags = !client_to_client_tags; C.version = 16; C.server_info = Some (server_ip, server_port); diff -Nur ./src/networks/donkey/donkeyComplexOptions.ml ../mldonkey/src/networks/donkey/donkeyComplexOptions.ml --- ./src/networks/donkey/donkeyComplexOptions.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyComplexOptions.ml Wed Aug 4 18:59:26 2004 @@ -316,9 +316,6 @@ None -> () | Some swarmer -> Int64Swarmer.value_to_swarmer swarmer assocs; - add_file_downloaded file.file_file - (Int64Swarmer.downloaded swarmer); - ); (* diff -Nur ./src/networks/donkey/donkeyGlobals.ml ../mldonkey/src/networks/donkey/donkeyGlobals.ml --- ./src/networks/donkey/donkeyGlobals.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyGlobals.ml Wed Aug 4 18:59:26 2004 @@ -136,10 +136,8 @@ E.tags = []; } -let client_port = ref 0 let overnet_connectreply_tags = ref ([] : tag list) let overnet_connect_tags = ref ([] : tag list) -let overnet_client_port = ref 0 let overnet_md4 = Md4.random() let nservers = ref 0 @@ -422,10 +420,14 @@ true)) let new_server ip port score = - let key = (ip, port) in + let key = (ip) in try - Hashtbl.find servers_by_key key - with _ -> + let found = Hashtbl.find servers_by_key key in +(* Is updating port to the most recent value the correct thing to do ? + PlasmaHH says they're legitimate servers switching ports :( *) + found.server_port <- port; + found + with Not_found -> let rec s = { server_server = server_impl; server_next_udp = last_time (); @@ -469,11 +471,11 @@ s let find_server ip port = - let key = (ip, port) in + let key = (ip) in Hashtbl.find servers_by_key key let remove_server ip port = - let key = (ip, port) in + let key = (ip) in let s = Hashtbl.find servers_by_key key in try Hashtbl.remove servers_by_key key; @@ -782,7 +784,6 @@ let overnet_server_ip = ref Ip.null let overnet_server_port = ref 0 - let brand_to_string b = match b with Brand_unknown -> "unknown" @@ -885,6 +886,7 @@ (match tag.tag_value with String s -> s | Uint64 i | Fint64 i -> Int64.to_string i + | Uint16 n | Uint8 n -> string_of_int n | Addr _ -> "addr"); lprintf "\n"; ) tags; diff -Nur ./src/networks/donkey/donkeyInteractive.ml ../mldonkey/src/networks/donkey/donkeyInteractive.ml --- ./src/networks/donkey/donkeyInteractive.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyInteractive.ml Wed Aug 4 18:59:26 2004 @@ -61,7 +61,8 @@ let reconnect_all file = - DonkeyOvernet.recover_file file; + DonkeyProtoOvernet.Overnet.recover_file file; + DonkeyProtoKademlia.Kademlia.recover_file file; (* This is expensive, no ? *) (* DonkeySources.reschedule_sources file; *) @@ -161,7 +162,8 @@ (fun name -> name , { ips=[]; nips=0}) filenames); update_best_name file; - DonkeyOvernet.recover_file file; + DonkeyProtoOvernet.Overnet.recover_file file; + DonkeyProtoKademlia.Kademlia.recover_file file; current_files := file :: !current_files; (* !file_change_hook file; *) @@ -314,7 +316,7 @@ | { tag_name = "name"; tag_value = String s } -> login =:= s | { tag_name = "port"; tag_value = Uint64 v } -> - port =:= Int64.to_int v + donkey_port =:= Int64.to_int v | _ -> () ) ct; @@ -596,10 +598,6 @@ let old_downloaded = Int64Swarmer.downloaded swarmer in Int64Swarmer.set_present swarmer segments; let new_downloaded = Int64Swarmer.downloaded swarmer in - if new_downloaded > old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); - Printf.bprintf buf "Recovered %Ld bytes for %s\n" (new_downloaded -- old_downloaded) (file_best_name file) @@ -619,7 +617,7 @@ ), " ... :\t\t\tadd these IPs to the servers black list"; "port", Arg_one (fun arg o -> - port =:= int_of_string arg; + donkey_port =:= int_of_string arg; "new port will change at next restart"), " :\t\t\t\tchange connection port"; @@ -1047,6 +1045,8 @@ if !!keep_cancelled_in_old_files && not (List.mem file.file_md4 !!old_files) then old_files =:= file.file_md4 :: !!old_files; + DonkeyProtoOvernet.Overnet.cancel_recover_file file; + DonkeyProtoKademlia.Kademlia.cancel_recover_file file; ); file_ops.op_file_comment <- (fun file -> Printf.sprintf "ed2k://|file|%s|%Ld|%s|" diff -Nur ./src/networks/donkey/donkeyMain.ml ../mldonkey/src/networks/donkey/donkeyMain.ml --- ./src/networks/donkey/donkeyMain.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyMain.ml Wed Aug 4 18:59:26 2004 @@ -113,7 +113,8 @@ UdpSocket.close sock Closed_by_user); servers_list := []; if !!enable_donkey then enable_donkey =:= false; - DonkeyOvernet.disable () + DonkeyProtoOvernet.Overnet.disable (); + DonkeyProtoKademlia.Kademlia.disable () end let reset_tags () = @@ -124,16 +125,16 @@ [ string_tag "name" (local_login ()); int_tag "version" protocol_version; - int_tag "emule_udpports" (!!port+4); + int_tag "emule_udpports" (!!donkey_port+4); int_tag "emule_version" m.emule_version; int64_tag "emule_miscoptions1" emule_miscoptions1; - int_tag "port" !client_port; + int_tag "port" !!donkey_port; ]; client_to_server_tags := [ string_tag "name" (local_login ()); int_tag "version" protocol_version; - int_tag "port" !client_port; + int_tag "port" !!donkey_port; ]; if Autoconf.has_zlib then client_to_server_tags := (int_tag "extended" 1)::!client_to_server_tags; @@ -141,7 +142,7 @@ int_tag "compression" (if !!emule_compression then m.emule_compression else 0); int_tag "udpver" m.emule_udpver; - int_tag "udpport" (!!port+4); + int_tag "udpport" (!!donkey_port+4); int_tag "sourceexchange" m.emule_sourceexchange; int_tag "comments" m.emule_comments; int_tag "compatableclient" 10; @@ -152,12 +153,12 @@ overnet_connect_tags := [ string_tag "name" (local_login ()); - int_tag "version" !!DonkeyOvernet.overnet_protocol_connect_version; + int_tag "version" !!DonkeyProtoOvernet.overnet_protocol_connect_version; ]; overnet_connectreply_tags := [ string_tag "name" (local_login ()); - int_tag "version" !!DonkeyOvernet.overnet_protocol_connectreply_version; + int_tag "version" !!DonkeyProtoOvernet.overnet_protocol_connectreply_version; ] let enable () = @@ -243,16 +244,16 @@ let sock = TcpServerSocket.create "donkey client server" (Ip.to_inet_addr !!client_bind_addr) - !!port (client_connection_handler false) in + !!donkey_port (client_connection_handler false) in TcpServerSocket.set_accept_controler sock connections_controler; listen_sock := Some sock; - port =:= new_port; + donkey_port =:= new_port; begin try let sock = (UdpSocket.create (Ip.to_inet_addr !!client_bind_addr) - (!!port + 4) + (!!donkey_port + 4) (udp_handler DonkeyUdp.udp_client_handler)) in udp_sock := Some sock; @@ -267,17 +268,18 @@ if !find_other_port then find_port (new_port+1) else raise e in - let sock = find_port !!port in - DonkeyOvernet.enable enabler; + let sock = find_port !!donkey_port in + DonkeyProtoOvernet.Overnet.enable enabler; + DonkeyProtoKademlia.Kademlia.enable enabler; begin match Unix.getsockname (BasicSocket.fd (TcpServerSocket.sock sock)) with Unix.ADDR_INET (ip, port) -> - client_port := port + assert (!!donkey_port = port); | _ -> failwith "Bad socket address" end; - let port = !client_port in + let port = !!donkey_port in reset_tags (); @@ -365,7 +367,9 @@ CommonInteractive.register_gui_options_panel "eDonkey" gui_donkey_options_panel; CommonInteractive.register_gui_options_panel "Overnet" - DonkeyOvernet.gui_overnet_options_panel + DonkeyProtoOvernet.Overnet.gui_overnet_options_panel; + CommonInteractive.register_gui_options_panel "Kademlia" + DonkeyProtoKademlia.Kademlia.gui_overnet_options_panel let _ = diff -Nur ./src/networks/donkey/donkeyMftp.ml ../mldonkey/src/networks/donkey/donkeyMftp.ml --- ./src/networks/donkey/donkeyMftp.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyMftp.ml Wed Aug 4 18:59:26 2004 @@ -65,6 +65,35 @@ let buf_addr buf (ip,port) = buf_ip buf ip; buf_port buf port + +let buf_tag buf tag names_of_tag = + let name = try rev_assoc tag.tag_name names_of_tag + with _ -> tag.tag_name + in +(* try + let i = rev_assoc name names_of_tag in + String.make 1 (char_of_int i) + with _ -> name *) + match tag.tag_value with + | Uint64 n -> + buf_int8 buf 3; + buf_string buf name; + buf_int64_32 buf n + | Fint64 n -> + buf_int8 buf 4; + buf_string buf name; + buf_int64_32 buf n + | Addr ip -> assert false + | String s -> + buf_int8 buf 2; + buf_string buf name; + buf_string buf s + | Uint16 n -> + buf_int8 buf 8; + buf_int16 buf n + | Uint8 n -> + buf_int8 buf 9; + buf_int8 buf n let rec buf_tags buf tags names_of_tag = buf_int buf (List.length tags); @@ -72,30 +101,7 @@ match tags with [] -> () | tag :: tags -> - let name = try rev_assoc tag.tag_name names_of_tag - with _ -> tag.tag_name - in -(* try - let i = rev_assoc name names_of_tag in - String.make 1 (char_of_int i) - with _ -> name *) - begin - match tag.tag_value with - | Uint64 n -> - buf_int8 buf 3; - buf_string buf name; - buf_int64_32 buf n - | Fint64 n -> - buf_int8 buf 4; - buf_string buf name; - buf_int64_32 buf n - | Addr ip -> assert false - | String s -> - buf_int8 buf 2; - buf_string buf name; - buf_string buf s - - end; + buf_tag buf tag names_of_tag; iter_tags tags in iter_tags tags @@ -138,7 +144,7 @@ let get_string = get_string16 -let get_tag s pos names_of_tag = +let get_tag names_of_tag s pos = let t = get_uint8 s pos in let name, pos2 = get_string s (pos+1) in (* lprintf "tag name = %s" (String.escaped name); *) @@ -149,6 +155,10 @@ Uint64 v, pos2+4 | 4 -> let v = get_uint64_32 s pos2 in Fint64 v, pos2+4 + | 8 -> let v = get_int16 s pos2 in + Uint16 v, pos2 + 2 + | 9 -> let v = get_uint8 s pos2 in + Uint8 v, pos2 + 1 | _ -> lprintf "get_tags: unknown tag %d at pos %d\n" t pos; raise Not_found @@ -165,7 +175,7 @@ let get_tags s pos names_of_tag = let rec iter_tags ntags pos tags = if ntags = 0 then List.rev tags, pos else - let tag, pos = get_tag s pos names_of_tag in + let tag, pos = get_tag names_of_tag s pos in iter_tags (ntags-1) pos (tag :: tags) in iter_tags (get_int s pos) (pos+4) [] diff -Nur ./src/networks/donkey/donkeyMftp.mli ../mldonkey/src/networks/donkey/donkeyMftp.mli --- ./src/networks/donkey/donkeyMftp.mli Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyMftp.mli Wed Aug 4 18:59:26 2004 @@ -31,12 +31,16 @@ val buf_addr : Buffer.t -> Ip.t * int -> unit val buf_tags : Buffer.t -> CommonTypes.tag list -> (string * string) list -> unit +val buf_tag : + Buffer.t -> CommonTypes.tag -> (string * string) list -> unit (*val read_uint8 : in_channel -> int32 val read_uint32 : in_channel -> int32 *) val read_request : in_channel -> string val output_request : out_channel -> string -> unit val get_port : string -> int -> int val get_string : string -> int -> string * int +val get_tag : + (string * string) list -> string -> int -> CommonTypes.tag * int val get_tags : string -> int -> (string * string) list -> CommonTypes.tag list * int val get_peer : string -> int -> (Ip.t * int) * int diff -Nur ./src/networks/donkey/donkeyOneFile.ml ../mldonkey/src/networks/donkey/donkeyOneFile.ml --- ./src/networks/donkey/donkeyOneFile.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyOneFile.ml Wed Aug 4 18:59:26 2004 @@ -47,439 +47,6 @@ open DonkeyChunks open DonkeyReliability open DonkeyStats - - (* - (* - -let new_block file i = - - let begin_pos = chunk_pos i in - let end_pos = chunk_end file i in - { - block_present = false; - block_begin = begin_pos; - block_end = end_pos; - block_legacy = true; - block_nclients = 0; - block_contributors = []; - block_zones = []; - block_pos = i; - block_file = file; - } - -let zone_present z = - z.zone_begin >= z.zone_end - -let sort_zones b = - let zones = List.fold_left (fun zones z -> - if zone_present z then zones else z :: zones - ) [] b.block_zones - in - b.block_zones <- Sort.list (fun z1 z2 -> - z1.zone_nclients < z2.zone_nclients || - (z1.zone_nclients == z2.zone_nclients && - z1.zone_begin < z2.zone_begin) - ) zones - - -let rec create_zones file begin_pos end_pos list = -(* lprintf "create_zones for %ld-%ld\n" - begin_pos end_pos; - *) - if begin_pos = end_pos then list - else - let zone_end = Int64.add begin_pos zone_size in -(* lprintf "ZONE END %ld\n" zone_end; *) - let zone_end2 = if zone_end > end_pos then begin -(* lprintf "%ld > %ld\n" zone_end - end_pos; -*) - end_pos - - end else zone_end in -(* lprintf "CORRECTED ZONE END %ld\n" zone_end; *) - create_zones file zone_end2 end_pos ({ - zone_begin = begin_pos; - zone_end = zone_end2; - zone_nclients = 0; - } :: list ) - - *) - -let clean_client_zones c = - match c.client_block with None -> () - | Some b -> - c.client_block <- None; -(* lprintf "client %d: clear block %d\n" (client_num c) b.block_pos; *) - b.block_nclients <- b.block_nclients - 1; - List.iter (fun z -> - z.zone_nclients <- z.zone_nclients - 1) c.client_zones; - sort_zones b; - c.client_zones <- [] - -let query_zones c b = - let file = client_file c in - sort_zones b; - match c.client_sock with - | Connection sock -> - - set_rtimeout sock !queue_timeout; - let module M = DonkeyProtoClient in - let module Q = M.QueryBloc in - let msg, len = - match c.client_zones with - [z] -> - { - Q.md4 = file.file_md4; - Q.start_pos1 = z.zone_begin; - Q.end_pos1 = z.zone_end; - Q.start_pos2 = Int64.zero; - Q.end_pos2 = Int64.zero; - Q.start_pos3 = Int64.zero; - Q.end_pos3 = Int64.zero; - }, Int64.to_int (Int64.sub z.zone_end z.zone_begin) - - | [z1;z2] -> - { - Q.md4 = file.file_md4; - Q.start_pos1 = z1.zone_begin; - Q.end_pos1 = z1.zone_end; - Q.start_pos2 = z2.zone_begin; - Q.end_pos2 = z2.zone_end; - Q.start_pos3 = Int64.zero; - Q.end_pos3 = Int64.zero; - }, Int64.to_int (Int64.sub z1.zone_end z1.zone_begin) - - | [z1;z2;z3] -> - { - Q.md4 = file.file_md4; - Q.start_pos1 = z1.zone_begin; - Q.end_pos1 = z1.zone_end; - Q.start_pos2 = z2.zone_begin; - Q.end_pos2 = z2.zone_end; - Q.start_pos3 = z3.zone_begin; - Q.end_pos3 = z3.zone_end; - }, Int64.to_int (Int64.sub z1.zone_end z1.zone_begin) - - | _ -> assert false - in - let msg = M.QueryBlocReq msg in - set_read_power sock (c.client_power + maxi 0 (file_priority file)); - CommonUploads.queue_download_request (fun _ -> - direct_client_send c msg) len - | _ -> assert false - - - -(* create a list with all absent intervals *) - -let put_absents file = - - let temp_chunk chunk = - match chunk with - PresentTemp | AbsentTemp | PartialTemp _ -> true - | _ -> false - in - - let rec iter_chunks_in i zs = -(* lprintf "iter_chunks_in %d\n" i; *) - if i < file.file_nchunks then - match zs with - [] -> () - | (begin_pos, end_pos) :: tail -> - (* - lprintf "begin_pos %Ld (chnk end %Ld)\n" begin_pos - (chunk_end file i); *) - if begin_pos >= chunk_end file i then - iter_chunks_in (i+1) zs - else - if end_pos <= chunk_pos i then - iter_chunks_in i tail - else - if begin_pos <= chunk_pos i && end_pos >= chunk_end file i then begin -(* lprintf "full absent chunk %d\n" i; *) - file.file_chunks.(i) <- ( - if temp_chunk file.file_chunks.(i) then AbsentTemp else - AbsentVerified); - iter_chunks_in (i+1) ((chunk_end file i, end_pos) :: tail) - end else - - let b = new_block file i in -(* lprintf "new_block %d\n" i; *) - file.file_chunks.(i) <- (if temp_chunk file.file_chunks.(i) then - PartialTemp b else PartialVerified b); - iter_blocks_in i b zs - - and iter_blocks_in i b zs = -(* lprintf "iter_blocks_in %d\n" i; *) - match zs with - [] -> - sort_zones b - | (begin_pos, end_pos) :: tail -> - if begin_pos >= b.block_end then begin -(* lprintf "need sort_zones...\n"; *) - sort_zones b; - iter_chunks_in (i+1) zs - end - else - if end_pos >= b.block_end then begin -(* lprintf "need create_zones and sort_zones...\n"; *) - b.block_zones <- create_zones file begin_pos b.block_end - b.block_zones; - sort_zones b; - iter_chunks_in (i+1) ((b.block_end, end_pos) :: tail) - end else begin -(* lprintf "need create_zones ...\n"; *) - b.block_zones <- create_zones file begin_pos end_pos b.block_zones; - iter_blocks_in i b tail - end - - - in - - (* - lprintf "nchunks %d\n" file.file_nchunks; - - List.iter (fun (i1,i2) -> - lprintf "ABSENT: %Ld-%Ld\n" i1 i2; - ) file.file_absent_chunks; -*) - - iter_chunks_in 0 file.file_absent_chunks - - -let print_time tm = - let module U = Unix in - lprintf "TIME %d/%d/%d %2d:%02d:%02d\n" - tm.U.tm_mday tm.U.tm_mon tm.U.tm_year - tm.U.tm_hour tm.U.tm_min tm.U.tm_sec - -exception Block_selected - -let rec find_client_zone c = - match c.client_block with - None -> - find_client_block c - | Some b -> -(* client_zones : les zones en cours de telechargement *) -(* block_zones : les zones disponibles pour telechargement *) -(* - lprintf "Current zones for client:"; - List.iter (fun z -> - lprintf "zone: %ld-%ld" - (z.zone_begin) (z.zone_end) - ) c.client_zones; -lprint_newline (); - *) - let z = match c.client_zones with - | [z1] -> if zone_present z1 then [] else [z1] - | [z1;z2] -> - let z = if zone_present z2 then [] else [z2] in - if zone_present z1 then z else z1 :: z - | [z1;z2;z3] -> - let z = if zone_present z3 then [] else [z3] in - let z = if zone_present z2 then z else z2 :: z in - if zone_present z1 then z else z1 :: z - | _ -> [] - - in - let rem_zones = List.length b.block_zones in -(* lprintf "Remaining %d zones\n" rem_zones; *) - match z with - [z1;z2;z3] -> () - | [z1;z2] when rem_zones <= 2 -> () - | [z1] when rem_zones <= 1 -> () - | [z1;z2] -> find_zone3 c b z1 z2 b.block_zones - | [z1] -> find_zone2 c b z1 b.block_zones - | _ -> find_zone1 c b b.block_zones - -and print_client_zones n b c = - (match c.client_block with - None -> lprintf "\n%d: CLIENT ZONES WITH NO BLOCK %d\n" - (client_num c) n; - | Some bb -> - if b != bb then begin - lprintf "\n%d: CLIENT ZONES WITH BAD BLOCK %d\n" - (client_num c) n; - end); - if !verbose then begin - lprintf "\n%d: ZONES IN %d" (client_num c) n; - List.iter (fun z -> - lprintf " [%Ld - %Ld]\n" (z.zone_begin)(z.zone_end); - ) c.client_zones; - lprint_newline (); - end; - -and find_zone3 c b z1 z2 zones = - match zones with - [] -> - c.client_zones <- [z1;z2]; - print_client_zones 1 b c; - query_zones c b - | z :: zones -> - if (not (zone_present z)) && z != z1 && z != z2 then begin - c.client_zones <- [z1;z2;z]; - print_client_zones 2 b c; - z.zone_nclients <- z.zone_nclients + 1; - query_zones c b - end - else find_zone3 c b z1 z2 zones - -and find_zone2 c b z1 zones = - match zones with - [] -> - c.client_zones <- [z1]; - print_client_zones 3 b c; - query_zones c b - | z :: zones -> - if (not (zone_present z)) && z != z1 then begin - z.zone_nclients <- z.zone_nclients + 1; - find_zone3 c b z1 z zones - end - else find_zone2 c b z1 zones - -and find_zone1 c b zones = - let file = client_file c in - match zones with - [] -> - begin -(* no block to download !! *) - c.client_zones <- []; - printf_string "[BLOCK]"; - b.block_present <- true; - b.block_nclients <- b.block_nclients - 1; - file.file_chunks.(b.block_pos) <- PresentTemp; - let state = verify_chunk file b.block_pos in - if state = PresentVerified then begin - valid_block_detected b; - file.file_chunks.(b.block_pos) <- state; - file.file_absent_chunks <- List.rev (find_absents file); -(* lprintf "client %d: block %d finished\n" (client_num c) b.block_pos; *) - c.client_block <- None; - end else begin - let message = Printf.sprintf "CORRUPTION DETECTED file %s chunk %d\n" (file_best_name file) b.block_pos in - CommonEvent.add_event (Console_message_event message); - corrupted_block_detected b; - b.block_zones <- create_zones file b.block_begin b.block_end []; - b.block_present <- false; - b.block_legacy <- false; - b.block_contributors <- []; - add_file_downloaded file.file_file - (Int64.sub b.block_begin b.block_end); (* negative *) - file.file_chunks.(b.block_pos) <- PartialVerified b; - Hashtbl.iter (fun _ c -> - match c.client_block with - Some cb when cb == b -> - lprintf "client %d: block %d corrupted\n" - (client_num c) b.block_pos; - c.client_block <- None - | _ -> () - ) connected_clients - - end; - end; - find_client_block c - - | z :: zones -> - if (not (zone_present z)) then begin - z.zone_nclients <- z.zone_nclients + 1; - find_zone2 c b z zones - end else - find_zone1 c b zones - -and zero_block file i = -(* disk fragmentation prevention: - This should help the bad filesystems, and the others too ;) - When a chunk is about to be used for the first time, zero it, - allocating all the disk space at once *) - try - match file.file_chunks.(i) with - AbsentTemp | AbsentVerified -> - let chunk_begin = chunk_pos i in - Unix32.allocate_chunk (file_fd file) chunk_begin - (Int64.to_int ((chunk_end file i) -- chunk_begin)) -(* -(* lprintf "Allocating disk space\n"; *) - let final_pos = Unix32.seek64 (file_fd file) - chunk_begin Unix.SEEK_SET in - if final_pos <> chunk_begin then begin - lprintf "BAD LSEEK %Ld/%Ld\n" - (final_pos) - (chunk_begin); - raise Not_found - end; - let fd = try - Unix32.force_fd (file_fd file) - with e -> - lprintf "In Unix32.force_fd\n"; - raise e - in - let buffer_size = 128 * 1024 in - let buffer = String.make buffer_size '\001' in - let remaining = ref (Int64.to_int (Int64.sub (chunk_end file i) chunk_begin)) in - while !remaining > 0 do - let len = mini !remaining buffer_size in - Unix2.really_write fd buffer 0 len; - remaining := !remaining - len; - done; -*) - - | _ -> lprintf "Trying to zero some existing chunk!!\n"; - with _ -> () - -and check_file_block c file i max_clients force = - if c.client_chunks.(i) then begin - begin - match file.file_chunks.(i) with - AbsentTemp | PartialTemp _ -> - lprintf "check_file_block: verify md4\n"; - verify_file_md4 file i file.file_chunks.(i) - | _ -> () - end; - - match file.file_chunks.(i) with - - | AbsentVerified -> - let b = new_block file i in - b.block_zones <- create_zones file b.block_begin b.block_end []; - - b.block_nclients <- 1; - if !verbose then begin - lprintf "\n%d: NEW BLOCK [%Ld - %Ld]\n" (client_num c) - (b.block_begin) (b.block_end); - end; - zero_block file i; - b.block_legacy <- false; - c.client_block <- Some b; -(* lprintf "client %d: downloading %d absent\n" - (client_num c) b.block_pos; *) - - file.file_chunks.(i) <- PartialVerified b; - find_client_zone c; - raise Block_selected - - | PartialVerified b -> - if b.block_nclients < max_clients && - (not !!reliable_sources || - allowed_by_reliability b c >= force) then begin - b.block_nclients <- b.block_nclients + 1; - c.client_block <- Some b; -(* lprintf "client %d: downloading partial block %d \n" - (client_num c) b.block_pos; *) - - if !verbose then begin - lprintf "\n%d: NEW CLIENT FOR BLOCK [%Ld - %Ld]\n" - (client_num c) - (b.block_begin) (b.block_end); - end; - - file.file_chunks.(i) <- PartialVerified b; - find_client_zone c; - raise Block_selected - end - | _ -> () - end -*) (* Sort files in clients file queue in order of priority and percentage downloaded This way higher priority files will be asked/downloaded first if the client does have more @@ -532,653 +99,6 @@ *) end -(* -and start_download c = - if c.client_slot = SlotNotAsked then begin - if !verbose_download then begin - lprintf "start_download...\n"; - end; - do_if_connected c.client_sock (fun sock -> - sort_file_queue c; - match c.client_file_queue with - [] -> () - | (file, (chunks)) :: _ -> - - direct_client_send c ( - let module M = DonkeyProtoClient in - let module Q = M.JoinQueue in - M.JoinQueueReq Q.t); - c.client_slot <- SlotAsked; - - restart_download c - ) - end - -and restart_download c = - if !verbose_download || c.client_debug then begin - lprintf "restart_download...\n"; - end; - do_if_connected c.client_sock (fun sock -> - sort_file_queue c; - match c.client_file_queue with - [] -> () - | (file, (chunks)) :: _ -> - -(* lprintf "client %d: restart download\n" (client_num c) ; *) - - c.client_block <- None; - c.client_chunks <- chunks; - c.client_all_chunks <- String.make file.file_nchunks '0'; - c.client_zones <- []; - - for i = 0 to file.file_nchunks - 1 do - if c.client_chunks.(i) then - c.client_all_chunks.[i] <- '1'; - done; - if file.file_md4s = [] && file_size file > block_size then begin - direct_client_send c ( - let module M = DonkeyProtoClient in - let module C = M.QueryChunkMd4 in - M.QueryChunkMd4Req file.file_md4); - end; - set_rtimeout sock !!queued_timeout; - set_client_state c (Connected 0) - ) - -and find_client_block c = -(* find an available block *) - - if !verbose_download || c.client_debug then begin - lprintf "find_client_block: started\n"; - end; - sort_file_queue c; - match c.client_file_queue with - [] -> -(* Emule may reconnect and give the slot without us asking for it. - We have to fix this behavior in the future. *) - if !verbose_download || c.client_debug then begin - lprintf "Client %d: NO FILE IN QUEUE\n" (client_num c); - end - - | (file, (chunks)) :: files -> - - if !verbose_download || c.client_debug then begin - lprintf "File %s state %s\n" - (file_best_name file) - (string_of_file_state - (file_state file)); - end; - if file_state file <> FileDownloading then next_file c else - - if !verbose_download || c.client_debug then begin - lprintf "find_client_block: continuing\n"; - end; - - if !verbose || c.client_debug then begin - for i = 0 to file.file_nchunks - 1 do - lprint_char (match file.file_chunks.(i) with - | PartialVerified _ -> 'P' - | PartialTemp _ -> 'p' - | AbsentVerified -> 'A' - | AbsentTemp -> 'a' - | PresentVerified -> 'D' - | PresentTemp -> 'd') - done; - lprint_newline (); - end; - - - begin - match c.client_block with - None -> - printf_string "[FREE]"; - | Some _ -> - printf_string "[USED]"; - end; - - try -(* only break reliability barriers when in need *) - for force = 1 to (if !!reliable_sources then 4 else 1) do - - let last = file.file_nchunks - 1 in - - if !!random_order_download then begin - - if !verbose_download || c.client_debug then begin - lprintf "find_client_block: random_order_download\n"; - end; - - let proportional_check_file_block c file i force = - let n = 1 + (((!!sources_per_chunk-1) * Int64.to_int (chunk_compute_missing file i)) / Int64.to_int block_size) in - check_file_block c file i n force in - - if c.client_chunks.(last) && - (match file.file_chunks.(last) with - PresentTemp | PresentVerified -> false - | _ -> true) && - file.file_available_chunks.(last) >= 10 then - proportional_check_file_block c file last force; - - if c.client_chunks.(0) && - (match file.file_chunks.(0) with - PresentTemp | PresentVerified -> false - | _ -> true) && - file.file_available_chunks.(0) >= 10 then - proportional_check_file_block c file 0 force; - -(* chunks with MD4 already computed *) - for i = 0 to last do - let j = file.file_chunks_order.(i) in - if c.client_chunks.(j) && - (match file.file_chunks.(j) with - AbsentVerified -> true - | PartialVerified b -> true - | _ -> false - ) then - proportional_check_file_block c file j force - done; - -(* chunks whose computation will probably lead to only one MD4 *) - for i = 0 to last do - let j = file.file_chunks_order.(i) in - if c.client_chunks.(j) && - (match file.file_chunks.(j) with - AbsentTemp -> true - | PartialTemp b -> true - | _ -> false - ) then - proportional_check_file_block c file j force - done; - -(* rare chunks *) -(* while different clients should try to get different chunks, each client - should try to complete the chunks it started: if the rare sources - disappear, all partial chunks will become useless *) - let min_availability = ref max_int in - let max_availability = ref 0 in - for i = 0 to last do - if c.client_chunks.(i) then begin - if file.file_available_chunks.(i) < !min_availability then - min_availability := file.file_available_chunks.(i); - if file.file_available_chunks.(i) > !max_availability then - max_availability := file.file_available_chunks.(i) - end - done; - - let rare_level = !max_availability / 2 in - if !min_availability <= rare_level then - for i = 0 to last do - let j = file.file_chunks_order.(i) in - if c.client_chunks.(j) && - file.file_available_chunks.(j) <= rare_level then - check_file_block c file j max_int force - done; - -(* chunks with few clients *) - for i = 0 to last do - let j = file.file_chunks_order.(i) in - proportional_check_file_block c file j force - done; - -(* chunks with several clients *) - for i = 0 to last do - let j = file.file_chunks_order.(i) in - check_file_block c file j max_int force - done; - - end else begin - - if !verbose_download then begin - lprintf "find_client_block: NOT RANDOM ORDER (last = %d)\n" - last; - - end; - - if c.client_chunks.(last) then - check_file_block c file last max_int force; - if last > 0 && c.client_chunks.(last-1) then - check_file_block c file (last-1) max_int force; - -(* chunks with MD4 already computed *) - for i = 0 to file.file_nchunks - 1 do - if c.client_chunks.(i) && (match file.file_chunks.(i) with - AbsentVerified -> true - | PartialVerified b -> true - | _ -> false - ) then - check_file_block c file i !!sources_per_chunk force - done; - -(* chunks whose computation will probably lead to only one MD4 *) - for i = 0 to file.file_nchunks - 1 do - if c.client_chunks.(i) && (match file.file_chunks.(i) with - AbsentTemp -> true - | PartialTemp b -> true - | _ -> false - ) then - check_file_block c file i !!sources_per_chunk force - done; - -(* rare chunks *) - let rare_blocks = ref [] in - for i = 0 to file.file_nchunks - 1 do - if c.client_chunks.(i) && file.file_available_chunks.(i) = 1 then - rare_blocks := (Random.int 1000, i) :: !rare_blocks - done; - - let rare_blocks = Sort.list (fun (c1,_) (c2,_) -> c1 <= c2) - !rare_blocks in - - List.iter (fun (_,i) -> - check_file_block c file i max_int force) rare_blocks; - -(* chunks with no client *) - check_file_block c file last max_int force; - if last > 0 then check_file_block c file (last-1) max_int force; - for i = 0 to file.file_nchunks - 1 do - check_file_block c file i !!sources_per_chunk force - done; - -(* chunks with several clients *) - for i = 0 to file.file_nchunks - 1 do - check_file_block c file i max_int force - done - - end - done; - - if !verbose_download || c.client_debug then begin - lprintf "No block found ???\n"; - for i = 0 to file.file_nchunks - 1 do - - lprintf "%d: client %c source %s" - i - (if chunks.(i) then '1' else '0') - (match file.file_chunks.(i) with - PresentTemp -> "p" - | PresentVerified -> "P" - | AbsentTemp -> "a" - | AbsentVerified -> "A" - | PartialTemp _ -> "d" - | PartialVerified _ -> "D"); - lprint_newline (); - done; - end; - - -(* THIS CLIENT CANNOT HELP ANYMORE: USELESS FOR THIS FILE *) - printf_string "[NEXT]"; - next_file c - with - Block_selected -> () - | e -> - if !verbose_download || c.client_debug then begin - lprintf "find_client_block: exception %s\n" - (Printexc2.to_string e); - () - end - -and next_file c = - - lprintf "next_file...\n"; - match c.client_file_queue with - [] -> assert false - | (file, (chunks) ) :: files -> - DonkeyGlobals.remove_client_chunks file chunks; - do_if_connected c.client_sock (fun sock -> - match files with - [] -> - lprintf "next_file: no more file\n"; - if not (client_has_a_slot (as_client c.client_client)) then begin - connection_delay c.client_connection_control; -(* This guy could still want to upload from us !!! *) - TcpBufferedSocket.close sock - (Closed_for_error "No file to download"); - raise Block_selected - end - | _ -> - c.client_file_queue <- files; - restart_download c - ) - -let disconnect_chunk ch = - match ch with - | PartialTemp b | PartialVerified b -> - let file = b.block_file in - b.block_present <- true; - List.iter (fun z -> - z.zone_begin <- file_size file; - ) b.block_zones; - b.block_zones <- [] - | AbsentTemp | AbsentVerified | PresentTemp | PresentVerified -> () - -let random_chunks_order nchunks = - let order = Array.create nchunks 0 in - for i = 0 to nchunks - 1 do - order.(i) <- i - done; -(* Fisher-Yates shuffle *) - for i = nchunks-1 downto 1 do - let j = Random.int (i+1) in - if i <> j then - let temp = order.(i) in - order.(i) <- order.(j); - order.(j) <- temp - done; - order - -let set_file_size file sz = - - if sz <> Int64.zero then begin - - if file_size file = Int64.zero then - file.file_absent_chunks <- [Int64.zero, sz]; - file.file_file.impl_file_size <- sz; - file.file_nchunks <- Int64.to_int (Int64.div - (Int64.sub sz Int64.one) block_size)+1; - - if file.file_chunks = [||] then - file.file_chunks <- Array.create file.file_nchunks ( - if not (Unix32.file_exists (file_disk_name file)) then begin -(* lprintf "Setting Absent Verified chunks\n"; *) - - AbsentVerified - end else begin -(* lprintf "Setting Absent Verified chunks\n"; *) - AbsentTemp - - end); - - file.file_chunks_order <- random_chunks_order file.file_nchunks; - - Unix32.ftruncate64 (file_fd file) sz; (* at this point, file exists *) - - put_absents file; - - file.file_initialized <- true; - - (* - lprintf "AFTER put_absents:\n"; - for i = 0 to file.file_nchunks - 1 do - lprintf " chunk[%d]: %s" i - (match file.file_chunks.(i) with - PresentVerified -> - "shared" - | AbsentVerified -> "absent" - | PartialVerified _ -> "partial" - | PartialTemp _ -> "partial compute" - | AbsentTemp -> "absent compute" - | PresentTemp -> "present compute"); - lprint_newline (); - done; -*) - - for i = 0 to file.file_nchunks - 1 do - match file.file_chunks.(i) with - PresentVerified -> - DonkeyShare.must_share_file file; - | _ -> () - done; - - - compute_size file; - (* verify_chunks file; *) - -(* - List.iter (fun (p0,p1) -> -lprintf "%ld <---> %ld\n" (p0) (p1); -) file.file_absent_chunks; - *) - end - - -(* - - B--------------------------------------------------E OK - B--------------------E OK - B-------------------------------E OK - B-----E OUT - B-----------E OUT - B----E OUT -----------------|----------------------------|--------------------- - z.zone_begin z.zone_end - - -*) - - -let update_zone file begin_pos end_pos z = - if z.zone_begin >= begin_pos && z.zone_end <= end_pos then begin -(* the zone has completely been downloaded *) - - add_file_downloaded file.file_file (Int64.sub z.zone_end z.zone_begin); - - if file_downloaded file > file_size file then begin - lprintf "******* downloaded %Ld > %Ld size after update_zone ***** for %s\n" - (file_downloaded file) - (file_size file) - (file_best_name file); - end; - - file_must_update file; - z.zone_begin <- z.zone_end; - if !verbose && end_pos > z.zone_end then begin - lprintf "EXCEEDING: %Ld>%Ld\n" (end_pos) - (z.zone_end); - end - - end else - if z.zone_begin >= begin_pos && z.zone_begin < end_pos then begin -(* the block is at the beginning of the zone *) - - add_file_downloaded file.file_file (Int64.sub end_pos z.zone_begin); - if file_downloaded file > file_size file then begin - lprintf "******* downloaded %Ld > %Ld size after update_zone (2) ***** for %s\n" - (file_downloaded file) - (file_size file) - (file_best_name file); - end; - - z.zone_begin <- end_pos; - file_must_update file; - - - end else - if z.zone_end > begin_pos && z.zone_end <= end_pos then begin -(* the block is at the end of the zone *) - - add_file_downloaded file.file_file (Int64.sub z.zone_end begin_pos); - if file_downloaded file > file_size file then begin - lprintf "******* downloaded %Ld > %Ld size after update_zone (3) ***** for %s\n" - (file_downloaded file) - (file_size file) - (file_best_name file); - end; - - z.zone_end <- begin_pos; - file_must_update file; - - - - end - -(* else begin - if !verbose then begin - lprintf "CAN'T UPDATE ZONE %ld-%ld WITH %ld-%ld\n" - (z.zone_begin) - (z.zone_end) - (begin_pos) - (end_pos) - end - end -*) - -(* -let best_name file = - match file.file_filenames with - [] -> Md4.to_string file.file_md4 - | name :: _ -> name - *) - - (* -let move_file_to_done_files md4 = - try - let file = Hashtbl.find files_by_md4 md4 in - file_completed (as_file file.file_file); - - with e -> - lprintf "move_file_to_done_files NOT FOUND\n"; - raise e - *) - -(* -let remove_file md4 = - try - let file = Hashtbl.find files_by_md4 md4 in - file_cancel (as_file file.file_file); - Unix32.close (file_fd file); - (try Sys.remove (file_disk_name file) with e -> - lprintf "Exception %s in remove %s\n" - (Printexc2.to_string e) (file_disk_name file); - ); - (try Hashtbl.remove files_by_md4 file.file_md4 with _ -> ()); - (match file.file_shared with - None -> () - | Some s -> CommonShared.shared_unshare (CommonShared.as_shared s)); - file.file_shared <- None; -(* !file_change_hook file; *) - current_files := List2.removeq file !current_files; - with e -> - lprintf "remove_file NOT FOUND\n"; - raise e - *) - -(* -This function is called periodically, to compute md4s of files being -downloaded. If a file is completely present, it is only added to the -downloaded list when all chunks have been verified. -*) - -let check_downloaded_files () = - List.iter check_file_downloaded !current_files; - (try - List.iter (fun file -> - if file.file_md4s <> [] then -(* First check only md4s of potentially present chunks. This -will allow to fasten the sharing of these chunks. *) - Array.iteri (fun i b -> - match b with - | PresentTemp -> -(* lprintf "verify file md4 %d %d\n" - file.file_num i; *) - verify_file_md4 file i b; - compute_size file; - raise Not_found - | _ -> () - ) file.file_chunks) !current_files; - List.iter (fun file -> - if file.file_md4s <> [] then -(* First check only md4s of potentially present chunks *) - Array.iteri (fun i b -> - match b with - PartialVerified _ | AbsentVerified - | PresentVerified -> () - | _ -> -(* lprintf "verify file md4 %d %d\n" - file.file_num i; *) - verify_file_md4 file i b; - compute_size file; - raise Not_found - ) file.file_chunks - ) !current_files; - with _ -> ()) - -let check_files_md4s () = - try - check_downloaded_files (); - DonkeyShare.check_shared_files (); - - with _ -> () - -let _ = - file_ops.op_file_to_option <- (fun file -> - if file.file_chunks <> [||] && file.file_initialized then begin - file.file_absent_chunks <- List.rev (find_absents file); - check_file_downloaded file; - end; - file_to_value file) - -let client_has_chunks c file chunks = - - failwith "client_has_chunks not implemented" - - add_file_location file c; - - if file.file_chunks_age = [||] then - file.file_chunks_age <- Array.create file.file_nchunks 0; - let change_last_seen = ref false in - let chunks_string = String.make file.file_nchunks '0' in - for i = 0 to file.file_nchunks - 1 do - if chunks.(i) then chunks_string.[i] <- '1'; - match file.file_chunks.(i) with - PresentVerified | PresentTemp -> - file.file_chunks_age.(i) <- last_time () - | _ -> - if chunks.(i) then begin - change_last_seen := true; - file.file_chunks_age.(i) <- last_time (); - set_request_result c file File_chunk; - end - done; - - if !change_last_seen then begin - try - if !verbose_download then begin - lprintf "client_has_chunks: change_last_seen\n"; - end; - - let last_seen = Array2.min file.file_chunks_age in - if last_seen > file.file_file.impl_file_last_seen then - begin - file.file_file.impl_file_last_seen <- last_seen; - file_must_update_downloaded (as_file file.file_file); - - end; - - CommonEvent.add_event (File_update_availability - (as_file file.file_file, as_client c.client_client, chunks_string)); - - ( -(* - try - - let (c1, c2) = List.assq file c.client_file_queue in - remove_client_chunks file c1; - add_client_chunks file chunks; - - let len = Array.length c1 in - Array.blit chunks 0 c1 0 len; - Array.blit chunks 0 c2 0 len; - -with Not_found -> - *) - add_client_chunks file chunks; - if !verbose_download then begin - lprintf "client_file_queue: ADDING FILE TO QUEUE\n"; - end; - c.client_file_queue <- c.client_file_queue @ [ - file, chunks ] - ); - start_download c - - with _ -> - if !verbose_download then begin - lprintf "client_has_chunks: EXCEPTION\n"; - end - end - -*) - (** What to do when a file is finished @param file the finished file *) @@ -1504,151 +424,12 @@ *) - if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); if new_downloaded -- old_downloaded < len64 then if !verbose_download then begin lprintf "ALREADY RECEIVED: %Ld < %Ld\n" (new_downloaded -- old_downloaded) len64; end; get_from_client c - -(* - - begin - match c.client_block with - None -> - printf_string "NO BLOCK EXPECTED FROM CLIENT"; - raise Not_found - | Some bb -> - let str_begin = Int64.of_int t.Q.bloc_begin in - - if bb.block_present || begin_pos < bb.block_begin - || begin_pos >= bb.block_end || end_pos > bb.block_end - then - let chunk_num = Int64.to_int (Int64.div begin_pos block_size) - in - lprintf "%d: Exceeding block boundaries\n" (client_num c); - - lprintf "%Ld-%Ld (%Ld-%Ld)\n" - (begin_pos) (end_pos) - (bb.block_begin) (bb.block_end) - ; - - List.iter (fun z -> - lprintf "zone: %Ld-%Ld" - (z.zone_begin) (z.zone_end) - ) c.client_zones; - -(* try to recover the corresponding block ... *) - - if bb.block_pos <> chunk_num then begin - lprintf "OLD BLOCK %d <> %d\n" bb.block_pos chunk_num; - end else - ( - match file.file_chunks.(chunk_num) with - PresentTemp | PresentVerified -> - lprintf "ALREADY PRESENT\n"; - -(* Here, we should probably try to find a new block !! *) - DonkeyOneFile.clean_client_zones c; - DonkeyOneFile.find_client_block c - - | AbsentTemp | AbsentVerified -> - lprintf "ABSENT (not implemented)\n"; -(* We receive information for a block we have not asked !! *) - - | PartialTemp b | PartialVerified b -> - - if b != bb then begin - lprintf "BLOCK DISAGREEMENT\n"; - end else begin - lprintf "PARTIAL\n"; - -(* try to find the corresponding zone *) - List.iter (fun z -> - if z.zone_begin >= begin_pos && - end_pos > z.zone_begin then begin - lprintf "BEGIN ZONE MATCHES\n"; - end else - if z.zone_begin < begin_pos && - begin_pos < z.zone_end && - z.zone_end < end_pos then begin - lprintf "END ZONE MATCHES\n"; - end - - ) b.block_zones - end - ); - raise Not_found - else - try - begin - if c.client_connected then - printf_string "#[OUT]" - else - printf_string "#[IN]"; - - try - if !!buffer_writes then - Unix32.buffered_write (file_fd file) - else - Unix32.write (file_fd file) begin_pos - t.Q.bloc_str t.Q.bloc_begin t.Q.bloc_len - -(* - let final_pos = Unix32.seek64 (file_fd file) - begin_pos Unix.SEEK_SET in - if final_pos <> begin_pos then begin - lprintf "BAD LSEEK %Ld/%Ld\n" - (final_pos) - (begin_pos); - raise Not_found - end; - if c.client_connected then - printf_string "#[OUT]" - else - printf_string "#[IN]"; - -(* if !verbose then begin - lprintf "{%d-%d = %Ld-%Ld}\n" (t.Q.bloc_begin) - (t.Q.bloc_len) (begin_pos) - (end_pos); - end; *) - let fd = try - Unix32.force_fd (file_fd file) - with e -> - lprintf "In Unix32.force_fd\n"; - raise e - in - Unix2.really_write fd t.Q.bloc_str t.Q.bloc_begin t.Q.bloc_len; -*) - end; - (try - List.iter (update_zone file begin_pos end_pos) c.client_zones; - with e -> -(* lprintf "Exception %s while updating zones\n" - (Printexc2.to_string e); *) - raise e - ); - (try - find_client_zone c - with - | e -> - lprintf "Exception %s while searching for find client zone\n" - (Printexc2.to_string e); - raise e) - - with - End_of_file -> - lprintf "END OF FILE WITH CLIENT %s\n" c.client_name; - | e -> - lprintf "Exception %s while searching for new chunk\n" - (Printexc2.to_string e) - - end; -*) end let search_found filter search md4 tags = diff -Nur ./src/networks/donkey/donkeyOptions.ml ../mldonkey/src/networks/donkey/donkeyOptions.ml --- ./src/networks/donkey/donkeyOptions.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyOptions.ml Wed Aug 4 18:59:26 2004 @@ -34,7 +34,7 @@ let max_dialog_history = define_expert_option donkey_section ["max_dialog_history"] "Max number of messages of Chat remembered" int_option 30 -let port = define_option donkey_section ["port"] "The port used for connection by other donkey clients." int_option 4662 +let donkey_port = define_option donkey_section ["port"] "The port used for connection by other donkey clients." int_option 4662 let check_client_connections_delay = define_expert_option donkey_section ["check_client_connections_delay"] @@ -267,8 +267,18 @@ "min connected users for each server" int_option 0 let login = define_option donkey_section ["login"] - "login of client on eDonkey network (nothing default to global one)" string_option "" + "login of client on eDonkey network (nothing default to global one)" string_option "" +let overnet_options_section_name = "Overnet" + +let overnet_section = file_section donkey_ini [ overnet_options_section_name ] + "Overnet options" + +let overnet_port = + define_option overnet_section [overnet_options_section_name; "port"] + "port for overnet" + int_option (2000 + Random.int 20000) + (* let source_management = define_expert_option donkey_section @@ -307,7 +317,7 @@ "Max Upload Slots", shortname max_upload_slots, "T"; "Max Sources Per Download", shortname max_sources_per_file, "T"; "Commit Downloads In Incoming Subdir", shortname commit_in_subdir, "T"; - "Port", shortname port, "T"; + "Port", shortname donkey_port, "T"; "Login", shortname login, "T"; "Download Chunks in Random order", shortname random_order_download, "B"; "Sources Per Chunk", shortname sources_per_chunk, "T"; diff -Nur ./src/networks/donkey/donkeyOvernet.ml ../mldonkey/src/networks/donkey/donkeyOvernet.ml --- ./src/networks/donkey/donkeyOvernet.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyOvernet.ml Wed Aug 4 18:59:26 2004 @@ -38,8 +38,169 @@ open DonkeyGlobals open DonkeyOptions open DonkeyMftp -open DonkeyProtoOvernet +(* +* Store published files. +*) + +type peer = + { + peer_md4 : Md4.t; + mutable peer_ip : Ip.t; + mutable peer_port : int; + mutable peer_tcpport : int; + mutable peer_kind : int; + mutable peer_last_recv : int; + mutable peer_last_send : int; + } + +type search_kind = + Search_for_keyword of unit option +| Search_for_file +| Search_for_kind of int + +type t = +(* KADEMLIA_BOOTSTRAP_REQ *) +| OvernetConnect of peer + +(* KADEMLIA_BOOTSTRAP_RES *) +| OvernetConnectReply of peer list + +(* KADEMLIA_HELLO_REQ *) +| OvernetPublicize of peer + +(* KADEMLIA_HELLO_RES *) +| OvernetPublicized of peer option + +(* KADEMLIA_REQ *) +| OvernetSearch of +(* 2 is OK for most searches, number of replies? *) int * +(* searched file or keyword *) Md4.t * + Md4.t option (* Our UID *) + +(* KADEMLIA_RES *) +| OvernetSearchReply of + Md4.t * + peer list (* the two closest peers in the binary tree of md4s *) + +(* KADEMLIA_SEARCH_REQ *) +| OvernetGetSearchResults of + Md4.t * (* target *) + search_kind * (* type *) + int * (* min *) + int (* max *) + +(* The following two messages are encoded in Overnet and Kademlia in the same +message, but we prefer to have two different messages at this level, for +search for files and search for sources. *) + +(* KADEMLIA_SEARCH_RES *) +| OvernetSearchFilesResults of +(* query *) Md4.t * + (Md4.t * tag list) list (* results *) + +(* KADEMLIA_SEARCH_RES *) +| OvernetSearchSourcesResults of Md4.t * peer list + +(* KADEMLIA_PUBLISH_REQ *) +| OvernetPublishFiles of +(* keyword or file md4 *) Md4.t * +(* md4 of file or client md4 *) (Md4.t * tag list) list + +| OvernetPublishSources of +(* keyword or file md4 *) Md4.t * peer list + +(* KADEMLIA_PUBLISH_RES *) +| OvernetPublished of Md4.t + +(* All these messages have either no equivalent in Kademlia or simply + not implemented yet :) *) +| OvernetNoResult of Md4.t + +| OvernetUnknown of int * string + +| OvernetGetMyIP of int + +| OvernetGetMyIPResult of Ip.t + +| OvernetGetMyIPDone + +| OvernetFirewallConnection of Md4.t*int + +| OvernetFirewallConnectionACK of Md4.t + +| OvernetFirewallConnectionNACK of Md4.t + +| OvernetPeerNotFound of peer + +| OvernetUnknown21 of peer + +let print_peer buf p = + Printf.bprintf buf " { md4 = %s ip = %s port = %d %s kind = %d}\n" + (Md4.to_string p.peer_md4) (Ip.to_string p.peer_ip) p.peer_port + (if p.peer_tcpport <> 0 then Printf.sprintf "tcp = %d" p.peer_tcpport + else "") p.peer_kind + +let message_to_string t = + let buf = Buffer.create 100 in + begin + match t with + OvernetConnect p -> + Buffer.add_string buf "OvernetConnect\n"; + print_peer buf p + | OvernetConnectReply peers -> + Buffer.add_string buf "OvernetConnectReply\n"; + List.iter (print_peer buf) peers + | OvernetPublicize p -> + Buffer.add_string buf "OvernetPublicize\n"; + print_peer buf p + | OvernetPublicized p -> + Buffer.add_string buf "OvernetPublicized\n"; + (match p with + Some p -> print_peer buf p + | None -> ()) + | OvernetSearch (nresults, md4, _) -> + Buffer.add_string buf "OvernetSearch\n"; + Printf.bprintf buf " target = %s nresults = %d\n" + (Md4.to_string md4) nresults + | OvernetSearchReply (target, peers) -> + Buffer.add_string buf "OvernetSearchReply\n"; + Printf.bprintf buf " target = %s npeers = %d\n" + (Md4.to_string target) (List.length peers); + List.iter (print_peer buf) peers + | OvernetGetSearchResults (target, _, _, _) -> + Printf.bprintf buf "OvernetGetSearchResults %s\n" (Md4.to_string target) + | OvernetSearchFilesResults (target, results) -> + Printf.bprintf buf "OvernetSearchFilesResults %s\n" + (Md4.to_string target); + List.iter (fun (r_md4, r_tags) -> + Printf.bprintf buf " %s\n " (Md4.to_string r_md4); + bprint_tags buf r_tags ; + Printf.bprintf buf "\n"; + ) results + | OvernetSearchSourcesResults (target, peers) -> + Printf.bprintf buf "OvernetSearchSourcesResults %s\n" + (Md4.to_string target); + List.iter (print_peer buf) peers + | OvernetPublishFiles (target, results) -> + Printf.bprintf buf "OvernetPublish %s\n" + (Md4.to_string target); + List.iter (fun (r_md4, r_tags) -> + Printf.bprintf buf " %s\n " (Md4.to_string r_md4); + bprint_tags buf r_tags ; + Printf.bprintf buf "\n"; + ) results + | OvernetPublishSources (target, peers) -> + Printf.bprintf buf "OvernetPublishSources %s\n" + (Md4.to_string target); + List.iter (print_peer buf) peers + | OvernetPublished target -> + Printf.bprintf buf "OvernetPublished %s\n" (Md4.to_string target) + | _ -> + Buffer.add_string buf "unknown\n" + end; + Buffer.contents buf + (* TODO OVERNET ---- @@ -98,33 +259,72 @@ end ) - type search_for = - FileSearch of file +| FileSearch of file | KeywordSearch of CommonTypes.search list +| FillBuckets type overnet_search = { search_md4 : Md4.t; mutable search_kind : search_for; - mutable search_last_insert : int; + search_known_peers : (Ip.t * int, peer) Hashtbl.t; + search_waiting_peers : peer Fifo.t array; + search_asked_peers : peer Fifo.t array; + search_ok_peers : peer Fifo.t array; + + mutable search_queries : int; + mutable search_requests : int; + + mutable search_start : int; +(* + mutable search_last_insert : int; + mutable search_not_asked_peers : XorSet.t; mutable search_asked_peers : XorSet.t; mutable search_done_peers : XorSet.t; - (* nb of peers in search_not_asked_peers + search_asked_peers + search_done_peers *) +(* nb of peers in search_not_asked_peers + search_asked_peers + search_done_peers *) mutable search_total_peers : int; - (* already tested peers, either they are in asked/not_asked/done, either they are useless*) +(* already tested peers, either they are in asked/not_asked/done, either they are useless*) mutable search_known_peers : (Ip.t*int, peer) Hashtbl.t; - - mutable search_nresults : int; +*) + mutable search_results : (Md4.t, tag list) Hashtbl.t; - mutable search_hits : int; + mutable search_nresults : int; (* number of results messages *) + mutable search_hits : int; (* number of diff results *) + (* mutable search_publish_files : file list; - mutable search_publish_file : bool; - } +mutable search_publish_file : bool; + *) + } + +exception MessageNotImplemented + +module Make(Proto: sig + + val enable_overnet : bool Options.option_record + val overnet_port : int Options.option_record + val overnet_tcpport : int Options.option_record + val overnet_section : Options.options_section + + val redirector_section : string + val options_section_name : string + val command_prefix : string + val source_kind : bool + + val udp_send : UdpSocket.t -> Ip.t -> int -> t -> unit + val udp_handler : (t -> UdpSocket.udp_packet -> unit) -> + UdpSocket.t -> UdpSocket.event -> unit + + end) = struct + open Proto + + let lprintf () = + lprintf "[%s] " redirector_section; lprintf + (******************************************************************** @@ -132,14 +332,15 @@ *********************************************************************) - + + let max_peers_per_bucket = 20 + let min_peers_per_block = 16 (* was 2 *) let min_peers_before_connect = 5 let max_searches_for_publish = 5 -let search_max_queries = 64 +let max_search_queries = 64 +let max_search_requests = 20 -let global_peers_size = Array.make 256 0 - let is_enabled = ref false @@ -151,93 +352,99 @@ *********************************************************************) + (* module PeerOption = struct let value_to_peer v = match v with SmallList [md4; ip; port; kind] | List [md4; ip; port; kind] -> - let v_md4 = Md4.value_to_hash md4 in - let t_md4 = Md4.up v_md4 in - global_peers_size.(t_md4)<-global_peers_size.(t_md4)+1; - (t_md4,v_md4, { - peer_md4 = v_md4; - peer_ip = Ip.value_to_ip ip; - peer_port = value_to_int port; - peer_kind = value_to_int kind; - peer_last_msg = last_time (); - }); + let md4 = Md4.value_to_hash md4 in + { + peer_md4 = md4; + peer_ip = Ip.value_to_ip ip; + peer_port = value_to_int port; + peer_tcpport = 0; + peer_kind = value_to_int kind; + peer_last_msg = last_time (); + } + | SmallList [md4; ip; port; tcpport; kind] + | List [md4; ip; port; tcpport; kind] -> + let v_md4 = Md4.value_to_hash md4 in + { + peer_md4 = v_md4; + peer_ip = Ip.value_to_ip ip; + peer_port = value_to_int port; + peer_tcpport = value_to_int tcpport; + peer_kind = value_to_int kind; + peer_last_msg = last_time (); + } | _ -> assert false - + let peer_to_value v = match v with - (_,_,p) -> - SmallList [ - Md4.hash_to_value p.peer_md4; - Ip.ip_to_value p.peer_ip; - int_to_value p.peer_port; - int_to_value p.peer_kind - ] - + p -> + if p.peer_tcpport = 0 then + SmallList [ + Md4.hash_to_value p.peer_md4; + Ip.ip_to_value p.peer_ip; + int_to_value p.peer_port; + int_to_value p.peer_kind + ] + else + SmallList [ + Md4.hash_to_value p.peer_md4; + Ip.ip_to_value p.peer_ip; + int_to_value p.peer_port; + int_to_value p.peer_tcpport; + int_to_value p.peer_kind + ] + let t = define_option_class "Peer" value_to_peer peer_to_value end + *) -let overnet_section = file_section donkey_ini ["Overnet"] "Overnet options" - let overnet_store_size = - define_option overnet_section ["overnet_store_size"] "Size of the filename storage used to answer queries" + define_option overnet_section [Proto.options_section_name; "store_size"] "Size of the filename storage used to answer queries" int_option 2000 - -let overnet_protocol_connect_version = - define_option overnet_section ["overnet_protocol_connect_version"] - "The protocol version sent on Overnet connections" - int_option 1044 - -let overnet_protocol_connectreply_version = - define_option overnet_section ["overnet_protocol_connectreply_version"] - "The protocol version sent on Overnet connections replies" - int_option 44 - -let overnet_port = - define_option overnet_section ["overnet_port"] "port for overnet" - int_option (2000 + Random.int 20000) let overnet_max_known_peers = - define_option overnet_section ["overnet_max_known_peers"] + define_option overnet_section [Proto.options_section_name; "max_known_peers"] "maximal number of peers to keep overnet connected (should be >2048)" int_option 8192 let overnet_search_keyword = - define_option overnet_section ["overnet_search_keyword"] - "allow extended search to search on overnet" bool_option false + define_option overnet_section [Proto.options_section_name; "search_keyword"] + "allow extended search to search on overnet" bool_option true let overnet_search_timeout = - define_option overnet_section ["overnet_search_timeout"] + define_option overnet_section [Proto.options_section_name; "search_timeout"] "How long shoud a search on Overnet wait for the last answer before terminating" int_option 140 let overnet_query_peer_period = - define_option overnet_section ["overnet_query_peer_period"] + define_option overnet_section [Proto.options_section_name; "query_peer_period"] "Period between two queries in the overnet tree (should not be set under 5)" float_option 5. let overnet_max_search_hits = - define_option overnet_section ["overnet_max_search_hits"] + define_option overnet_section [Proto.options_section_name; "max_search_hits"] "Max number of hits in a search on Overnet" int_option 200 let overnet_republish = - define_option overnet_section ["overnet_republish"] + define_option overnet_section [Proto.options_section_name; "republish"] "Interval (in seconds) before republish files" float_option 10800. let overnet_exclude_peers = - define_option overnet_section ["overnet_exclude_peers"] + define_option overnet_section [Proto.options_section_name; "exclude_peers"] "These IP addresses cannot be peers. Elements are separated by spaces, wildcard=255 ie: use 192.168.0.255 for 192.168.0.* " ip_list_option [Ip.of_string "1.0.0.0"] -let overnet_md4 = define_option overnet_section ["overnet_md4"] - "The MD4 of the Overnet client" Md4.option (Md4.random ()) +let overnet_md4 = define_option overnet_section + [Proto.options_section_name; "md4"] + "The MD4 of the Overnet client" Md4.option (Md4.random ()) let gui_overnet_options_panel = (* @@ -256,7 +463,7 @@ ] let overnet_options_version = - define_option overnet_section ["overnet_options_version"] + define_option overnet_section [Proto.options_section_name; "options_version"] "(internal)" int_option 0 @@ -283,35 +490,151 @@ *********************************************************************) +let connected_peers = ref 0 + -let global_peers : (Md4.t, peer) Hashtbl.t array Options.option_record = - define_option servers_section - ["overnet_peers"] "List of overnet peers" - (hasharray_option Md4.null PeerOption.t) - (Array.init 256 (fun _ -> Hashtbl.create 10)) +module LimitedList = struct + + type key = Ip.t * int + + type 'a t = { + objects_fifo : key Fifo.t; + mutable max_objects : int; + objects_table : (key, key) Hashtbl.t; + } + + let length t = Fifo.length t.objects_fifo + + let create max_objects = { + objects_fifo = Fifo.create (); + max_objects = max_objects; + objects_table = Hashtbl.create 127; + } + + let add t key = + let (ip, port) = key in + if Ip.valid ip && ip <> Ip.localhost && Ip.reachable ip && + not (Hashtbl.mem t.objects_table key) then + begin + Hashtbl.add t.objects_table key key; + Fifo.put t.objects_fifo key; + if Fifo.length t.objects_fifo = t.max_objects then + let key = Fifo.take t.objects_fifo in + Hashtbl.remove t.objects_table key + end + + let to_list t = + Fifo.to_list t.objects_fifo + + let iter f t = + Fifo.iter f t.objects_fifo + + let set_max_objects t max_objects = + while Fifo.length t.objects_fifo > max_objects do + let key = Fifo.take t.objects_fifo in + Hashtbl.remove t.objects_table key + done; + t.max_objects <- max_objects + + + let value_to_t v = + let t = create 100000 in + match v with + SmallList l | List l -> + List.iter (fun v -> + match v with + List [ip; port] | SmallList [ip; port] -> + add t (Ip.of_string (value_to_string ip), + value_to_int port) + | _ -> failwith "not a limited IP list" + ) l; + t + | _ -> failwith "not a limited list" + + let value_of_t t = + List (List2.tail_map (fun (ip,port) -> + SmallList [string_to_value (Ip.to_string ip); int_to_value port] + ) (to_list t)) + + let option = define_option_class "LimitedList" + value_to_t value_of_t + + end + +let boot_peers = define_option servers_section + [Proto.options_section_name; "boot_peers"] + "List of IP addresses to use to boot Kademlia networks" + LimitedList.option (LimitedList.create 2000) + +let boot_peers_copy = ref [] + +(* the total number of buckets used. We must fill a bucket before using the +next one. When a bucket is full, and we want to add a new peer, we must +either split the bucket, if it is the last one, or remove one peer from the +bucket. *) + +let n_used_buckets = ref 0 +let buckets = Array.init 129 (fun _ -> Fifo.create ()) + +let known_peers = Hashtbl.create 127 +let to_ping = ref [] + +(* +We keep the data in buckets depending on the number of bits they have +in common with our identifier. When we exceed the desired storage, +we start removing associations from the buckets with the fewest common +bits. Once every 30 minutes, we remove the associations which are older +than 1 hour. +*) -let boot_peers = ref [] -(*let firewalled_overnet_peers = Hashtbl.create 13*) +(* Argh, we MUST verify how MD4s are compared, from left to right, or from +right to left ?? *) -let published_keyword_set = ref XorMd4Set.empty -let published_keyword_table = Hashtbl.create 103 -let published_keyword_size = ref 0 +(* common_bits: compute the number of common bits between a md4 and our + identifier. *) + +let common_bits m1 m2 = + let n = + let m = Md4.xor m1 m2 in +(* lprintf () "XOR: %s\n" (Md4.to_bits m); *) + let rec iter m i = +(* lprintf () "iter %d\n" i; *) + if i = 16 then 128 else + let c = m.[i] in + if c = '\000' then iter m (i+1) + else + iter_bit (i*8) (int_of_char c) + + and iter_bit nbits c = +(* lprintf () "iter_bit %d %d\n" nbits c; *) + if c land 0x80 <> 0 then nbits else + iter_bit (nbits+1) ( (c lsl 1) land 0xff) + in + iter (Md4.direct_to_string m) 0 + in + (* lprintf () "Common bits: %s - %s = %d\n" + (Md4.to_string m1) (Md4.to_string m2) n; *) + n + +let bucket_number md4 = + common_bits md4 !!overnet_md4 + + (* +(* TODO: this structure MUST disappear. It is not Kademlia ! *) +let global_peers : (Md4.t, peer) Hashtbl.t array Options.option_record = + raise Not_found + *) +(*let firewalled_overnet_peers = Hashtbl.create 13*) let search_hits = ref 0 let source_hits = ref 0 -let all_overnet_searches = ref ([] : int list) let udp_sock = ref None -let tcp_sock = ref None -let udp_buf = Buffer.create 2000 - - -let overnet_searches = Hashtbl.create 13 -let files_to_be_published = ref [] +let overnet_searches = ref [] (******************************************************************** @@ -321,76 +644,244 @@ *********************************************************************) +module Publish (M : sig + type t + val item_name : string + end) = struct + + type publish = { + mutable publish_last_recv : int; + publish_key : (Md4.t * Md4.t); + publish_value : M.t; + } + + let keyword_to_files_buckets = Array.init 129 (fun _ -> Fifo.create ()) + + let keyword_to_files_table = Hashtbl.create 127 + + let keywords_table = Hashtbl.create 127 + + let n_files_stored = ref 0 + let max_soft_stored_files = 1000 + let max_hard_stored_files = 2000 + + let publish md4 r_md4 r_tags = + let key = (md4, r_md4) in + try + let p = Hashtbl.find keyword_to_files_table key in + p.publish_last_recv <- last_time () + with Not_found -> + if !n_files_stored < max_hard_stored_files then begin + let p = { + publish_last_recv = last_time (); + publish_key = key; + publish_value = r_tags; + } in + Hashtbl.add keyword_to_files_table key p; + Hashtbl.add keywords_table md4 p; + let bucket = bucket_number md4 in + Fifo.put keyword_to_files_buckets.(bucket) p; + incr n_files_stored; + end + + let refresh () = + Hashtbl.clear keywords_table; + Hashtbl.clear keyword_to_files_table; + n_files_stored := 0; + + let maxtime = last_time () - 3600 in + try + for bucket = 128 downto 0 do + + let b = keyword_to_files_buckets.(bucket) in + let len = Fifo.length b in + if len > 0 then + let bb = Fifo.create () in + keyword_to_files_buckets.(bucket) <- bb; + for i = 1 to len do + let p = Fifo.take b in + if p.publish_last_recv > maxtime && + !n_files_stored < max_soft_stored_files then begin + Fifo.put bb p; + Hashtbl.add keyword_to_files_table p.publish_key p; + let (md4, _) = p.publish_key in + Hashtbl.add keywords_table md4 p; + incr n_files_stored + end + done + done + with Exit -> () + + let print buf = + Printf.bprintf buf "Store for %s\n" M.item_name; + Printf.bprintf buf " Stored items: %d (%d < %d)\n" !n_files_stored + max_soft_stored_files max_hard_stored_files; + for bucket = 128 downto 0 do + let len = Fifo.length keyword_to_files_buckets.(bucket) in + if len > 0 then + Printf.bprintf buf " bucket[%d] : %d items\n" bucket len + done + + let get md4 = + List2.tail_map (fun p -> p.publish_value) + (Hashtbl.find_all keywords_table md4) + end + +module PublishedKeywords = Publish(struct + type t = Md4.t * tag list + let item_name = "Keywords" + end) + +module PublishedFiles = Publish(struct + type t = peer + let item_name = "Files" + end) + let debug_client ip = false (* Ip.matches ip !!overnet_debug_clients *) -let udp_send ip port msg = +let udp_send_direct ip port msg = match !udp_sock with None -> () | Some sock -> - try - Buffer.clear udp_buf; - buf_int8 udp_buf 227; - DonkeyProtoOvernet.write udp_buf msg; - let s = Buffer.contents udp_buf in - if !verbose_overnet && debug_client ip then - begin - lprintf "Sending UDP to %s:%d type %d (0x%02X)" - (Ip.to_string ip) port (get_uint8 s 1) (get_uint8 s 1); - lprint_newline (); -(*dump s; lprint_newline ();*) - end; - let len = String.length s in - UdpSocket.write sock s ip port - with e -> - lprintf "Exception %s in udp_send" (Printexc2.to_string e); - lprint_newline () - -(* Find nb peers close to md4 in the peer set *) -let get_local_distribution md4 nb = - let start_pos=Md4.up md4 - and peers = ref [] - and size = ref 0 in - begin - try - let xorset = ref XorSet.empty in - Hashtbl.iter - ( fun a b -> xorset:=XorSet.add (Md4.xor md4 a,b) !xorset ) !!global_peers.(start_pos); + Proto.udp_send sock ip port msg + +let udp_send p msg = + p.peer_last_send <- last_time (); + udp_send_direct p.peer_ip p.peer_port msg + +let bootstrap ip port = + if Ip.valid ip && Ip.reachable ip && port <> 0 then begin + LimitedList.add !!boot_peers (ip,port); + boot_peers_copy := (ip,port) :: !boot_peers_copy + end - begin - try - for i=1 to nb do - let (_,b) as e = XorSet.min_elt !xorset in - peers := b :: !peers; - xorset:=XorSet.remove e !xorset; - incr size; - done - with _ -> () - end; -(* - for i=1 to 127 do - Hashtbl.iter - ( fun a b -> if !size if !size Ip.localhost && Ip.reachable ip && + p.peer_port <> 0 then + let key = (p.peer_ip, p.peer_port) in + try + let pp = Hashtbl.find known_peers key in + if pp.peer_last_recv < p.peer_last_recv then + pp.peer_last_recv <- p.peer_last_recv; + pp + with _ -> +(* Add the peer to the table of known peers *) + Hashtbl.add known_peers key p; +(* First, enter the peer in the boot_peers to be able to use at next +restart. *) + bootstrap p.peer_ip p.peer_port; + +(* Now, enter it in the buckets *) + let bucket = bucket_number p.peer_md4 in + if bucket < !n_used_buckets then +(* Maybe the bucket is already full. From Kademlia paper, we should ping +some of the peers in the bucket to decide whether or not to add this peer. *) - with _ -> () - end; - !peers + Fifo.put buckets.(bucket) p + else begin + Fifo.put buckets.(!n_used_buckets) p; + + if !n_used_buckets < 128 && + Fifo.length buckets.(!n_used_buckets) + >= max_peers_per_bucket + 1 then + let b = buckets.(!n_used_buckets) in + incr n_used_buckets; + for i = 1 to Fifo.length b do + let p = Fifo.take b in + let bucket = bucket_number p.peer_md4 in + Fifo.put (if bucket >= !n_used_buckets then + buckets.(!n_used_buckets) else b) p + + done + end; + p + else + p + + +let get_closest_peers md4 nb = + let bucket = bucket_number md4 in + let bucket = min !n_used_buckets bucket in + let nb = ref nb in + let list = ref [] in + let add_list bucket = + let fifo = buckets.(bucket) in + let rec iter n = + if n > 0 then + let p = Fifo.take fifo in + Fifo.put fifo p; + if p.peer_last_recv <> 0 then begin + lprintf () "Adding good search peer %s:%d\n" + (Ip.to_string p.peer_ip) p.peer_port; + decr nb; + list := p :: !list; + end; + iter (n-1) + in + iter (min !nb (Fifo.length fifo)) + in + add_list bucket; + + if !nb > 0 then begin + + let rec iter bucket = + if bucket <= !n_used_buckets then begin + add_list bucket; + iter (bucket+1) + end + in + iter (bucket+1); + + let rec iter bucket = + if bucket >= 0 then begin + add_list bucket; + iter (bucket-1) + end + in + iter (bucket-1); + + end; + !list -let get_uniform_distribution () = - let peers = ref [] in - for i=0 to 255 do - let size = global_peers_size.(i) in - let size = if size > 0 then size else 1 in - let pos = ref (Random.int size) in - Hashtbl.iter (fun a b -> if !pos=0 then peers := b :: !peers; decr pos) !!global_peers.(i) - done; - !peers +let my_peer () = + { + peer_md4 = !!overnet_md4; + peer_ip = client_ip None; + peer_port = !!overnet_port; + peer_kind = 0; + peer_tcpport = !!overnet_tcpport; + peer_last_recv = 0; + peer_last_send = 0; + } +let get_any_peers nb = +(* The last peer of any peer distribution is always us ! *) + let list = ref [my_peer ()] in + let nb = ref (nb-1) in + let add_list bucket = + let fifo = buckets.(bucket) in + let rec iter n = + if n > 0 then + let p = Fifo.take fifo in + Fifo.put fifo p; + decr nb; + list := p :: !list; + iter (n-1) + in + iter (min !nb (Fifo.length fifo)) + in + let rec iter bucket = + if bucket <= !n_used_buckets then begin + add_list bucket; + iter (bucket+1) + end + in + iter 0; + !list + +(* let find_oldest_peer hashtbl = let md4 = ref Md4.null and time = ref (last_time () ) in @@ -402,11 +893,13 @@ end ) hashtbl; !md4 + *) let private_address ip = Ip.matches ip [(Ip.of_string "0.0.0.0"); (Ip.of_string "127.0.0.255"); (Ip.of_string "10.255.255.255"); (Ip.of_string "192.168.255.255") ] + (* (* Replace private IP by public IPs in peer list *) let change_private_address ip public_ip = if private_address ip then public_ip @@ -414,71 +907,72 @@ let add_global_peer peer = if not ( is_black_address peer.peer_ip peer.peer_port ) && - not ( private_address peer.peer_ip ) && - not (Ip.matches peer.peer_ip !!overnet_exclude_peers) + not ( private_address peer.peer_ip ) && + not (Ip.matches peer.peer_ip !!overnet_exclude_peers) then begin if (peer.peer_ip <> client_ip None) && (peer.peer_md4 <> !!overnet_md4) then - begin - let i=Md4.up peer.peer_md4 in - if Hashtbl.mem !!global_peers.(i) peer.peer_md4 then - begin - let p = Hashtbl.find !!global_peers.(i) peer.peer_md4 in - if peer.peer_kind <= p.peer_kind then + begin + let i=Md4.up peer.peer_md4 in + if Hashtbl.mem !!global_peers.(i) peer.peer_md4 then begin - peer.peer_last_msg <- last_time(); - Hashtbl.replace !!global_peers.(i) peer.peer_md4 peer; - (*lprintf "UPD global_peers: %s\n" (Md4.to_string peer.peer_md4);*) + let p = Hashtbl.find !!global_peers.(i) peer.peer_md4 in + if peer.peer_kind <= p.peer_kind then + begin + peer.peer_last_msg <- last_time(); + Hashtbl.replace !!global_peers.(i) peer.peer_md4 peer; +(*lprintf "UPD global_peers: %s\n" (Md4.to_string peer.peer_md4);*) + end end - end - else - begin - while global_peers_size.(i) >= (!!overnet_max_known_peers/256) do - let old = find_oldest_peer !!global_peers.(i) in - let p = Hashtbl.find !!global_peers.(i) old in + else + begin + while global_peers_size.(i) >= (!!overnet_max_known_peers/256) do + let old = find_oldest_peer !!global_peers.(i) in + let p = Hashtbl.find !!global_peers.(i) old in (* decrease reliability of this peer and eventually remove it *) - if p.peer_kind >= 4 then begin - Hashtbl.remove !!global_peers.(i) old; - global_peers_size.(i) <- global_peers_size.(i)-1 - end - else begin - if !verbose_overnet then - lprintf "Increasing peer kind for block %0.2x\n" i; - Hashtbl.iter - (fun md4 p -> p.peer_kind <- p.peer_kind + 1) - !!global_peers.(i); - end - done; + if p.peer_kind >= 4 then begin + Hashtbl.remove !!global_peers.(i) old; + global_peers_size.(i) <- global_peers_size.(i)-1 + end + else begin + if !verbose_overnet then + lprintf "Increasing peer kind for block %0.2x\n" i; + Hashtbl.iter + (fun md4 p -> p.peer_kind <- p.peer_kind + 1) + !!global_peers.(i); + end + done; (* lprintf "ADD global_peers: %s\n" (Md4.to_string peer.peer_md4); *) - peer.peer_last_msg <- last_time(); - Hashtbl.add !!global_peers.(i) peer.peer_md4 peer; - global_peers_size.(i) <- global_peers_size.(i) + 1 - end - end + peer.peer_last_msg <- last_time(); + Hashtbl.add !!global_peers.(i) peer.peer_md4 peer; + global_peers_size.(i) <- global_peers_size.(i) + 1 + end + end else - if !verbose_overnet then + if !verbose_overnet then begin - lprintf "Tried to add myself as a peer: %s/%s %s/%s\n" - (Ip.to_string peer.peer_ip) (Ip.to_string (client_ip None)) - (Md4.to_string peer.peer_md4) (Md4.to_string !!overnet_md4) + lprintf "Tried to add myself as a peer: %s/%s %s/%s\n" + (Ip.to_string peer.peer_ip) (Ip.to_string (client_ip None)) + (Md4.to_string peer.peer_md4) (Md4.to_string !!overnet_md4) end end + *) + (* (*advertize an uniform distribution then a local distribution (around our MD4) that we are UP*) let publicize_peers () = let global_dist = get_uniform_distribution () in let local_dist = get_local_distribution !!overnet_md4 search_max_queries in List.iter (fun a -> udp_send a.peer_ip a.peer_port - (OvernetPublicize(!!overnet_md4, - Ip.null,!overnet_client_port, 0) ) ) + (OvernetPublicize (my_peer ()))) global_dist; List.iter (fun a -> udp_send a.peer_ip a.peer_port - (OvernetPublicize(!!overnet_md4, Ip.null, !overnet_client_port, 0))) - local_dist - + (OvernetPublicize(my_peer ()))) + local_dist + (* If one peer block is running low, try to get new peers using Connect *) let find_new_peers () = try @@ -488,13 +982,13 @@ with _ -> begin if !verbose_overnet then - lprintf "FINDING NEW PEERS\n"; - + lprintf "FINDING NEW PEERS\n"; + List.iter (fun a -> udp_send a.peer_ip a.peer_port - (OvernetConnect(!!overnet_md4,client_ip None,!overnet_client_port, 0))) - (get_uniform_distribution ()) + (OvernetConnect (my_peer ()))) + (get_uniform_distribution ()) end - + let add_search_peer s p = if not (Hashtbl.mem s.search_known_peers (p.peer_ip,p.peer_port)) && not (is_black_address p.peer_ip p.peer_port) && @@ -503,103 +997,109 @@ Hashtbl.add s.search_known_peers (p.peer_ip,p.peer_port) p; let distance = Md4.xor s.search_md4 p.peer_md4 in if s.search_total_peers >= search_max_queries then - begin + begin let (dd1,pp1) as e1 = - if (XorSet.cardinal s.search_not_asked_peers)=0 then (Md4.null,p) - else XorSet.max_elt s.search_not_asked_peers and - (dd2,pp2) as e2 = - if (XorSet.cardinal s.search_asked_peers)=0 then (Md4.null,p) - else XorSet.max_elt s.search_asked_peers and - (dd3,pp3) as e3 = - if (XorSet.cardinal s.search_done_peers)=0 then (Md4.null,p) - else XorSet.max_elt s.search_done_peers in - + if (XorSet.cardinal s.search_not_asked_peers)=0 then (Md4.null,p) + else XorSet.max_elt s.search_not_asked_peers and + (dd2,pp2) as e2 = + if (XorSet.cardinal s.search_asked_peers)=0 then (Md4.null,p) + else XorSet.max_elt s.search_asked_peers and + (dd3,pp3) as e3 = + if (XorSet.cardinal s.search_done_peers)=0 then (Md4.null,p) + else XorSet.max_elt s.search_done_peers in + if dd1>distance then - begin - (* Better than one not-yet-asked peer : replace it ! *) + begin +(* Better than one not-yet-asked peer : replace it ! *) s.search_not_asked_peers <- XorSet.remove (dd1, pp1) s.search_not_asked_peers; s.search_not_asked_peers <- XorSet.add (distance, p) s.search_not_asked_peers; - (*lprintf "add_search_peer(%s) : add peer at distance %s [REPLACE]\n" +(*lprintf "add_search_peer(%s) : add peer at distance %s [REPLACE]\n" (Md4.to_string s.search_md4) (Md4.to_string distance);*) - + end - else if dd2>distance || dd3>distance then - begin - (* We have already asked a peer which is worse. Anyway, we shouldn't drop this one*) - s.search_not_asked_peers <- XorSet.add (distance, p) s.search_not_asked_peers; - s.search_total_peers <- s.search_total_peers + 1 ; - (*lprintf "add_search_peer(%s) : add peer at distance %s [ADD]\n" + else if dd2>distance || dd3>distance then + begin +(* We have already asked a peer which is worse. Anyway, we shouldn't drop this one*) + s.search_not_asked_peers <- XorSet.add (distance, p) s.search_not_asked_peers; + s.search_total_peers <- s.search_total_peers + 1 ; +(*lprintf "add_search_peer(%s) : add peer at distance %s [ADD]\n" (Md4.to_string s.search_md4) (Md4.to_string distance);*) - end + end end else - begin + begin s.search_not_asked_peers <- XorSet.add (distance, p) s.search_not_asked_peers; - s.search_total_peers <- s.search_total_peers + 1 ; + s.search_total_peers <- s.search_total_peers + 1 ; (* lprintf "add_search_peer(%s) : add peer at distance %s [NOT ENOUGH]\n" (Md4.to_string s.search_md4) (Md4.to_string distance); *) end end - + *) + +let add_search_peer s p = + if p.peer_ip <> client_ip None then + let key = (p.peer_ip, p.peer_port) in + if not (Hashtbl.mem s.search_known_peers key) then begin + Hashtbl.add s.search_known_peers key p; + let nbits = common_bits p.peer_md4 s.search_md4 in + Fifo.put s.search_waiting_peers.(nbits) p; + end + let create_search kind md4 = - let search = { - search_md4 = md4; - search_kind = kind; - search_last_insert=last_time(); - - search_not_asked_peers=XorSet.empty; - search_asked_peers=XorSet.empty; - search_done_peers=XorSet.empty; - search_total_peers=0; - search_known_peers = Hashtbl.create 32; - - search_nresults = 0; - search_publish_files = []; - search_publish_file = false; - search_results = Hashtbl.create 13; - search_hits = 0; - } in - List.iter (fun peer -> add_search_peer search peer) (get_local_distribution md4 search_max_queries); - search + lprintf () "create_search\n"; + let s = { + search_md4 = md4; + search_kind = kind; + search_known_peers = Hashtbl.create 127; + search_queries = 0; + search_requests = 0; + search_waiting_peers = Array.init 129 (fun _ -> Fifo.create ()); + search_asked_peers = Array.init 129 (fun _ -> Fifo.create ()); + search_ok_peers = Array.init 129 (fun _ -> Fifo.create ()); + search_start = last_time (); + (* + search_last_insert=last_time(); + + search_not_asked_peers=XorSet.empty; + search_asked_peers=XorSet.empty; + search_done_peers=XorSet.empty; + search_total_peers=0; + search_known_peers = Hashtbl.create 32; +*) + + search_hits = 0; + search_nresults = 0; + search_results = Hashtbl.create 13; + +(* + search_publish_files = []; + search_publish_file = false; + + *) + } in + List.iter (add_search_peer s) (get_closest_peers md4 max_search_queries); + lprintf () "create_search done\n"; + overnet_searches := s :: !overnet_searches; + s let create_keyword_search w = let md4 = Md4.string w in - try - let search=Hashtbl.find overnet_searches md4 in - List.iter (fun peer -> add_search_peer search peer) (get_local_distribution md4 search_max_queries); - search - with _ -> - let search = { - search_md4 = md4; - search_kind = KeywordSearch []; - search_last_insert=last_time(); - - search_not_asked_peers=XorSet.empty; - search_asked_peers=XorSet.empty; - search_done_peers=XorSet.empty; - search_total_peers=0; - search_known_peers = Hashtbl.create 32; - - search_publish_files = []; - search_publish_file = false; - search_results = Hashtbl.create 13; - search_nresults = 0; - search_hits = 0; - } in - List.iter (fun peer -> add_search_peer search peer) (get_local_distribution md4 search_max_queries); - search - + let search = create_search (KeywordSearch []) md4 in + search + + + (* let store_published_file kw_md4 file_md4 file_tags time = let distance = Md4.xor !!overnet_md4 kw_md4 in - + if !verbose_overnet then begin lprintf "PUBLISH at %s (dist=%s)" (Md4.to_string kw_md4) (Md4.to_string distance); lprint_newline (); end; - + try let (size, files) = Hashtbl.find published_keyword_table kw_md4 in @@ -609,11 +1109,11 @@ with _ -> incr size; files := XorMd4Map.add file_md4 (file_tags, ref time) !files - + with _ -> let do_it = if !published_keyword_size > !!overnet_store_size then - + (* Take the keyword which is the furthest from us, and remove it if it is farther than the new file *) @@ -628,19 +1128,19 @@ end else false else true in - + if do_it then begin - if !verbose_overnet then - lprintf "PUBLISH at %s (dist=%s)\n" (Md4.to_string kw_md4) (Md4.to_string distance); + if !verbose_overnet then + lprintf "PUBLISH at %s (dist=%s)\n" (Md4.to_string kw_md4) (Md4.to_string distance); incr published_keyword_size; Hashtbl.add published_keyword_table kw_md4 (ref 1, ref (XorMd4Map.add file_md4 (file_tags, ref time) - XorMd4Map.empty)); + XorMd4Map.empty)); published_keyword_set := XorMd4Set.add (Md4.xor !!overnet_md4 kw_md4, kw_md4) !published_keyword_set end - + let get_results_from_query ip port kw_md4 min max = try let (size, files) = Hashtbl.find published_keyword_table kw_md4 in @@ -657,14 +1157,15 @@ with _ -> udp_send ip port (OvernetNoResult(kw_md4)) - -let recover_file (file : DonkeyTypes.file) = + *) + + (* try let s = Hashtbl.find overnet_searches file.file_md4 in () with _ -> let s=create_search (FileSearch file) file.file_md4 in Hashtbl.add overnet_searches s.search_md4 s - + let publish_file (file : DonkeyTypes.file) = begin try @@ -695,6 +1196,8 @@ recover_file file ) !DonkeyGlobals.current_files + *) + let ip_of_udp_packet p = match p.UdpSocket.udp_addr with Unix.ADDR_INET (inet, port) -> @@ -705,7 +1208,8 @@ match p.UdpSocket.udp_addr with Unix.ADDR_INET (inet, port) -> port | _ -> assert false - + + (* let rec get_filename tags = match tags with @@ -738,52 +1242,332 @@ | _ -> true in check_iter q +*) +let new_peer_message p = + if p.peer_last_recv = 0 then + incr connected_peers; +(* lprintf () "*** Updating time for %s:%d\n" (Ip.to_string p.peer_ip) p.peer_port; *) + p.peer_last_recv <- last_time () + let udp_client_handler t p = let other_ip = ip_of_udp_packet p in let other_port = port_of_udp_packet p in - if !verbose_overnet && debug_client other_ip then - lprintf "UDP FROM %s:%d - " - (Ip.to_string other_ip) other_port; + if !verbose_overnet then + lprintf () "UDP FROM %s:%d:\n %s " + (Ip.to_string other_ip) other_port + (message_to_string t); match t with - | OvernetConnect (md4, ip, port, kind) -> + | OvernetConnect p -> + new_peer_message p; + let p = new_peer p in + udp_send p (OvernetConnectReply (get_any_peers 20)) + + | OvernetConnectReply ps -> + let rec iter list = + match list with + [] -> () + | [p] -> + new_peer_message p; + if other_port <> p.peer_port || other_ip <> p.peer_ip then + lprintf () "Bad IP or port"; + let p = new_peer p in + () + | p :: tail -> + let p = new_peer p in + iter tail + in + iter ps; + + | OvernetPublicize p -> + new_peer_message p; + let p = new_peer p in + udp_send p (OvernetPublicized (Some (my_peer ()))) + + | OvernetPublicized None -> + () + + | OvernetPublicized (Some p) -> + new_peer_message p; + let p = new_peer p in + () + + | OvernetSearch (nresults, md4, from_who) -> + + let peers = get_closest_peers md4 nresults in + udp_send_direct other_ip other_port (OvernetSearchReply (md4,peers)) + + | OvernetSearchReply (md4, peers) -> + + let peers = List2.tail_map new_peer peers in + List.iter (fun s -> + if s.search_md4 = md4 then begin + List.iter (add_search_peer s) peers; + try + let p = Hashtbl.find s.search_known_peers + (other_ip, other_port) in + new_peer_message p; + let nbits = common_bits p.peer_md4 s.search_md4 in + Fifo.put s.search_ok_peers.(nbits) p; + with _ -> () + end + ) !overnet_searches; + + | OvernetUnknown (opcode, s) -> + lprintf () "Unknown message from %s:%d\n" (Ip.to_string other_ip) other_port; + lprintf () "\tCode: %d\n" opcode; dump s; + lprintf () "\n" + + | OvernetSearchFilesResults (md4, results) -> + List.iter (fun s -> + if s.search_md4 = md4 then begin + s.search_nresults <- s.search_nresults + 1; + + begin + try + let p = Hashtbl.find s.search_known_peers + (other_ip, other_port) in + new_peer_message p; + with _ -> () + end; + + match s.search_kind with + FileSearch file -> () + + | KeywordSearch sss -> + incr search_hits; + List.iter (fun (r_md4, r_tags) -> + if not (Hashtbl.mem s.search_results r_md4) then + begin + s.search_hits <- s.search_hits + 1; + Hashtbl.add s.search_results r_md4 r_tags; + + if !verbose_overnet then begin + lprintf () "FILE FOUND, TAGS:\n "; + print_tags r_tags; lprint_newline () + end; + + List.iter (fun ss -> + DonkeyOneFile.search_found true ss r_md4 r_tags; + ) sss + end + ) results + | FillBuckets -> () + + + end + ) !overnet_searches + + | OvernetSearchSourcesResults (md4, peers) -> + List.iter (fun s -> + if s.search_md4 = md4 then begin + s.search_nresults <- s.search_nresults + 1; + + begin + try + let p = Hashtbl.find s.search_known_peers + (other_ip, other_port) in + new_peer_message p; + with _ -> () + end; + + match s.search_kind with + FileSearch file -> + List.iter (fun p -> + let ip = p.peer_ip in + let port = p.peer_tcpport in + if Ip.valid ip && ip_reachable ip && port <> 0 then + let s = DonkeySources.find_source_by_uid + (Direct_address (ip, port)) in + DonkeySources.set_request_result s + file.file_sources File_new_source; + DonkeySources.set_source_brand s true + ) peers + + | KeywordSearch sss -> () + | FillBuckets -> () + + + end + ) !overnet_searches + + | OvernetPublishFiles (md4, files) -> + List.iter (fun (r_md4, r_tags) -> + PublishedKeywords.publish md4 r_md4 (r_md4, r_tags) + ) files + + | OvernetPublishSources (md4, files) -> + List.iter (fun p -> + PublishedFiles.publish md4 p.peer_md4 p + ) files + + | OvernetGetSearchResults (md4, kind, min, max) -> + begin + match kind with + Search_for_file -> + let list = PublishedFiles.get md4 in + let _, list = List2.cut min list in + let list, _ = List2.cut (max - min) list in + if list <> [] then + udp_send_direct other_ip other_port + (OvernetSearchSourcesResults (md4, list)) + | Search_for_keyword _ -> + let list = PublishedKeywords.get md4 in + let _, list = List2.cut min list in + let list, _ = List2.cut (max - min) list in + if list <> [] then + udp_send_direct other_ip other_port + (OvernetSearchFilesResults (md4, list)) + | _ -> () + end + + + +(* + begin + try + let s = Hashtbl.find overnet_searches md4 in + +(* If we cannot find the peer, we can still use his results*) + begin + try + let (s_ip, s_port) as s_addr = + match p.UdpSocket.udp_addr with + | Unix.ADDR_INET(ip, port) -> Ip.of_inet_addr ip, port + | _ -> raise Not_found + in + let sender = Hashtbl.find s.search_known_peers s_addr in + sender.peer_last_msg <- last_time(); + with _ -> () + end; + + if !verbose_overnet && debug_client other_ip then + lprintf "SEARCH RESULT (%s): r_md4 = %s\n" (Md4.to_string md4) (Md4.to_string r_md4); + + List.iter (fun tag -> + if tag.tag_name = "loc" then + begin + match tag.tag_value with + String bcp -> + if String2.starts_with bcp "bcp://" then + let bcp2 = String.sub bcp 6 (String.length bcp - 6) + in + begin + match String2.split_simplify bcp2 ':' with + | [_;ip;port] -> + if !verbose_overnet then + lprintf "FIXME: Received from %s:%d a BCP type 2 %s for MD4 %s\n" + (Ip.to_string other_ip) other_port bcp (Md4.to_string md4); +(*Hashtbl.add firewalled_overnet_peers md4 file; + udp_send + (Ip.of_string ip) (int_of_string port) + (OvernetFirewallConnection(r_md4,4662))*) +(* VERIFICARE SE FUNZIONA + +POTREBBE DARSI CHE IN QUESTO CASO NON VIENE RESTITUITA LA LOCAZIONE DEL FILE, +MA QUELLA DI UN PEER VICINO AL FILE?? + +PARE DI NO. FARE DELLE PROVE INTERROGANDO L'IP INDICATO RELATIVAMENTE AL MD4 INDICATO + + let ip = Ip.of_string ip in + let port = int_of_string port in + if Ip.valid ip && Ip.reachable ip then + let c = DonkeySources.new_source (ip, port) file in + c.source_overnet <- true; +*) + | [ip;port] -> + incr source_hits; + let ip = Ip.of_string ip in + let port = int_of_string port in +(*lprintf "FIXME: Received a BCP type 1 %s for MD4 %s" + bcp (Md4.to_string md4); + lprint_newline (); *) + | _ -> + lprintf "Ill formed bcp: %s" bcp; + lprint_newline (); + end + else + begin + lprintf "Not a bcp !!!"; + lprint_newline (); + end + | _ -> + lprintf "Not a string location ??"; + lprint_newline (); + end + ) r_tags; + | KeywordSearch sss -> + incr search_hits; + if not (Hashtbl.mem s.search_results r_md4) then + begin + s.search_hits <- s.search_hits + 1; + Hashtbl.add s.search_results r_md4 r_tags; + + if !verbose_overnet then begin + lprintf "FILE FOUND, TAGS: "; lprint_newline (); + print_tags r_tags; lprint_newline () + end; + + List.iter (fun ss -> +(* + if check_filename ss.search_query r_tags then + begin + lprintf "Matched"; + lprint_newline (); +*) + DonkeyOneFile.search_found true ss r_md4 r_tags; +(* end + else + begin + lprintf "Not matched"; + lprint_newline (); + end +*) + ) sss + + end; + + with _ -> () +(* lprintf "NO SUCH SEARCH..."; lprint_newline (); *) + end + + *) + | _ -> failwith "Message not understood" + + (* + + | OvernetConnect p -> if !verbose_overnet && debug_client other_ip then - lprintf "CONNECT (%s): sender IP was %s:%d kind=%d\n" (Md4.to_string md4) (Ip.to_string ip) port kind; - if (md4 <> !!client_md4) && (md4 <> !!overnet_md4) && not (Hashtbl.mem connected_clients md4) + lprintf "CONNECT (%s): sender IP was %s:%d kind=%d\n" (Md4.to_string p.peer_md4) (Ip.to_string p.peer_ip) p.peer_port p.peer_kind; + if (p.peer_md4 <> !!client_md4) && (p.peer_md4 <> !!overnet_md4) && not (Hashtbl.mem connected_clients p.peer_md4) then begin let this_peer = { peer_md4=(!!overnet_md4); peer_ip=(client_ip None); peer_port=(!!overnet_port); + peer_tcpport = 0; peer_kind=0; peer_last_msg=last_time(); } in - let ip = (change_private_address ip other_ip) in + let ip = (change_private_address p.peer_ip other_ip) in (* verificare per le Indirect_location *) - let c = new_client (Direct_address (ip, port)) in - c.client_ip <- ip; + let c = new_client (Direct_address (p.peer_ip, p.peer_port)) in + c.client_ip <- p.peer_ip; c.client_connect_time <- last_time (); DonkeySources.set_source_brand c.client_source true; c.client_brand <- Brand_overnet; set_client_state c (Connected (-1)); - Hashtbl.add connected_clients md4 c; + Hashtbl.add connected_clients p.peer_md4 c; - add_global_peer - { - peer_md4=md4; - peer_ip=ip; - peer_port=port; - peer_kind=kind; - peer_last_msg=last_time(); - }; + add_global_peer p; - udp_send ip port (OvernetConnectReply([this_peer])); + udp_send p.peer_ip p.peer_port (OvernetConnectReply([my_peer ()])); (* send the PUBLICIZED message *) - udp_send other_ip port OvernetPublicized + udp_send other_ip p.peer_port (OvernetPublicized (Some (my_peer ()))) end @@ -813,24 +1597,28 @@ | _ -> () end - | OvernetPublicize (md4, ip, port, kind ) -> + | OvernetPublicize p -> begin if !verbose_overnet && debug_client other_ip then - lprintf "PUBLICIZE (%s): sender IP was %s\n" (Md4.to_string md4) (Ip.to_string ip); - add_global_peer - { + lprintf "PUBLICIZE (%s): sender IP was %s\n" + (Md4.to_string p.peer_md4) (Ip.to_string p.peer_ip); + add_global_peer p; +(* + { peer_md4=md4; peer_ip=(change_private_address ip other_ip); peer_port=port; + peer_tcpport = 0; peer_kind=kind; peer_last_msg=last_time(); }; - +*) + (* send the PUBLICIZED message *) - udp_send other_ip port OvernetPublicized + udp_send other_ip p.peer_port (OvernetPublicized (Some (my_peer ()))) end - | OvernetPublicized -> + | OvernetPublicized p -> if !verbose_overnet && debug_client other_ip then lprintf "PUBLICIZED\n"; @@ -851,6 +1639,7 @@ end with _ -> lprintf "Cannot find the client IP\n" end + | OvernetPublish (md4, r_md4, r_tags) -> if (Md4.up md4) = (Md4.up !!overnet_md4) then begin @@ -918,6 +1707,7 @@ with _ -> () (* lprintf "NO SUCH SEARCH: %s\n" (Md4.to_string md4); *) end + | OvernetNoResult(md4) -> if !verbose_overnet && debug_client other_ip then lprintf "NO RESULT (%s)\n" (Md4.to_string md4); @@ -1079,12 +1869,7 @@ find_new_peers () end end - - | OvernetUnknown (opcode, s) -> - lprintf "Unknown message from %s:%d\n" (Ip.to_string other_ip) other_port; - lprintf "\tCode: %d\n" opcode; dump s; - lprint_newline () - + | OvernetUnknown21 peer -> if !verbose_overnet && debug_client other_ip then lprintf "Unknown 21 message from %s:%d\n" (Ip.to_string other_ip) other_port; @@ -1154,36 +1939,39 @@ end end with _ -> () + *) let query_next_peers () = - Hashtbl2.safe_iter (fun s -> - let asked_card = XorSet.cardinal s.search_asked_peers and - not_asked_card = XorSet.cardinal s.search_not_asked_peers in - -(* Cases to stop a search : - 1/ enough hits - 2/ size(asked)=0 && size(not_asked)=0 - 3/ size(not_asked)=0 && timeout *) - - if (s.search_hits > !!overnet_max_search_hits) || - ( (s.search_last_insert + !!overnet_search_timeout < last_time ()) && not_asked_card=0 ) || - ( not_asked_card = 0 && asked_card = 0 ) then - begin - if !verbose_overnet then begin - lprintf "Search for %s finished (%d hits %d results)" - (Md4.to_string s.search_md4) s.search_hits s.search_nresults; - lprint_newline (); - end; - Hashtbl.remove overnet_searches s.search_md4; - end - else - begin - query_min_peer s; - query_min_peer s; - end - ) overnet_searches + List.iter (fun s -> + let nresults = match s.search_kind with + FillBuckets -> 10 + | _ -> 2 + in + + let rec iter nbits todo = + if nbits >= 0 then + let len = Fifo.length s.search_waiting_peers.(nbits) in + if len > 0 then + let p = Fifo.take s.search_waiting_peers.(nbits) in + + udp_send p (OvernetSearch (nresults, s.search_md4, Some p.peer_md4)); + s.search_queries <- s.search_queries + 1; + Fifo.put s.search_asked_peers.(nbits) p; + + (if todo > 1 then iter nbits (todo - 1)) + else + iter (nbits-1) todo + else + if s.search_queries < max_search_queries then + List.iter (fun p -> + add_search_peer s p + ) (get_closest_peers s.search_md4 max_search_queries) + in + iter 128 2 + + ) !overnet_searches - +(* let do_publish_shared_files () = let nb_searches = ref 0 in Hashtbl.iter (fun _ _ -> incr nb_searches) overnet_searches; @@ -1212,114 +2000,220 @@ if !verbose_overnet then lprintf "OVERNET: PUBLISHING ALL THE FILES!!!!\n"; List.iter (fun file -> publish_file file) (DonkeyShare.all_shared ()) | _ -> () - + *) + +let recover_file file = + if file_state file = FileDownloading then + let search = create_search (FileSearch file) file.file_md4 in + () + let check_current_downloads () = - List.iter (fun file -> - if file_state file = FileDownloading - && - not (Hashtbl.mem overnet_searches file.file_md4) then - let search = create_search (FileSearch file) file.file_md4 in - Hashtbl.add overnet_searches file.file_md4 search; - ) !DonkeyGlobals.current_files + List.iter recover_file !DonkeyGlobals.current_files let enable enabler = if !!enable_overnet then begin - let sock = (UdpSocket.create (Ip.to_inet_addr !!client_bind_addr) - (!!overnet_port) (udp_handler udp_client_handler)) in - udp_sock := Some sock; - - UdpSocket.set_write_controler sock udp_write_controler; - - begin - try - let sock = TcpServerSocket.create - "overnet client server" - (Ip.to_inet_addr !!client_bind_addr) - (!!overnet_port) (DonkeyClient.client_connection_handler true) in - - tcp_sock := Some sock; - - match Unix.getsockname (BasicSocket.fd (TcpServerSocket.sock sock)) with - Unix.ADDR_INET (ip, port) -> - overnet_client_port := port - | _ -> failwith "Bad socket address" - with e -> - lprintf "Could not affect a TCP port %d for Overnet" !!overnet_port; - lprint_newline (); - tcp_sock := None; - end; - end; + let sock = (UdpSocket.create (Ip.to_inet_addr !!client_bind_addr) + (!!overnet_port) (Proto.udp_handler udp_client_handler)) in + udp_sock := Some sock; + + UdpSocket.set_write_controler sock udp_write_controler; -(* every 3min try a new publish search, if any *) - add_session_timer enabler 180. (fun _ -> - if !!enable_overnet then begin - find_new_peers (); - do_publish_shared_files (); - end - ); - - add_session_timer enabler 1. (fun _ -> - if !!enable_overnet then begin - match !boot_peers with - [] -> () - | _ -> - for i = 1 to 5 do - match !boot_peers with - [] -> () - | (ip, port) :: tail -> - boot_peers := tail; - udp_send ip port (OvernetConnect(!!overnet_md4,client_ip None, - !overnet_client_port, 0)); - done - end - ); - - add_session_option_timer enabler overnet_query_peer_period (fun _ -> - if !!enable_overnet then begin - query_next_peers () - end - ); +(* every 3min try a new publish search, if any + add_session_timer enabler 180. (fun _ -> + if !!enable_overnet then begin + find_new_peers (); + do_publish_shared_files (); + end + ); +*) + + add_session_timer enabler 1. (fun _ -> + if !!enable_overnet then + let my_peer = my_peer () in -(* every 3h for re-publish *) - add_session_timer enabler !!overnet_republish (fun _ -> - if !!enable_overnet then begin - publish_shared_files () - end - ); +(* ping old peers regularly *) + begin + match !to_ping with + [] -> () + | p :: tail -> + to_ping := tail; + p.peer_last_send <- last_time (); + udp_send p (OvernetPublicize my_peer); + end; -(* every 30min for common operations *) - add_session_timer enabler 1800. (fun _ -> - if !!enable_overnet then begin - recover_all_files (); - end - ); +(* ping unknown peers *) + begin + match !boot_peers_copy with + [] -> + boot_peers_copy := LimitedList.to_list !!boot_peers + | _ -> + if !connected_peers < 100 then + for i = 1 to 5 do + match !boot_peers_copy with + [] -> () + | (ip, port) :: tail -> + boot_peers_copy := tail; + udp_send_direct ip port (OvernetConnect my_peer); + () + + done + end; + ); + + + LimitedList.set_max_objects !!boot_peers 2000 ; + add_timer 60. (fun _ -> + LimitedList.set_max_objects !!boot_peers 2000; + ); + + add_session_timer enabler 10. (fun _ -> + + List.iter (fun s -> + + if s.search_requests < max_search_requests then begin + let nrequests = + match s.search_kind with + FillBuckets -> 0 + | FileSearch _ -> 1 + | KeywordSearch _ -> 5 + in +(* If we use fewer than 5 buckets, we shouldn't wait for 5 buckets in the + search to start asking for results... *) + let min_bucket = mini !n_used_buckets 5 in + for i = 1 to nrequests do + try + for j = 128 downto min_bucket do + if Fifo.length s.search_ok_peers.(j) > 0 then + let p = Fifo.take s.search_ok_peers.(j) in + udp_send p ( + OvernetGetSearchResults (s.search_md4, + (match s.search_kind with + FillBuckets -> Search_for_file + | FileSearch _ -> Search_for_file + | _ -> Search_for_keyword None + ), 0, 100)); + raise Exit + done + with Exit -> () + done + end + + ) !overnet_searches + + ); + + add_session_timer enabler 60. (fun _ -> - add_timer 60. (fun _ -> - if !!enable_overnet then recover_all_files ()); - +(* compute which peers to ping in the next minute *) + to_ping := []; + let n_to_ping = ref 0 in + begin + try + for i = !n_used_buckets downto 0 do + let b = buckets.(i) in + let overtime = last_time () - 1800 in + Fifo.iter (fun p -> + if p.peer_last_recv < overtime && + p.peer_last_send < overtime then begin + to_ping := p :: !to_ping; + incr n_to_ping; + if !n_to_ping = 60 then raise Exit + end + ) b + done; + with Exit -> () + end; + +(* remove searches that are older than 5 minutes *) + overnet_searches := List.filter (fun s -> + s.search_requests < max_search_requests || + s.search_start > last_time () - 300 + ) !overnet_searches; + ); + + add_session_timer enabler 300. (fun _ -> + let overtime = last_time () - 3600 in + for i = !n_used_buckets - 1 downto 0 do + let len = Fifo.length buckets.(i) in + if len > max_peers_per_bucket then begin + +(* First remove very old peers that we have tried to ping without success *) + for i = 1 to len do + let p = Fifo.take buckets.(i) in + if p.peer_last_recv > overtime || + p.peer_last_send < overtime then + Fifo.put buckets.(i) p + done; + if Fifo.length buckets.(i) > max_peers_per_bucket then begin + +(* Second, remove very old peers, even if tried *) + for i = 1 to Fifo.length buckets.(i) do + let p = Fifo.take buckets.(i) in + if p.peer_last_recv > overtime then + Fifo.put buckets.(i) p + done; + + if Fifo.length buckets.(i) > max_peers_per_bucket then begin +(* Third, remove everything except max_peers_per_bucket peers *) + for i = 1 to Fifo.length buckets.(i) + - max_peers_per_bucket do + let p = Fifo.take buckets.(i) in + () + done; + + end + end + end + done + ); + +(* Every hour, try a query on our UID to fill our buckets *) + add_session_timer enabler 3600. (fun _ -> + let s = create_search FillBuckets !!overnet_md4 in + () + ); + let s = create_search FillBuckets !!overnet_md4 in + + add_session_option_timer enabler overnet_query_peer_period (fun _ -> + if !!enable_overnet then begin + query_next_peers () + end + ); + +(* +(* every 3h for re-publish *) + add_session_timer enabler !!overnet_republish (fun _ -> + if !!enable_overnet then begin + publish_shared_files () + end + ); + +*) (* every 15min for light operations *) - add_session_timer enabler 900. (fun _ -> - if !!enable_overnet then begin - publicize_peers (); - check_current_downloads (); - end - ); - -(* 1st time timers : we cannot afford waiting too much to get connected *) - add_timer 50. (fun timer -> - if !!enable_overnet then begin - publicize_peers () - end - ); - - add_timer 20. (fun timer -> - if !!enable_overnet then begin - find_new_peers (); + add_session_timer enabler 900. (fun _ -> + if !!enable_overnet then begin + check_current_downloads (); + end + ); + add_timer 30. (fun _ -> + if !!enable_overnet then begin + check_current_downloads (); + end + ); + + (* + + add_timer 20. (fun timer -> + if !!enable_overnet then begin + find_new_peers (); (*publish is in fact controled by do_publish_shared_files, every 2 min*) - publish_shared_files () - end - ) - + publish_shared_files () + end + ) + +*) + end + let _ = option_hook overnet_query_peer_period (fun _ -> if !!overnet_query_peer_period < 5. then overnet_query_peer_period =:= 5.); @@ -1333,11 +2227,6 @@ | Some sock -> udp_sock := None; UdpSocket.close sock Closed_by_user); - (match !tcp_sock with - None -> () - | Some sock -> - tcp_sock := None; - TcpServerSocket.close sock Closed_by_user); end let _ = @@ -1352,35 +2241,41 @@ enable is_enabled end ) - + + (* +let connected_peers () = + List.map (fun p -> p.peer_ip, p.peer_port) (get_uniform_distribution ()) + + *) + + let parse_overnet_url url = match String2.split (String.escaped url) '|' with | "fha://" :: "boot" :: name :: port :: _ | "boot" :: name :: port :: _ -> let ip = Ip.from_name name in let port = int_of_string port in - udp_send ip port (OvernetConnect(!!overnet_md4,client_ip None,!overnet_client_port, 0)); + bootstrap ip port; true | _ -> false -let connected_peers () = - List.map (fun p -> p.peer_ip, p.peer_port) (get_uniform_distribution ()) - let register_commands list = register_commands (List2.tail_map (fun (n,f,h) -> (n, "Network/Overnet", f,h)) list) let _ = register_commands + (List.map (fun (command, args, help) -> + command_prefix ^ command, args, help) [ "boot", Arg_two (fun ip port o -> let ip = Ip.from_name ip in let port = int_of_string port in - udp_send ip port (OvernetConnect(!!overnet_md4,client_ip None,!overnet_client_port, 0)); + bootstrap ip port; Printf.sprintf "peer %s:%d added" (Ip.to_string ip) port ), " :\t\t\tadd an Overnet peer"; - "ovlink", Arg_multiple (fun args o -> + "link", Arg_multiple (fun args o -> let buf = o.conn_buf in let url = String2.unsplit args ' ' in if parse_overnet_url url then @@ -1388,30 +2283,32 @@ else "bad syntax" ), " :\t\t\tdownload fha:// link"; - "ovstats", Arg_none (fun o -> + "stats", Arg_none (fun o -> let buf = o.conn_buf and sum = ref 0 in Printf.bprintf buf "Overnet statistics:\n"; Printf.bprintf buf " Search hits: %d\n" !search_hits; Printf.bprintf buf " Source hits: %d\n" !source_hits; - Printf.bprintf buf " peers blocks (max peer number per block = %d) :\n" (!!overnet_max_known_peers/256); - Printf.bprintf buf " This is a list of known peers, sorted by the first byte of their md4 address ( 05FE15E90678... => block 05)\n"; - for i=0 to 15 do - Printf.bprintf buf " "; - for j=0 to 15 do - Printf.bprintf buf "%02X: %3d " (i*16+j) global_peers_size.(i*16+j); - sum := !sum + global_peers_size.(i*16+j); - done; - Printf.bprintf buf "\n"; - done; - Printf.bprintf buf " Number of known Overnet peers = %d\n" !sum; - Hashtbl.iter (fun _ s -> + List.iter (fun s -> Printf.bprintf buf - "Search %s for %s (%d not_asked, %d asked, %d done, %d hits, %d results) %s%s\n" + "Search %s for %s\n" + +(* ", %d asked, %d done, %d hits, %d results) %s%s\n" *) (match s.search_kind with KeywordSearch _ -> "keyword" - | FileSearch _ -> "file") - (Md4.to_string s.search_md4) + | FileSearch _ -> "file" + | FillBuckets -> "fillbuckets" ) + (Md4.to_string s.search_md4); + for i = 128 downto 0 do + let npeers = Fifo.length s.search_waiting_peers.(i) in + let nasked = Fifo.length s.search_asked_peers.(i) in + if npeers > 0 || nasked > 0 then + Printf.bprintf buf + " nbits[%d] = %d peers not asked, %d peers asked\n" + i npeers nasked + done; + + (* (XorSet.cardinal s.search_not_asked_peers) (XorSet.cardinal s.search_asked_peers) (XorSet.cardinal s.search_done_peers) @@ -1424,13 +2321,14 @@ | KeywordSearch [], [] -> "??? " | FileSearch _, _ -> "") (if s.search_publish_file then "file_publish " else "") - ; - ) overnet_searches; +; + *) + ) !overnet_searches; ""; ), ":\t\t\t\tOvernet Stats"; - "ovweb", Arg_multiple (fun args o -> + "web", Arg_multiple (fun args o -> let urls = match args with [] -> let list = ref [] in @@ -1446,32 +2344,23 @@ "web boot started" ), " :\t\t\t\tdownload .ocl URLS (no arg load default)"; - "ovmd4", Arg_none (fun o -> "MD4 is " ^ (Md4.to_string !!overnet_md4); + "md4", Arg_none (fun o -> "MD4 is " ^ (Md4.to_string !!overnet_md4); ), ":\t\t\t\t\tget client MD4 address on the overnet network"; - "ovstore", Arg_none (fun o -> + "store", Arg_none (fun o -> let buf = o.conn_buf in - Printf.bprintf buf "Overnet store:\n"; - Printf.bprintf buf " size = %d, max_size = %d\n" - !published_keyword_size !!overnet_store_size; - Printf.bprintf buf "\n"; - - Hashtbl.iter (fun kw_md4 (size, files) -> - Printf.bprintf buf " md4=%s\n files =\n" (Md4.to_string kw_md4); - XorMd4Map.iter (fun file_md4 (file_tags,_) -> - Printf.bprintf buf " r_md4=%s\n" (Md4.to_string file_md4); - Printf.bprintf buf " tags="; - bprint_tags buf file_tags; - Printf.bprintf buf "\n"; - ) !files - ) published_keyword_table; + Printf.bprintf buf "Overnet store:\n"; + + PublishedKeywords.print buf; + PublishedFiles.print buf; "" ), ":\t\t\t\tdump the Overnet File Store"; - - "ovtst", Arg_two (fun a b o -> + + (* + "tst", Arg_two (fun a b o -> let md41 = Md4.of_string a in let md42 = Md4.of_string b in store_published_file md41 md42 @@ -1482,13 +2371,14 @@ "" ), ":\t\t\t\t\t(not documented)"; - "ovtst2", Arg_two (fun a b o -> + "tst2", Arg_two (fun a b o -> let md4 = Md4.of_string a in let size = int_of_string b in get_results_from_query (Ip.of_string "10.0.0.10") (4665) md4 0 size; "" ), ":\t\t\t\t(not documented)"; - +*) + "send_udp", Arg_three (fun ip port hex o -> try @@ -1500,57 +2390,56 @@ (hex_to_msg (String.sub s 2 (String.length s - 2))) in let opcode = int_of_string ("0x" ^(String.sub hex 0 2)) in let msg = hex_to_msg (String.sub hex 2 (String.length hex - 2)) in - udp_send + udp_send_direct (Ip.of_string ip) (int_of_string port) (OvernetUnknown (opcode,msg)); - lprintf "Sending UDP message %d to %s:%s\n" opcode ip port; - dump msg; lprint_newline (); "Sending UDP message" + lprintf () "Sending UDP message %d to %s:%s\n" opcode ip port; + dump msg; lprintf () "\n"; "Sending UDP message" with _ -> - lprintf "Unable to send UDP message\n"; "Unable to send UDP message" + lprintf () "Unable to send UDP message\n"; "Unable to send UDP message" ), ":\t\t\t\tsend UDP message ( )"; - - "ovsearch", Arg_one (fun m o -> + + "buckets", Arg_none (fun o -> + let buf = o.conn_buf in + Printf.bprintf buf "Number of used buckets %d with %d peers\n" + !n_used_buckets !connected_peers; + for i = 0 to !n_used_buckets do + Printf.bprintf buf " bucket[%d] : %d peers\n" + i (Fifo.length buckets.(i)); + done; + "" + ), ":\t\t\t\tprint buckets table status"; + + "boots", Arg_none (fun o -> + let buf = o.conn_buf in + LimitedList.iter (fun (ip, port) -> + Printf.bprintf buf " %s:%d\n" (Ip.to_string ip) port; + ) !!boot_peers; + Printf.sprintf "Boot peers: %d\n" (LimitedList.length !!boot_peers); + + + ), ":\t\t\t\tprint buckets table status"; + + + (* + "search", Arg_one (fun m o -> let s = create_search (KeywordSearch []) (Md4.of_string m) in Hashtbl.add overnet_searches s.search_md4 s; "Searching for md4" ), ":\t\t\t\tsearch keyword ()"; - - ]; - - CommonWeb.add_web_kind "ocl" (fun _ filename -> - let s = File.to_string filename in - let s = String2.replace s '"' "" in - let lines = String2.split_simplify s '\n' in - List.iter (fun s -> - try - match String2.split_simplify s ',' with - name :: port :: _ -> - let name = String2.replace name '"' "" in - let port = String2.replace port '"' "" in - Ip.async_ip name (fun ip -> - let port = int_of_string port in - if !verbose_overnet then begin - lprintf "ADDING OVERNET PEER %s:%d" name port; - lprint_newline (); - end; - boot_peers := (ip, port) :: !boot_peers) - | _ -> - lprintf "BAD LINE ocl: %s" s; - lprint_newline (); - with _ -> - begin - lprintf "DNS failed"; lprint_newline (); - end - ) lines - ) +*) + + ]); + () let overnet_search (ss : search) = - if !!overnet_search_keyword && not (List.mem ss.search_num !all_overnet_searches) then + if !!overnet_search_keyword then let q = ss.search_query in - all_overnet_searches := ss.search_num :: !all_overnet_searches; + lprintf () "========= overnet_search =========\n"; let ws = keywords_of_query q in List.iter (fun w -> + lprintf () "overnet_search for %s\n" w; let s = create_keyword_search w in Hashtbl.iter (fun r_md4 r_tags -> DonkeyOneFile.search_found true ss r_md4 r_tags) s.search_results; @@ -1559,17 +2448,19 @@ KeywordSearch sss -> s.search_kind <- KeywordSearch (ss :: sss) | _ -> () end; - Hashtbl.add overnet_searches s.search_md4 s; ) ws - + let _ = - CommonWeb.add_redirector_info "DKOV" (fun buf -> - let peers = connected_peers () in - let peers, _ = List2.cut 32 peers in (* sending 32 peers is enough ! *) + CommonWeb.add_redirector_info Proto.redirector_section (fun buf -> + let peers = get_any_peers 32 in buf_int buf (List.length peers); - List.iter (fun (ip,port) -> - buf_ip buf ip; - buf_int16 buf port) + List.iter (fun p -> + buf_ip buf p.peer_ip; + buf_int16 buf p.peer_port) peers; - ) \ No newline at end of file + ) + + let cancel_recover_file file = () + +end \ No newline at end of file diff -Nur ./src/networks/donkey/donkeyOvernet.mli ../mldonkey/src/networks/donkey/donkeyOvernet.mli --- ./src/networks/donkey/donkeyOvernet.mli Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/donkeyOvernet.mli Wed Aug 4 18:59:26 2004 @@ -0,0 +1,129 @@ +(* Copyright 2001, 2002 b8_bavard, b8_fee_carabine, INRIA *) +(* + This file is part of mldonkey. + + mldonkey is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + mldonkey 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 mldonkey; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +open Md4 +open CommonTypes + +type peer = + { + peer_md4 : Md4.t; + mutable peer_ip : Ip.t; + mutable peer_port : int; + mutable peer_tcpport : int; + mutable peer_kind : int; + mutable peer_last_recv : int; + mutable peer_last_send : int; + } + +type search_kind = + Search_for_keyword of unit option +| Search_for_file +| Search_for_kind of int + +type t = +| OvernetConnect of peer + +| OvernetConnectReply of peer list + +| OvernetPublicize of peer + +| OvernetPublicized of peer option + +| OvernetSearch of +(* 2 is OK for most searches, number of replies? *) int * +(* searched file or keyword *) Md4.t * + Md4.t option (* Our UID *) + +| OvernetSearchReply of + Md4.t * + peer list (* the two closest peers in the binary tree of md4s *) + +| OvernetGetSearchResults of + Md4.t * search_kind * int * int + +(* KADEMLIA_SEARCH_RES *) +| OvernetSearchFilesResults of +(* query *) Md4.t * + (Md4.t * tag list) list (* results *) + +(* KADEMLIA_SEARCH_RES *) +| OvernetSearchSourcesResults of Md4.t * peer list + +(* KADEMLIA_PUBLISH_REQ *) +| OvernetPublishFiles of +(* keyword or file md4 *) Md4.t * +(* md4 of file or client md4 *) (Md4.t * tag list) list + +| OvernetPublishSources of +(* keyword or file md4 *) Md4.t * peer list + +(* Published or not Published ??? *) +| OvernetPublished of Md4.t + +| OvernetNoResult of Md4.t + +| OvernetUnknown of int * string + +| OvernetGetMyIP of int + +| OvernetGetMyIPResult of Ip.t + +| OvernetGetMyIPDone + +| OvernetFirewallConnection of Md4.t*int + +| OvernetFirewallConnectionACK of Md4.t + +| OvernetFirewallConnectionNACK of Md4.t + +| OvernetPeerNotFound of peer + +| OvernetUnknown21 of peer + +exception MessageNotImplemented + +val message_to_string : t -> string + +module Make(Proto: sig + + val enable_overnet : bool Options.option_record + val overnet_port : int Options.option_record + val overnet_tcpport : int Options.option_record + val overnet_section : Options.options_section + + val redirector_section : string + val options_section_name : string + val command_prefix : string + val source_kind : bool + + val udp_send : UdpSocket.t -> Ip.t -> int -> t -> unit + val udp_handler : (t -> UdpSocket.udp_packet -> unit) -> + UdpSocket.t -> UdpSocket.event -> unit + end) : sig + + val overnet_search : CommonTypes.search -> unit + val recover_file : DonkeyTypes.file -> unit + val enable : bool ref -> unit + val disable : unit -> unit + val gui_overnet_options_panel : (string * string * string) list + val bootstrap : Ip.t -> int -> unit + val cancel_recover_file : DonkeyTypes.file -> unit + end + + \ No newline at end of file diff -Nur ./src/networks/donkey/donkeyProtoCom.ml ../mldonkey/src/networks/donkey/donkeyProtoCom.ml --- ./src/networks/donkey/donkeyProtoCom.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyProtoCom.ml Wed Aug 4 18:59:26 2004 @@ -302,7 +302,7 @@ (List2.tail_map (fun file -> { f_md4 = file.file_md4; f_ip = client_ip sock; - f_port = !client_port; + f_port = !!donkey_port; f_tags = tag_file file; } ) files) diff -Nur ./src/networks/donkey/donkeyProtoKademlia.ml ../mldonkey/src/networks/donkey/donkeyProtoKademlia.ml --- ./src/networks/donkey/donkeyProtoKademlia.ml Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/donkeyProtoKademlia.ml Wed Aug 4 20:40:15 2004 @@ -0,0 +1,500 @@ +(* Copyright 2001, 2002 b8_bavard, b8_fee_carabine, INRIA *) +(* + This file is part of mldonkey. + + mldonkey is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + mldonkey 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 mldonkey; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +open Printf2 +open Md4 +open Options + +open AnyEndian +open BasicSocket +open LittleEndian + +open CommonOptions +open CommonTypes +open CommonGlobals + +open DonkeyMftp +open DonkeyOvernet +open DonkeyOptions + +module P = struct + + let names_of_tag = + [ + "\001", "filename"; + "\002", "size"; + "\003", "type"; + "\004", "format"; + "\021", "availability"; + "\250", "serverport"; (* 0xFA *) + "\251", "serverip"; (* 0xFB *) + "\252", "sourceuport"; (* 0xFC *) + "\253", "sourceport"; (* 0xFD *) + "\254", "sourceip"; (* 0xFE *) + "\255", "sourcetype"; (* 0xFF *) + ] + +(* This fucking Emule implementation uses 4 32-bits integers instead of + 16 8-bits integers... welcome back to the non-portability problems... *) + let get_md4 s pos = + let ss = String.create 16 in + + ss.[0] <- s.[pos+3]; + ss.[1] <- s.[pos+2]; + ss.[2] <- s.[pos+1]; + ss.[3] <- s.[pos+0]; + + ss.[4] <- s.[pos+7]; + ss.[5] <- s.[pos+6]; + ss.[6] <- s.[pos+5]; + ss.[7] <- s.[pos+4]; + + ss.[8] <- s.[pos+11]; + ss.[9] <- s.[pos+10]; + ss.[10] <- s.[pos+9]; + ss.[11] <- s.[pos+8]; + + ss.[12] <- s.[pos+15]; + ss.[13] <- s.[pos+14]; + ss.[14] <- s.[pos+13]; + ss.[15] <- s.[pos+12]; + + Md4.direct_of_string ss + + let buf_md4 buf s = + let s = Md4.direct_to_string s in + + let ss = String.create 16 in + let pos = 0 in + + ss.[0] <- s.[pos+3]; + ss.[1] <- s.[pos+2]; + ss.[2] <- s.[pos+1]; + ss.[3] <- s.[pos+0]; + + ss.[4] <- s.[pos+7]; + ss.[5] <- s.[pos+6]; + ss.[6] <- s.[pos+5]; + ss.[7] <- s.[pos+4]; + + ss.[8] <- s.[pos+11]; + ss.[9] <- s.[pos+10]; + ss.[10] <- s.[pos+9]; + ss.[11] <- s.[pos+8]; + + ss.[12] <- s.[pos+15]; + ss.[13] <- s.[pos+14]; + ss.[14] <- s.[pos+13]; + ss.[15] <- s.[pos+12]; + + Buffer.add_string buf ss + + +(* Strange: why was the IP format changed for Kademlia ? *) + let get_ip s pos = + let c1 = int_of_char s.[pos] in + let c2 = int_of_char s.[pos+1] in + let c3 = int_of_char s.[pos+2] in + let c4 = int_of_char s.[pos+3] in + Ip.of_ints (c4, c3, c2, c1) + + + let buf_ip buf ip = + let (ip3,ip2,ip1,ip0) = Ip.to_ints ip in + buf_int8 buf ip0; + buf_int8 buf ip1; + buf_int8 buf ip2; + buf_int8 buf ip3 + + let buf_peer buf p = + buf_md4 buf p.peer_md4; + buf_ip buf p.peer_ip; + buf_int16 buf p.peer_port; + buf_int16 buf p.peer_tcpport; + buf_int8 buf p.peer_kind + + let write buf t = + match t with + | OvernetConnect p -> + buf_int8 buf 0x00; + buf_peer buf p + + | OvernetConnectReply peers -> + buf_int8 buf 0x08; + buf_int16 buf (List.length peers); + List.iter (buf_peer buf) peers + + | OvernetPublicize p -> + buf_int8 buf 0x10; + buf_peer buf p + + | OvernetPublicized (Some p) -> + buf_int8 buf 0x18; + buf_peer buf p + + | OvernetSearch (nresults, target, Some uid) -> + buf_int8 buf 0x20; + buf_int8 buf (nresults land 0x1f); + buf_md4 buf target; + buf_md4 buf uid + + | OvernetSearchReply (md4, peers) -> + buf_int8 buf 0x28; + buf_md4 buf md4; + buf_int8 buf (List.length peers); + List.iter (buf_peer buf) peers + + | OvernetGetSearchResults (target, kind, min, max) -> + buf_int8 buf 0x30; + buf_md4 buf target; + begin + match kind with + | Search_for_kind _ + | Search_for_file -> + buf_int8 buf 1 + | Search_for_keyword None -> + buf_int8 buf 0 + | Search_for_keyword (Some e) -> + buf_int8 buf 1 + + end + + | OvernetSearchFilesResults (target, results) -> + buf_int8 buf 0x38; + buf_md4 buf target; + buf_int16 buf (List.length results); + List.iter (fun (md4, tags) -> + buf_md4 buf md4; + buf_int8 buf (List.length tags); + List.iter (fun tag -> + buf_tag buf tag names_of_tag + ) tags + ) results + + | OvernetPublishFiles (target, results) -> + buf_int8 buf 0x40; + buf_md4 buf target; + buf_int16 buf (List.length results); + List.iter (fun (md4, tags) -> + buf_md4 buf md4; + buf_int8 buf (List.length tags); + List.iter (fun tag -> + buf_tag buf tag names_of_tag + ) tags + ) results + + | OvernetPublishSources _ + | OvernetSearchSourcesResults _ + | OvernetUnknown21 _ + | OvernetPeerNotFound _ + | OvernetFirewallConnectionNACK _ + | OvernetFirewallConnectionACK _ + | OvernetFirewallConnection (_, _) + | OvernetGetMyIPResult _ + | OvernetGetMyIP _ + | OvernetNoResult _ + | OvernetPublished _ + | OvernetSearch (_,_, None) + | OvernetPublicized None + | OvernetGetMyIPDone -> raise MessageNotImplemented + + | OvernetUnknown (opcode, s) -> + buf_int8 buf opcode; + Buffer.add_string buf s + + let get_peer s pos = + + let md4 = get_md4 s pos in + let ip = get_ip s (pos+16) in + let udp_port = get_int16 s (pos + 20) in + let tcp_port = get_int16 s (pos + 22) in + let kind = get_uint8 s (pos + 24) in + { + peer_md4 = md4; + peer_ip = ip; + peer_port = udp_port; + peer_tcpport = tcp_port; + peer_kind = kind; + peer_last_recv = 0; + peer_last_send = 0; + }, pos + 25 + + let get_peers_from_results ip port answers = + List.map (fun (r_md4, r_tags) -> + let peer_ip = ref ip in + let peer_udpport = ref port in + let peer_tcpport = ref 0 in + let peer_kind = ref 0 in + List.iter (fun tag -> + match tag.tag_name with + "sourceport" -> + for_int_tag tag (fun port -> + peer_tcpport := port) + | "sourceuport" -> + for_int_tag tag (fun port -> + peer_udpport := port) + | "sourceip" -> + for_int64_tag tag (fun ip -> + peer_ip := Ip.of_int64 ip + ) + | "sourcetype" -> + for_int_tag tag (fun kind -> + peer_kind := kind) + | _ -> + lprintf "Unused source tag [%s]\n" + (String.escaped tag.tag_name) + ) r_tags; + { + peer_ip = !peer_ip; + peer_port = !peer_udpport; + peer_tcpport = !peer_tcpport; + peer_md4 = r_md4; + peer_last_recv = 0; + peer_last_send = 0; + peer_kind = !peer_kind; + } + ) answers + + let parse ip port opcode s = + match opcode with + 0x00 -> + let p, pos = get_peer s 0 in + OvernetConnect p + + | 0x08 -> + let n = get_int16 s 0 in + lprintf "npeers: %d\n" n; + let peers, pos = get_list16 get_peer s 0 in + OvernetConnectReply peers + + | 0x10 -> + let p, pos = get_peer s 0 in + OvernetPublicize p + + | 0x18 -> + let p, pos = get_peer s 0 in + OvernetPublicized (Some p) + + | 0x20 -> + let nresults = (get_uint8 s 0) land 0x1f in + let target = get_md4 s 1 in + let uid = get_md4 s 17 in + OvernetSearch (nresults, target, Some uid) + + | 0x28 -> + let target = get_md4 s 0 in + let peers, pos = get_list8 get_peer s 16 in + OvernetSearchReply (target, peers) + + | 0x30 -> + let target = get_md4 s 0 in + let kind = get_uint8 s 16 in + let kind = + if String.length s = 17 then + if kind = 1 then Search_for_file else + Search_for_keyword None + else + Search_for_kind kind + in + OvernetGetSearchResults (target, kind, 0, 100) + + | 0x38 -> + let target = get_md4 s 0 in + let answers, pos = get_list16 (fun s pos -> + let uid = get_md4 s pos in + let tags, pos = get_list8 (get_tag names_of_tag) + s (pos + 16) in + (uid, tags), pos + ) s 16 in + begin + match answers with + (_, first_tags) :: _ -> + let sources = ref false in + List.iter (fun tag -> + if tag.tag_name = "sourceport" then sources := true; + ) first_tags; + if !sources then + let peers = get_peers_from_results Ip.null 0 answers in + OvernetSearchSourcesResults (target, peers) + + else + OvernetSearchFilesResults (target, answers) + | [] -> + OvernetSearchFilesResults (target, answers) + end + + | 0x40 -> + let target = get_md4 s 0 in + let answers, pos = get_list16 (fun s pos -> + let uid = get_md4 s pos in + let tags, pos = get_list8 (get_tag names_of_tag) + s (pos + 16) in + (uid, tags), pos + ) s 16 in + + begin + match answers with + (_, first_tags) :: _ -> + let sources = ref false in + List.iter (fun tag -> + if tag.tag_name = "sourceport" then sources := true; + ) first_tags; + if !sources then + let peers = get_peers_from_results ip port answers in + OvernetPublishSources (target, peers) + + else + OvernetPublishFiles (target, answers) + | [] -> + OvernetPublishFiles (target, answers) + end + + + | 0x48 -> + let target = get_md4 s 0 in + OvernetPublished target + +(* +#define KADEMLIA_PUBLISH_REQ 0x40 // ( *(CNT2))*(CNT1) +#define KADEMLIA_PUBLISH_RES 0x48 // + +#define KADEMLIA_FIREWALLED_REQ 0x50 // +#define KADEMLIA_BUDDY_REQ 0x51 // +#define KADEMLIA_BUDDY_CON 0x52 // +#define KADEMLIA_BUDDY_ACK 0x57 // +#define KADEMLIA_FIREWALLED_RES 0x58 // +#define KADEMLIA_FIREWALLED_ACK 0x59 // (null) +*) + + | _ -> + OvernetUnknown (opcode, String.sub s 1 (String.length s - 1)) + + let udp_buf = Buffer.create 2000 + + let kademlia_header_code = char_of_int 0xE4 + let kademlia_packed_header_code = char_of_int 0xE5 + let kademlia_header = String.make 1 kademlia_header_code + let kademlia_packed_header = String.make 1 kademlia_packed_header_code + + let parse_message ip port pbuf = + let len = String.length pbuf in + if len < 2 || + (let magic = pbuf.[0] in + magic <> kademlia_header_code && + magic <> kademlia_packed_header_code) then + begin + if !CommonOptions.verbose_unknown_messages then begin + lprintf "Received unknown UDP packet\n"; + dump pbuf; + end; + raise Not_found + + end + else + let magic = pbuf.[0] in + let opcode = int_of_char pbuf.[1] in + let msg = String.sub pbuf 2 (len-2) in + let msg = if magic = kademlia_packed_header_code then + let s = Autoconf.zlib__uncompress_string2 msg in +(* lprintf "Uncompressed:\n"; + dump s; *) + s + else msg + in + let t = parse ip port opcode msg in + t + + let udp_send sock ip port msg = + try + Buffer.clear udp_buf; + write udp_buf msg; + let s = Buffer.contents udp_buf in + + let s = + if String.length s > 200 then + let opcode = String.sub s 0 1 in + let args = String.sub s 1 (String.length s - 1) in + kademlia_packed_header ^ opcode ^ (Autoconf.zlib__compress_string args) + else + kademlia_header ^ s + in + + if !verbose_overnet then + begin + lprintf "Sending UDP to %s:%d type %s (opcode 0x%02X len %d)\n" + (Ip.to_string ip) port (message_to_string msg) (get_uint8 s 1) + (String.length s); +(*dump s; lprint_newline ();*) + end; + let len = String.length s in + let t = parse_message ip port s in + if t <> msg then begin + lprintf "********** SENT MESSAGE DIFFERS FROM EXPECTED ******\n"; + end; + + + UdpSocket.write sock s ip port + with + | MessageNotImplemented -> () + | e -> lprintf "Exception %s in udp_send\n" (Printexc2.to_string e) + + let udp_handler f sock event = + match event with + UdpSocket.READ_DONE -> + UdpSocket.read_packets sock (fun p -> + try + let pbuf = p.UdpSocket.udp_content in + + let (ip, port) = + match p.UdpSocket.udp_addr with + Unix.ADDR_INET (inet, port) -> + Ip.of_inet_addr inet, port + | _ -> assert false + in + let t = parse_message ip port pbuf in + f t p + with e -> + lprintf "Error %s in udp_handler, dump of packet:\n" + (Printexc2.to_string e); + dump p.UdpSocket.udp_content; + lprint_newline () + ); + | _ -> () + + let redirector_section = "DKKD" + let options_section_name = "Kademlia" + + let enable_overnet = enable_kademlia + let source_kind = false + + let overnet_section = file_section donkey_ini + [ options_section_name ] + "Overnet options" + + let overnet_port = + define_option overnet_section [options_section_name; "port"] + "port for Kademlia" + int_option (2000 + Random.int 20000) + + let overnet_tcpport = donkey_port + let command_prefix = "kad_" + end + +module Kademlia = Make(P) + \ No newline at end of file diff -Nur ./src/networks/donkey/donkeyProtoKademlia.mli ../mldonkey/src/networks/donkey/donkeyProtoKademlia.mli --- ./src/networks/donkey/donkeyProtoKademlia.mli Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/donkeyProtoKademlia.mli Wed Aug 4 18:59:26 2004 @@ -0,0 +1,52 @@ +(* Copyright 2001, 2002 b8_bavard, b8_fee_carabine, INRIA *) +(* + This file is part of mldonkey. + + mldonkey is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + mldonkey 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 mldonkey; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +(* +module P : + sig + val write : Buffer.t -> DonkeyOvernet.t -> unit + val udp_buf : Buffer.t + val kademlia_header_code : char + val kademlia_packed_header_code : char + val kademlia_header : string + val kademlia_packed_header : string + val udp_send : UdpSocket.t -> Ip.t -> int -> DonkeyOvernet.t -> unit + val parse : 'a -> 'b + val udp_handler : + ('a -> UdpSocket.udp_packet -> unit) -> + UdpSocket.t -> UdpSocket.event -> unit + val redirector_section : string + val options_section_name : string + val enable_overnet : bool Options.option_record + val overnet_section : Options.options_section + val overnet_port : int Options.option_record + val overnet_tcpport : int Options.option_record + val command_prefix : string + end + *) +module Kademlia : + sig + val overnet_search : CommonTypes.search -> unit + val recover_file : DonkeyTypes.file -> unit + val enable : bool ref -> unit + val disable : unit -> unit + val gui_overnet_options_panel : (string * string * string) list + val bootstrap : Ip.t -> int -> unit + val cancel_recover_file : DonkeyTypes.file -> unit + end diff -Nur ./src/networks/donkey/donkeyProtoOvernet.ml ../mldonkey/src/networks/donkey/donkeyProtoOvernet.ml --- ./src/networks/donkey/donkeyProtoOvernet.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyProtoOvernet.ml Wed Aug 4 18:59:26 2004 @@ -22,6 +22,7 @@ open AnyEndian +open BasicSocket open CommonOptions open Options open DonkeyOptions @@ -29,496 +30,518 @@ open LittleEndian open CommonGlobals open DonkeyMftp +open DonkeyOvernet -type peer = - { - peer_md4 : Md4.t; - mutable peer_ip : Ip.t; - mutable peer_port : int; - mutable peer_kind : int; - mutable peer_last_msg : int; - } - -let buf_peer buf p = - buf_md4 buf p.peer_md4; - buf_ip buf p.peer_ip; - buf_int16 buf p.peer_port; - buf_int8 buf p.peer_kind - -let get_peer s pos = - let md4 = get_md4 s pos in - let ip = get_ip s (pos+16) in - let port = get_int16 s (pos+20) in - let kind = get_uint8 s (pos+22) in - { - peer_md4 = md4; - peer_ip = ip; - peer_port = port; - peer_kind = kind; - peer_last_msg = BasicSocket.last_time (); - }, pos + 23 - -type t = -| OvernetConnect of -(* client md4 *) Md4.t * -(* IP address *) Ip.t * -(* port *) int * -(* kind *) int - -| OvernetConnectReply of -(* The last peer of this list is the sender *) - peer list - -| OvernetSearch of -(* 2 is OK for most searches, number of replies? *) int * -(* searched file or keyword *) Md4.t - -| OvernetPublicize of -(* client md4 *) Md4.t * -(* IP address *) Ip.t * -(* port *) int * -(* kind *) int - -| OvernetPublicized - -| OvernetSearchReply of - Md4.t * - peer list (* the two closest peers in the binary tree of md4s *) - -(* - -RCVD: SEARCH REPLY -17:54:05.411029 217.231.48.129.5509 > 192.168.0.2.5682: udp 65 -MESSAGE SIZE: 65 -dec: [ -(227) -(15) -(11)(198)(22)(129)(235)(182)(173)(78)(160)(117)(29)(147)(133)(82)(9)(66) -(2) npeers on which we can iter the request - -(11)(199)(46)(146)(72)(115)(64)(95)(26)(146)(99)(178)(47)(103)(227)(118) -(217)(88)(209)(92) -(172)(46) -(2) - -(11)(196)(75)(211)(89)(29)(190)(67)(234)(253)(153)(118)(62)(126)(231)(98) -(217)(231)(48)(129) -(133)(21) -(0) - - ] -*) - -| OvernetGetSearchResults of - Md4.t * int * int * int - -(* -RCVD: SEARCH GET REPLIES -17:54:15.309167 192.168.0.2.5682 > 217.231.48.129.5509: udp 23 (DF) -MESSAGE SIZE: 23 -dec: [ -(227) -(16) -(11)(198)(22)(129)(235)(182)(173)(78)(160)(117)(29)(147)(133)(82)(9)(66) -(0)(0)(0)(100)(0)] -*) - - -| OvernetSearchResult of -(* query *) Md4.t * -(* md4 result *) Md4.t * -(* tags *) tag list - -(* -RCVD: ONE REPLY -17:54:15.862868 217.231.48.129.5509 > 192.168.0.2.5682: udp 71 -MESSAGE SIZE: 71 -dec: [ -(227) -(17) -(11)(198)(22)(129)(235)(182)(173)(78)(160)(117)(29)(147)(133)(82)(9)(66) -(25)(119)(145)(24)(179)(65)(171)(160)(216)(218)(6)(95)(109)(228)(202)(169) -(1)(0)(0)(0) -(2) -(3)(0) loc -(25)(0) bcp://80.131.174.215:4662 -] -*) -(* -RCVD: ONE REPLY -17:54:15.936396 217.231.48.129.5509 > 192.168.0.2.5682: udp 70 -dec: [ -(227) -(17) -(11)(198)(22)(129)(235)(182)(173)(78)(160)(117)(29)(147)(133)(82)(9)(66) -(53)(213)(239)(225)(189)(192)(230)(24)(6)(92)(231)(203)(2)(102)(21)(168) -(1)(0)(0)(0) -(2) -(3)(0) l o c -(24)(0) b c p : / / 2 4 . 1 7 0 . 8 1 . 2 2 7 : 4 6 6 2] - -RCVD: ONE REPLY -17:54:15.945381 217.231.48.129.5509 > 192.168.0.2.5682: udp 103 -MESSAGE SIZE: 103 -dec: [ -(227) -(17) -(11)(198)(22)(129)(235)(182)(173)(78)(160)(117)(29)(147)(133)(82)(9)(66) -(189)(53)(62)(130)(142)(23)(226)(254)(35)(118)(167)(74)(171)(219)(193)(93) -(1)(0)(0)(0) -(2) -(3)(0) l o c -(57)(0) b c p : / / b d 3 5 3 e 8 2 8 e 1 7 e 2 f e 2 3 7 6 a 7 4 a a b d b c 1 5 d : 8 0 . 3 4 . 1 2 7 . 2 1 5 : 6 3 2 4 - ] -*) - -(* - UNKNOWN: opcode 18 -ascii: [ x(128) F(249) `(246) L(157)(217)(146)(143)(127)(244)(190) g(233)(0)(0)(0)(0)] -dec: [ -(227) -(18) -(120)(128)(70)(249)(96)(246)(76)(157)(217)(146)(143)(127)(244)(190)(103)(233) -(0)(0)(0)(0) -] -*) - -| OvernetNoResult of Md4.t - -(* -UNKNOWN: opcode 19 -22:40:26.123479 192.168.0.3.8368 > 62.255.150.48.6411: udp 66 (DF) -MESSAGE SIZE: 66 -ascii: [(227)(19)(248)(237) * J A(180) A ] 7 O(137)(138)(151) > I(18)(29) @(212)(166)(227)(0) [(140)(236)(220) V(2) $(10)(130) y(2)(0)(0)(0)(2)(1)(0)(1)(14)(0) i n d e x . h t m l . o l d(3)(1)(0)(2)(191)(0)(0)(0)] -dec: [ -(227) -(19) -(248)(237)(42)(74)(65)(180)(65)(93)(55)(79)(137)(138)(151)(62)(73)(18) "html" -(29)(64)(212)(166)(227)(0)(91)(140)(236)(220)(86)(2)(36)(10)(130)(121) MD4 -(2)(0)(0)(0) -(2)(1)(0)(1) -(14)(0) index.html.old -(3)(1)(0)(2) -(191)(0)(0)(0)] - - - -UNKNOWN: opcode 19 -22:41:36.040963 192.168.0.3.8368 > 128.8.51.16.9683: udp 102 (DF) -MESSAGE SIZE: 102 -ascii: [(227)(19)(29) @(212)(166)(227)(0) [(140)(236)(220) V(2) $(10)(130) y g(198) i s Q(255) J(236) )(205)(186)(171)(242)(251)(227) F(1)(0)(0)(0)(2)(3)(0) l o c 8(0) -dec: [ -(227) -(19) -(29)(64)(212)(166)(227)(0)(91)(140)(236)(220)(86)(2)(36)(10)(130)(121) -(103)(198)(105)(115)(81)(255)(74)(236)(41)(205)(186)(171)(242)(251)(227)(70) -(1)(0)(0)(0) -(2) -(3)(0) "loc" -(56)(0) "bcp://67c6697351ff4aec29cdbaabf2fbe346:62.243.53.52:4665" - +module Proto = struct + + let names_of_tag = + [ + "\001", "filename"; + "\002", "size"; + "\003", "type"; + "\004", "format"; + ] + + let buf_peer buf p = + buf_md4 buf p.peer_md4; + buf_ip buf p.peer_ip; + buf_int16 buf p.peer_port; + buf_int8 buf p.peer_kind + + let get_peer s pos = + let md4 = get_md4 s pos in + let ip = get_ip s (pos+16) in + let port = get_int16 s (pos+20) in + let kind = get_uint8 s (pos+22) in + { + peer_md4 = md4; + peer_ip = ip; + peer_port = port; + peer_tcpport = 0; + peer_kind = kind; + peer_last_recv = 0; + peer_last_send = 0; + }, pos + 23 + + + let write buf t = + match t with + | OvernetConnect p -> + buf_int8 buf 10; + buf_md4 buf p.peer_md4; + buf_ip buf p.peer_ip; + buf_int16 buf p.peer_port; + buf_int8 buf p.peer_kind + + | OvernetConnectReply peers -> + buf_int8 buf 11; + buf_list16 buf_peer buf peers + + | OvernetPublicize p -> + buf_int8 buf 12; + buf_md4 buf p.peer_md4; + buf_ip buf p.peer_ip; + buf_int16 buf p.peer_port; + buf_int8 buf p.peer_kind + + | OvernetPublicized p -> + buf_int8 buf 13 + + | OvernetSearch (kind, md4, _) -> + buf_int8 buf 14; + buf_int8 buf kind; + buf_md4 buf md4 + + | OvernetSearchReply (md4, peers) -> + buf_int8 buf 15; + buf_md4 buf md4; + buf_list8 buf_peer buf peers + + | OvernetGetSearchResults (md4, kind, min, max) -> + buf_int8 buf 16; + buf_md4 buf md4; + buf_int8 buf 0; (* the kind in overnet seems to always be 0 *) +(* buf_int8 buf kind; *) + buf_int16 buf min; + buf_int16 buf max + + | OvernetSearchFilesResults (md4, [r_md4, r_tags]) -> + buf_int8 buf 17; + buf_md4 buf md4; + buf_md4 buf r_md4; + buf_tags buf r_tags names_of_tag + + | OvernetSearchSourcesResults (md4, [p]) -> +(* buf_int8 buf 17; + buf_md4 buf md4; + buf_md4 buf r_md4; + buf_tags buf r_tags names_of_tag +*) () + + | OvernetNoResult md4 -> + buf_int8 buf 18; + buf_md4 buf md4 + + | OvernetPublishFiles (md4, [r_md4, r_tags]) -> + buf_int8 buf 19; + buf_md4 buf md4; + buf_md4 buf r_md4; + buf_tags buf r_tags names_of_tag + + (* + | OvernetPublishSources (md4, [p]) -> + buf_int8 buf 19; + buf_md4 buf md4; + buf_md4 buf p.peer_md4; + buf_tags buf r_tags names_of_tag *) + + | OvernetPublished md4 -> + buf_int8 buf 20; + buf_md4 buf md4 + + | OvernetGetMyIP port -> + buf_int8 buf 27; + buf_int16 buf port + + | OvernetGetMyIPResult (ip) -> + buf_int8 buf 28; + buf_ip buf ip + + | OvernetGetMyIPDone -> + buf_int8 buf 29 + + | OvernetFirewallConnection(md4,port) -> + buf_int8 buf 24; + buf_md4 buf md4; + buf_int16 buf port + + | OvernetFirewallConnectionACK(md4) -> + buf_int8 buf 25; + buf_md4 buf md4 + + | OvernetFirewallConnectionNACK(md4) -> + buf_int8 buf 26; + buf_md4 buf md4 + + | OvernetPeerNotFound peer -> + buf_int8 buf 33; + buf_peer buf peer + + | OvernetUnknown21 peer -> + buf_int8 buf 21; + buf_peer buf peer + + | OvernetUnknown (opcode, s) -> + buf_int8 buf opcode; + Buffer.add_string buf s + | OvernetSearchFilesResults _ + | OvernetPublishFiles _ + | OvernetPublishSources _ + | OvernetSearchSourcesResults _ -> + raise MessageNotImplemented + + let get_peer_from_result ip port r_md4 r_tags = + let peer_ip = ref ip in + let peer_udpport = ref port in + let peer_tcpport = ref 0 in + let peer_kind = ref 0 in + List.iter (fun tag -> + match tag.tag_name with + "loc" -> + for_string_tag tag (fun bcp -> + lprintf "loc tag : [%s]\n" bcp; + if String2.starts_with bcp "bcp://" then + let bcp2 = String.sub bcp 6 (String.length bcp - 6) + in + match String2.split_simplify bcp2 ':' with + | [_;ip;port] -> + if !verbose_overnet then + lprintf "FIXME: Received BCP type 2 %s\n" + bcp; + +(* FIXME: A firewalled peer... + peer_ip := Ip.of_string ip; + peer_tcpport := int_of_string port; + *) + + | [ip;port] -> + peer_ip := Ip.of_string ip; + peer_tcpport := int_of_string port; + | _ -> + lprintf "Ill formed bcp: [%s]\n" bcp; + else + lprintf "Ill formed bcp: [%s]\n" bcp; + ) + | _ -> + lprintf "Unused source tag [%s]\n" + (String.escaped tag.tag_name) + ) r_tags; + { + peer_ip = !peer_ip; + peer_port = !peer_udpport; + peer_tcpport = !peer_tcpport; + peer_md4 = r_md4; + peer_last_recv = 0; + peer_last_send = 0; + peer_kind = !peer_kind; + } + + let parse ip port opcode s = + try + match opcode with + | 10 -> + let md4 = get_md4 s 0 in + let ip = get_ip s 16 in + let port = get_int16 s 20 in + let kind = get_uint8 s 22 in + OvernetConnect { + peer_md4 = md4; + peer_ip = ip; + peer_port = port; + peer_kind = kind; + peer_tcpport = 0; + peer_last_recv = 0; + peer_last_send = 0; + } + | 11 -> + let peers, pos = get_list16 get_peer s 0 in + OvernetConnectReply peers + | 12 -> + let md4 = get_md4 s 0 in + let ip = get_ip s 16 in + let port = get_int16 s 20 in + let kind = get_uint8 s 22 in + OvernetPublicize { + peer_md4 = md4; + peer_ip = ip; + peer_port = port; + peer_kind = kind; + peer_tcpport = 0; + peer_last_recv = 0; + peer_last_send = 0; + } + | 13 -> + OvernetPublicized None + | 14 -> + let kind = get_uint8 s 0 in + let md4 = get_md4 s 1 in + OvernetSearch (kind, md4, None) + + | 15 -> + let md4 = get_md4 s 0 in + let peers, pos = get_list8 get_peer s 16 in + OvernetSearchReply (md4, peers) + + | 16 -> + let md4 = get_md4 s 0 in + let kind = get_uint8 s 16 in + let min = get_int16 s 17 in + let max = get_int16 s 19 in + OvernetGetSearchResults (md4, Search_for_kind kind, min, max) + + | 17 -> + let md4 = get_md4 s 0 in + let r_md4 = get_md4 s 16 in + let r_tags, pos = get_tags s 32 names_of_tag in + + let sources = ref false in + List.iter (fun tag -> + if tag.tag_name = "loc" then sources := true; + ) r_tags; + if !sources then + let peer = get_peer_from_result ip port r_md4 r_tags in + + OvernetSearchSourcesResults (md4, [peer]) + else + OvernetSearchFilesResults (md4, [r_md4, r_tags]) + + | 18 -> + let md4 = get_md4 s 0 in + OvernetNoResult md4 + + | 19 -> + let md4 = get_md4 s 0 in + let r_md4 = get_md4 s 16 in + let r_tags, pos = get_tags s 32 names_of_tag in + + let sources = ref false in + List.iter (fun tag -> + if tag.tag_name = "loc" then sources := true; + ) r_tags; + if !sources then + let peer = get_peer_from_result ip port r_md4 r_tags in + + OvernetPublishSources (md4, [peer]) + else + OvernetPublishFiles (md4, [r_md4, r_tags]) + + | 20 -> + let md4 = get_md4 s 0 in + OvernetPublished md4 + + | 21 -> +(* idem as 33, but IP seem to be a low ID *) + if !verbose_overnet then begin + lprintf "Received code %d message.\nDump: " opcode; dump s; lprint_newline (); + end; + + let peer, _ = get_peer s 0 in + OvernetUnknown21 peer + + | 24 -> + if !verbose_overnet then + lprintf "RCVD: OVERNET FIREWALL CONNECTION (24)\n"; + let md4 = get_md4 s 0 in + let port = get_int16 s 16 in + OvernetFirewallConnection(md4,port) + + | 25 -> + if !verbose_overnet then + lprintf "RCVD: OVERNET FIREWALL CONNECTION ACK (25)\n"; + let md4 = get_md4 s 0 in + OvernetFirewallConnectionACK(md4) + + | 26 -> + if !verbose_overnet then + lprintf "RCVD: OVERNET FIREWALL CONNECTION NACK (26)\n"; + let md4 = get_md4 s 0 in + OvernetFirewallConnectionNACK(md4) + + | 27 -> + if !verbose_overnet then + lprintf "RCVD: GETMYIP MESSAGE (27)\n"; + OvernetGetMyIP (get_int16 s 0) + | 28 -> + if !verbose_overnet then + lprintf "RCVD: GETMYIPRESULT MESSAGE (28)\n"; + let ip = get_ip s 0 in + OvernetGetMyIPResult (ip) + | 29 -> + if !verbose_overnet then + lprintf "RCVD: GETMYIPDONE MESSAGE (29)\n"; + OvernetGetMyIPDone + + | 33 -> + if !verbose_overnet then + lprintf "RCVD: PEER NOT FOUND (33)\n"; + let peer, _ = get_peer s 0 in + OvernetPeerNotFound peer + + | _ -> + lprintf "UNKNOWN: opcode %d\n" opcode; + dump s; + lprint_newline (); + OvernetUnknown (opcode, s) + with e -> + lprintf "Error %s while parsing opcode %d\n" (Printexc2.to_string e) opcode; + dump s; + lprint_newline (); + OvernetUnknown (opcode, s) + + let udp_handler f sock event = + match event with + UdpSocket.READ_DONE -> + UdpSocket.read_packets sock (fun p -> + try + let pbuf = p.UdpSocket.udp_content in + let len = String.length pbuf in + if len < 2 || + int_of_char pbuf.[0] <> 227 then + begin + if !CommonOptions.verbose_unknown_messages then begin + lprintf "Received unknown UDP packet\n"; + dump pbuf; + end + end + else + begin + let (ip, port) = + match p.UdpSocket.udp_addr with + Unix.ADDR_INET (inet, port) -> + Ip.of_inet_addr inet, port + | _ -> assert false + in + + let t = parse ip port (int_of_char pbuf.[1]) (String.sub pbuf 2 (len-2)) in + f t p + end + with e -> + lprintf "Error %s in udp_handler, dump of packet:\n" + (Printexc2.to_string e); + dump p.UdpSocket.udp_content; + lprint_newline () + ); + | _ -> () + + let redirector_section = "DKOV" + let options_section_name = overnet_options_section_name + let overnet_section = overnet_section + let overnet_port = overnet_port + let overnet_tcpport = overnet_port + + let udp_buf = Buffer.create 2000 + + let udp_send sock ip port msg = + try + Buffer.clear udp_buf; + buf_int8 udp_buf 227; + write udp_buf msg; + let s = Buffer.contents udp_buf in + if !verbose_overnet then + begin + lprintf "Sending UDP to %s:%d (0x%02X)\n" + (Ip.to_string ip) port (get_uint8 s 1); + lprintf " %s\n" (message_to_string msg) +(*dump s; lprint_newline ();*) + end; + let len = String.length s in + UdpSocket.write sock s ip port + with e -> + lprintf "Exception %s in udp_send\n" (Printexc2.to_string e) + + let udp_send sock ip port msg = + match msg with + | OvernetSearchFilesResults (target, ((_ :: _ :: _) as results)) -> + List.iter (fun r -> + udp_send sock ip port (OvernetSearchFilesResults (target, [r])) + ) results + | OvernetSearchSourcesResults (target, ((_ :: _ :: _) as results)) -> + List.iter (fun r -> + udp_send sock ip port (OvernetSearchSourcesResults (target, [r])) + ) results + | OvernetPublishFiles (target, ((_ :: _ :: _) as results)) -> + List.iter (fun r -> + udp_send sock ip port (OvernetPublishFiles (target, [r])) + ) results + | OvernetPublishSources (target, ((_ :: _ :: _) as results)) -> + List.iter (fun r -> + udp_send sock ip port (OvernetPublishSources (target, [r])) + ) results + | _ -> udp_send sock ip port msg + + let enable_overnet = enable_overnet + let command_prefix = "ov_" + let source_kind = true + + end -| OvernetPublish of -(* keyword or file md4 *) Md4.t * -(* md4 of file or client md4 *) Md4.t * - tag list - -(* Published or not Published ??? *) -| OvernetPublished of Md4.t - -| OvernetUnknown of int * string - -| OvernetGetMyIP of int - -| OvernetGetMyIPResult of Ip.t - -| OvernetGetMyIPDone - -| OvernetFirewallConnection of Md4.t*int - -| OvernetFirewallConnectionACK of Md4.t - -| OvernetFirewallConnectionNACK of Md4.t - -| OvernetPeerNotFound of peer - -| OvernetUnknown21 of peer - - - -let names_of_tag = - [ - "\001", "filename"; - "\002", "size"; - "\003", "type"; - "\004", "format"; - ] +module Overnet_initial = Make(Proto) - - -let write buf t = - match t with - | OvernetConnect (md4, ip, port, kind) -> - buf_int8 buf 10; - buf_md4 buf md4; - buf_ip buf ip; - buf_int16 buf port; - buf_int8 buf kind +let overnet_protocol_connect_version = + define_option overnet_section [ + Proto.options_section_name; + "protocol_connect_version"] + "The protocol version sent on Overnet connections" + int_option 1044 + +let overnet_protocol_connectreply_version = + define_option overnet_section [Proto.options_section_name; "protocol_connectreply_version"] + "The protocol version sent on Overnet connections replies" + int_option 44 + +let _ = + CommonWeb.add_web_kind "ocl" (fun _ filename -> + let s = File.to_string filename in + let s = String2.replace s '"' "" in + let lines = String2.split_simplify s '\n' in + List.iter (fun s -> + try + match String2.split_simplify s ',' with + name :: port :: _ -> + let name = String2.replace name '"' "" in + let port = String2.replace port '"' "" in + Ip.async_ip name (fun ip -> + let port = int_of_string port in + if !verbose_overnet then begin + lprintf "ADDING OVERNET PEER %s:%d" name port; + lprint_newline (); + end; + Overnet_initial.bootstrap ip port) + | _ -> + lprintf "BAD LINE ocl: %s" s; + lprint_newline (); + with _ -> + begin + lprintf "DNS failed"; lprint_newline (); + end + ) lines + ) - | OvernetConnectReply peers -> - buf_int8 buf 11; - buf_list16 buf_peer buf peers - | OvernetPublicize (md4, ip, port, kind) -> - buf_int8 buf 12; - buf_md4 buf md4; - buf_ip buf ip; - buf_int16 buf port; - buf_int8 buf kind - - | OvernetPublicized -> - buf_int8 buf 13 - - | OvernetSearch (kind, md4) -> - buf_int8 buf 14; - buf_int8 buf kind; - buf_md4 buf md4 - - | OvernetSearchReply (md4, peers) -> - buf_int8 buf 15; - buf_md4 buf md4; - buf_list8 buf_peer buf peers +(* In Overnet case, the TCP protocol is changed, so we need to create a special +TCP port for Overnet clients, that will not be used by normal Edonkey +and Kademlia clients. *) - | OvernetGetSearchResults (md4, kind, min, max) -> - buf_int8 buf 16; - buf_md4 buf md4; - buf_int8 buf kind; - buf_int16 buf min; - buf_int16 buf max - - | OvernetSearchResult (md4, r_md4, r_tags) -> - buf_int8 buf 17; - buf_md4 buf md4; - buf_md4 buf r_md4; - buf_tags buf r_tags names_of_tag - - | OvernetNoResult md4 -> - buf_int8 buf 18; - buf_md4 buf md4 - - | OvernetPublish (md4, r_md4, r_tags) -> - buf_int8 buf 19; - buf_md4 buf md4; - buf_md4 buf r_md4; - buf_tags buf r_tags names_of_tag - - | OvernetPublished md4 -> - buf_int8 buf 20; - buf_md4 buf md4 - - | OvernetGetMyIP port -> - buf_int8 buf 27; - buf_int16 buf port - - | OvernetGetMyIPResult (ip) -> - buf_int8 buf 28; - buf_ip buf ip - - | OvernetGetMyIPDone -> - buf_int8 buf 29 - - | OvernetFirewallConnection(md4,port) -> - buf_int8 buf 24; - buf_md4 buf md4; - buf_int16 buf port - - | OvernetFirewallConnectionACK(md4) -> - buf_int8 buf 25; - buf_md4 buf md4 - - | OvernetFirewallConnectionNACK(md4) -> - buf_int8 buf 26; - buf_md4 buf md4 - - | OvernetPeerNotFound peer -> - buf_int8 buf 33; - buf_peer buf peer - - | OvernetUnknown21 peer -> - buf_int8 buf 21; - buf_peer buf peer - - | OvernetUnknown (opcode, s) -> - buf_int8 buf opcode; - Buffer.add_string buf s +let tcp_sock = ref None +module Overnet = struct + include Overnet_initial -let parse opcode s = - try - match opcode with - | 10 -> - if !verbose_overnet then - lprintf "RCVD: CONNECT MESSAGE (10)\n"; - let md4 = get_md4 s 0 in - let ip = get_ip s 16 in - let port = get_int16 s 20 in - let kind = get_uint8 s 22 in - OvernetConnect (md4, ip, port, kind) - | 11 -> - if !verbose_overnet then - lprintf "RCVD: CONNECT REPLY (11)\n"; - let peers, pos = get_list16 get_peer s 0 in - OvernetConnectReply peers - | 12 -> - if !verbose_overnet then - lprintf "RCVD: PUBLICIZE (12)\n"; - let md4 = get_md4 s 0 in - let ip = get_ip s 16 in - let port = get_int16 s 20 in - let kind = get_uint8 s 22 in - OvernetPublicize (md4,ip,port,kind) - | 13 -> - if !verbose_overnet then - lprintf "RCVD: PUBLICIZED (13)\n"; - OvernetPublicized - | 14 -> - if !verbose_overnet then - lprintf "RCVD: SEARCH MESSAGE (14)\n"; - let kind = get_uint8 s 0 in - let md4 = get_md4 s 1 in - OvernetSearch (kind, md4) - - | 15 -> - if !verbose_overnet then - lprintf "RCVD: SEARCH REPLY (15)\n"; - let md4 = get_md4 s 0 in - let peers, pos = get_list8 get_peer s 16 in - OvernetSearchReply (md4, peers) - - | 16 -> - if !verbose_overnet then - lprintf "RCVD: SEARCH GET REPLIES (16): "; - let md4 = get_md4 s 0 in - let kind = get_uint8 s 16 in - let min = get_int16 s 17 in - let max = get_int16 s 19 in - if !verbose_overnet then - lprintf "MD4[%s] KIND[%d] MIN[%d] MAX[%d]\n" (Md4.to_string md4) kind min max; - OvernetGetSearchResults (md4, kind, min, max) - - | 17 -> - if !verbose_overnet then - lprintf "RCVD: ONE REPLY (17)\n"; - let md4 = get_md4 s 0 in - let r_md4 = get_md4 s 16 in - let r_tags, pos = get_tags s 32 names_of_tag in - OvernetSearchResult (md4, r_md4, r_tags) - - | 18 -> - if !verbose_overnet then - lprintf "RCVD: ONE REPLY (18)\n"; - let md4 = get_md4 s 0 in - OvernetNoResult md4 - - | 19 -> - if !verbose_overnet then - lprintf "RCVD: PUBLISH (19)\n"; - let md4 = get_md4 s 0 in - let r_md4 = get_md4 s 16 in - let r_tags, pos = get_tags s 32 names_of_tag in - OvernetPublish (md4, r_md4, r_tags) - - | 20 -> - if !verbose_overnet then - lprintf "RCVD: PUBLISHED (20)\n"; - let md4 = get_md4 s 0 in - OvernetPublished md4 - - | 21 -> - (* idem as 33, but IP seem to be a low ID *) - if !verbose_overnet then begin - lprintf "Received code %d message.\nDump: " opcode; dump s; lprint_newline (); - end; - - let peer, _ = get_peer s 0 in - OvernetUnknown21 peer - - | 24 -> - if !verbose_overnet then - lprintf "RCVD: OVERNET FIREWALL CONNECTION (24)\n"; - let md4 = get_md4 s 0 in - let port = get_int16 s 16 in - OvernetFirewallConnection(md4,port) - - | 25 -> - if !verbose_overnet then - lprintf "RCVD: OVERNET FIREWALL CONNECTION ACK (25)\n"; - let md4 = get_md4 s 0 in - OvernetFirewallConnectionACK(md4) - - | 26 -> - if !verbose_overnet then - lprintf "RCVD: OVERNET FIREWALL CONNECTION NACK (26)\n"; - let md4 = get_md4 s 0 in - OvernetFirewallConnectionNACK(md4) - - | 27 -> - if !verbose_overnet then - lprintf "RCVD: GETMYIP MESSAGE (27)\n"; - OvernetGetMyIP (get_int16 s 0) - | 28 -> - if !verbose_overnet then - lprintf "RCVD: GETMYIPRESULT MESSAGE (28)\n"; - let ip = get_ip s 0 in - OvernetGetMyIPResult (ip) - | 29 -> - if !verbose_overnet then - lprintf "RCVD: GETMYIPDONE MESSAGE (29)\n"; - OvernetGetMyIPDone - - | 33 -> - if !verbose_overnet then - lprintf "RCVD: PEER NOT FOUND (33)\n"; - let peer, _ = get_peer s 0 in - OvernetPeerNotFound peer - - | _ -> - lprintf "UNKNOWN: opcode %d\n" opcode; - dump s; - lprint_newline (); - OvernetUnknown (opcode, s) - with e -> - lprintf "Error %s while parsing opcode %d\n" (Printexc2.to_string e) opcode; - dump s; - lprint_newline (); - OvernetUnknown (opcode, s) - -let udp_handler f sock event = - match event with - UdpSocket.READ_DONE -> - UdpSocket.read_packets sock (fun p -> - try - let pbuf = p.UdpSocket.udp_content in - let len = String.length pbuf in - if len < 2 || - int_of_char pbuf.[0] <> 227 then - begin - if !CommonOptions.verbose_unknown_messages then begin - lprintf "Received unknown UDP packet\n"; - dump pbuf; - end - end - else - begin - let t = parse (int_of_char pbuf.[1]) (String.sub pbuf 2 (len-2)) in - f t p - end - with e -> - lprintf "Error %s in udp_handler, dump of packet:\n" - (Printexc2.to_string e); - dump p.UdpSocket.udp_content; - lprint_newline () - ); - | _ -> () - + let enable enabler = + enable enabler; + try + let sock = TcpServerSocket.create + "overnet client server" + (Ip.to_inet_addr !!client_bind_addr) + (!!overnet_port) + (DonkeyClient.client_connection_handler true) in + + tcp_sock := Some sock; + + match Unix.getsockname (BasicSocket.fd (TcpServerSocket.sock sock)) with + Unix.ADDR_INET (ip, port) -> + assert (port = !!overnet_port) + | _ -> failwith "Bad socket address" + with e -> + lprintf "Could not affect a TCP port %d for Overnet\n" !!overnet_port; + tcp_sock := None + + let disable () = + disable (); + (match !tcp_sock with + None -> () + | Some sock -> + tcp_sock := None; + TcpServerSocket.close sock Closed_by_user); +end \ No newline at end of file diff -Nur ./src/networks/donkey/donkeyProtoOvernet.mli ../mldonkey/src/networks/donkey/donkeyProtoOvernet.mli --- ./src/networks/donkey/donkeyProtoOvernet.mli Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey/donkeyProtoOvernet.mli Wed Aug 4 18:59:26 2004 @@ -0,0 +1,63 @@ +(* Copyright 2001, 2002 b8_bavard, b8_fee_carabine, INRIA *) +(* + This file is part of mldonkey. + + mldonkey is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + mldonkey 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 mldonkey; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*) + +(* +module Proto : + sig + val names_of_tag : (string * string) list + val buf_peer : Buffer.t -> DonkeyOvernet.peer -> unit + val get_peer : string -> int -> DonkeyOvernet.peer * int + val write : Buffer.t -> DonkeyOvernet.t -> unit + val parse : int -> string -> DonkeyOvernet.t + val udp_handler : + (DonkeyOvernet.t -> UdpSocket.udp_packet -> unit) -> + UdpSocket.t -> UdpSocket.event -> unit + val redirector_section : string + val options_section_name : string + val overnet_section : Options.options_section + val overnet_port : int Options.option_record + val overnet_tcpport : int Options.option_record + val udp_buf : Buffer.t + val udp_send : UdpSocket.t -> Ip.t -> int -> DonkeyOvernet.t -> unit + val enable_overnet : bool Options.option_record + val command_prefix : string + end +module Overnet_initial : + sig + val overnet_search : CommonTypes.search -> unit + val recover_file : DonkeyTypes.file -> unit + val enable : bool ref -> unit + val disable : unit -> unit + val gui_overnet_options_panel : (string * string * string) list + val bootstrap : Ip.t -> int -> unit + end + *) +val overnet_protocol_connect_version : int Options.option_record +val overnet_protocol_connectreply_version : int Options.option_record +val tcp_sock : TcpServerSocket.t option ref +module Overnet : + sig + val overnet_search : CommonTypes.search -> unit + val recover_file : DonkeyTypes.file -> unit + val gui_overnet_options_panel : (string * string * string) list + val bootstrap : Ip.t -> int -> unit + val enable : bool ref -> unit + val disable : unit -> unit + val cancel_recover_file : DonkeyTypes.file -> unit + end diff -Nur ./src/networks/donkey/donkeyServers.ml ../mldonkey/src/networks/donkey/donkeyServers.ml --- ./src/networks/donkey/donkeyServers.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyServers.ml Wed Aug 4 18:59:26 2004 @@ -376,7 +376,7 @@ () let connect_server s = - if can_open_connection connection_manager then + if !!enable_servers && can_open_connection connection_manager then match s.server_sock with | NoConnection -> (* Increment the connected servers counter immediatly *) @@ -412,7 +412,7 @@ M.ConnectReq { C.md4 = !!client_md4; C.ip = client_ip (Some sock); - C.port = !client_port; + C.port = !!donkey_port; C.tags = !client_to_server_tags; } ); @@ -548,9 +548,11 @@ lprintf "Delay to detect old servers: %2.2f\n" (t3 -. t2); List.iter (fun s -> + remove_server s.server_ip s.server_port +(* was, for an unknown reason, server_remove (as_server s.server_server); - Hashtbl.remove servers_by_key (s.server_ip, s.server_port)) - !to_remove; + Hashtbl.remove servers_by_key (s.server_ip) *) + ) !to_remove; let t4 = Unix.gettimeofday () in lprintf "Delay to finally remove servers: %2.2f\n" (t4 -. t3); diff -Nur ./src/networks/donkey/donkeyStats.ml ../mldonkey/src/networks/donkey/donkeyStats.ml --- ./src/networks/donkey/donkeyStats.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyStats.ml Wed Aug 4 18:59:26 2004 @@ -159,7 +159,32 @@ | Brand_mod_blackmule -> 69 | Brand_mod_morphxt -> 70 | Brand_mod_ngdonkey -> 71 - | Brand_mod_cyrex -> 72 + | Brand_mod_hawkstar -> 72 + | Brand_mod_neomule -> 73 + | Brand_mod_cyrex -> 74 + | Brand_mod_aldo -> 75 + | Brand_mod_emulede -> 76 + | Brand_mod_zx -> 77 + | Brand_mod_ibericaxt -> 78 + | Brand_mod_candymule -> 79 + | Brand_mod_ackronic -> 80 + | Brand_mod_rappis -> 81 + | Brand_mod_overdose -> 82 + | Brand_mod_hebmule -> 83 + | Brand_mod_senfei -> 84 + | Brand_mod_spoofmod -> 85 + | Brand_mod_fusspilz -> 86 + | Brand_mod_rocket -> 87 + | Brand_mod_warezfaw -> 88 + | Brand_mod_emusicmule -> 89 + | Brand_mod_aideadsl -> 90 + | Brand_mod_epo -> 91 + | Brand_mod_kalitsch -> 92 + | Brand_mod_raynz -> 93 + | Brand_mod_serverclient -> 94 + | Brand_mod_bl4ckbird -> 95 + | Brand_mod_bl4ckf0x -> 96 + | Brand_mod_rt -> 97 let brand_mod_of_int b = match b with @@ -235,7 +260,32 @@ | 69 -> Brand_mod_blackmule | 70 -> Brand_mod_morphxt | 71 -> Brand_mod_ngdonkey - | 72 -> Brand_mod_cyrex + | 72 -> Brand_mod_hawkstar + | 73 -> Brand_mod_neomule + | 74 -> Brand_mod_cyrex + | 75 -> Brand_mod_aldo + | 76 -> Brand_mod_emulede + | 77 -> Brand_mod_zx + | 78 -> Brand_mod_ibericaxt + | 79 -> Brand_mod_candymule + | 80 -> Brand_mod_ackronic + | 81 -> Brand_mod_rappis + | 82 -> Brand_mod_overdose + | 83 -> Brand_mod_hebmule + | 84 -> Brand_mod_senfei + | 85 -> Brand_mod_spoofmod + | 86 -> Brand_mod_fusspilz + | 87 -> Brand_mod_rocket + | 88 -> Brand_mod_warezfaw + | 89 -> Brand_mod_emusicmule + | 90 -> Brand_mod_aideadsl + | 91 -> Brand_mod_epo + | 92 -> Brand_mod_kalitsch + | 93 -> Brand_mod_raynz + | 94 -> Brand_mod_serverclient + | 95 -> Brand_mod_bl4ckbird + | 96 -> Brand_mod_bl4ckf0x + | 97 -> Brand_mod_rt | _ -> raise Not_found let gbrand_mod_to_string b = @@ -312,7 +362,32 @@ | Brand_mod_blackmule -> "blm" | Brand_mod_morphxt -> "Mxt" | Brand_mod_ngdonkey -> "ngd" + | Brand_mod_hawkstar -> "haw" + | Brand_mod_neomule -> "neo" | Brand_mod_cyrex -> "cyr" + | Brand_mod_aldo -> "ald" + | Brand_mod_emulede -> "ede" + | Brand_mod_zx -> "zx" + | Brand_mod_ibericaxt -> "iBx" + | Brand_mod_candymule -> "can" + | Brand_mod_ackronic -> "ack" + | Brand_mod_rappis -> "rap" + | Brand_mod_overdose -> "ove" + | Brand_mod_hebmule -> "heb" + | Brand_mod_senfei -> "sen" + | Brand_mod_spoofmod -> "spo" + | Brand_mod_fusspilz -> "fus" + | Brand_mod_rocket -> "roc" + | Brand_mod_warezfaw -> "war" + | Brand_mod_emusicmule -> "emm" + | Brand_mod_aideadsl -> "aid" + | Brand_mod_epo -> "epo" + | Brand_mod_kalitsch -> "kal" + | Brand_mod_raynz -> "ray" + | Brand_mod_serverclient -> "sc" + | Brand_mod_bl4ckbird -> "b4b" + | Brand_mod_bl4ckf0x -> "b4f" + | Brand_mod_rt -> "rt" let stats_all = dummy_stats let mod_stats_all = dummy_mod_stats diff -Nur ./src/networks/donkey/donkeySupernode.ml ../mldonkey/src/networks/donkey/donkeySupernode.ml --- ./src/networks/donkey/donkeySupernode.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeySupernode.ml Wed Aug 4 18:59:27 2004 @@ -160,7 +160,7 @@ M.ConnectReq { C.md4 = !!client_md4; C.ip = client_ip None; - C.port = !client_port; + C.port = !!donkey_port; C.tags = !client_to_client_tags; C.version = 16; C.server_info = Some (server_ip, server_port); diff -Nur ./src/networks/donkey/donkeyTypes.ml ../mldonkey/src/networks/donkey/donkeyTypes.ml --- ./src/networks/donkey/donkeyTypes.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyTypes.ml Wed Aug 4 18:59:27 2004 @@ -272,9 +272,34 @@ | Brand_mod_blackmule | Brand_mod_morphxt | Brand_mod_ngdonkey +| Brand_mod_hawkstar +| Brand_mod_neomule | Brand_mod_cyrex +| Brand_mod_aldo +| Brand_mod_emulede +| Brand_mod_zx +| Brand_mod_ibericaxt +| Brand_mod_candymule +| Brand_mod_ackronic +| Brand_mod_rappis +| Brand_mod_overdose +| Brand_mod_hebmule +| Brand_mod_senfei +| Brand_mod_spoofmod +| Brand_mod_fusspilz +| Brand_mod_rocket +| Brand_mod_warezfaw +| Brand_mod_emusicmule +| Brand_mod_aideadsl +| Brand_mod_epo +| Brand_mod_kalitsch +| Brand_mod_raynz +| Brand_mod_serverclient +| Brand_mod_bl4ckbird +| Brand_mod_bl4ckf0x +| Brand_mod_rt -let brand_mod_count = 73 +let brand_mod_count = 98 type source_uid = Direct_address of Ip.t * int @@ -288,7 +313,7 @@ open Options - type source_brand = bool (* overnet or not *) + type source_brand = bool let value_to_source_brand = value_to_bool let source_brand_to_value = bool_to_value let dummy_source_brand = false diff -Nur ./src/networks/donkey/donkeyUdp.ml ../mldonkey/src/networks/donkey/donkeyUdp.ml --- ./src/networks/donkey/donkeyUdp.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/donkey/donkeyUdp.ml Wed Aug 4 18:59:27 2004 @@ -91,6 +91,7 @@ iter list max_servers [] let make_xs ss = + lprintf "******** make_xs ********\n"; if ss.search_num <> !xs_last_search then begin xs_last_search := ss.search_num; xs_servers_list := Hashtbl2.to_list servers_by_key; @@ -113,8 +114,9 @@ Udp.QueryUdpReq ss.search_query else *) Udp.QueryMultipleUdpReq ss.search_query); ) before; - - DonkeyOvernet.overnet_search ss + lprintf "===================== STARTING SEARCH ON OVERNET =========\n"; + DonkeyProtoOvernet.Overnet.overnet_search ss; + DonkeyProtoKademlia.Kademlia.overnet_search ss let force_check_locations () = try diff -Nur ./src/networks/donkey_devel/CVS/Entries ../mldonkey/src/networks/donkey_devel/CVS/Entries --- ./src/networks/donkey_devel/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey_devel/CVS/Entries Mon Sep 13 21:56:11 2004 @@ -0,0 +1,49 @@ +/.cvsignore/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyChunks.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyClient.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyClient.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyComplexOptions.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyComplexOptions.mli/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyFiles.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyFiles.mli/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyGlobals.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyImport.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyIndexer.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyIndexer.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyInteractive.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyInteractive.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyMain.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyMain.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyMftp.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyOneFile.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyOneFile.mli/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyOpenProtocol.ml/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyOptions.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyOvernet.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyProtoClient.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyProtoCom.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyProtoCom.mli/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyProtoOvernet.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyProtoServer.ml/1.2/Sun Mar 7 09:34:26 2004//Trelease-2-5-23 +/donkeyProtoUdp.ml/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeyReliability.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeySearch.ml/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeySearch.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyServers.ml/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeyServers.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeyShare.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyShare.mli/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeySources.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeySources.mli/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeySources1.ml/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeySources1.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeySources2.ml/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeySources2.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeySources3.ml/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeySources3.mli/1.1/Wed Jun 4 16:05:45 2003//Trelease-2-5-23 +/donkeySourcesMisc.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/donkeyStats.ml/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeyStats.mli/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeySupernode.ml/1.2/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/donkeyTypes.ml/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +D diff -Nur ./src/networks/donkey_devel/CVS/Repository ../mldonkey/src/networks/donkey_devel/CVS/Repository --- ./src/networks/donkey_devel/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey_devel/CVS/Repository Mon Sep 13 21:55:51 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/donkey_devel diff -Nur ./src/networks/donkey_devel/CVS/Root ../mldonkey/src/networks/donkey_devel/CVS/Root --- ./src/networks/donkey_devel/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey_devel/CVS/Root Mon Sep 13 21:55:51 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/donkey_devel/CVS/Tag ../mldonkey/src/networks/donkey_devel/CVS/Tag --- ./src/networks/donkey_devel/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/donkey_devel/CVS/Tag Mon Sep 13 21:56:11 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/fasttrack/CVS/Entries ../mldonkey/src/networks/fasttrack/CVS/Entries --- ./src/networks/fasttrack/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fasttrack/CVS/Entries Mon Sep 13 21:56:17 2004 @@ -0,0 +1,22 @@ +/.cvsignore/1.1/Thu May 15 22:33:26 2003//Trelease-2-5-23 +/enc_type_1.c/1.5/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/enc_type_2.c/1.5/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/enc_type_20.c/1.5/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/enc_type_80.c/1.4/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/fasttrack.ml/1.4/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fasttrackClients.ml/1.21/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fasttrackComplexOptions.ml/1.11/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fasttrackGlobals.ml/1.17/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fasttrackHandler.ml/1.12/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fasttrackInteractive.ml/1.19/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fasttrackMain.ml/1.8/Thu Nov 20 16:43:23 2003//Trelease-2-5-23 +/fasttrackOptions.ml/1.6/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fasttrackPandora.ml/1.5/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fasttrackProto.ml/1.8/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/fasttrackProtocol.ml/1.6/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fasttrackServers.ml/1.15/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fasttrackTypes.ml/1.16/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fst_crypt.c/1.8/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/fst_crypt.h/1.5/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/fst_crypt_ml.c/1.5/Fri Nov 21 23:17:58 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/fasttrack/CVS/Repository ../mldonkey/src/networks/fasttrack/CVS/Repository --- ./src/networks/fasttrack/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fasttrack/CVS/Repository Mon Sep 13 21:56:11 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/fasttrack diff -Nur ./src/networks/fasttrack/CVS/Root ../mldonkey/src/networks/fasttrack/CVS/Root --- ./src/networks/fasttrack/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fasttrack/CVS/Root Mon Sep 13 21:56:11 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/fasttrack/CVS/Tag ../mldonkey/src/networks/fasttrack/CVS/Tag --- ./src/networks/fasttrack/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fasttrack/CVS/Tag Mon Sep 13 21:56:17 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/fasttrack/fasttrackClients.ml ../mldonkey/src/networks/fasttrack/fasttrackClients.ml --- ./src/networks/fasttrack/fasttrackClients.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/fasttrack/fasttrackClients.ml Wed Aug 4 18:59:27 2004 @@ -361,9 +361,6 @@ if new_downloaded = file_size file then download_finished file; - if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); (* lprintf "READ %Ld\n" (new_downloaded -- old_downloaded); lprintf "READ: buf_used %d\n" to_read_int; diff -Nur ./src/networks/fasttrack/fasttrackComplexOptions.ml ../mldonkey/src/networks/fasttrack/fasttrackComplexOptions.ml --- ./src/networks/fasttrack/fasttrackComplexOptions.ml Thu Jul 29 12:32:45 2004 +++ ../mldonkey/src/networks/fasttrack/fasttrackComplexOptions.ml Wed Aug 4 18:59:27 2004 @@ -134,9 +134,6 @@ None -> () | Some swarmer -> Int64Swarmer.value_to_swarmer swarmer assocs; - add_file_downloaded file.file_file - (Int64Swarmer.downloaded swarmer); - ); (* Int64Swarmer.value_to_swarmer file.file_swarmer assocs; diff -Nur ./src/networks/fileTP/CVS/Entries ../mldonkey/src/networks/fileTP/CVS/Entries --- ./src/networks/fileTP/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fileTP/CVS/Entries Mon Sep 13 21:56:22 2004 @@ -0,0 +1,13 @@ +/.cvsignore/1.1/Fri Feb 6 17:39:10 2004//Trelease-2-5-23 +/fileTPClients.ml/1.7/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fileTPComplexOptions.ml/1.5/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fileTPFTP.ml/1.5/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fileTPGlobals.ml/1.7/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fileTPHTTP.ml/1.5/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fileTPInteractive.ml/1.8/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/fileTPMain.ml/1.3/Sun Feb 8 22:58:17 2004//Trelease-2-5-23 +/fileTPOptions.ml/1.4/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fileTPProtocol.ml/1.4/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/fileTPSSH.ml/1.5/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fileTPTypes.ml/1.6/Mon May 3 08:22:25 2004//Trelease-2-5-23 +D diff -Nur ./src/networks/fileTP/CVS/Repository ../mldonkey/src/networks/fileTP/CVS/Repository --- ./src/networks/fileTP/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fileTP/CVS/Repository Mon Sep 13 21:56:17 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/fileTP diff -Nur ./src/networks/fileTP/CVS/Root ../mldonkey/src/networks/fileTP/CVS/Root --- ./src/networks/fileTP/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fileTP/CVS/Root Mon Sep 13 21:56:17 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/fileTP/CVS/Tag ../mldonkey/src/networks/fileTP/CVS/Tag --- ./src/networks/fileTP/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/fileTP/CVS/Tag Mon Sep 13 21:56:22 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/fileTP/fileTPComplexOptions.ml ../mldonkey/src/networks/fileTP/fileTPComplexOptions.ml --- ./src/networks/fileTP/fileTPComplexOptions.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/networks/fileTP/fileTPComplexOptions.ml Wed Aug 4 18:59:27 2004 @@ -106,9 +106,6 @@ None -> () | Some swarmer -> Int64Swarmer.value_to_swarmer swarmer assocs; - add_file_downloaded file.file_file - (Int64Swarmer.downloaded swarmer); - ); (try diff -Nur ./src/networks/fileTP/fileTPFTP.ml ../mldonkey/src/networks/fileTP/fileTPFTP.ml --- ./src/networks/fileTP/fileTPFTP.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/networks/fileTP/fileTPFTP.ml Wed Aug 4 18:59:27 2004 @@ -91,9 +91,6 @@ if new_downloaded = file_size file then download_finished file; - if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); with e -> lprintf "FT: Exception %s in Int64Swarmer.received\n" diff -Nur ./src/networks/fileTP/fileTPHTTP.ml ../mldonkey/src/networks/fileTP/fileTPHTTP.ml --- ./src/networks/fileTP/fileTPHTTP.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/networks/fileTP/fileTPHTTP.ml Wed Aug 4 18:59:27 2004 @@ -298,9 +298,6 @@ if new_downloaded = file_size file then download_finished file; - if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); (* lprintf "READ %Ld\n" (new_downloaded -- old_downloaded); lprintf "READ: buf_used %d\n" to_read_int; diff -Nur ./src/networks/fileTP/fileTPSSH.ml ../mldonkey/src/networks/fileTP/fileTPSSH.ml --- ./src/networks/fileTP/fileTPSSH.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/networks/fileTP/fileTPSSH.ml Wed Aug 4 18:59:27 2004 @@ -103,9 +103,6 @@ if new_downloaded = file_size file then download_finished file; - if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); with e -> diff -Nur ./src/networks/gnutella/CVS/Entries ../mldonkey/src/networks/gnutella/CVS/Entries --- ./src/networks/gnutella/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella/CVS/Entries Mon Sep 13 21:56:31 2004 @@ -0,0 +1,19 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/gnutella.ml/1.5/Tue Dec 2 22:56:42 2003//Trelease-2-5-23 +/gnutella1.ml/1.10/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/gnutellaClients.ml/1.24/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/gnutellaComplexOptions.ml/1.15/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/gnutellaGlobals.ml/1.22/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gnutellaHandler.ml/1.6/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gnutellaInteractive.ml/1.29/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gnutellaMain.ml/1.14/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/gnutellaNetwork.ml/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/gnutellaOptions.ml/1.9/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gnutellaProto.ml/1.4/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/gnutellaProtocol.ml/1.11/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gnutellaRedirector.ml/1.3/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gnutellaScheduler.ml/1.3/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/gnutellaServers.ml/1.18/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gnutellaTypes.ml/1.14/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/gnutellaZlib.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/gnutella/CVS/Repository ../mldonkey/src/networks/gnutella/CVS/Repository --- ./src/networks/gnutella/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella/CVS/Repository Mon Sep 13 21:56:22 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/gnutella diff -Nur ./src/networks/gnutella/CVS/Root ../mldonkey/src/networks/gnutella/CVS/Root --- ./src/networks/gnutella/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella/CVS/Root Mon Sep 13 21:56:22 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/gnutella/CVS/Tag ../mldonkey/src/networks/gnutella/CVS/Tag --- ./src/networks/gnutella/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella/CVS/Tag Mon Sep 13 21:56:31 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/gnutella/gnutellaClients.ml ../mldonkey/src/networks/gnutella/gnutellaClients.ml --- ./src/networks/gnutella/gnutellaClients.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/networks/gnutella/gnutellaClients.ml Wed Aug 4 18:59:27 2004 @@ -355,9 +355,6 @@ if new_downloaded = file_size file then download_finished file; - if new_downloaded <> old_downloaded then - add_file_downloaded file.file_file - (new_downloaded -- old_downloaded); (* lprintf "READ %Ld\n" (new_downloaded -- old_downloaded); lprintf "READ: buf_used %d\n" to_read_int; diff -Nur ./src/networks/gnutella/gnutellaComplexOptions.ml ../mldonkey/src/networks/gnutella/gnutellaComplexOptions.ml --- ./src/networks/gnutella/gnutellaComplexOptions.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/networks/gnutella/gnutellaComplexOptions.ml Wed Aug 4 18:59:27 2004 @@ -129,9 +129,6 @@ None -> () | Some swarmer -> Int64Swarmer.value_to_swarmer swarmer assocs; - add_file_downloaded file.file_file - (Int64Swarmer.downloaded swarmer); - ); (* (try diff -Nur ./src/networks/gnutella2/CVS/Entries ../mldonkey/src/networks/gnutella2/CVS/Entries --- ./src/networks/gnutella2/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella2/CVS/Entries Mon Sep 13 21:56:37 2004 @@ -0,0 +1,17 @@ +/.cvsignore/1.3/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Clients.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2ComplexOptions.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Globals.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Handler.ml/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/g2Interactive.mlt/1.2/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/g2Main.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Network.ml/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Options.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Proto.ml/1.5/Thu Jul 29 10:25:33 2004//Trelease-2-5-23 +/g2Protocol.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Redirector.ml/1.2/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/g2Scheduler.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Servers.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/g2Types.mlt/1.1/Sun Mar 7 09:34:27 2004//Trelease-2-5-23 +/gnutella2.ml/1.2/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +D diff -Nur ./src/networks/gnutella2/CVS/Repository ../mldonkey/src/networks/gnutella2/CVS/Repository --- ./src/networks/gnutella2/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella2/CVS/Repository Mon Sep 13 21:56:31 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/gnutella2 diff -Nur ./src/networks/gnutella2/CVS/Root ../mldonkey/src/networks/gnutella2/CVS/Root --- ./src/networks/gnutella2/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella2/CVS/Root Mon Sep 13 21:56:31 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/gnutella2/CVS/Tag ../mldonkey/src/networks/gnutella2/CVS/Tag --- ./src/networks/gnutella2/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/gnutella2/CVS/Tag Mon Sep 13 21:56:37 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/openFT/CVS/Entries ../mldonkey/src/networks/openFT/CVS/Entries --- ./src/networks/openFT/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/openFT/CVS/Entries Mon Sep 13 21:56:42 2004 @@ -0,0 +1,11 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/openFTClients.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/openFTComplexOptions.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/openFTGlobals.ml/1.3/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/openFTInteractive.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/openFTMain.ml/1.3/Sat May 24 01:23:34 2003//Trelease-2-5-23 +/openFTOptions.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/openFTProtocol.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/openFTServers.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/openFTTypes.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/openFT/CVS/Repository ../mldonkey/src/networks/openFT/CVS/Repository --- ./src/networks/openFT/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/openFT/CVS/Repository Mon Sep 13 21:56:38 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/openFT diff -Nur ./src/networks/openFT/CVS/Root ../mldonkey/src/networks/openFT/CVS/Root --- ./src/networks/openFT/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/openFT/CVS/Root Mon Sep 13 21:56:38 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/openFT/CVS/Tag ../mldonkey/src/networks/openFT/CVS/Tag --- ./src/networks/openFT/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/openFT/CVS/Tag Mon Sep 13 21:56:42 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/opennap/CVS/Entries ../mldonkey/src/networks/opennap/CVS/Entries --- ./src/networks/opennap/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/opennap/CVS/Entries Mon Sep 13 21:56:47 2004 @@ -0,0 +1,14 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/napigator.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/napigator.mll/1.2/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/opennapClients.ml/1.7/Sun Feb 8 22:58:17 2004//Trelease-2-5-23 +/opennapComplexOptions.ml/1.4/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/opennapGlobals.ml/1.6/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/opennapInteractive.ml/1.12/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/opennapMain.ml/1.5/Thu Nov 20 16:43:24 2003//Trelease-2-5-23 +/opennapOptions.ml/1.6/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/opennapProtocol.ml/1.2/Thu Nov 20 16:43:24 2003//Trelease-2-5-23 +/opennapServers.ml/1.8/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/opennapTypes.ml/1.2/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/winmx_xor_c.c/1.1/Sun May 25 00:29:50 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/opennap/CVS/Repository ../mldonkey/src/networks/opennap/CVS/Repository --- ./src/networks/opennap/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/opennap/CVS/Repository Mon Sep 13 21:56:42 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/opennap diff -Nur ./src/networks/opennap/CVS/Root ../mldonkey/src/networks/opennap/CVS/Root --- ./src/networks/opennap/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/opennap/CVS/Root Mon Sep 13 21:56:42 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/opennap/CVS/Tag ../mldonkey/src/networks/opennap/CVS/Tag --- ./src/networks/opennap/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/opennap/CVS/Tag Mon Sep 13 21:56:47 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/server/CVS/Entries ../mldonkey/src/networks/server/CVS/Entries --- ./src/networks/server/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/server/CVS/Entries Mon Sep 13 21:56:52 2004 @@ -0,0 +1,16 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/serverClients.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverGlobals.ml/1.2/Fri Jan 30 06:11:06 2004//Trelease-2-5-23 +/serverIndexer.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverIndexer.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverLocate.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverLocate.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverLog.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverMain.ml/1.4/Sat Nov 29 20:36:15 2003//Trelease-2-5-23 +/serverMessages.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverOptions.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverServer.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverSubscriptions.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverTypes.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/serverUdp.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +D diff -Nur ./src/networks/server/CVS/Repository ../mldonkey/src/networks/server/CVS/Repository --- ./src/networks/server/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/server/CVS/Repository Mon Sep 13 21:56:47 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/server diff -Nur ./src/networks/server/CVS/Root ../mldonkey/src/networks/server/CVS/Root --- ./src/networks/server/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/server/CVS/Root Mon Sep 13 21:56:47 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/server/CVS/Tag ../mldonkey/src/networks/server/CVS/Tag --- ./src/networks/server/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/server/CVS/Tag Mon Sep 13 21:56:52 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/networks/soulseek/CVS/Entries ../mldonkey/src/networks/soulseek/CVS/Entries --- ./src/networks/soulseek/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/soulseek/CVS/Entries Mon Sep 13 21:56:55 2004 @@ -0,0 +1,11 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/slskClients.ml/1.11/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/slskComplexOptions.ml/1.6/Thu Nov 20 16:43:24 2003//Trelease-2-5-23 +/slskGlobals.ml/1.8/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/slskInteractive.ml/1.13/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/slskMain.ml/1.9/Thu Nov 20 16:43:24 2003//Trelease-2-5-23 +/slskOptions.ml/1.6/Mon May 3 08:22:25 2004//Trelease-2-5-23 +/slskProtocol.ml/1.7/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/slskServers.ml/1.10/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/slskTypes.ml/1.7/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +D diff -Nur ./src/networks/soulseek/CVS/Repository ../mldonkey/src/networks/soulseek/CVS/Repository --- ./src/networks/soulseek/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/soulseek/CVS/Repository Mon Sep 13 21:56:52 2004 @@ -0,0 +1 @@ +mldonkey/src/networks/soulseek diff -Nur ./src/networks/soulseek/CVS/Root ../mldonkey/src/networks/soulseek/CVS/Root --- ./src/networks/soulseek/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/soulseek/CVS/Root Mon Sep 13 21:56:52 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/networks/soulseek/CVS/Tag ../mldonkey/src/networks/soulseek/CVS/Tag --- ./src/networks/soulseek/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/networks/soulseek/CVS/Tag Mon Sep 13 21:56:55 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/utils/CVS/Entries ../mldonkey/src/utils/CVS/Entries --- ./src/utils/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/CVS/Entries Mon Sep 13 21:58:19 2004 @@ -0,0 +1,6 @@ +D/cdk//// +D/lib//// +D/mp3tagui//// +D/net//// +D/ocamlrss//// +D/xml-light//// diff -Nur ./src/utils/CVS/Repository ../mldonkey/src/utils/CVS/Repository --- ./src/utils/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/CVS/Repository Mon Sep 13 21:56:55 2004 @@ -0,0 +1 @@ +mldonkey/src/utils diff -Nur ./src/utils/CVS/Root ../mldonkey/src/utils/CVS/Root --- ./src/utils/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/CVS/Root Mon Sep 13 21:56:55 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/CVS/Tag ../mldonkey/src/utils/CVS/Tag --- ./src/utils/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/CVS/Tag Mon Sep 13 21:56:55 2004 @@ -0,0 +1 @@ +Trelease-2-5-23 diff -Nur ./src/utils/cdk/CVS/Entries ../mldonkey/src/utils/cdk/CVS/Entries --- ./src/utils/cdk/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/cdk/CVS/Entries Mon Sep 13 21:57:09 2004 @@ -0,0 +1,38 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/arg2.ml/1.4/Wed Aug 4 18:39:32 2004//Trelease-2-5-23 +/arg2.mli/1.4/Wed Aug 4 18:39:32 2004//Trelease-2-5-23 +/array2.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/dprintf.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/file.ml/1.2/Thu Apr 24 12:45:46 2003//Trelease-2-5-23 +/file.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/filename2.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/filename2.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/filepath.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/filepath.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/genlex2.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/genlex2.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/hashtbl2.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/hashtbl2.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/heap.ml/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/heap_c.c/1.2/Thu Nov 20 16:43:24 2003//Trelease-2-5-23 +/list2.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/list2.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/netbase.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/netbase.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/printexc2.ml/1.2/Fri Jan 30 06:11:07 2004//Trelease-2-5-23 +/printexc2.mli/1.2/Fri Jan 30 06:11:07 2004//Trelease-2-5-23 +/printf2.ml/1.6/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/printf2.mli/1.2/Fri Jan 30 06:11:07 2004//Trelease-2-5-23 +/sort2.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/sort2.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/string2.ml/1.5/Fri Nov 21 14:34:39 2003//Trelease-2-5-23 +/string2.mli/1.6/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/sysenv.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/sysenv.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/unix2.ml/1.10/Wed Feb 4 00:21:46 2004//Trelease-2-5-23 +/weak2.ml/1.2/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/weak2.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/zlib.ml/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/zlib.mli/1.1/Tue Apr 22 22:33:39 2003//Trelease-2-5-23 +/zlibstubs.c/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +D diff -Nur ./src/utils/cdk/CVS/Repository ../mldonkey/src/utils/cdk/CVS/Repository --- ./src/utils/cdk/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/cdk/CVS/Repository Mon Sep 13 21:56:56 2004 @@ -0,0 +1 @@ +mldonkey/src/utils/cdk diff -Nur ./src/utils/cdk/CVS/Root ../mldonkey/src/utils/cdk/CVS/Root --- ./src/utils/cdk/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/cdk/CVS/Root Mon Sep 13 21:56:56 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/cdk/CVS/Tag ../mldonkey/src/utils/cdk/CVS/Tag --- ./src/utils/cdk/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/cdk/CVS/Tag Mon Sep 13 21:57:09 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/utils/cdk/arg2.ml ../mldonkey/src/utils/cdk/arg2.ml --- ./src/utils/cdk/arg2.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/cdk/arg2.ml Wed Aug 4 20:39:32 2004 @@ -11,7 +11,7 @@ (* *) (***********************************************************************) -(* $Id: arg2.ml,v 1.2 2004/04/16 17:14:56 mldonkey Exp $ *) +(* $Id: arg2.ml,v 1.4 2004/08/04 18:39:32 mldonkey Exp $ *) type spec = | Unit of (unit -> unit) (* Call the function with unit argument *) diff -Nur ./src/utils/cdk/arg2.mli ../mldonkey/src/utils/cdk/arg2.mli --- ./src/utils/cdk/arg2.mli Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/cdk/arg2.mli Wed Aug 4 20:39:32 2004 @@ -11,7 +11,7 @@ (* *) (***********************************************************************) -(* $Id: arg2.mli,v 1.2 2004/04/16 17:14:56 mldonkey Exp $ *) +(* $Id: arg2.mli,v 1.4 2004/08/04 18:39:32 mldonkey Exp $ *) (** Parsing of command line arguments. diff -Nur ./src/utils/cdk/printf2.ml ../mldonkey/src/utils/cdk/printf2.ml --- ./src/utils/cdk/printf2.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/cdk/printf2.ml Wed Aug 4 18:59:27 2004 @@ -21,11 +21,11 @@ open Autoconf -external format_int: string -> int -> string = "format_int" -external format_int32: string -> int32 -> string = "int32_format" -external format_nativeint: string -> nativeint -> string = "nativeint_format" -external format_int64: string -> int64 -> string = "int64_format" -external format_float: string -> float -> string = "format_float" +external format_int: string -> int -> string = "caml_format_int" +external format_int32: string -> int32 -> string = "caml_int32_format" +external format_nativeint: string -> nativeint -> string = "caml_nativeint_format" +external format_int64: string -> int64 -> string = "caml_int64_format" +external format_float: string -> float -> string = "caml_format_float" let bad_format fmt pos = invalid_arg diff -Nur ./src/utils/cdk/weak2.ml ../mldonkey/src/utils/cdk/weak2.ml --- ./src/utils/cdk/weak2.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/cdk/weak2.ml Wed Aug 4 18:59:27 2004 @@ -16,14 +16,14 @@ type 'a t;; -external create: int -> 'a t = "weak_create";; +external create: int -> 'a t = "caml_weak_create";; let length x = Obj.size(Obj.repr x) - 1;; -external set : 'a t -> int -> 'a option -> unit = "weak_set";; -external get: 'a t -> int -> 'a option = "weak_get";; -external get_copy: 'a t -> int -> 'a option = "weak_get_copy";; -external check: 'a t -> int -> bool = "weak_check";; +external set : 'a t -> int -> 'a option -> unit = "caml_weak_set";; +external get: 'a t -> int -> 'a option = "caml_weak_get";; +external get_copy: 'a t -> int -> 'a option = "caml_weak_get_copy";; +external check: 'a t -> int -> bool = "caml_weak_check";; let fill ar ofs len x = if ofs < 0 || len < 0 || ofs + len > length ar diff -Nur ./src/utils/lib/CVS/Entries ../mldonkey/src/utils/lib/CVS/Entries --- ./src/utils/lib/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/lib/CVS/Entries Mon Sep 13 21:57:38 2004 @@ -0,0 +1,76 @@ +/.cvsignore/1.2/Wed Feb 4 18:58:19 2004//Trelease-2-5-23 +/autoconf.ml.new.in/1.5/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/avifile.ml/1.2/Fri Jan 30 06:11:07 2004//Trelease-2-5-23 +/cddb_file.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/cddb_lexer.mll/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/date.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/fifo.ml/1.3/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fifo.mli/1.3/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/fifo2.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/fifo2.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/fst_hash.c/1.1/Wed Jun 4 16:13:08 2003//Trelease-2-5-23 +/gAutoconf.ml.new.in/1.1/Tue Apr 22 22:44:21 2003//Trelease-2-5-23 +/gettext.ml4/1.4/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/gettext.mli/1.3/Mon Feb 2 19:55:20 2004//Trelease-2-5-23 +/hole_tab.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/hole_tab.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/host.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/host.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/http_lexer.mll/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/index.c/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/indexer.ml/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/indexer.mli/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/indexer1.ml/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/indexer1.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/indexer2.ml/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/indexer2.mli/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/int32ops.ml/1.3/Sun Feb 8 22:58:17 2004//Trelease-2-5-23 +/int64ops.ml/1.1/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/intmap.ml/1.2/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/intmap.mli/1.2/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/intset.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/intset.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/longarray.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/longarray.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/md4.c/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/md4.h/1.2/Thu Nov 20 16:43:24 2003//Trelease-2-5-23 +/md4.ml/1.11/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/md4.mli/1.9/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/md4_c.c/1.4/Thu Nov 20 16:43:25 2003//Trelease-2-5-23 +/md4_i386.s/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/md4_i486.s/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/md4_i586.s/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/md4_i686.s/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/md4sum.c/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/md5.h/1.5/Thu Nov 20 16:43:25 2003//Trelease-2-5-23 +/md5_c.c/1.4/Thu Nov 20 16:43:25 2003//Trelease-2-5-23 +/misc.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mmap.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mmap.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mmap_c.c/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/numset.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/numset.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/options.ml4/1.10/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/options.mli/1.6/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/os_stubs.h/1.5/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/queues.ml/1.2/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/queues.mli/1.2/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/sha1_c.h/1.3/Tue Feb 10 23:25:09 2004//Trelease-2-5-23 +/sha1new_c.c/1.1/Tue Feb 10 23:25:09 2004//Trelease-2-5-23 +/sha1new_c.h/1.1/Tue Feb 10 23:25:09 2004//Trelease-2-5-23 +/sha1old_c.c/1.1/Tue Feb 10 23:25:09 2004//Trelease-2-5-23 +/sha1old_c.h/1.1/Tue Feb 10 23:25:09 2004//Trelease-2-5-23 +/sparseFile.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/sparseFile.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/store.ml/1.4/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/store.mli/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/stringMap.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/stringMap.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/stubs_c.c/1.12/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/tiger.c/1.6/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/tiger.h/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/unix32.ml/1.23/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/unix32.mli/1.8/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/url.ml/1.4/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/url.mli/1.2/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +D diff -Nur ./src/utils/lib/CVS/Repository ../mldonkey/src/utils/lib/CVS/Repository --- ./src/utils/lib/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/lib/CVS/Repository Mon Sep 13 21:57:09 2004 @@ -0,0 +1 @@ +mldonkey/src/utils/lib diff -Nur ./src/utils/lib/CVS/Root ../mldonkey/src/utils/lib/CVS/Root --- ./src/utils/lib/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/lib/CVS/Root Mon Sep 13 21:57:09 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/lib/CVS/Tag ../mldonkey/src/utils/lib/CVS/Tag --- ./src/utils/lib/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/lib/CVS/Tag Mon Sep 13 21:57:38 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/utils/lib/fifo.ml ../mldonkey/src/utils/lib/fifo.ml --- ./src/utils/lib/fifo.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/lib/fifo.ml Wed Aug 4 18:59:27 2004 @@ -172,6 +172,21 @@ Array.blit t.array 0 tab (s - t.outpos) t.inpos; Array.to_list tab +let to_array t = + if t.empty then [||] else + if t.inpos > t.outpos then + let len = t.inpos - t.outpos in + let tab = Array.create len t.array.(0) in + Array.blit t.array t.outpos tab 0 len; + tab + else + let s = Array.length t.array in + let len = s + t.inpos - t.outpos in + let tab = Array.create len t.array.(0) in + Array.blit t.array t.outpos tab 0 (s - t.outpos); + Array.blit t.array 0 tab (s - t.outpos) t.inpos; + tab + let length t = (* lprintf "FIFO LEN"; lprint_newline (); *) if t.empty then 0 else diff -Nur ./src/utils/lib/fifo.mli ../mldonkey/src/utils/lib/fifo.mli --- ./src/utils/lib/fifo.mli Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/lib/fifo.mli Wed Aug 4 18:59:27 2004 @@ -32,3 +32,4 @@ val iter: ('a -> unit) -> 'a t -> unit val remove : 'a t -> 'a -> unit +val to_array : 'a t -> 'a array \ No newline at end of file diff -Nur ./src/utils/lib/md4.ml ../mldonkey/src/utils/lib/md4.ml --- ./src/utils/lib/md4.ml Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/lib/md4.ml Wed Aug 4 18:59:27 2004 @@ -252,6 +252,8 @@ val to_string : t -> string val to_string_case : bool -> t -> string val of_string : string -> t + + val to_bits : t -> string val to_hexa : t -> string val to_hexa_case : bool -> t -> string @@ -316,7 +318,20 @@ let digest = String.create hash_length in unsafe_string digest s len; digest - + + let to_bits s = + let len = String.length s in + let digest = String.create (8*len) in + for i = 0 to len-1 do + let c = int_of_char s.[i] in + for j = 7 downto 0 do + digest.[i*8 + (7-j)] <- + (if c land (1 lsl j) <> 0 then '1' else '0') + + done + done; + digest + external xor_c : t -> t -> t -> unit = "md4_xor" "noalloc" let xor m1 m2 = diff -Nur ./src/utils/lib/md4.mli ../mldonkey/src/utils/lib/md4.mli --- ./src/utils/lib/md4.mli Thu Jul 29 12:32:46 2004 +++ ../mldonkey/src/utils/lib/md4.mli Wed Aug 4 18:59:27 2004 @@ -37,6 +37,8 @@ val to_string_case : bool -> t -> string val of_string : string -> t + val to_bits : t -> string + val to_hexa : t -> string val to_hexa_case : bool -> t -> string val of_hexa : string -> t diff -Nur ./src/utils/lib/options.ml4 ../mldonkey/src/utils/lib/options.ml4 --- ./src/utils/lib/options.ml4 Thu Jul 29 12:32:47 2004 +++ ../mldonkey/src/utils/lib/options.ml4 Wed Aug 4 18:59:27 2004 @@ -302,7 +302,7 @@ let unsafe_get = String.unsafe_get -external is_printable : char -> bool = "is_printable" +external is_printable : char -> bool = "caml_is_printable" let unsafe_set = String.unsafe_set let escaped s = diff -Nur ./src/utils/lib/stubs_c.c ../mldonkey/src/utils/lib/stubs_c.c --- ./src/utils/lib/stubs_c.c Thu Jul 29 12:32:47 2004 +++ ../mldonkey/src/utils/lib/stubs_c.c Wed Aug 4 18:59:27 2004 @@ -739,13 +739,14 @@ return 1; } -extern value alloc_inet_addr(uint32 a); + +extern value alloc_inet_addr(struct in_addr * a); static value alloc_one_addr(char volatile *a) { struct in_addr addr; memmove (&addr, (char*)a, entry_h_length); - return alloc_inet_addr(addr.s_addr); + return alloc_inet_addr(&addr); } static void store_in_job(value job_v) diff -Nur ./src/utils/mp3tagui/CVS/Entries ../mldonkey/src/utils/mp3tagui/CVS/Entries --- ./src/utils/mp3tagui/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/mp3tagui/CVS/Entries Mon Sep 13 21:57:43 2004 @@ -0,0 +1,16 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/mp3.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_args.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_genres.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_info.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_info.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_messages.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_misc.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_tag.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_ui.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3_ui.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3tag.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3tag.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3tagui.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/mp3tagui.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +D diff -Nur ./src/utils/mp3tagui/CVS/Repository ../mldonkey/src/utils/mp3tagui/CVS/Repository --- ./src/utils/mp3tagui/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/mp3tagui/CVS/Repository Mon Sep 13 21:57:39 2004 @@ -0,0 +1 @@ +mldonkey/src/utils/mp3tagui diff -Nur ./src/utils/mp3tagui/CVS/Root ../mldonkey/src/utils/mp3tagui/CVS/Root --- ./src/utils/mp3tagui/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/mp3tagui/CVS/Root Mon Sep 13 21:57:39 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/mp3tagui/CVS/Tag ../mldonkey/src/utils/mp3tagui/CVS/Tag --- ./src/utils/mp3tagui/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/mp3tagui/CVS/Tag Mon Sep 13 21:57:43 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/utils/net/CVS/Entries ../mldonkey/src/utils/net/CVS/Entries --- ./src/utils/net/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/net/CVS/Entries Mon Sep 13 21:57:57 2004 @@ -0,0 +1,32 @@ +/.cvsignore/1.1/Tue Apr 22 22:43:32 2003//Trelease-2-5-23 +/anyEndian.ml/1.4/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/base64.ml/1.1/Sun Feb 8 22:58:17 2004//Trelease-2-5-23 +/base64.mli/1.1/Sun Feb 8 22:58:17 2004//Trelease-2-5-23 +/basicSocket.ml/1.12/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/basicSocket.mli/1.8/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/bigEndian.ml/1.4/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/cobs.ml/1.3/Fri Jan 30 06:11:07 2004//Trelease-2-5-23 +/http_client.ml/1.12/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/http_client.mli/1.3/Fri Feb 6 17:39:10 2004//Trelease-2-5-23 +/http_server.ml/1.10/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/http_server.mli/1.4/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/ip.ml/1.6/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/ip.mli/1.3/Wed Mar 17 23:42:32 2004//Trelease-2-5-23 +/ip_set.ml/1.4/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/littleEndian.ml/1.5/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/mailer.ml/1.2/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/multicast.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/multicast.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/multicast_c.c/1.2/Fri Nov 21 23:18:13 2003//Trelease-2-5-23 +/tcpBufferedSocket.ml/1.18/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/tcpBufferedSocket.mli/1.12/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/tcpClientSocket.ml/1.3/Thu Nov 20 16:43:27 2003//Trelease-2-5-23 +/tcpClientSocket.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/tcpServerSocket.ml/1.2/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/tcpServerSocket.mli/1.3/Fri Apr 16 17:14:56 2004//Trelease-2-5-23 +/tcpSocket.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/terminal.ml/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/terminal.mli/1.1/Tue Apr 22 22:33:40 2003//Trelease-2-5-23 +/udpSocket.ml/1.9/Wed May 5 20:55:37 2004//Trelease-2-5-23 +/udpSocket.mli/1.3/Mon May 3 08:22:25 2004//Trelease-2-5-23 +D diff -Nur ./src/utils/net/CVS/Repository ../mldonkey/src/utils/net/CVS/Repository --- ./src/utils/net/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/net/CVS/Repository Mon Sep 13 21:57:43 2004 @@ -0,0 +1 @@ +mldonkey/src/utils/net diff -Nur ./src/utils/net/CVS/Root ../mldonkey/src/utils/net/CVS/Root --- ./src/utils/net/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/net/CVS/Root Mon Sep 13 21:57:43 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/net/CVS/Tag ../mldonkey/src/utils/net/CVS/Tag --- ./src/utils/net/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/net/CVS/Tag Mon Sep 13 21:57:57 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/utils/ocamlrss/CVS/Entries ../mldonkey/src/utils/ocamlrss/CVS/Entries --- ./src/utils/ocamlrss/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/ocamlrss/CVS/Entries Mon Sep 13 21:58:00 2004 @@ -0,0 +1,9 @@ +/.cvsignore/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss_date.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss_date.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss_io.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss_messages.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/rss_types.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +D diff -Nur ./src/utils/ocamlrss/CVS/Repository ../mldonkey/src/utils/ocamlrss/CVS/Repository --- ./src/utils/ocamlrss/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/ocamlrss/CVS/Repository Mon Sep 13 21:57:58 2004 @@ -0,0 +1 @@ +mldonkey/src/utils/ocamlrss diff -Nur ./src/utils/ocamlrss/CVS/Root ../mldonkey/src/utils/ocamlrss/CVS/Root --- ./src/utils/ocamlrss/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/ocamlrss/CVS/Root Mon Sep 13 21:57:57 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/ocamlrss/CVS/Tag ../mldonkey/src/utils/ocamlrss/CVS/Tag --- ./src/utils/ocamlrss/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/ocamlrss/CVS/Tag Mon Sep 13 21:58:01 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./src/utils/xml-light/CVS/Entries ../mldonkey/src/utils/xml-light/CVS/Entries --- ./src/utils/xml-light/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/xml-light/CVS/Entries Mon Sep 13 21:58:06 2004 @@ -0,0 +1,12 @@ +/.cvsignore/1.2/Thu Jul 29 10:31:11 2004//Trelease-2-5-23 +/xml.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xmlParser.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xmlParser.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml_dtd.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml_dtd.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml_lexer.mli/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml_lexer.mll/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml_parser.mly/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/xml_types.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +D diff -Nur ./src/utils/xml-light/CVS/Repository ../mldonkey/src/utils/xml-light/CVS/Repository --- ./src/utils/xml-light/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/xml-light/CVS/Repository Mon Sep 13 21:58:01 2004 @@ -0,0 +1 @@ +mldonkey/src/utils/xml-light diff -Nur ./src/utils/xml-light/CVS/Root ../mldonkey/src/utils/xml-light/CVS/Root --- ./src/utils/xml-light/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/xml-light/CVS/Root Mon Sep 13 21:58:01 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./src/utils/xml-light/CVS/Tag ../mldonkey/src/utils/xml-light/CVS/Tag --- ./src/utils/xml-light/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/src/utils/xml-light/CVS/Tag Mon Sep 13 21:58:06 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./tools/CVS/Entries ../mldonkey/tools/CVS/Entries --- ./tools/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/CVS/Entries Mon Sep 13 21:58:19 2004 @@ -0,0 +1,18 @@ +/.cvsignore/1.4/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/copysources.ml/1.2/Wed Jan 14 20:43:57 2004//Trelease-2-5-23 +/dp500.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/ed2k_hash.ml/1.10/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/get_range.ml/1.3/Sun Mar 7 23:02:31 2004//Trelease-2-5-23 +/make_torrent.ml/1.2/Wed Jan 14 21:17:27 2004//Trelease-2-5-23 +/mlcast.ml/1.2/Tue Mar 4 21:56:14 2003//Trelease-2-5-23 +/observer.ml/1.15/Wed Aug 4 16:59:27 2004//Trelease-2-5-23 +/ocamlpp.ml4/1.1/Sun Mar 7 09:34:28 2004//Trelease-2-5-23 +/overnetdump.ml/1.4/Tue Mar 4 21:56:15 2003//Trelease-2-5-23 +/subconv.ml/1.2/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/tcpdump2txt.ml/1.4/Tue Mar 4 21:56:15 2003//Trelease-2-5-23 +/testrss.ml/1.1/Thu Jul 29 10:25:34 2004//Trelease-2-5-23 +/udpdump2txt.ml/1.3/Tue Mar 4 21:56:15 2003//Trelease-2-5-23 +/use_tags.ml/1.5/Tue Mar 4 21:56:15 2003//Trelease-2-5-23 +/xpm.mll/1.2/Tue Mar 4 21:56:15 2003//Trelease-2-5-23 +D/pandora//// +D/zoggy//// diff -Nur ./tools/CVS/Repository ../mldonkey/tools/CVS/Repository --- ./tools/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/CVS/Repository Mon Sep 13 21:58:07 2004 @@ -0,0 +1 @@ +mldonkey/tools diff -Nur ./tools/CVS/Root ../mldonkey/tools/CVS/Root --- ./tools/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/CVS/Root Mon Sep 13 21:58:07 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./tools/CVS/Tag ../mldonkey/tools/CVS/Tag --- ./tools/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/CVS/Tag Mon Sep 13 21:58:14 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./tools/observer.ml ../mldonkey/tools/observer.ml --- ./tools/observer.ml Thu Jul 29 12:32:48 2004 +++ ../mldonkey/tools/observer.ml Wed Aug 4 18:59:27 2004 @@ -30,7 +30,8 @@ let motd_html = ref (try File.to_string "motd.html" with _ -> "") let servers_met = ref (try File.to_string "servers.met" with _ -> "") -let peers_ocl = ref (try File.to_string "peers.ocl" with _ -> "") +let overnet_peers_ocl = ref (try File.to_string "overnet_peers.ocl" with _ -> "") +let kademlia_peers_ocl = ref (try File.to_string "kademlia_peers.ocl" with _ -> "") let motd_conf = ref (try File.to_string "motd.conf" with _ -> "") let redirector_info = ref "" @@ -41,8 +42,9 @@ buf_int16 buf 0; buf_string16 buf !motd_html; buf_string16 buf !servers_met; - buf_string16 buf !peers_ocl; + buf_string16 buf !overnet_peers_ocl; buf_string16 buf !motd_conf; + buf_string16 buf !kademlia_peers_ocl; let s = Buffer.contents buf in (* the len should be (String.length s - 4), but since the IP address (4 bytes) is added at the end, it is (String.length s) *) @@ -92,9 +94,43 @@ *) -let new_servers = ref [] -let new_peers = ref [] - +module T = struct + + type key = Ip.t * int + + type 'a t = { + objects_fifo : key Fifo.t; + max_objects : int; + objects_table : (key, key) Hashtbl.t; + } + + let create max_objects = { + objects_fifo = Fifo.create (); + max_objects = max_objects; + objects_table = Hashtbl.create 127; + } + + let add t key = + let (ip, port) = key in + if Ip.valid ip && ip <> Ip.localhost && Ip.reachable ip && + not (Hashtbl.mem t.objects_table key) then + begin + Hashtbl.add t.objects_table key key; + Fifo.put t.objects_fifo key; + if Fifo.length t.objects_fifo = t.max_objects then + let key = Fifo.take t.objects_fifo in + Hashtbl.remove t.objects_table key + end + + let to_list t = + Fifo.to_list t.objects_fifo + + end + +let new_servers = T.create 200 +let new_overnet_peers = T.create 1000 +let new_kademlia_peers = T.create 1000 + let print_record t ip_firewall s = try @@ -130,7 +166,7 @@ lprintf "Version: %s, uptime: %02d:%02d, shared: %Ld, uploaded: %Ld\n" version (uptime / 3600) ((uptime/60) mod 60) shared uploaded; List.iter (fun (ip, port) -> - new_servers := (ip, port) :: !new_servers; + T.add new_servers (ip, port); lprintf " Connected to %s:%d\n" (Ip.to_string ip) port; ) ips; @@ -141,7 +177,7 @@ for i = 0 to npeers - 1 do let ip = get_ip s (pos+4+i*6) in let port = get_int16 s (pos+6+i*6) in - new_peers := (ip, port) :: !new_peers; + T.add new_overnet_peers (ip, port); lprintf " Overnet Peer %s:%d\n" (Ip.to_string ip) port; @@ -257,7 +293,7 @@ lprintf " DKSV:\n"; List.iter (fun (ip, port) -> - new_servers := (ip, port) :: !new_servers; + T.add new_servers (ip, port); lprintf " Connected to %s:%d\n" (Ip.to_string ip) port; ) servers @@ -272,10 +308,25 @@ lprintf " DKOV:\n"; List.iter (fun (ip, port) -> - new_servers := (ip, port) :: !new_servers; + T.add new_overnet_peers (ip, port); lprintf " Overnet peer %s:%d\n" (Ip.to_string ip) port; ) servers + + | "DKKD" -> + let servers, pos = get_list (fun s pos -> + let ip = get_ip s pos in + let port = get_port s (pos+4) in + (ip, port), pos+6 + ) s 0 in + + + lprintf " DKKD:\n"; + List.iter (fun (ip, port) -> + T.add new_kademlia_peers (ip, port); + lprintf " Kademlia peer %s:%d\n" + (Ip.to_string ip) port; + ) servers | "DKNB" -> @@ -507,34 +558,11 @@ ] (fun _ -> ()) "" - -let time = ref 0 -let servers_array = Array.create !servers_age [] -let peers_array = Array.create !peers_age [] -let dump_list array new_hosts adder dumper = +let dump_list new_hosts adder dumper = try (* lprintf "dump server list\n"; *) - incr time; - let len = Array.length array in - array.(!time mod Array.length array) <- !new_hosts; - new_hosts := []; - let servers = Hashtbl.create 97 in - let servers_ip = Hashtbl.create 97 in - for i = 0 to len - 1 do - List.iter (fun ((ip,port) as key) -> - if port <> 4662 && Ip.valid ip && ip <> Ip.localhost - && Ip.reachable ip then - try - let key = Hashtbl.find servers_ip ip in - Hashtbl.remove servers key - with _ -> - Hashtbl.add servers key (adder ip port); - Hashtbl.add servers_ip ip key - ) array.(i) - done; - let list = Hashtbl2.to_list servers in - dumper list + dumper (List2.tail_map adder (T.to_list new_hosts)); with e -> lprintf "error: %s\n" (Printexc2.to_string e) @@ -543,8 +571,8 @@ (try motd_html := File.to_string "motd.html" with _ -> ()); (try motd_conf := File.to_string "motd.conf" with _ -> ()); update_redirector_info (); - dump_list servers_array new_servers - (fun ip port -> + dump_list new_servers + (fun (ip, port) -> { S.ip = ip; S.port = port; S.tags = []; };) (fun list -> let list,_ = List2.cut 500 list in @@ -560,21 +588,24 @@ ) let dump_peers_list _ = - dump_list peers_array new_peers - (fun ip port -> (ip,port)) - (fun list -> - let buf = Buffer.create 100 in - List.iter (fun (ip, port) -> - Printf.bprintf buf "%s,%d,X\n" (Ip.to_string ip) port; - ) list; - peers_ocl := (Buffer.contents buf); - File.from_string "peers.ocl" !peers_ocl; - update_redirector_info (); - (* - ignore - (Sys.command "scp -B -q peers.ocl simon_mld@subversions.gnu.org:/upload/mldonkey/network/"); -*) - ) + let store new_peers peers_ocl peers_file = + dump_list new_peers + (fun key -> key) + (fun list -> + let buf = Buffer.create 100 in + List.iter (fun (ip, port) -> + Printf.bprintf buf "%s,%d,X\n" (Ip.to_string ip) port; + ) list; + peers_ocl := (Buffer.contents buf); + File.from_string peers_file !peers_ocl; + ) + in + store new_overnet_peers + overnet_peers_ocl "overnet_peers.ocl"; + store new_kademlia_peers + kademlia_peers_ocl "kademlia_peers.ocl"; + update_redirector_info () + let _ = update_redirector_info (); @@ -587,7 +618,7 @@ try let file = File.to_string "servers.met" in List.iter (fun s -> - servers_array.(0) <- (s.S.ip , s.S.port) :: servers_array.(0) + T.add new_servers (s.S.ip , s.S.port) ) (S.read file) with _ -> lprintf "Could not load old server list\n"; end; diff -Nur ./tools/pandora/CVS/Entries ../mldonkey/tools/pandora/CVS/Entries --- ./tools/pandora/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/pandora/CVS/Entries Mon Sep 13 21:58:16 2004 @@ -0,0 +1,5 @@ +/README/1.1/Mon May 19 08:29:34 2003//Trelease-2-5-23 +/stacks/1.1/Mon May 19 08:29:34 2003//Trelease-2-5-23 +/tcpprintcomponent.cc/1.1/Mon May 19 08:29:34 2003//Trelease-2-5-23 +/tcpprintcomponent.h/1.1/Mon May 19 08:29:34 2003//Trelease-2-5-23 +D diff -Nur ./tools/pandora/CVS/Repository ../mldonkey/tools/pandora/CVS/Repository --- ./tools/pandora/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/pandora/CVS/Repository Mon Sep 13 21:58:15 2004 @@ -0,0 +1 @@ +mldonkey/tools/pandora diff -Nur ./tools/pandora/CVS/Root ../mldonkey/tools/pandora/CVS/Root --- ./tools/pandora/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/pandora/CVS/Root Mon Sep 13 21:58:15 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./tools/pandora/CVS/Tag ../mldonkey/tools/pandora/CVS/Tag --- ./tools/pandora/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/pandora/CVS/Tag Mon Sep 13 21:58:16 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./tools/zoggy/CVS/Entries ../mldonkey/tools/zoggy/CVS/Entries --- ./tools/zoggy/CVS/Entries Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/zoggy/CVS/Entries Mon Sep 13 21:58:19 2004 @@ -0,0 +1,6 @@ +/.cvsignore/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/pa_zog.ml/1.5/Wed Aug 4 18:39:32 2004//Trelease-2-5-23 +/zog_messages.ml/1.1/Wed Jun 26 11:49:45 2002//Trelease-2-5-23 +/zog_misc.ml/1.2/Mon Dec 9 21:29:29 2002//Trelease-2-5-23 +/zog_types.ml/1.3/Mon Dec 9 21:29:29 2002//Trelease-2-5-23 +D diff -Nur ./tools/zoggy/CVS/Repository ../mldonkey/tools/zoggy/CVS/Repository --- ./tools/zoggy/CVS/Repository Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/zoggy/CVS/Repository Mon Sep 13 21:58:17 2004 @@ -0,0 +1 @@ +mldonkey/tools/zoggy diff -Nur ./tools/zoggy/CVS/Root ../mldonkey/tools/zoggy/CVS/Root --- ./tools/zoggy/CVS/Root Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/zoggy/CVS/Root Mon Sep 13 21:58:17 2004 @@ -0,0 +1 @@ +:ext:anoncvs@savannah.nongnu.org:/cvsroot/mldonkey diff -Nur ./tools/zoggy/CVS/Tag ../mldonkey/tools/zoggy/CVS/Tag --- ./tools/zoggy/CVS/Tag Thu Jan 1 01:00:00 1970 +++ ../mldonkey/tools/zoggy/CVS/Tag Mon Sep 13 21:58:19 2004 @@ -0,0 +1 @@ +Nrelease-2-5-23 diff -Nur ./tools/zoggy/pa_zog.ml ../mldonkey/tools/zoggy/pa_zog.ml --- ./tools/zoggy/pa_zog.ml Thu Jul 29 12:32:48 2004 +++ ../mldonkey/tools/zoggy/pa_zog.ml Wed Aug 4 20:39:32 2004 @@ -1,13 +1,28 @@ -(***********************************************************************) -(* Zoggy *) -(* *) -(* Daniel de Rauglaudre, projet Cristal, INRIA Rocquencourt *) -(* *) -(* Copyright 2001 Institut National de Recherche en Informatique et *) -(* en Automatique. All rights reserved. This file is distributed *) -(* under the terms of the Q Public License version 1.0. *) -(* *) -(***********************************************************************) +(**************************************************************************) +(* Cameleon *) +(* *) +(* Copyright (C) 2002 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. *) +(* *) +(* This program is free software; you can redistribute it and/or modify *) +(* it under the terms of the GNU General Public License as published by *) +(* the Free Software Foundation; either version 2 of the License, or *) +(* 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 *) +(* *) +(* Contact: Maxence.Guesdon@inria.fr *) +(**************************************************************************) + +(* $Id: pa_zog.ml,v 1.5 2004/08/04 18:39:32 mldonkey Exp $ *) #load "pa_extend.cmo";; #load "q_MLast.cmo";; @@ -33,21 +48,48 @@ let parse_string loc = function - "false" -> <:expr< False >> - | "true" -> <:expr< True >> + "false" -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:expr< False >> + | "true" -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:expr< True >> + | str -> try let strm = Stream.of_string str in let r = Grammar.Entry.parse Pcaml.expr strm in - Pcaml.expr_reloc (fun _ -> loc) 0 r + Pcaml.expr_reloc + (fun _ -> Lexing.dummy_pos, Lexing.dummy_pos) + Lexing.dummy_pos + r with e -> Printf.eprintf "Error in \"%s\"\n" str; flush stderr; let (e, loc) = match e with Stdpp.Exc_located ((bp, ep), e) -> - e, (fst loc + bp, fst loc + ep) - | e -> (e, loc) + e, ({ Lexing.dummy_pos with + Lexing.pos_cnum = fst loc + bp.Lexing.pos_cnum}, + { Lexing.dummy_pos with + Lexing.pos_cnum = fst loc + ep.Lexing.pos_cnum} + ) + | e -> (e, ({ Lexing.dummy_pos with + Lexing.pos_cnum = fst loc} , + { Lexing.dummy_pos with + Lexing.pos_cnum = snd loc} + ) + ) in Stdpp.raise_with_loc loc e @@ -65,7 +107,14 @@ let p = List.find (fun p -> p.prop_kind = kind) props in parse_prop_value p with - Not_found -> <:expr< "" >> + Not_found -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:expr< "" >> let get_prop_label ele prop = match prop.prop_kind with @@ -193,6 +242,13 @@ (_, n, _, _) -> n let ast_of_creation_options_code loc ele f = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + let g f prop = match prop.prop_kind with Function | Tab_label | Expand | Fill | Padding -> f @@ -202,19 +258,19 @@ | PPixmap_file -> if must_gen prop then let v = parse_prop_value prop in - <:expr< $f$ (GDraw.pixmap_from_xpm ~file : $v$ ()) >> + <:expr< $f$ (GDraw.pixmap_from_xpm ~file : $v$ ()) >> else raise (Field_error (field_error_string PPixmap_file)) | PPixmap_data -> if must_gen prop then let v = parse_prop_value prop in - <:expr< $f$ (GDraw.pixmap_from_xpm_d ~data : $v$ ()) >> + <:expr< $f$ (GDraw.pixmap_from_xpm_d ~data : $v$ ()) >> else raise (Field_error (field_error_string PPixmap_data)) | PPixmap_code -> if must_gen prop then let v = parse_prop_value prop in - <:expr< $f$ $v$ >> + <:expr< $f$ $v$ >> else raise (Field_error (field_error_string PPixmap_code)) | _ -> @@ -230,6 +286,12 @@ match prop.prop_kind with Expand | Fill | Padding -> if must_gen prop then + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in let v = parse_prop_value prop in <:expr< $f$ ~ $get_prop_label ele prop$ : $v$ >> else f @@ -237,27 +299,57 @@ in List.fold_left g f ele.props -let ast_of_pack_code loc parent ele f = +let ast_of_pack_code (loc : int * int) parent ele f = try let pack_met = Zog_types.pack_method_of_ele parent ele in match pack_met with No_pack -> f | Insert_page -> - let g = let loc = parent.name_loc in <:expr< $lid:parent.name$ >> in + let g = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst parent.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd parent.name_loc } + ) + in + <:expr< $lid:parent.name$ >> + in + let loc1 = loc in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:expr< $f$ ~packing: (fun w -> $g$ # append_page ~tab_label: (GMisc.label - ~text:$ast_of_prop_value loc ele.props Tab_label$ ()) + ~text:$ast_of_prop_value loc1 ele.props Tab_label$ ()) #coerce w) >> | _ -> - let g = let loc = parent.name_loc in <:expr< $lid:parent.name$ >> in + let g = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst parent.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd parent.name_loc } + ) + in + <:expr< $lid:parent.name$ >> + in + let loc1 = loc in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in let p x = <:expr< $f$ ~packing: $x$ >> in match pack_met with - Pack -> p (ast_of_pack_options_code loc <:expr< $g$ # pack >> ele) + Pack -> p (ast_of_pack_options_code loc1 <:expr< $g$ # pack >> ele) | Add -> p <:expr< $g$ # add >> | Add1 -> p <:expr< $g$ # add1 >> | Add2 -> p <:expr< $g$ # add2 >> @@ -265,7 +357,15 @@ | Set_submenu -> p <:expr< $g$ # set_submenu >> | Insert_page | No_pack -> f with - Failure s -> prerr_endline s; <:expr< $f$ failed >> + Failure s -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + prerr_endline s; + <:expr< $f$ failed >> let ast_of_custom_pack_code loc parent ele ce = try @@ -274,23 +374,62 @@ No_pack -> ce | Insert_page -> - let g = let loc = parent.name_loc in <:expr< $lid:parent.name$>> in - let n = let loc = ele.name_loc in <:expr< $lid:ele.name$ >> in + let g = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst parent.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd parent.name_loc } + ) + in + <:expr< $lid:parent.name$>> + in + let n = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst ele.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd ele.name_loc } + ) + in + <:expr< $lid:ele.name$ >> + in + let loc1 = loc in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:class_expr< let _ = $g$ # append_page ~tab_label: (GMisc.label - ~text:$ast_of_prop_value loc ele.props + ~text:$ast_of_prop_value loc1 ele.props Tab_label$ ()) #coerce $n$#coerce in $ce$ >> | _ -> - let g = let loc = parent.name_loc in <:expr< $lid:parent.name$ >> in + let g = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst parent.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd parent.name_loc } + ) + in + <:expr< $lid:parent.name$ >> + in + let loc1 = loc in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in let r = match pack_met with - Pack -> ast_of_pack_options_code loc <:expr< $g$ # pack >> ele + Pack -> ast_of_pack_options_code loc1 <:expr< $g$ # pack >> ele | Add -> <:expr< $g$ # add >> | Add1 -> <:expr< $g$ # add1 >> | Add2 -> <:expr< $g$ # add2 >> @@ -298,10 +437,26 @@ | Set_submenu -> <:expr< $g$ # set_submenu >> | Insert_page | No_pack -> g in - let n = let loc = ele.name_loc in <:expr< $lid:ele.name$ >> in + let n = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst ele.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd ele.name_loc } + ) + in + <:expr< $lid:ele.name$ >> + in <:class_expr< let _ = $r$ $n$ # coerce in $ce$ >> with - Failure s -> prerr_endline s; <:class_expr< let _ = failed in $ce$ >> + Failure s -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + prerr_endline s; + <:class_expr< let _ = failed in $ce$ >> (** The accel_group variable name for the given Menubar ele. *) let accel_group_name ele = @@ -329,22 +484,44 @@ match remove_blanks (Zog_types.get_prop_value ele.props Accel_modifier) with - "" -> <:expr< [] >> + "" -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:expr< [] >> | s -> parse_string loc s in let flags = match remove_blanks (Zog_types.get_prop_value ele.props Accel_flags) with - "" -> <:expr< [] >> + "" -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:expr< [] >> | s -> parse_string loc s in + let loc1 = loc in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_expr< let _ = $lid:ele.name$ #add_accelerator ~group: $lid:accel_name$ - ~modi: $modifier$ ~flags: $flags$ $parse_string loc v$ + ~modi: $modifier$ ~flags: $flags$ $parse_string loc1 v$ in $ce$ >> + and ast_of_post_menu_creation_code loc accel_name ele ce = match ele.classe with Menu -> @@ -352,6 +529,12 @@ List.fold_right (ast_of_post_menu_item_creation_code loc accel_name) ele.children ce in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_expr< let _ = $lid:ele.name$ #set_accel_group $lid:accel_name$ in $ce$ >> | _ -> ce @@ -370,11 +553,23 @@ match win with None -> ce | Some w -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_expr< let _ = $lid:w$#add_accel_group $lid:acc_name$ in $ce$ >> ) in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_expr< let $lid:acc_name$ = GtkData.AccelGroup.create () in $ce2$ @@ -402,6 +597,12 @@ let f = match ele.classe, previous_opt with Radio_menu_item, Some e when e.classe = Radio_menu_item -> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:expr< $f$ ~group: $lid:e.name$ #group >> | _ -> f in @@ -419,41 +620,101 @@ (* BEGIN CDK *) gen_anonynous_name ele; if ele.name = "_" then - <:class_expr< let _ = $e$ () in $ce$ >> + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:class_expr< let _ = $e$ () in $ce$ >> else (* END CDK *) - let n = let loc = ele.name_loc in <:patt< $lid:ele.name$ >> in + let n = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst ele.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd ele.name_loc } + ) + in <:patt< $lid:ele.name$ >> + in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_expr< let $n$ = $e$ () in $ce$ >> -let rec ast_of_ele_methods loc ele = - let cil = - if ele.classe = Menubar then - let accel_name = accel_group_name ele in - [<:class_str_item< method $accel_name$ = $lid:accel_name$ >>] - else [] - in + let rec ast_of_ele_methods loc ele = + let cil = + if ele.classe = Menubar then + let accel_name = accel_group_name ele in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + [<:class_str_item< method $accel_name$ = $lid:accel_name$ >>] + else [] + in (* BEGIN CDK *) - gen_anonynous_name ele; - let cil = if ele.name.[0] <> '_' then - let n = let loc = ele.name_loc in <:expr< $lid:ele.name$ >> in - <:class_str_item< method $ele.name$ = $n$ >> :: cil else cil in + gen_anonynous_name ele; + let cil = if ele.name.[0] <> '_' then + let n = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst ele.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd ele.name_loc } + ) + in + <:expr< $lid:ele.name$ >> + in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in + <:class_str_item< method $ele.name$ = $n$ >> :: cil else cil in (* END CDK *) - List.fold_left (fun cil ele -> cil @ ast_of_ele_methods loc ele) cil - ele.children + List.fold_left (fun cil ele -> cil @ ast_of_ele_methods loc ele) cil + ele.children let rec ast_of_ele_vals loc ele = let cil = if ele.classe = Menubar then let accel_name = accel_group_name ele in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in [<:class_str_item< value $accel_name$ = $lid:accel_name$ >>] else [] in (* BEGIN CDK *) gen_anonynous_name ele; - let n = let loc = ele.name_loc in <:expr< $lid:ele.name$ >> in + let n = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst ele.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd ele.name_loc } + ) + in + <:expr< $lid:ele.name$ >> + in let cil = if ele.name.[0] <> '_' then + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_str_item< value $ele.name$ = $n$ >> :: cil - else cil in + else cil + in (* END CDK *) List.fold_left (fun cil ele -> cil @ ast_of_ele_vals loc ele) cil ele.children @@ -468,10 +729,29 @@ match e.classe with Window -> cil | _ -> - let n = let loc = e.name_loc in <:expr< $lid:e.name$ >> in + let n = + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst e.name_loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd e.name_loc } + ) + in <:expr< $lid:e.name$ >> + in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in let ci = <:class_str_item< method coerce = $n$ # coerce >> in cil @ [ci] in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in <:class_expr< object $None$ $list:cil$ end >> in let ce = @@ -485,6 +765,12 @@ in ast_of_ele_creations ?win: win_opt loc None None ele ce in + let loc = + ( + { Lexing.dummy_pos with Lexing.pos_cnum = fst loc } , + { Lexing.dummy_pos with Lexing.pos_cnum = snd loc } + ) + in let ce = List.fold_right (fun p ce -> <:class_expr< fun $lid:p$ -> $ce$ >>) entity.en_params <:class_expr< fun () -> $ce$ >> @@ -511,7 +797,10 @@ ">" -> try let entity = {en_name = name; en_params = pl; en_ele = w} in - ast_of_entity loc entity, loc + ( + let loc = ((fst loc).Lexing.pos_cnum, (snd loc).Lexing.pos_cnum) in + ast_of_entity loc entity + ), loc with Field_error m -> field_error m; exit 1 @@ -531,9 +820,11 @@ List.map (fun (x, v, vloc) -> {prop_kind = Zog_misc.property_kind_of_property_name x; - prop_value = Zog_misc.decode v; prop_value_loc = vloc}) + prop_value = Zog_misc.decode v; + prop_value_loc = ((fst vloc).Lexing.pos_cnum, (snd vloc).Lexing.pos_cnum)}) proplist in + let nloc = ((fst loc).Lexing.pos_cnum, (snd loc).Lexing.pos_cnum) in { name = name; name_loc = nloc; classe = Zog_misc.class_of_class_name tag; props = proplist; @@ -548,7 +839,7 @@ [ [ x = LIDENT; "="; (v, vloc) = string -> x, v, vloc ] ] ; string: - [ [ v = STRING -> v, loc ] ] + [ [ v = STRING -> v, loc ] ] ; ident: [ [ v = LIDENT -> v, loc ] ]