mldonkey-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/common/co...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/common/co...
Date: Wed, 17 May 2006 08:52:44 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Branch:         
Changes by:     spiralvoice <address@hidden>    06/05/17 08:52:44

Modified files:
        distrib        : ChangeLog 
        src/daemon/common: commonResult.ml commonTypes.ml guiDecoding.ml 
                           guiEncoding.ml 
        src/daemon/driver: driverControlers.ml driverInteractive.ml 
                           driverInterface.ml 
        src/networks/donkey: donkeyComplexOptions.ml 
                             donkeyInteractive.ml 
        src/networks/fasttrack: fasttrackGlobals.ml fasttrackProtocol.ml 
        src/networks/gnutella: gnutellaFunctions.ml gnutellaGlobals.ml 
                               gnutellaHandler.ml gnutellaInteractive.ml 
                               gnutellaMain.ml gnutellaProto.ml 
                               gnutellaProtocol.ml gnutellaServers.ml 
                               gnutellaTypes.ml 
        src/networks/gnutella2: g2Handler.ml g2Network.ml g2Proto.ml 
                                g2Redirector.ml g2Supernode.ml 
        src/utils/cdk  : printf2.ml 
        src/utils/net  : anyEndian.ml basicSocket.ml ip.ml 

Log message:
        patch #5101

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/distrib/ChangeLog.diff?tr1=1.830&tr2=1.831&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/common/commonResult.ml.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/common/commonTypes.ml.diff?tr1=1.50&tr2=1.51&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/common/guiDecoding.ml.diff?tr1=1.54&tr2=1.55&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/common/guiEncoding.ml.diff?tr1=1.52&tr2=1.53&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/driver/driverControlers.ml.diff?tr1=1.66&tr2=1.67&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/driver/driverInteractive.ml.diff?tr1=1.73&tr2=1.74&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/driver/driverInterface.ml.diff?tr1=1.42&tr2=1.43&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/donkey/donkeyComplexOptions.ml.diff?tr1=1.46&tr2=1.47&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/donkey/donkeyInteractive.ml.diff?tr1=1.104&tr2=1.105&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/fasttrack/fasttrackGlobals.ml.diff?tr1=1.36&tr2=1.37&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/fasttrack/fasttrackProtocol.ml.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaFunctions.ml.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaGlobals.ml.diff?tr1=1.37&tr2=1.38&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaHandler.ml.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaInteractive.ml.diff?tr1=1.52&tr2=1.53&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaMain.ml.diff?tr1=1.22&tr2=1.23&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaProto.ml.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaProtocol.ml.diff?tr1=1.22&tr2=1.23&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaServers.ml.diff?tr1=1.26&tr2=1.27&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella/gnutellaTypes.ml.diff?tr1=1.18&tr2=1.19&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella2/g2Handler.ml.diff?tr1=1.18&tr2=1.19&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella2/g2Network.ml.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella2/g2Proto.ml.diff?tr1=1.15&tr2=1.16&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella2/g2Redirector.ml.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/gnutella2/g2Supernode.ml.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/utils/cdk/printf2.ml.diff?tr1=1.15&tr2=1.16&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/utils/net/anyEndian.ml.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/utils/net/basicSocket.ml.diff?tr1=1.29&tr2=1.30&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/utils/net/ip.ml.diff?tr1=1.21&tr2=1.22&r1=text&r2=text

Patches:
Index: mldonkey/distrib/ChangeLog
diff -u mldonkey/distrib/ChangeLog:1.830 mldonkey/distrib/ChangeLog:1.831
--- mldonkey/distrib/ChangeLog:1.830    Tue May 16 22:02:54 2006
+++ mldonkey/distrib/ChangeLog  Wed May 17 08:52:43 2006
@@ -15,6 +15,10 @@
 =========
 
 2006/05/17
+5101: G2: Gnutella2 fixes/log updates (zet)
+- Gnutella2 (G2) is working again
+- Re-enables search result networks
+- Log logged-in users
 5098: EDK: Update option description for initial_score
 
 2006/05/15
Index: mldonkey/src/daemon/common/commonResult.ml
diff -u mldonkey/src/daemon/common/commonResult.ml:1.8 
mldonkey/src/daemon/common/commonResult.ml:1.9
--- mldonkey/src/daemon/common/commonResult.ml:1.8      Fri May 12 21:02:38 2006
+++ mldonkey/src/daemon/common/commonResult.ml  Wed May 17 08:52:43 2006
@@ -139,12 +139,15 @@
     result_size = zero;
     result_modified = true;
     result_time = BasicSocket.last_time ();
+    result_source_network = 0;
   }
   
 let result_download rs names force =
   let r = IndexedResults.get_result rs in
   let files = ref [] in
   CommonNetwork.networks_iter (fun n ->
+      (* Temporarily download results only from the network that returned the 
result *)
+      if (n.network_num = r.result_source_network) then
       files := (n.op_network_download r) :: !files
   );
   !files  
Index: mldonkey/src/daemon/common/commonTypes.ml
diff -u mldonkey/src/daemon/common/commonTypes.ml:1.50 
mldonkey/src/daemon/common/commonTypes.ml:1.51
--- mldonkey/src/daemon/common/commonTypes.ml:1.50      Wed Mar 29 14:22:08 2006
+++ mldonkey/src/daemon/common/commonTypes.ml   Wed May 17 08:52:43 2006
@@ -401,6 +401,7 @@
 
     mutable result_time : int;
     mutable result_modified : bool;
+    mutable result_source_network : int;
   }
 
 type result = {
Index: mldonkey/src/daemon/common/guiDecoding.ml
diff -u mldonkey/src/daemon/common/guiDecoding.ml:1.54 
mldonkey/src/daemon/common/guiDecoding.ml:1.55
--- mldonkey/src/daemon/common/guiDecoding.ml:1.54      Fri May 12 21:08:30 2006
+++ mldonkey/src/daemon/common/guiDecoding.ml   Wed May 17 08:52:43 2006
@@ -453,6 +453,7 @@
     result_modified = false;
     result_force = false;
     result_time = time;
+    result_source_network = 0;
   }, pos+1
 
 let get_message s pos =
Index: mldonkey/src/daemon/common/guiEncoding.ml
diff -u mldonkey/src/daemon/common/guiEncoding.ml:1.52 
mldonkey/src/daemon/common/guiEncoding.ml:1.53
--- mldonkey/src/daemon/common/guiEncoding.ml:1.52      Fri May 12 21:08:30 2006
+++ mldonkey/src/daemon/common/guiEncoding.ml   Wed May 17 08:52:43 2006
@@ -255,7 +255,7 @@
       
 let buf_result proto buf r =
   buf_int buf r.result_num;
-  buf_int buf 0;
+  buf_int buf r.result_source_network;
   buf_list buf buf_string r.result_names;
   if proto < 27 then
     buf_md4 buf Md4.null
Index: mldonkey/src/daemon/driver/driverControlers.ml
diff -u mldonkey/src/daemon/driver/driverControlers.ml:1.66 
mldonkey/src/daemon/driver/driverControlers.ml:1.67
--- mldonkey/src/daemon/driver/driverControlers.ml:1.66 Sat May 13 12:44:16 2006
+++ mldonkey/src/daemon/driver/driverControlers.ml      Wed May 17 08:52:43 2006
@@ -317,6 +317,7 @@
         if valid_password user pass then begin
             auth := true;
             o.conn_user <- find_ui_user user;
+            lprintf_nl () "Authenticated user: %s" user;
             let module M = CommonMessages in
             Buffer.add_string buf M.full_access
           end else
@@ -572,6 +573,7 @@
   match event with
     TcpServerSocket.CONNECTION (s, Unix.ADDR_INET (from_ip, from_port)) ->
       let from_ip = Ip.of_inet_addr from_ip in
+        lprintf_nl () "Telnet connection from %s" (Ip.to_string from_ip);
         let token = create_token unlimited_connection_manager in
         let sock = TcpBufferedSocket.create_simple token
           "telnet connection"
Index: mldonkey/src/daemon/driver/driverInteractive.ml
diff -u mldonkey/src/daemon/driver/driverInteractive.ml:1.73 
mldonkey/src/daemon/driver/driverInteractive.ml:1.74
--- mldonkey/src/daemon/driver/driverInteractive.ml:1.73        Fri May 12 
21:08:30 2006
+++ mldonkey/src/daemon/driver/driverInteractive.ml     Wed May 17 08:52:43 2006
@@ -1129,18 +1129,16 @@
                 end;
 
               user.ui_last_results <- (!counter, rs) :: user.ui_last_results;
-              if use_html_mods o then Printf.bprintf buf "\\<td 
class=\\\"sr\\\"\\>%s\\</td\\>"
-                  (
-(* TODO RESULT: use the uids to display from which networks it is downloadable
-                  let n = network_find_by_num r.result_network in
-              n.network_name *) "--")
-              else Printf.bprintf  buf "[%5d] %s "
-                  !counter
-
-(* TODO RESULT:
-              (let n = network_find_by_num r.result_network in
-                  n.network_name) *)
-                  "--";
+              let network_name = 
+                try 
+                 let n = network_find_by_num r.result_source_network in
+                 n.network_name 
+                with _ -> "Unknown"
+              in
+              
+                if use_html_mods o 
+                  then Printf.bprintf buf "\\<td 
class=\\\"sr\\\"\\>%s\\</td\\>" network_name
+                  else Printf.bprintf  buf "[%5d] %s " !counter network_name;
 
               if o.conn_output = HTML then begin
                   if !!html_mods then
