mldonkey-commits
[Top][All Lists]
Advanced

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

[Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet


From: mldonkey-commits
Subject: [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyOvernet.ml
Date: Mon, 20 Jun 2005 14:45:28 -0400

Index: mldonkey/src/networks/donkey/donkeyOvernet.ml
diff -u mldonkey/src/networks/donkey/donkeyOvernet.ml:1.28 
mldonkey/src/networks/donkey/donkeyOvernet.ml:1.29
--- mldonkey/src/networks/donkey/donkeyOvernet.ml:1.28  Fri May 13 21:15:47 2005
+++ mldonkey/src/networks/donkey/donkeyOvernet.ml       Mon Jun 20 18:45:27 2005
@@ -328,15 +328,12 @@
       
 (********************************************************************
 
-
                      STATIC MEMORY
-  
 
 *********************************************************************)
 
-    let max_peers_per_bucket = 20
-    let max_peers_per_prebucket = 100
-      
+let max_peers_per_bucket = 20
+let max_peers_per_prebucket = 100
 let min_peers_per_block = 16 (* was 2 *)
 let min_peers_before_connect = 5
 let max_searches_for_publish = 5
@@ -348,64 +345,10 @@
 
 (********************************************************************
 
-
                            OPTIONS
-  
 
 *********************************************************************)
 
-  (*
-module PeerOption = struct
-    
-    let value_to_peer v = 
-      match v with
-        SmallList [md4; ip; port; kind]
-      | List [md4; ip; port; kind] ->
-          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 ->
-          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_store_size = 
   define_option overnet_section [Proto.options_section_name; "store_size"] 
"Size of the filename storage used to answer queries" 
     int_option 2000
@@ -469,21 +412,7 @@
     "(internal)"
     int_option 0
 
-  (*
-let _ = 
-  Options.set_string_wrappers overnet_exclude_peers
-    (fun list ->
-      List.fold_left
-        (fun s ip ->
-          Printf.sprintf "%s %s" (Ip.to_string ip) s
-        ) "" list
-    )
-    (fun s ->
-      let list = String2.tokens s in
-      List.map (fun ip -> Ip.of_string ip) list
-    )
-*)
-    
+
 (********************************************************************
 
 
@@ -494,7 +423,6 @@
 
 let connected_peers = ref 0
 
-  
 module LimitedList = struct
     
     type key = Ip.t * int
@@ -905,165 +833,6 @@
   in
   iter 0;
   !list
-  
-(*  
-let find_oldest_peer hashtbl =
-  let md4 = ref Md4.null and 
-      time = ref (last_time () ) in 
-  Hashtbl.iter ( fun a b -> 
-    if b.peer_last_msg < !time then 
-      begin
-       md4 := a;
-       time := b.peer_last_msg;
-      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
-  else ip
-
-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)
-  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
-                  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
-          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;
-(*            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
-      else
-      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)
-        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 (my_peer ())))
-  global_dist;
-  List.iter
-    (fun a -> 
-      udp_send a.peer_ip a.peer_port
-        (OvernetPublicize(my_peer ())))
-  local_dist
-
-(* If one peer block is running low, try to get new peers using Connect *)
-let find_new_peers () =
-  try
-    for i=0 to 255 do 
-      if global_peers_size.(i) < min_peers_before_connect then raise Not_found;
-    done
-  with _ -> 
-      begin
-        if !verbose_overnet then
-          lprintf "FINDING NEW PEERS\n";
-        
-        List.iter (fun a -> udp_send a.peer_ip a.peer_port 
-              (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) && 
-    not (private_address p.peer_ip) then
-    begin
-      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
-          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 dd1>distance then 
-            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"
-               (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"
-               (Md4.to_string s.search_md4) (Md4.to_string distance);*)
-            end
-        end
-      else 
-        begin
-          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 [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
@@ -1086,25 +855,9 @@
       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);
   if !verbose_overnet then lprintf () "create_search done\n";
@@ -1116,115 +869,6 @@
   let search = create_search (KeywordSearch s) 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
-    
-    try
-      let (tags, file_time) = XorMd4Map.find file_md4 !files in
-      file_time := time
-    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 *)
-          
-          let (max_elt, max_md4) as e = 
-            XorMd4Set.min_elt !published_keyword_set in
-          if distance < max_elt then begin
-              published_keyword_set := XorMd4Set.remove e 
-                !published_keyword_set;
-              Hashtbl.remove published_keyword_table max_md4;
-              decr published_keyword_size;
-              true
-            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);
-          incr published_keyword_size;
-          Hashtbl.add published_keyword_table kw_md4 
-            (ref 1, ref (XorMd4Map.add file_md4 (file_tags, ref time) 
-              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
-    let n_sent = ref 0 in
-    try
-      XorMd4Map.iter
-        (fun file_md4 (file_tags, time) ->
-          incr n_sent;
-          if !n_sent > min then
-            udp_send ip port (OvernetSearchResult(kw_md4,file_md4,file_tags));
-          if !n_sent > max then raise Exit)
-        !files
-    with _ -> ()
-  with _ ->
-    udp_send ip port (OvernetNoResult(kw_md4))
-
-      *)
-
-  (*
-  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
-      begin
-        let s = Hashtbl.find overnet_searches file.file_md4 in
-        s.search_publish_file <- true;     
-      end
-    with _ ->
-        begin
-          let s = create_search (FileSearch file) file.file_md4 in
-          s.search_publish_file <- true;
-          files_to_be_published := s :: !files_to_be_published;
-        end
-  end;
-  if !!overnet_search_keyword then 
-    begin
-      let index_string w =
-        let s = create_keyword_search w in
-        s.search_publish_files <- file :: s.search_publish_files;
-        files_to_be_published := s :: !files_to_be_published;   
-      in
-      List.iter index_string (String2.stem (file_best_name file))
-    end
-    
-let recover_all_files () =
-  List.iter (fun file ->
-      if file_state file = FileDownloading then
-        recover_file file          
-  ) !DonkeyGlobals.current_files
-  
-    *)
-
 let ip_of_udp_packet p =
   match p.UdpSocket.udp_addr with
     Unix.ADDR_INET (inet, port) ->
@@ -1236,40 +880,6 @@
     Unix.ADDR_INET (inet, port) -> port
   | _ -> assert false
 
-      (*
-let rec get_filename tags =
-  match tags 
-  with 
-    [] -> ""
-  | tag :: tags ->
-      begin
-        if tag.tag_name = "filename"
-        then 
-          match tag.tag_value with 
-          | String s -> s
-          | _ -> ""
-        else get_filename tags 
-      end
-      
-let check_filename q tags =
-  let filename = get_filename tags in 
-  let rec check_iter q =
-    match q with
-      QAnd (q1, q2) -> (check_iter q1) && (check_iter q2)
-    | QOr (q1, q2) ->  (check_iter q1) || (check_iter q2)
-    | QAndNot (q1, q2) -> (check_iter q1) && (not (check_iter q2))
-    | QHasWord s -> 
-        begin
-          if !verbose_overnet then begin
-              lprintf "%s CONTAINS[%s]" filename s; 
-              lprint_newline ();
-            end;
-         true
-       end
-    | _ -> true
-  in
-  check_iter q
-*)
 
 let new_peer_message p = 
 (*  lprintf () "*** Updating time for %s:%d\n" (Ip.to_string p.peer_ip) 
p.peer_port; *)
@@ -1386,7 +996,7 @@
             end
       ) !overnet_searches
   
-  | OvernetSearchSourcesResults (md4, peers) ->      
+  | OvernetSearchSourcesResults (md4, peers) ->
       List.iter (fun s -> 
           if s.search_md4 = md4 then begin
               s.search_nresults <- s.search_nresults + 1;
@@ -1449,526 +1059,9 @@
                 (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 
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 p.peer_ip other_ip) in
-(* verificare per le Indirect_location *)
-
-          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 p.peer_md4 c;
-          
-          add_global_peer p;
-          
-          udp_send p.peer_ip p.peer_port (OvernetConnectReply([my_peer ()]));
 
-(* send the PUBLICIZED message *)
-          udp_send other_ip p.peer_port (OvernetPublicized (Some (my_peer ())))
-        
-        end
-  
-  | OvernetConnectReply peers ->
-      begin
-        let peers = List.rev peers in
-        match peers with
-          peer :: tail ->
-            if !verbose_overnet && debug_client other_ip then
-              lprintf "CONNECT REPLY: sender IP was %s\n" (Ip.to_string 
peer.peer_ip);
-            peer.peer_ip <- (change_private_address peer.peer_ip other_ip);
-            
-            peer.peer_last_msg <- last_time ();
-            add_global_peer peer;
-
-(* everything else sould be added *)       
-            List.iter add_global_peer tail;
-            
-            Hashtbl.iter 
-              (fun _ search -> add_search_peer search peer) 
-            overnet_searches;
-            
-            Hashtbl.iter 
-              (fun _ search -> List.iter (fun a -> add_search_peer search a) 
tail) 
-            overnet_searches;
-        
-        | _ -> ()
-      end
-  
-  | OvernetPublicize p ->
-      begin
-        if !verbose_overnet && debug_client other_ip then
-          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 p.peer_port (OvernetPublicized (Some (my_peer ())))
-      end      
-  
-  | OvernetPublicized p -> 
-      if !verbose_overnet && debug_client other_ip then
-        lprintf "PUBLICIZED\n"; 
-  
-  | OvernetSearch (nb, md4) -> 
-      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 peers = (get_local_distribution md4 nb) in
-          begin
-            if !verbose_overnet && debug_client other_ip then
-              lprintf "SEARCH (%s)\n" (Md4.to_string md4); 
-            udp_send s_ip s_port (OvernetSearchReply(md4,peers)); 
-          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
-          if !verbose_overnet && debug_client other_ip then
-            lprintf "PUBLISH (%s): r_md4 = %s\n" (Md4.to_string md4) 
(Md4.to_string r_md4); 
-          store_published_file md4 r_md4 r_tags (last_time ());
-          udp_send other_ip other_port (OvernetPublished md4)
-        end
-      else
-      if !verbose_overnet && debug_client other_ip then
-        lprintf "NOT PUBLISH (%s): r_md4 = %s\n" (Md4.to_string md4) 
(Md4.to_string r_md4); 
-  
-  | OvernetGetSearchResults (md4, kind, min, max) ->
-      if !verbose_overnet && debug_client other_ip then
-        lprintf "GET SEARCH RESULT for %s %d %d %d\n" (Md4.to_string md4) kind 
min max;
-      get_results_from_query other_ip other_port md4 min max
-(*    udp_send other_ip other_port (OvernetNoResult md4) *)
-  
-  | OvernetPublished (md4) ->
-      if !verbose_overnet && debug_client other_ip then
-        lprintf "PUBLISHED (%s)\n" (Md4.to_string md4)
-  
-  | OvernetSearchReply (md4, peers) ->
-      begin
-        try
-          begin
-            let s = Hashtbl.find overnet_searches md4 in
-            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                  
-                
-                begin
-                  try
-                    let sender = Hashtbl.find s.search_known_peers s_addr in
-                    let distance = Md4.xor sender.peer_md4 md4 in
-                    
-              if !verbose_overnet && sender.peer_md4 = md4 then
-                lprintf "Client %s has found itself!\n" (Md4.to_string md4);
-
-                    sender.peer_last_msg <- last_time();         
-                    if XorSet.mem (distance, sender) s.search_asked_peers then
-                      begin
-                        s.search_asked_peers <- XorSet.remove (distance, 
sender) s.search_asked_peers;
-                        s.search_done_peers <- XorSet.add (distance, sender) 
s.search_done_peers;
-                      end
-                    else
-                      lprintf "BUG: This peer (%s) returned results but cannot 
be found !\n" (Md4.to_string md4);
-                    
-                    if !verbose_overnet && debug_client other_ip then
-                      lprintf "SEARCH REPLY(%s): got answer\n" (Md4.to_string 
md4);
-                  with _ -> (* Cannot find this peer to update his last_msg, 
this is not an issue*)
-                      ()
-                end
-              
-              with _ -> ()
-(* Cannot find sender IP... However, we can still use his results *)
-            end;
-            
-            List.iter (fun p -> add_search_peer s p; add_global_peer p) peers
-          end
-        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);
-  
-  | OvernetSearchResult (md4, r_md4, r_tags) ->      
-      begin
-        try
-          let s = Hashtbl.find overnet_searches md4 in
-          s.search_nresults <- s.search_nresults + 1;
-
-(* 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); 
-          
-          match s.search_kind with
-            FileSearch file ->
-              
-              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 (); *)
-                                  if Ip.valid ip && ip_reachable ip 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
-                              | _ ->
-                                  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
-  
-  | OvernetFirewallConnectionACK(md4) -> 
-      if !verbose_overnet && debug_client other_ip then
-        lprintf "OVERNET FIREWALL ACK for md4=%s" (Md4.to_string md4)
-  
-  | OvernetFirewallConnectionNACK(md4) ->
-      if !verbose_overnet && debug_client other_ip then
-        lprintf "OVERNET FIREWALL NACK for md4=%s" (Md4.to_string md4)
-
-(* send the answer *)
-  | OvernetGetMyIP other_port ->
-      if !verbose_overnet && debug_client other_ip then 
-        lprintf "GET MY IP (port=%d)\n" other_port;
-(* FIXME : should be able to flush the UDP buffer*)
-      udp_send other_ip other_port (OvernetGetMyIPResult other_ip);
-      udp_send other_ip other_port OvernetGetMyIPDone
-  
-  | OvernetGetMyIPResult(ip) ->
-      if !verbose_overnet && debug_client other_ip then 
-        lprintf "GET MY IP RESULT (%s)\n" (Ip.to_string ip)
-  
-  | OvernetGetMyIPDone ->
-      if !verbose_overnet && debug_client other_ip then 
-        lprintf "GET MY IP DONE\n"
-  
-  | OvernetPeerNotFound peer -> 
-      begin
-        if !verbose_overnet && debug_client other_ip then 
-          lprintf "Peer NOT FOUND %s (%s:%d) kind: %d (msg 33)\n"
-            (Md4.to_string peer.peer_md4) (Ip.to_string peer.peer_ip) 
peer.peer_port peer.peer_kind;
-        let md4 = peer.peer_md4 in
-        let i = Md4.up md4 in
-        if Hashtbl.mem !!global_peers.(i) md4
-        then begin
-            Hashtbl.remove !!global_peers.(i) md4;
-            global_peers_size.(i) <- global_peers_size.(i) - 1;
-            if global_peers_size.(i) < min_peers_per_block then
-              find_new_peers ()
-          end
-      end
-    
-  | 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;
-      lprintf "\tPeer: %s\n\tIP: %s\n\tPort: %d\n\tKind: %d\n\n"
-        (Md4.to_string peer.peer_md4) (Ip.to_string peer.peer_ip) 
peer.peer_port peer.peer_kind
-  
-  | _ -> 
-      lprintf "FIXME: UNUSED MESSAGE from %s:%d\n" (Ip.to_string other_ip) 
other_port;
-      raise Not_found
-      
-    
-let query_min_peer s =
-  try
-    let (d,p) as e = XorSet.min_elt s.search_not_asked_peers in
-    let nb = 4 in
-    if !verbose_overnet then 
-      begin
-        lprintf "SEARCH(%s): Query a not asked peer at distance %s"
-          (Md4.to_string s.search_md4) (Md4.to_string d); 
-        lprint_newline ();
-      end;
-    s.search_not_asked_peers <- XorSet.remove e s.search_not_asked_peers;
-    s.search_asked_peers <- XorSet.add e s.search_asked_peers;
-    s.search_last_insert <- last_time();
-    
-    udp_send p.peer_ip p.peer_port  (OvernetSearch (nb, s.search_md4)); (* was 
10 *)
-    
-    begin
-      match s.search_kind with
-        KeywordSearch sss ->
-          if sss <> [] then
-            udp_send p.peer_ip p.peer_port
-              (OvernetGetSearchResults (s.search_md4,0,0,100));         
-          List.iter 
-            (fun file ->
-              if !verbose_overnet (* && debug_client p.peer_ip *) then 
-                lprintf "*** Publishing keyword %s of file %s to %s:%d \n"
-                  (Md4.to_string s.search_md4) (Md4.to_string file.file_md4)
-                (Ip.to_string p.peer_ip) p.peer_port;
-              udp_send p.peer_ip p.peer_port 
-                (OvernetPublish (s.search_md4, file.file_md4, 
-                  DonkeyProtoCom.tag_file file))
-          ) s.search_publish_files
-      | FileSearch file ->
-          if file_state file = FileDownloading then
-            udp_send p.peer_ip p.peer_port
-              (OvernetGetSearchResults (s.search_md4,0,0,100));
-          if s.search_publish_file then
-            begin
-              if !verbose_overnet (* && debug_client p.peer_ip *) then 
-                lprintf "*** Publishing my file %s to %s:%d\n"
-                  (Md4.to_string s.search_md4) 
-(*                (Md4.to_string p.peer_md4) *)
-                (Ip.to_string p.peer_ip) p.peer_port;
-              udp_send p.peer_ip p.peer_port 
-              (OvernetPublish (s.search_md4, !!overnet_md4,
-                  [{
-                      tag_name = "loc";
-                      tag_value = String (
-                        Printf.sprintf "bcp://%s:%d"
-                          (Ip.to_string (client_ip None))
-                        (!!overnet_port)                                     
-                      )
-                    }]
-                )
-              )
-            end
-    end
-  with _ -> ()
-      *)
-      
 let query_next_peers () =
   List.iter (fun s ->
       let nresults = match s.search_kind with
@@ -1998,37 +1091,6 @@
       iter 128 2
       
   ) !overnet_searches