Index: mldonkey/src/daemon/driver/driverInterface.ml
diff -u mldonkey/src/daemon/driver/driverInterface.ml:1.42 
mldonkey/src/daemon/driver/driverInterface.ml:1.43
--- mldonkey/src/daemon/driver/driverInterface.ml:1.42  Fri May  5 22:08:00 2006
+++ mldonkey/src/daemon/driver/driverInterface.ml       Wed May 17 08:52:43 2006
@@ -565,11 +565,12 @@
     
     | P.Password (user, pass) ->
         begin
+          lprintf_nl () "GUI connection from user %s" user;
           match gui.gui_sock with
             Some sock when not (valid_password user pass) ->
               gui_send gui BadPassword;                  
               set_lifetime sock 5.;
-              lprintf "BAD PASSWORD\n"; 
+              lprintf_nl () "GUI connection BAD PASSWORD for user %s" user; 
               TcpBufferedSocket.close sock (Closed_for_error "Bad Password")
           
           | _ ->
Index: mldonkey/src/networks/donkey/donkeyComplexOptions.ml
diff -u mldonkey/src/networks/donkey/donkeyComplexOptions.ml:1.46 
mldonkey/src/networks/donkey/donkeyComplexOptions.ml:1.47
--- mldonkey/src/networks/donkey/donkeyComplexOptions.ml:1.46   Sun Apr  9 
00:27:03 2006
+++ mldonkey/src/networks/donkey/donkeyComplexOptions.ml        Wed May 17 
08:52:43 2006
@@ -571,6 +571,7 @@
   let rec r = {  dummy_result with
       result_uids = [Uid.create (Ed2k md4)];
       result_done = (List.mem md4 !!old_files) || (Hashtbl.mem files_by_md4 
md4); 
+      result_source_network = network.network_num;
     } in
   List.iter (fun tag ->
       match tag with
Index: mldonkey/src/networks/donkey/donkeyInteractive.ml
diff -u mldonkey/src/networks/donkey/donkeyInteractive.ml:1.104 
mldonkey/src/networks/donkey/donkeyInteractive.ml:1.105
--- mldonkey/src/networks/donkey/donkeyInteractive.ml:1.104     Sun May 14 
19:09:21 2006
+++ mldonkey/src/networks/donkey/donkeyInteractive.ml   Wed May 17 08:52:43 2006
@@ -333,19 +333,13 @@
         begin
         if List.mem md4 !!old_files then begin
           (* copy file info into result for later usage in force_download *)
-          let r = {
-              result_num = 0;
+          let r = { dummy_result with
              result_uids = [Uid.create (Ed2k md4)];
               result_names = filenames;
               result_size = size;
-              result_tags = [];
-              result_type = "";
-              result_format = "";
-              result_comment = "";
-              result_done = false;
               result_force = true; (* marker for force_download *)
-             result_time = 0;
              result_modified = false;
+                result_source_network = network.network_num;
             } in
             forceable_download := [r];
            raise already_done
Index: mldonkey/src/networks/fasttrack/fasttrackGlobals.ml
diff -u mldonkey/src/networks/fasttrack/fasttrackGlobals.ml:1.36 
mldonkey/src/networks/fasttrack/fasttrackGlobals.ml:1.37
--- mldonkey/src/networks/fasttrack/fasttrackGlobals.ml:1.36    Fri May 12 
21:02:38 2006
+++ mldonkey/src/networks/fasttrack/fasttrackGlobals.ml Wed May 17 08:52:43 2006
@@ -109,6 +109,7 @@
   CommonClient.set_client_state (as_client client) state
 let set_client_disconnected client =
   CommonClient.set_client_disconnected (as_client client)
+let client_must_update client = client_must_update (as_client client)
 
 (*************************************************************************)
 (*                                                                       *)
@@ -201,8 +202,10 @@
           server_sock = NoConnection;
           server_ciphers = None;
           server_agent = "<unknown>";
+          server_description = "";
           server_nfiles = Int64.zero;
           server_nusers = Int64.zero;
+          server_maxnusers = 0L;
           server_nkb = 0;
 
           server_need_qrt = true;
@@ -210,6 +213,7 @@
           server_nfiles_last = zero;
           server_nkb_last = 0;
           server_vendor = "";
+          server_last_lni = 0;
 
           server_connected = zero;
           server_query_key = ();
@@ -253,6 +257,7 @@
                 result_size = file_size;
                 result_tags = tags;
                 result_uids = [Uid.create (Md5Ext hash)];
+                result_source_network = network.network_num;
               }
             in
             let r = update_result_num r in
@@ -364,6 +369,7 @@
 (*          user_files = []; *)
           user_speed = 0;
           user_vendor = "";
+          user_software = "";
           user_nick = "";
         }  and user_impl = {
           dummy_user_impl with
Index: mldonkey/src/networks/fasttrack/fasttrackProtocol.ml
diff -u mldonkey/src/networks/fasttrack/fasttrackProtocol.ml:1.13 
mldonkey/src/networks/fasttrack/fasttrackProtocol.ml:1.14
--- mldonkey/src/networks/fasttrack/fasttrackProtocol.ml:1.13   Fri May 12 
21:02:38 2006
+++ mldonkey/src/networks/fasttrack/fasttrackProtocol.ml        Wed May 17 
08:52:44 2006
@@ -157,7 +157,8 @@
   begin
     try
       let (server,_) = List.assoc "server" headers in
-      c.client_user.user_vendor <- server;
+      c.client_user.user_software <- server;
+      client_must_update c;
     with Not_found -> ()
   end;
 
@@ -165,6 +166,7 @@
     try
       let (username,_) = List.assoc "x-kazaa-username" headers in
       c.client_user.user_nick <- username;
+      client_must_update c;
     with Not_found -> ()
   end;
 
Index: mldonkey/src/networks/gnutella/gnutellaFunctions.ml
diff -u mldonkey/src/networks/gnutella/gnutellaFunctions.ml:1.4 
mldonkey/src/networks/gnutella/gnutellaFunctions.ml:1.5
--- mldonkey/src/networks/gnutella/gnutellaFunctions.ml:1.4     Sun Dec 18 
14:50:38 2005
+++ mldonkey/src/networks/gnutella/gnutellaFunctions.ml Wed May 17 08:52:44 2006
@@ -111,7 +111,7 @@
   let rec iter_read sock nread =
     let b = TcpBufferedSocket.buf sock in 
     if monitored sock || !verbose_msg_raw then
-      lprintf "iter_read %d/%d\n%s\n" nread b.len
+      lprintf "iter_read %s :%d/%d\n%s\n" (Ip.to_string (peer_ip sock)) nread 
b.len
         (String.escaped (String.sub b.buf b.pos b.len));
     if b.len > 0 then
       match gconn.gconn_handler with
Index: mldonkey/src/networks/gnutella/gnutellaGlobals.ml
diff -u mldonkey/src/networks/gnutella/gnutellaGlobals.ml:1.37 
mldonkey/src/networks/gnutella/gnutellaGlobals.ml:1.38
--- mldonkey/src/networks/gnutella/gnutellaGlobals.ml:1.37      Fri May 12 
21:02:38 2006
+++ mldonkey/src/networks/gnutella/gnutellaGlobals.ml   Wed May 17 08:52:44 2006
@@ -93,6 +93,7 @@
 let file_state file =  file_state (as_file file)
 let file_num file =  file_num (as_file file)
 let file_must_update file =  file_must_update (as_file file)
+let client_must_update client = client_must_update (as_client client)
 
 let current_files = ref ([] : GnutellaTypes.file list)
 
@@ -179,6 +180,12 @@
       let max_peers = max_known_peers
     end)
 
+let find_server ip port =
+  try 
+    let h = Hashtbl.find H.hosts_by_key (ip,port) in
+    h.host_server
+  with _ -> None
+
 let new_server ip port =
   let h = H.new_host ip port Ultrapeer in
   match h.host_server with
@@ -190,11 +197,14 @@
           server_host = h;
           server_sock = NoConnection;
           server_agent = "<unknown>";
+          server_description = "";
           server_nfiles = Int64.zero;
           server_nkb = 0;
           server_nusers = Int64.zero;
+          server_maxnusers = 0L;
           server_need_qrt = true;
           server_ping_last = Md4.random ();
+          server_last_lni = 0;
           server_nfiles_last = Int64.zero;
           server_nkb_last = 0;
           server_vendor = "";
@@ -268,6 +278,7 @@
                 result_size = file_size;
                 result_tags = tags;
                 result_uids = uids;
+                result_source_network = network.network_num;
                 }
             in
             let rs = update_result_num r in
@@ -328,7 +339,7 @@
     } 
   in
   if !verbose then
-    lprintf "SET SIZE : %Ld\n" file_size;
+    lprintf_nl () "SET SIZE : %Ld\n" file_size;
   let kernel = CommonSwarming.create_swarmer file_temp file_size 
       (Int64.of_int (256 * 1024))  in
   let swarmer = CommonSwarming.create kernel (as_file file) megabyte in
@@ -393,6 +404,7 @@
           user_speed = 0;
           user_vendor = "";
 (*          user_gnutella2 = false; *)
+          user_software = "";
           user_nick = "";
         }  and user_impl = {
           dummy_user_impl with
@@ -530,6 +542,8 @@
   (match sock with Connection sock -> Some sock | _ -> None)
 
 let disconnect_from_server s r =
+  if !verbose then
+    lprintf_nl () "disconnect_from_server %s" (string_of_reason r);
   match s.server_sock with
   | Connection sock ->
       let h = s.server_host in
@@ -538,9 +552,9 @@
             let connection_time = Int64.to_int (
                 Int64.sub (int64_time ()) s.server_connected) in
             if !verbose then
-              lprintf "DISCONNECT FROM SERVER %s:%d after %d seconds\n"
+              lprintf_nl () "disconnect_from_connected_server %s:%d after %d 
seconds (%s)\n"
                 (Ip.string_of_addr h.host_addr) h.host_port
-                connection_time
+                connection_time (string_of_reason r)
             ;
         | _ -> ()
       );
Index: mldonkey/src/networks/gnutella/gnutellaHandler.ml
diff -u mldonkey/src/networks/gnutella/gnutellaHandler.ml:1.12 
mldonkey/src/networks/gnutella/gnutellaHandler.ml:1.13
--- mldonkey/src/networks/gnutella/gnutellaHandler.ml:1.12      Fri May 12 
21:02:38 2006
+++ mldonkey/src/networks/gnutella/gnutellaHandler.ml   Wed May 17 08:52:44 2006
@@ -87,6 +87,8 @@
       lprintf "RECEIVED server_to_client:\n";
       print p;
     end;
+
+try 
   match p.pkt_payload with
   | PingReq t ->
       if p.pkt_hops <= 3 then
@@ -124,7 +126,7 @@
           s.server_nkb_last <- s.server_nkb_last + t.P.nkb;
           s.server_nfiles <- (Int64.of_int t.P.nfiles);
           s.server_nkb <- t.P.nkb;
-          server_must_update (as_server s.server_server)
+          server_must_update (as_server s.server_server);
         end
   
   | QueryReq t ->
@@ -319,6 +321,10 @@
       ) t.Q.files;
   | _ -> ()
   
+with e ->
+  if !verbose then
+  lprintf_nl () "server_to_client exception %s" (Printexc2.to_string e)
+  
 (*************************************************************************)
 (*                                                                       *)
 (*                         init                                          *)
Index: mldonkey/src/networks/gnutella/gnutellaInteractive.ml
diff -u mldonkey/src/networks/gnutella/gnutellaInteractive.ml:1.52 
mldonkey/src/networks/gnutella/gnutellaInteractive.ml:1.53
--- mldonkey/src/networks/gnutella/gnutellaInteractive.ml:1.52  Fri May 12 
21:02:38 2006
+++ mldonkey/src/networks/gnutella/gnutellaInteractive.ml       Wed May 17 
08:52:44 2006
@@ -94,11 +94,17 @@
 
 let result_download r =
   if !verbose then
-    lprintf ".............. result_download ..............\n";
+    lprintf_nl () "result_download";
   let rec iter uids =
     match uids with
       [] -> raise IgnoreNetwork
     | uid :: tail ->
+        if !verbose then lprintf_nl () "UID: %s Accept(BP: %B ED2K: %B MD5: 
%B)" 
+            (Uid.to_string uid) 
+            GnutellaNetwork.accept_bitprint
+            GnutellaNetwork.accept_ed2kuid
+            GnutellaNetwork.accept_md5ext;
+
         match Uid.to_uid uid with
           Sha1 _ | Bitprint _ when GnutellaNetwork.accept_bitprint ->
             download_file r
@@ -109,45 +115,49 @@
         | _  -> iter tail
   in
   if !verbose then
-    lprintf "%d uids\n" (List.length r.result_uids);
+    lprintf_nl () "%d uids" (List.length r.result_uids);
   iter r.result_uids
 
 let declare_file _ = should_update_shared_files := true
   
 let ask_for_uids sh =
+  if !verbose then lprintf_nl () "ask_for_uids Accept(BP: %B ED2K: %B MD5: 
%B)" 
+     GnutellaNetwork.accept_bitprint
+     GnutellaNetwork.accept_ed2kuid
+     GnutellaNetwork.accept_md5ext;
   let info = IndexedSharedFiles.get_result sh.shared_info in
   if GnutellaNetwork.accept_ed2kuid then begin
       if !verbose then
-        lprintf "Ask for ED2K uid\n";
+        lprintf_nl () "Ask for ED2K uid";
       CommonUploads.ask_for_uid sh ED2K (fun sh uid ->
           let uid = Uid.to_string uid in
           declare_word uid;
           declare_file ();
           if !verbose then
-            lprintf "Ed2k uid available (size %d)\n" 
+            lprintf_nl () "Ed2k uid available (size %d)" 
             (Array.length info.CommonUploads.shared_md4s);
       );
     end;
   if GnutellaNetwork.accept_md5ext then begin
       if !verbose then
-        lprintf "Ask for MD5EXT uid\n";
+        lprintf_nl () "Ask for MD5EXT uid";
       CommonUploads.ask_for_uid sh MD5EXT (fun sh uid ->
           let uid = Uid.to_string uid in
           declare_word uid;
           declare_file ();          
           if !verbose then
-            lprintf "Md5ext uid available: %s\n"  uid
+            lprintf_nl () "Md5ext uid available: %s"  uid
       );
     end;
 
   if GnutellaNetwork.accept_bitprint then begin
       if !verbose then
-        lprintf "Ask for BITPRINT uid\n";
+        lprintf_nl () "Ask for BITPRINT uid";
       CommonUploads.ask_for_uid sh BITPRINT (fun sh uid ->
           declare_word uid;
           declare_file ();
           if !verbose then
-            lprintf "Bitprint tree available (size %d)\n" 
+            lprintf_nl () "Bitprint tree available (size %d)" 
               (Array.length info.CommonUploads.shared_tiger);
           ()
       );
@@ -156,13 +166,13 @@
           declare_word uid;
           declare_file ();
           if !verbose then
-            lprintf "Tiger tree available (size %d)\n" 
+            lprintf_nl () "Tiger tree available (size %d)" 
               (Array.length info.CommonUploads.shared_tiger);
       );
       CommonUploads.ask_for_uid sh SHA1 (fun sh uid -> 
           let uid = Uid.to_string uid in
           if !verbose_share then
-            lprintf "Could share urn: %s\n" uid;
+            lprintf_nl () "Could share urn: %s" uid;
 (* TODO : enter this shared file in the QRT *)
           declare_word uid;
           declare_file ();          
@@ -310,8 +320,11 @@
           P.server_addr = s.server_host.host_addr;
           P.server_port = s.server_host.host_port;
           P.server_nusers = s.server_nusers;
+          P.server_max_users = s.server_maxnusers;
           P.server_nfiles = s.server_nfiles;
           P.server_name = s.server_agent;
+          P.server_version = s.server_vendor;
+          P.server_description = s.server_description;
 
         } 
         else raise Not_found
@@ -403,7 +416,7 @@
         P.client_name = if c.client_user.user_speed > 0 
                           then Printf.sprintf "%s (%d)" 
c.client_user.user_nick c.client_user.user_speed
                           else c.client_user.user_nick;
-        P.client_software = c.client_user.user_vendor;
+        P.client_software = c.client_user.user_software;
 
       }
   );
Index: mldonkey/src/networks/gnutella/gnutellaMain.ml
diff -u mldonkey/src/networks/gnutella/gnutellaMain.ml:1.22 
mldonkey/src/networks/gnutella/gnutellaMain.ml:1.23
--- mldonkey/src/networks/gnutella/gnutellaMain.ml:1.22 Tue May  9 08:40:25 2006
+++ mldonkey/src/networks/gnutella/gnutellaMain.ml      Wed May 17 08:52:44 2006
@@ -109,17 +109,26 @@
     GnutellaServers.ask_for_files ();
 
     add_session_timer enabler 60.0 (fun timer ->
+        ( try 
         GnutellaServers.ask_for_files ();
+          with e -> lprintf_nl () "ASK_FOR_FILE FAILED: %s" 
(Printexc2.to_string e));
+
+        ( try
         GnutellaServers.send_pings ();
+        with e -> lprintf_nl () "SEND_PINGS FAILED: %s" (Printexc2.to_string 
e));  
+
         (* Connect only every 60 seconds to new servers to prevent
            hammering on them. It would be better to remember the
            last time of a connection attempt to each and only
            retry after a certain time. *)
         GnutellaServers.connect_servers GnutellaServers.connect_server;
+
+
         if !should_update_shared_files then begin
             should_update_shared_files := false;
             GnutellaHandler.update_shared_files ()
-          end
+          end;
+
     );
 
     GnutellaInteractive.recover_files ();
@@ -135,7 +144,7 @@
     let sock = (UdpSocket.create (Ip.to_inet_addr !!client_bind_addr)
         !!client_port udp_handler ) in
     if !verbose then
-      lprintf "Gnutella: UDP socket bound on port %d\n" !!client_port;
+      lprintf_nl () "UDP socket bound on port %d" !!client_port;
     udp_sock := Some sock;
     
     UdpSocket.set_write_controler sock CommonGlobals.udp_write_controler;
Index: mldonkey/src/networks/gnutella/gnutellaProto.ml
diff -u mldonkey/src/networks/gnutella/gnutellaProto.ml:1.12 
mldonkey/src/networks/gnutella/gnutellaProto.ml:1.13
--- mldonkey/src/networks/gnutella/gnutellaProto.ml:1.12        Sun Dec 18 
14:50:38 2005
+++ mldonkey/src/networks/gnutella/gnutellaProto.ml     Wed May 17 08:52:44 2006
@@ -508,8 +508,8 @@
   with e ->
       if !verbose_unknown_messages then
         begin
-          lprintf "Exception in parse: %s\n" (Printexc2.to_string e);
-          dump pkt.pkt_payload;
+          lprintf_nl () "Exception in parse: %s" (Printexc2.to_string e);
+          dump_hex pkt.pkt_payload;
         end;
       { pkt with pkt_payload = UnknownReq (pkt.pkt_type,pkt.pkt_payload) }
 
@@ -778,6 +778,9 @@
       | _ -> ()          
   ) file.file_searches
   
+
+let on_send_pings () = ()
+
 let server_send_ping sock s =
   match sock with
     Connection sock ->