-  
-(*
-let do_publish_shared_files () =
-  let nb_searches = ref 0 in
-  Hashtbl.iter (fun _ _ -> incr nb_searches) overnet_searches;
-  let launch () = 
-    match !files_to_be_published with 
-      [] -> () 
-    | file::tail -> 
-        begin
-          if !verbose_overnet then
-            lprintf "OVERNET: I am publishing file %s\n" (Md4.to_string 
file.search_md4);
-          files_to_be_published := tail;
-          Hashtbl.add overnet_searches file.search_md4 file;
-        end          
-  in
-  if !nb_searches <= max_searches_for_publish then
-    begin
-      if !verbose_overnet then lprintf "OVERNET: currently %d searches\n" 
!nb_searches;
-      for i=1 to 5 do
-        launch ()
-      done
-    end
-    
-let publish_shared_files () = 
-  match !files_to_be_published with 
-    [] -> 
-      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
@@ -2216,45 +1278,7 @@
               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
@@ -2269,15 +1293,6 @@
             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
@@ -2290,17 +1305,6 @@
             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
-      )
-
-*)
   end
   
 let disable () = 
@@ -2322,12 +1326,7 @@
   );
   option_hook overnet_query_peer_period 
     (fun _ -> if !!overnet_query_peer_period < 5. then 
overnet_query_peer_period =:= 5.)
-  
-  (*
-let connected_peers () =
-  List.map (fun p -> p.peer_ip, p.peer_port)  (get_uniform_distribution ())
 
-  *)
 let load_contact_dat filename =
   try
     let module S = DonkeyOvernetImport.Peer in