Index: mldonkey/src/networks/gnutella/gnutellaProtocol.ml
diff -u mldonkey/src/networks/gnutella/gnutellaProtocol.ml:1.22 
mldonkey/src/networks/gnutella/gnutellaProtocol.ml:1.23
--- mldonkey/src/networks/gnutella/gnutellaProtocol.ml:1.22     Fri May 12 
21:02:38 2006
+++ mldonkey/src/networks/gnutella/gnutellaProtocol.ml  Wed May 17 08:52:44 2006
@@ -314,13 +314,15 @@
         begin
           try 
             let (server,_) = List.assoc "server" headers in
-            c.client_user.user_vendor <- server;
+            c.client_user.user_software <- server;
+            client_must_update c;
           with Not_found -> ()
         end;
         begin
           try 
             let (useragent,_) = List.assoc "user-agent" headers in
-            c.client_user.user_vendor <- useragent;
+            c.client_user.user_software <- useragent;
+            client_must_update c;
           with Not_found -> ()
         end;
 
Index: mldonkey/src/networks/gnutella/gnutellaServers.ml
diff -u mldonkey/src/networks/gnutella/gnutellaServers.ml:1.26 
mldonkey/src/networks/gnutella/gnutellaServers.ml:1.27
--- mldonkey/src/networks/gnutella/gnutellaServers.ml:1.26      Tue May  9 
08:40:25 2006
+++ mldonkey/src/networks/gnutella/gnutellaServers.ml   Wed May 17 08:52:44 2006
@@ -129,24 +129,35 @@
 (*************************************************************************)
          
 let send_pings () =
+  if !verbose then lprintf_nl () "send_pings";
+  try
   if !new_shared_words then update_shared_words ();
   List.iter (fun s ->      
       server_send_ping s.server_sock s;
-      GnutellaProto.send_qrt_sequence s false;
+
+      (* Nothing has changed *)
+      (* GnutellaProto.send_qrt_sequence s false; *)
       
       match s.server_query_key with
       | NoUdpSupport -> 
           host_send_qkr s.server_host           
       | _ -> 
           if !verbose then
-            lprintf "Udp Support present\n";
+            lprintf_nl () "Udp Support present";
           ()
   ) !connected_servers;
   new_shared_words := false;
   Queue.iter (fun (_,h) ->
       match h.host_server with
       | None -> () | Some s -> ()
-  ) active_udp_queue
+   ) active_udp_queue;
+
+  on_send_pings ();
+
+  with e -> 
+    lprintf_nl () "send_pings: %s" (Printexc2.to_string e)
+
+
   
 (*************************************************************************)
 (*                                                                       *)
@@ -157,13 +168,14 @@
 let rec find_ultrapeer queue =
   let (next,h) = Queue.head queue in
   if next > last_time () then begin
-(*      lprintf "not ready: %d s\n" (next - last_time ()); *)
+      if !verbose then lprintf "not ready: %d s\n" (next - last_time ()); 
       raise Not_found;
     end;
   ignore (H.host_queue_take queue);    
   try
     h, true  
-  with _ -> find_ultrapeer queue
+  with _ -> 
+    find_ultrapeer queue
       
   
 (*************************************************************************)
@@ -184,6 +196,7 @@
   in
   connect h
   
+  
 (*************************************************************************)
 (*                                                                       *)
 (*                         connect_servers                               *)
@@ -191,9 +204,9 @@
 (*************************************************************************)
   
 let connect_servers connect =
-(*
-  lprintf "connect_servers %d %d\n" !nservers !!max_ultrapeers; 
-*)
+
+  if !verbose then lprintf_nl () "connect_servers c: %d n: %d max: %d\n" 
(List.length !connected_servers) !nservers !!max_ultrapeers; 
+
   (if !!max_ultrapeers > List.length !connected_servers then
       try
         let to_connect = 3 * (!!max_ultrapeers - !nservers) in
@@ -213,7 +226,7 @@
                   UdpQueryKey _ -> false
                 | _ -> true
           ) then begin
-(*            lprintf "host_send_qkr...\n"; *)
+            if !verbose then lprintf_nl () "host_send_qkr...\n"; 
             H.set_request h Udp_Connect;
             host_send_qkr h
           end
@@ -234,12 +247,12 @@
           unknown_header := !unknown_header || not (List.mem header 
GnutellaProto.known_supernode_headers)
       ) headers;
       if !unknown_header then begin
-          lprintf "Gnutella DEVEL: Supernode Header contains unknown fields\n";
-          lprintf "    %s\n" first_line;
+          lprintf_nl () "Gnutella DEVEL: Supernode Header contains unknown 
fields";
+          lprintf_nl () "    %s" first_line;
           List.iter (fun (header, (value,header2)) ->
               lprintf "    [%s] = [%s](%s)\n" header value header2;
           ) headers;
-          lprintf "Gnutella DEVEL: end of header\n";        
+          lprintf_nl () "Gnutella DEVEL: end of header";        
         end;
     end;
   
@@ -382,10 +395,12 @@
               end
       with _ -> ()
   ) headers;
+
   if !gnutella2 <> GnutellaProto.gnutella2_needed then
     failwith "Protocol not supported";
   List.iter (fun (ip,port,ultrapeer) ->
       try
+        if !verbose then lprintf_nl () "x_ultrapeers new Ultrapeer %s %d" 
(Ip.string_of_addr ip) port;
         ignore (H.new_host ip port ultrapeer)
       with e ->
           if !verbose_msg_servers then begin
@@ -420,18 +435,22 @@
     let slash_pos = String.index first_line '/' in
     let proto = String.sub first_line (slash_pos+1) (space_pos - slash_pos -1) 
in
     let code = String.sub first_line (space_pos+1) 3 in
+    let len = (String.length first_line) - (space_pos+5) in
+    let desc = String.sub first_line (space_pos+5) len in 
         
     let h = server_parse_headers first_line headers in
     
     if proto <> "0.6" then
       failwith (Printf.sprintf "Bad protocol [%s]" proto);
 
-    if not h.hsrpl_ultrapeer then
-      failwith "DISCONNECT: Not an Ultrapeer";
+    s.server_description <- desc;
     s.server_agent <- h.hsrpl_agent;
     s.server_query_key <- h.hsrpl_query_key;
     server_must_update (as_server s.server_server);
     
+    if not h.hsrpl_ultrapeer then
+      failwith "DISCONNECT: Not an Ultrapeer";
+    
     if code <> "200" then begin
         s.server_connected <- int64_time ();
         failwith  (Printf.sprintf "Bad return code [%s]" code)      
@@ -455,15 +474,16 @@
         ("Content-Encoding", "deflate") :: headers
       else headers
     in
+    (* G2 Shareaza: Sends deflated if advertising Accept-deflate even without 
the Content-Encoding header *)
     let headers =
-      if h.hsrpl_accept_deflate then
+      if h.hsrpl_accept_deflate && h.hsrpl_content_deflate then
         ("Accept-Encoding", "deflate") :: headers
       else headers
     in
 
     let msg = make_http_header "GNUTELLA/0.6 200 OK" headers in
     if !verbose_msg_servers then
-      lprintf "CONNECT REQUEST: %s\n" (String.escaped msg); 
+      lprintf_nl () "CONNECT REQUEST %s: %s\n" (Ip.to_string (peer_ip sock)) 
(String.escaped msg); 
     write_string sock msg;
     
     if h.hsrpl_content_deflate then deflate_connection sock;
@@ -475,7 +495,7 @@
     ()
   with e ->      
       if !verbose_msg_servers then
-        lprintf "DISCONNECT WITH EXCEPTION %s\n" (Printexc2.to_string e); 
+        lprintf_nl () "DISCONNECT WITH EXCEPTION %s" (Printexc2.to_string e); 
       disconnect_from_server s (Closed_for_exception e)
   
 (*************************************************************************)
@@ -563,9 +583,8 @@
               if not (Ip.valid ip ) then
                 failwith "Invalid IP for server\n";
               let port = s.server_host.host_port in
-(*        if !verbose_msg_servers then begin
-            lprintf "CONNECT TO %s:%d\n" (Ip.to_string ip) port;
-end;  *)
+              if !verbose_msg_servers then 
+                lprintf_nl () "CONNECT TO %s:%d" (Ip.to_string ip) port;
               H.set_request h Tcp_Connect;
               H.try_connect h;
 (*                h.host_tcp_request <- last_time (); *)
@@ -593,7 +612,6 @@
               
               );
               set_closer sock (fun _ error -> 
-(*            lprintf "CLOSER %s\n" error; *)
                   disconnect_from_server s error);
               set_rtimeout sock !!server_connection_timeout;
               
@@ -615,7 +633,7 @@
               in
 
                 if !verbose_msg_servers then
-                  lprintf "SENDING %s\n" (String.escaped s);
+                  lprintf_nl () "SENDING %s" (String.escaped s);
                 write_string sock s;
               with e ->
                   disconnect_from_server s
Index: mldonkey/src/networks/gnutella/gnutellaTypes.ml
diff -u mldonkey/src/networks/gnutella/gnutellaTypes.ml:1.18 
mldonkey/src/networks/gnutella/gnutellaTypes.ml:1.19
--- mldonkey/src/networks/gnutella/gnutellaTypes.ml:1.18        Sun Apr  9 
00:27:04 2006
+++ mldonkey/src/networks/gnutella/gnutellaTypes.ml     Wed May 17 08:52:44 2006
@@ -35,14 +35,17 @@
 and server = {
     server_server : server CommonServer.server_impl;
     mutable server_agent : string;
+    mutable server_description : string;
     mutable server_sock : tcp_connection;
     mutable server_ciphers : GnutellaNetwork.ciphers option;
     mutable server_nfiles : int64;
     mutable server_nusers : int64;
+    mutable server_maxnusers : int64;
     mutable server_nkb : int;
     
     mutable server_need_qrt : bool;
     mutable server_ping_last : Md4.t;
+    mutable server_last_lni : int;
     mutable server_nfiles_last : int64;
     mutable server_nkb_last : int;
     mutable server_vendor : string;
@@ -73,6 +76,7 @@
     mutable user_speed : int;
     mutable user_uid : Md4.t;
     mutable user_vendor : string;
+    mutable user_software : string;
     mutable user_nick : string;
   }
 