@@ -2355,11 +1354,11 @@
       bootstrap ip port;
       true
   | _ -> false
-      
+
 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) ->
@@ -2445,22 +1444,6 @@
               done;
               if o.conn_output = HTML then
                 Printf.bprintf buf "\\</table\\>\\</div\\>\n";
-              
-              (*
-            (XorSet.cardinal s.search_not_asked_peers)
-            (XorSet.cardinal s.search_asked_peers)
-            (XorSet.cardinal s.search_done_peers)
-            s.search_hits
-              s.search_nresults
-              (match s.search_kind, s.search_publish_files with
-              | KeywordSearch [], _ :: _  -> "publish "
-              | KeywordSearch (_ :: _) , []  -> "query "
-              | KeywordSearch (_ :: _), _ :: _  -> "publish+query "
-              | KeywordSearch [], []  -> "??? "
-              | FileSearch _, _ -> "")
-            (if s.search_publish_file then "file_publish " else "")
-;
-  *)
         ) !overnet_searches;
         if o.conn_output = HTML then
           Printf.bprintf buf "\\</div\\>\n";
@@ -2506,29 +1489,7 @@
         
         ""
     ), ":\t\t\t\tdump the Overnet/Kademlia File Store";
-    
 
-      (*
-    "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
-          [
-          string_tag "filename" "john" ;
-          int_tag "size" (Random.int 200);
-        ] 0;
-        ""
-    ), ":\t\t\t\t\t(not documented)";
-    
-    "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
           let rec hex_to_msg h =
@@ -2570,18 +1531,8 @@
           ) !!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 (<md4>)";
-*)
-      
+      ), ":\t\t\t\tprint boot peers";
+
   ]);
   ()
   
@@ -2623,7 +1574,6 @@
         FileSearch f when f == file -> false
       | _ -> true) !overnet_searches
 
-      
 let _ =    
   CommonWeb.add_web_kind web_info (fun _ filename ->
       let s = File.to_string filename in
@@ -2662,4 +1612,22 @@
             lprintf () "%d PEERS ADDED\n" n;
         );
     end;
+
+(*************************************************************
+
+Define a function to be called when the "mem_stats" command
+  is used to display information on structure footprint.
+  
+**************************************************************)
+
+  Heap.add_memstat "DonkeyOvernet" (fun level buf ->
+      Printf.bprintf buf "Boot peers: %d\n" (LimitedList.length !!boot_peers);
+      update_buckets ();
+      Printf.bprintf buf "%d buckets with %d peers\n"
+            !n_used_buckets !connected_peers;
+      Printf.bprintf buf "Overnet / Kademlia statistics:\n"; 
+      Printf.bprintf buf "  Search hits: %d\n" !search_hits;
+      Printf.bprintf buf "  Source hits: %d\n" !source_hits;
+  );
 end
+




reply via email to

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