Index: mldonkey/src/networks/gnutella2/g2Handler.ml
diff -u mldonkey/src/networks/gnutella2/g2Handler.ml:1.18 
mldonkey/src/networks/gnutella2/g2Handler.ml:1.19
--- mldonkey/src/networks/gnutella2/g2Handler.ml:1.18   Sun Apr  9 00:27:04 2006
+++ mldonkey/src/networks/gnutella2/g2Handler.ml        Wed May 17 08:52:44 2006
@@ -74,11 +74,12 @@
 let g2_packet_handler s sock gconn p = 
   let h = s.server_host in
   if !verbose_msg_servers then begin
-      lprintf "Received %s packet from %s:%d: \n%s\n" 
+      lprintf_nl () "Received %s packet from %s:%d: %s" 
         (match sock with Connection _  -> "TCP" | _ -> "UDP")
       (Ip.string_of_addr h.host_addr) h.host_port
         (Print.print p);
     end;
+try 
   match p.g2_payload with 
   | PI -> 
       server_send sock s (packet PO []);
@@ -114,16 +115,15 @@
       List.iter (fun p ->
           match p.g2_payload with
             LNI_V v -> s.server_vendor <- v
-          | LNI_HS (leaves,_) -> s.server_nusers <- Int64.of_int leaves
+          | LNI_HS (leaves,maxleaves) -> 
+              s.server_nusers <- Int64.of_int leaves;
+              s.server_maxnusers <- Int64.of_int maxleaves;
+          | LNI_LS (files,kb) ->
+              s.server_nfiles <- files;
           | _ -> ()
       ) p.g2_children;
-      server_send sock s 
-        (packet LNI [
-          packet (LNI_NA (client_ip sock, !!client_port))  [];
-          packet (LNI_GU !!client_uid) [];
-          packet (LNI_V "MLDK") [];
-          packet (LNI_LS (zero,zero)) [];
-        ])          
+      server_must_update (as_server s.server_server);
+      server_send_lni sock s 0L 0L;
 
 (* Should we really reply to QKR if we are just a leaf ? We should probably
   only reply if we are not already using all the available bandwidth. *)
@@ -172,12 +172,27 @@
         lprintf "SEARCH RECEIVED\n";
 (* OK, two cases: search by URN/magnet, or search by keywords *)
       
-      
+      (* 
+
+      Upon receiving a query, a node should: 
+
+      Verify its authentication 
+      Send an acknowledgment if it was not received from a hub 
+      Forward it to connected nodes if necessary (detailed below) 
+      Process it locally and dispatch results 
+      *)    
+      
+      (match sock with 
+         Connection _  -> () 
+        | _ -> (
       server_send sock s (packet (QA md4)
         [
           packet (QA_TS ((int64_time ()))) [];
           packet (QA_D ((client_ip sock, !!client_port), 0)) [];
         ]);
+        )
+      );
+      
       
       let by_urn = ref false in
       let keywords = ref "" in
@@ -288,29 +303,45 @@
           match c.g2_payload with
             KHL_NH (ip,port) 
           | KHL_CH ((ip,port),_) ->
-              ignore (H.new_host (Ip.addr_of_ip ip) port Ultrapeer)
+              if !verbose then lprintf_nl () "KHL new Ultrapeer: %s %d" 
(Ip.to_string ip) port;
+              ignore (H.new_host (Ip.addr_of_ip ip) port Ultrapeer);
+              List.iter (fun c ->
+                  match c.g2_payload with
+                    KHL_NH_LS (f,kb)
+                  | KHL_CH_LS (f,kb) -> (
+                    let s = find_server (Ip.addr_of_ip ip) port in
+                    match s with 
+                      Some s -> 
+                        s.server_nfiles <- f;
+                        server_must_update (as_server s.server_server);
+                     | _ -> (if !verbose then lprintf_nl () "KHL LS: No server 
found: %s %d" (Ip.to_string ip) port)  
+                    )
+
+                  | KHL_NH_HS (l,ml) 
+                  | KHL_CH_HS (l,ml) -> (
+                    lprintf_nl () "KHL HS";
+                    let s = find_server (Ip.addr_of_ip ip) port in
+                    match s with 
+                      Some s -> 
+                        s.server_nusers <- Int64.of_int l;
+                        s.server_maxnusers <- Int64.of_int ml;
+                        server_must_update (as_server s.server_server);
+                     | _ -> (if !verbose then lprintf_nl () "KHL HS: No server 
found: %s %d" (Ip.to_string ip) port)
+                    )
+                  | KHL_NH_V v 
+                  | KHL_CH_V v -> (
+                    lprintf_nl () "KHL HS";
+                    let s = find_server (Ip.addr_of_ip ip) port in
+                    match s with 
+                      Some s -> 
+                        if s.server_vendor = "" then s.server_vendor <- v;
+                     | _ -> (if !verbose then lprintf_nl () "KHL V: No server 
found: %s %d" (Ip.to_string ip) port)
+                    )
+                  | _ -> ()
+              ) c.g2_children
           | _ -> ()
       ) p.g2_children;
-      let children = ref [] in
-      List.iter (fun s ->
-          if s.server_vendor <> "" then
-            let h = s.server_host in
-            match server_state s with
-              Connected _ ->
-                let p = packet 
-                    (KHL_CH 
-                      ((Ip.ip_of_addr h.host_addr, h.host_port), int64_time 
()))
-                  [
-                    (packet (KHL_CH_V s.server_vendor) [])
-                  ] in
-                children := p :: !children
-            | _ -> ()
-      ) !connected_servers;
-      server_send sock s (
-        packet KHL [
-          (packet (KHL_TS (int64_time ())) !children) 
-        ]
-      )
+      server_send_khl sock s;
   
   | QA suid ->
       let ss = try Some (
@@ -322,6 +353,7 @@
       List.iter (fun c ->
           match c.g2_payload with
           | QA_D ((ip,port),_) ->
+              if !verbose then lprintf_nl () "QA_D new Ultrapeer: %s %d" 
(Ip.to_string ip) port;
               let h = H.new_host (Ip.addr_of_ip ip) port Ultrapeer in
               H.connected h;
               begin
@@ -332,6 +364,7 @@
               end
 (* These ones have not been searched yet *)
           | QA_S ((ip,port),_) -> 
+              if !verbose then lprintf_nl () "QA_S new Ultrapeer: %s %d" 
(Ip.to_string ip) port;
               let h = H.new_host (Ip.addr_of_ip ip) port Ultrapeer in
               H.connected h;
           
@@ -459,9 +492,9 @@
       in
       
       if !verbose_msg_servers then begin
-          lprintf "Results Received: \n";
+          lprintf_nl () "Results Received:";
           List.iter (fun (urn, size, name, url, tags) ->
-              lprintf "    %s [size %s] %s -- %s\n"
+              lprintf "[name %s] [size %s] [urn %s] [url %s]\n"
                 name (match size with
                   None -> "??" | Some sz -> Int64.to_string sz) 
               (match urn with
@@ -553,19 +586,28 @@
       
   | _ -> 
       if !verbose_unknown_messages then
-        lprintf "g2_packet_handler: unexpected packet %s\n"
+        lprintf_nl () "g2_packet_handler: unexpected packet %s"
         (Print.print p)
 
+with e ->
+  if !verbose then
+  lprintf_nl () "g2_packet_handler exception: %s" (Printexc2.to_string e) 
+  
           
 let udp_packet_handler ip port msg = 
   let addr = Ip.addr_of_ip ip in
+  (* if !verbose then lprintf_nl () "udp_packet_handler new Ultrapeer: %s %d" 
(Ip.to_string ip) port; *)
   let h = H.new_host addr port Ultrapeer in
   H.connected h;
 (*  if !verbose_udp then
     lprintf "Received UDP packet from %s:%d: \n%s\n" 
       (Ip.to_string ip) port (Print.print msg);*)
   let s = new_server addr port in
-  s.server_connected <- int64_time ();
+
+  (match s.server_sock with 
+    Connection _ -> ()
+    | _ -> s.server_connected <- int64_time ());
+
   g2_packet_handler s NoConnection () msg
   (*
   match msg.g2_payload with
@@ -579,15 +621,27 @@
 
 let init s sock gconn = 
 (*  gconn.gconn_sock <- s.server_sock; *)
+  if !verbose then lprintf_nl () "init: %s" (Ip.to_string (peer_ip sock));
+
   connected_servers := s :: !connected_servers;
-  gconn.gconn_handler <- 
-    Reader (g2_handler (g2_packet_handler s s.server_sock));
-  server_send_ping s.server_sock s;
+  gconn.gconn_handler <- Reader (g2_handler (g2_packet_handler s 
s.server_sock));
+
+  server_send_ping s.server_sock s; (* *)
   server_send_ping NoConnection s;
   server_send NoConnection s (packet PI []);
+
+ (*  server_send (Connection sock) s (packet PI []);   *)
+
   (match s.server_query_key with
       UdpQueryKey _  -> ()
     | _ -> host_send_qkr s.server_host);
+
+
+  server_send_lni (Connection sock) s 0L 0L; (* SZ CG2Neighbour::OnRun() *)
+(*
+  server_send_khl (Connection sock) s;
+*)
+
   server_send (Connection sock) s (packet UPROC [])
 
   (*
@@ -600,13 +654,26 @@
 let udp_client_handler ip port buf =
   if String.length buf > 3 && String.sub buf 0 3 = "GND" then
     try
-      udp_packet_handler ip port
-        (parse_udp_packet ip port buf)
-    with AckPacket | FragmentedPacket -> ()
-  else
-    if !verbose then
-      lprintf "Unexpected UDP packet: \n%s\n" (String.escaped buf)
 
+      (*
+      if !verbose then begin 
+        lprintf_nl () "udp_client_handler %s %d" (Ip.to_string ip) port;
+        AnyEndian.dump_hex buf;
+      end;
+      *)
+      let x = (parse_udp_packet ip port buf) in
+      udp_packet_handler ip port x
+
+    with AckPacket | FragmentedPacket -> 
+      (* if !verbose then lprintf_nl () "ACK/FRAGMENT" *)
+
+      ()
+    
+  else
+    if !verbose then begin
+      lprintf_nl () "Unexpected UDP packet:";
+      AnyEndian.dump_hex buf;
+    end
       
 let update_shared_files () = ()
 let declare_word _ = new_shared_words := true
Index: mldonkey/src/networks/gnutella2/g2Network.ml
diff -u mldonkey/src/networks/gnutella2/g2Network.ml:1.4 
mldonkey/src/networks/gnutella2/g2Network.ml:1.5
--- mldonkey/src/networks/gnutella2/g2Network.ml:1.4    Tue Jul 12 23:11:06 2005
+++ mldonkey/src/networks/gnutella2/g2Network.ml        Wed May 17 08:52:44 2006
@@ -51,9 +51,8 @@
 let port = 6347
 let config_file = "gnutella2.ini"
 let redirectors = [
-    "http://gwc.mamarazzi.net/";;
     "http://g2cache.theg2.net/gwcache/lynnx.asp";;
-    "http://ptzldd1.ath.cx/perlgcache.cgi";;
+  "http://bazooka1.servehttp.com/g2/bazooka.php";;
   ]
 
 let options_prefix = "G2-"
@@ -67,8 +66,11 @@
    assertion failure if we add an ed2k file in
    CommonSwarming2 at line 609 "assert (not tt.t_primary);"
    ) *)
-let accept_ed2kuid = false
-let accept_bitprint = false
+
+(* Temporarily re-enabling -- better to fix the bug than to hide it (not seen 
yet) *)
+
+let accept_ed2kuid = true
+let accept_bitprint = true
 let accept_md5ext = false
   
   
Index: mldonkey/src/networks/gnutella2/g2Proto.ml
diff -u mldonkey/src/networks/gnutella2/g2Proto.ml:1.15 
mldonkey/src/networks/gnutella2/g2Proto.ml:1.16
--- mldonkey/src/networks/gnutella2/g2Proto.ml:1.15     Wed Jan 11 19:12:35 2006
+++ mldonkey/src/networks/gnutella2/g2Proto.ml  Wed May 17 08:52:44 2006
@@ -369,9 +369,8 @@
         | UPROD_XML s -> Buffer.add_string buf s; "XML"
         
         | Unknown (names, be,s) ->
-            (List.iter (fun s ->
-                  Printf.bprintf buf "/%s" s) names;
-              Printf.bprintf buf "\n DUMP: %s" (AnyEndian.sdump s));
+            (List.iter (fun s -> Printf.bprintf buf "/%s [ %s ]\n" s 
(AnyEndian.sdump s)) names;
+            Printf.bprintf buf "\nUnknown dump:\n %s" (AnyEndian.sdump s));
             "UNKNOWN"
       
       
@@ -570,7 +569,7 @@
   let size = ref (String.length payload) in
   if children <> [] then begin
       if payload <> "" then incr size;
-      List.iter (fun c -> size := !size + String.length c) children
+      List.iter (fun c -> size := !size + String.length c) children;
     end;
   let buf = Buffer.create 100 in
 (*  Buffer.add_string buf header;*)
@@ -583,32 +582,30 @@
       (len_len lsl 6) lor ((name_len-1) lsl 3)
   in
   let cb = if cb=0 then cb+4 else cb in
-(*    lprintf "encode: cb = %d size = %d len_len= %d\n" cb !size len_len; *)
+ (* if !verbose then lprintf_nl () "2encode: cb=%d size=%d len_len=%d" cb 
!size len_len; *)
   
   Buffer.add_char buf (char_of_int cb);
   if len_len = 1 then 
-    buf_int8 buf !size else
-  if len_len = 2 then 
-    LittleEndian.buf_int16 buf !size else
+    buf_int8 buf !size 
+  else if len_len = 2 then 
+    LittleEndian.buf_int16 buf !size 
+  else
     LittleEndian.buf_int24 buf !size;
   
   Buffer.add_string buf name;
   List.iter (fun c -> Buffer.add_string buf c) children;
-  if children <> [] && payload <> "" then Buffer.add_char buf '\000';
+  if children <> [] && payload <> "" then begin
+     Buffer.add_char buf '\000';
+  end;
+ 
   Buffer.add_string buf payload;
   Buffer.contents buf
   
+let g2_decode_payload names be s =
 
    
-  
-let g2_decode_payload names be s =
-(*
-  lprintf "names:"; List.iter (fun s -> lprintf "/%s" s) names;
-  lprintf "\n";
-  dump s;
-lprintf "\n";
-  *)
   try
+    
     if be then 
       (
        if !verbose then
@@ -616,6 +613,7 @@
        raise Exit
       );
     let module M = G2_LittleEndian in
+
     match names with
     
     | "TO" :: _ -> TO (get_md4 s 0)
@@ -768,17 +766,13 @@
   with e ->
       if !verbose_unknown_messages then
         begin
-          lprintf "Cannot parse: %s\n   " (Printexc2.to_string e);
-          List.iter (fun name -> lprintf "%s/" name) names;
+          lprintf_nl () "g2_decode_payload cannot parse: %s" 
(Printexc2.to_string e);
+          List.iter (fun name -> lprintf "/%s" name) (List.rev names);
           lprintf "\n%s\n" (sdump s);
         end;
       Unknown (names, be, s)
   
 let rec g2_parse name has_children bigendian s = 
-  (*
-  lprintf "g2_parse:"; List.iter (fun s -> lprintf "/%s" s) name;
-  dump s;
-*)  
   
   let len = String.length s in
   let rec iter_child pos children = 
@@ -787,8 +781,10 @@
     let cb = get_uint8 s pos in
     if cb = 0 then children, (pos+1) else
     let len_len = (cb lsr 6) land 3 in
-    if len < pos + 1 + len_len then
-      failwith "Ill formed packet (len < pos + 1 + len_len)";
+    if len < pos + 1 + len_len then begin
+      let s = Printf.sprintf "Ill formed packet (len < pos + 1 + len_len) (%d 
< %d + 1 + %d)" len pos len_len in
+      failwith s;
+    end;
     let be = cb land 2 <> 0 in
     let packet, pos = g2_extract_packet name cb s be pos len in
     iter_child pos (packet :: children)
@@ -823,6 +819,7 @@
 
 and g2_extract_packet root_name cb s be pos len =
   let len_len = (cb lsr 6) land 3 in    
+
   let pkt_len, pkt_pos = 
     match len_len, be with
     | 1, true -> get_uint8 s (pos+1), 2 
@@ -835,8 +832,16 @@
   in
   let name_len = ((cb lsr 3) land 7) + 1 in
   let msg_len = 1 + len_len + name_len + pkt_len in
-  if len < pos + msg_len then 
-    failwith "Ill formed packet (len < pos + msg_len)";
+  (*
+  if !verbose then 
+    lprintf_nl () "g2_extract_packet: be:%B len: %d len_len: %d pkt_len: %d 
pkt_pos: %d name_len: %d msg_len: %d" 
+      be len len_len pkt_len pkt_pos name_len msg_len;
+  *)
+
+  if len < pos + msg_len then begin
+    let s = Printf.sprintf "Ill formed packet (len < pos + msg_len) (%d < %d + 
%d)" len pos msg_len in
+    failwith s
+  end;
   
 (*  lprintf "One gnutella2 subpacket received\n";*)
   let name = String.sub s (pos + pkt_pos) name_len in
@@ -847,22 +852,19 @@
 let socket_send sock p =
   do_if_connected sock (fun sock ->
       let m = g2_encode p in
-(*
-  lprintf "DUMP SENT: \n";
-  dump m; *)
+      if !verbose then begin 
+        lprintf_nl () "socket_send_sock %s:" (Ip.to_string (peer_ip sock));
+        dump_hex m; 
+      end;
       write_string sock m
   )  
   
-  
 let udp_counter = ref 0
+
 let udp_header compress = 
   incr udp_counter;
-  if compress then
-    Printf.sprintf "GND\003%c%c\001\001" 
-      (char_of_int (!udp_counter land 0xff))
-    (char_of_int ((!udp_counter lsr 8) land 0xff))
-  else
-    Printf.sprintf "GND\002%c%c\001\001" 
+  let c = if compress then '\003' else '\002' in
+  Printf.sprintf "GND%c%c%c\001\001" c
       (char_of_int (!udp_counter land 0xff))
     (char_of_int ((!udp_counter lsr 8) land 0xff))
     
@@ -881,15 +883,15 @@
               let (s,ip,port,seq,times, next_time,acked) = 
                 Fifo.take udp_packet_waiting_for_ack in
               if not !acked then begin
-(*                  lprintf "UDP resend %d\n" seq; *)
+                  if !verbose then lprintf_nl () "resend_udp_packets %s %d: 
%d" (Ip.to_string ip) port seq;
                   UdpSocket.write sock false s ip port;
                   if times < 3 then 
                     Fifo.put udp_packet_waiting_for_ack (s, ip, port, seq, 
                       times+1, 
                       last_time () + 10, acked)
-                  else
-(*                    lprintf "UDP packet %d lost\n" seq *) 
-                    ()
+                  else begin
+                    if !verbose then lprintf_nl () "resend_udp_packets: packet 
%d lost" seq;
+                  end
                 end;
             end else
             raise Not_found
@@ -904,18 +906,20 @@
   | Some sock ->
       try
         let s = g2_encode msg in
-        let s = if String.length s > max_uncompress_packet then
+        let compress = String.length s > max_uncompress_packet in
+        let s = if compress then
             (udp_header true) ^ (Autoconf.zlib__compress_string s)
           else
             (udp_header false) ^ s
         in
             
         if !verbose_msg_servers then begin
-            lprintf "Sending on UDP(%d) to %s:%d:\n%s\n%s\n"
+            lprintf_nl () "Sending on UDP(%d)%s to %s:%d: %s"
               !udp_counter
+              (if compress then " (zlib)" else "")
               (Ip.to_string ip) port
-              (Print.print msg)
-            (String.escaped s);
+              (Print.print msg);
+            dump_hex s;
           end;
         Fifo.put udp_packet_waiting_for_ack 
           (s, ip, port, !udp_counter, 0, last_time () + 10, ref false);
@@ -933,7 +937,7 @@
           (char_of_int (counter land 0xff))
           (char_of_int ((counter lsr 8) land 0xff))
         in
-(*        lprintf "ack sent\n"; *)
+        (* if !verbose then lprintf_nl () "udp_send_ack: %s %d" (Ip.to_string 
ip) port; *)
         UdpSocket.write sock false s ip port
       with e ->
           lprintf "Exception %s in udp_send\n" (Printexc2.to_string e)
@@ -946,7 +950,7 @@
   match sock with
   | Connection _   ->
       if !verbose_msg_servers then
-        lprintf "Sending on TCP to %s:%d: \n%s\n" 
+        lprintf_nl () "Sending on TCP to %s:%d: %s" 
           (Ip.to_string ip) port (Print.print p);
       socket_send sock p
   | _ -> 
@@ -956,18 +960,22 @@
 
 let g2_handler f gconn sock  =
   let b = TcpBufferedSocket.buf sock in
-(*
-  lprintf "GNUTELLA2 HANDLER\n";
-AnyEndian.dump (String.sub b.buf b.pos b.len);
-  *)
+
+  if !verbose then begin
+    lprintf_nl () "g2_handler:";
+    AnyEndian.dump_hex (String.sub b.buf b.pos b.len);
+  end;
+
   try
     while b.len >= 2 do
       let s = b.buf in
-(*      lprintf "g2_tcp_packet_handler\n"; *)
+      (* if !verbose then lprintf_nl () "g2_tcp_packet_handler"; *)
       let cb = get_uint8 s b.pos in
       let len_len = (cb lsr 6) land 3 in
-      if b.len < 1 + len_len then raise Not_found;
       let be = cb land 2 <> 0 in
+      (* if !verbose then lprintf_nl () "b.len: %d < 1 + len_len: %d be: %B" 
b.len len_len be; *)
+
+      if b.len < 1 + len_len then raise Not_found;
       
       let len, pos = match len_len, be with
         | 1, true -> get_uint8 s (b.pos+1), 2 
@@ -980,9 +988,11 @@
       in
       let name_len = ((cb lsr 3) land 7) + 1 in
       let msg_len = 1 + len_len + name_len + len in
+      (* if !verbose then
+        lprintf_nl () "b.len: %d < msg_len: %d name_len: %d" b.len msg_len 
name_len; *)
       if b.len < msg_len then raise Not_found;
       
-(*      lprintf "One gnutella2 packet received\n"; *)
+      (* if !verbose then lprintf_nl () "One gnutella2 packet received";  *)
       let name = String.sub b.buf (b.pos + pos) name_len in
       let packet = String.sub b.buf (b.pos + pos + name_len) len in
       let has_children = cb land 4 <> 0 in
@@ -1032,7 +1042,12 @@
 
 let parse_udp_packet ip port buf =
 
-(*  lprintf "\n\nNEW UDP PACKET   \n%s\n" (String.escaped buf); *)
+  (*
+  if !verbose then begin
+    lprintf_nl () "NEW UDP PACKET FROM %s %d:" (Ip.to_string ip) port;
+    AnyEndian.dump_hex buf;
+  end;
+  *)
   let len = String.length buf in
   
   if len < 8 then 
@@ -1111,8 +1126,11 @@
     in
     
     
+    if !verbose then begin
+      lprintf_nl () "FULL UDP PACKET FROM %s %d:" (Ip.to_string ip) port;
+      AnyEndian.dump_hex buf;
+    end;
     
-(*    lprintf "DUMP udp packet: %s\n" (String.escaped buf); *)
     let len = String.length buf in
     try
       let pos = 0 in
@@ -1153,7 +1171,9 @@
       let has_children = cb land 4 <> 0 in
       let p = g2_parse [name] has_children be packet in
       if !verbose_msg_servers then
-        lprintf "PACKET: %s\n" (Print.print p); 
+        lprintf_nl () "UDP PACKET: %s" (Print.print p); 
+      
+(* Test Encoder *)
       
       (*
       (try
@@ -1180,7 +1200,6 @@
 
 
 
-
       p      
     
     with
@@ -1335,12 +1354,16 @@
 
   
 let host_send_qkr h =
-(*  lprintf "server_send_qkr\n"; *)
+  if !verbose then lprintf_nl () "host_send_qkr";
   host_send NoConnection h
-    (packet QKR
+    (packet QKR [])
+
+  (*
       [
       (packet (QKR_RNA (client_ip NoConnection, !!client_port)) [])
-    ])
+    ]) *)
+
+
   
 let server_send_query quid words xml_query sock s = 
 (*  lprintf "*********8 server_ask_query *********\n"; *)
@@ -1407,26 +1430,89 @@
           server_ask_uid NoConnection s ss.search_uid uid file.file_name       
 
   ) file.file_searches
   
+
 let server_send_ping sock s = 
   server_send sock s
     (packet PI [
       packet (PI_UDP (client_ip NoConnection, !!client_port))[]])
         
+let server_send_khl sock s =
+  let children = ref [] in
+  List.iter (fun s ->
+    if s.server_vendor <> "" then
+      let h = s.server_host in
+      match server_state s with
+      Connected _ ->
+        let p = packet 
+        (KHL_CH 
+          ((Ip.ip_of_addr h.host_addr, h.host_port), int64_time ()))
+           [
+            (packet (KHL_CH_V s.server_vendor) [])
+           ] in
+             children := p :: !children
+     | _ -> ()
+  ) !connected_servers;
+  server_send sock s (
+    packet KHL [
+      (packet (KHL_TS (int64_time ())) !children) 
+    ]
+  )
+        
+let server_send_lni sock s files kb = 
+  
+  if s.server_last_lni + 60 < BasicSocket.last_time () then begin 
+  s.server_last_lni <- BasicSocket.last_time ();
+  server_send sock s 
+  (packet LNI [
+     packet (LNI_NA (client_ip sock, !!client_port))  [];
+     packet (LNI_GU !!client_uid) [];
+     packet (LNI_V "MLDK") [];
+     packet (LNI_LS (files, kb)) [];
+   ])          
+  end 
+
+let on_send_pings () = 
+  List.iter (fun s ->      
+    server_send_lni s.server_sock s 0L 0L;
+   ) !connected_servers
+
 let server_send_push s uid uri = ()
 
+let bitv_to_string bitv =
+  let s = String.make ((Bitv.length bitv) / 8) '\000' in
+  Bitv.iteri_true (fun i ->
+      let pos = i / 8 in
+      let bit = 7 - (i mod 8) in
+      let x = (1 lsl bit) in
+      s.[pos] <- char_of_int ( (int_of_char s.[pos]) lor x );
+  ) bitv;
+  s
     
+(* http://www.gnutella2.com/index.php/Query_Hash_Tables *)
 let create_qrt_table words table_size =
-  let table_length = 1 lsl (table_size-3) in
+  let table_length = (1 lsl table_size) in
+  let bitv = Bitv.create table_length true in
+  List.iter (fun w ->
+      let pos = bloom_hash w table_size in
+      let pos = Int64.to_int pos in
+      Bitv.set bitv pos false;
+      if !verbose then lprintf "ADDING WORD %s at pos %d\n" w pos;
+  ) words;
+  bitv_to_string bitv
+    
+let create_qrt_table2 words table_size =
+  let table_length = 1 lsl (table_size-3) in (* index_out_of_bounds *)
   if !verbose then
     lprintf "table_length %d\n" table_length;
+
   let array = Array.create table_length 0 in
   List.iter (fun w ->
       let pos = bloom_hash w table_size in
       let pos = Int64.to_int pos in
       if !verbose then
-        lprintf "ADDING WORD %d\n" pos; 
+        lprintf "ADDING WORD at pos %d\n" pos; 
       let bit = (1 lsl (pos land 7)) in
-      array.(pos) <- array.(pos) lor bit;
+      array.(pos) <- array.(pos) lor bit; (* index_out_of_bounds *)
   ) words;
   let string_size = table_length in
   let table = String.create  string_size in
@@ -1443,6 +1529,7 @@
   let table_size = 20 in
 (*  let infinity = 7 in
   let table_length = 1 lsl table_size in *)
+
   server_send_qrt_reset s;
   
   if !cached_qrt_table = "" then 
Index: mldonkey/src/networks/gnutella2/g2Redirector.ml
diff -u mldonkey/src/networks/gnutella2/g2Redirector.ml:1.9 
mldonkey/src/networks/gnutella2/g2Redirector.ml:1.10
--- mldonkey/src/networks/gnutella2/g2Redirector.ml:1.9 Fri May  5 22:08:01 2006
+++ mldonkey/src/networks/gnutella2/g2Redirector.ml     Wed May 17 08:52:44 2006
@@ -48,13 +48,15 @@
           begin
             try
               let ip, port = String2.cut_at ip_port ':' in
-                ignore (H.new_host
-                 (Ip.addr_of_string ip) (int_of_string port) Ultrapeer)
+              if !verbose then lprintf_nl () "Received host %s:%s" ip port;
+                ignore (H.new_host (Ip.addr_of_string ip) (int_of_string port) 
Ultrapeer)
             with _ -> ()
           end
       | "u" :: url :: _ ->
-          if not (List.mem url !!redirectors) then
-            redirectors =:= url :: !!redirectors
+          if not (List.mem url !!redirectors) then begin
+            redirectors =:= url :: !!redirectors;
+            if !verbose then lprintf_nl () "Received redirector %s" url
+          end
       | _ -> ()
   ) lines
 
@@ -78,12 +80,12 @@
               H.req_user_agent = get_user_agent ();
             } in
           if !verbose then
-            lprintf "Connecting G2 redirector\n";
+            lprintf_nl () "Connecting G2 redirector: %s" url;
           H.wget r g2_parse_redirector_page    
       ) !!redirectors;
     end else begin
       if !verbose then
-        lprintf "redirector recontacted in %d seconds \n"
+        lprintf_nl () "redirector recontacted in %d seconds"
           (!next_redirector_access - last_time ())
     end
     
Index: mldonkey/src/networks/gnutella2/g2Supernode.ml
diff -u mldonkey/src/networks/gnutella2/g2Supernode.ml:1.1 
mldonkey/src/networks/gnutella2/g2Supernode.ml:1.2
--- mldonkey/src/networks/gnutella2/g2Supernode.ml:1.1  Mon Nov  1 11:23:02 2004
+++ mldonkey/src/networks/gnutella2/g2Supernode.ml      Wed May 17 08:52:44 2006
@@ -340,7 +340,7 @@
         (make_handshake_request_headers req)
     in
     if !verbose_msg_servers then
-      lprintf "SENDING %s\n" (String.escaped msg);
+      lprintf_nl () "SENDING %s\n" (String.escaped msg);
     
     write_string sock msg;
     set_gnutella_sock sock !verbose_msg_servers
Index: mldonkey/src/utils/cdk/printf2.ml
diff -u mldonkey/src/utils/cdk/printf2.ml:1.15 
mldonkey/src/utils/cdk/printf2.ml:1.16
--- mldonkey/src/utils/cdk/printf2.ml:1.15      Sun Feb  5 13:19:14 2006
+++ mldonkey/src/utils/cdk/printf2.ml   Wed May 17 08:52:44 2006
@@ -127,7 +127,7 @@
     | 'f' | 'e' | 'E' | 'g' | 'G' ->
         Obj.magic(fun (f: float) ->
           cont_s (format_float (extract_format fmt pos i widths) f) (succ i))
-    | 'b' ->
+    | 'b' | 'B' ->
         Obj.magic(fun (b: bool) ->
           cont_s (string_of_bool b) (succ i))
     | 'a' ->
Index: mldonkey/src/utils/net/anyEndian.ml
diff -u mldonkey/src/utils/net/anyEndian.ml:1.8 
mldonkey/src/utils/net/anyEndian.ml:1.9
--- mldonkey/src/utils/net/anyEndian.ml:1.8     Sun Oct 16 20:42:55 2005
+++ mldonkey/src/utils/net/anyEndian.ml Wed May 17 08:52:44 2006
@@ -88,50 +88,6 @@
 (*    lprintf "exception in get_md4 %d s=%s\n" pos (String.escaped s); *)
     raise e
 
-      
-let dump_ascii s =
-  let len = String.length s in
-  lprintf "ascii: [";
-  for i = 0 to len - 1 do
-    let c = s.[i] in
-    let n = int_of_char c in
-    if n > 31 && n < 127 then
-      lprintf " %c" c
-    else
-      lprintf "(%d)" n
-  done;
-  lprintf "]\n"
-      
-let dump s =
-  let len = String.length s in
-  lprintf "ascii: [";
-  for i = 0 to len - 1 do
-    let c = s.[i] in
-    let n = int_of_char c in
-    if n > 31 && n < 127 then
-      lprintf " %c" c
-    else
-      lprintf "(%d)" n
-  done;
-  lprintf "]\n";
-  lprintf "dec: [";
-  for i = 0 to len - 1 do
-    let c = s.[i] in
-    let n = int_of_char c in
-    lprintf "(%d)" n            
-  done;
-  lprintf "]\n"
-
-let dump_sub s pos len =
-  lprintf "dec: [";
-  for i = 0 to len - 1 do
-    let c = s.[pos+i] in
-    let n = int_of_char c in
-    lprintf "(%d)" n            
-  done;
-  lprintf "]\n\n"
-
-  
 let buf_string8 buf s =
   buf_int8 buf (String.length s);
   Buffer.add_string buf s
@@ -140,8 +96,42 @@
   let len = get_uint8 s pos in
   String.sub s (pos+1) len, pos+1+len
 
+let bdump_hex buf s =
+  let len = String.length s in
+  let asc = Buffer.create 16 in
+  let hex = Buffer.create 50 in
+  let rec iter i =
+    if i = len then begin
+      if Buffer.length asc > 0 then begin
+        let fill = String.make (50 - (Buffer.length hex )) ' ' in
+        Printf.bprintf buf "%s%s|%-16s|\n" (Buffer.contents hex) fill 
(Buffer.contents asc);
+      end
+    end
+    else begin
+      if i mod 16 = 0 then begin
+        if i > 0
+          then Printf.bprintf buf "%s|%-16s|\n" (Buffer.contents hex) 
(Buffer.contents asc);
+        Printf.bprintf buf "%08x: " i;
+        Buffer.clear asc;
+        Buffer.clear hex;
+      end;
+      let c = s.[i] in
+      let ioc = int_of_char c in
+      let bc = if ioc > 32 && ioc < 127 then c else '.' in
+      Buffer.add_char asc bc;
+      Buffer.add_string hex (Printf.sprintf "%02x " ioc);
+      if (i + 1) mod 8 = 0 then Buffer.add_char hex ' ';
+      iter (i + 1);
+    end;
+  in
+  iter 0
         
-let bdump buf s =
+let dump_hex s =
+  let buf = Buffer.create 1000 in
+  bdump_hex buf s;
+  lprintf "%s" (Buffer.contents buf) 
+      
+let bdump_ascii buf s =
   let len = String.length s in
   Printf.bprintf buf "ascii: [";
   for i = 0 to len - 1 do
@@ -152,7 +142,15 @@
     else
       Printf.bprintf buf "(%d)" n
   done;
-  Printf.bprintf buf "]\n";
+  Printf.bprintf buf "]\n"
+
+let dump_ascii s =
+  let buf = Buffer.create 1000 in
+  bdump_ascii buf s;
+  lprintf "%s" (Buffer.contents buf)
+      
+let bdump_dec buf s = 
+  let len = String.length s in
   Printf.bprintf buf "dec: [";
   for i = 0 to len - 1 do
     let c = s.[i] in
@@ -161,7 +159,39 @@
   done;
   Printf.bprintf buf "]\n"
         
+let dump_dec s =
+  let buf = Buffer.create 1000 in
+  bdump_dec buf s;
+  lprintf "%s" (Buffer.contents buf)
+
+let dump s =
+  dump_ascii s;
+  dump_dec s;
+  dump_hex s
+
+let bdump_sub buf s pos len =
+  Printf.bprintf buf "dec: [";
+  for i = 0 to len - 1 do
+    let c = s.[pos+i] in
+    let n = int_of_char c in
+    Printf.bprintf buf "(%d)" n            
+  done;
+  Printf.bprintf buf "]\n\n"
+
+let dump_sub s pos len =
+  let buf = Buffer.create 1000 in
+  bdump_sub buf s pos len;
+  lprintf "%s" (Buffer.contents buf)
+
+let bdump buf s =
+  bdump_ascii buf s;
+  bdump_dec buf s;
+  bdump_hex buf s
+
 let sdump s =
   let buf = Buffer.create 1000 in
   bdump buf s;
   Buffer.contents buf
+
+let dump s =
+  lprintf "%s" (sdump s)
Index: mldonkey/src/utils/net/basicSocket.ml
diff -u mldonkey/src/utils/net/basicSocket.ml:1.29 
mldonkey/src/utils/net/basicSocket.ml:1.30
--- mldonkey/src/utils/net/basicSocket.ml:1.29  Fri Jan  6 22:32:36 2006
+++ mldonkey/src/utils/net/basicSocket.ml       Wed May 17 08:52:44 2006
@@ -262,7 +262,7 @@
 let close t msg =
   if t.fd <> dummy_fd then begin
       if !debug then
-          lprintf_nl "[bS] CLOSING: %s" (sprint_socket t);
+          lprintf_nl "[bS] CLOSING: %s (%s)" (sprint_socket t) 
(string_of_reason msg);
       (try
           Unix.close t.fd;
           with _ -> ());
Index: mldonkey/src/utils/net/ip.ml
diff -u mldonkey/src/utils/net/ip.ml:1.21 mldonkey/src/utils/net/ip.ml:1.22
--- mldonkey/src/utils/net/ip.ml:1.21   Sun May  7 16:05:37 2006
+++ mldonkey/src/utils/net/ip.ml        Wed May 17 08:52:44 2006
@@ -299,7 +299,7 @@
   );
 
   BasicSocket.add_infinite_timer 0.1 (fun _ ->
-    let current_time = Unix.gettimeofday () in
+    (* let current_time = Unix.gettimeofday () in *)
     while true do
       match !current_job with
       | None ->




reply via email to

[Prev in Thread] Current Thread [Next in Thread]