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/donkeyServers


From: mldonkey-commits
Subject: [Mldonkey-commits] Changes to mldonkey/src/networks/donkey/donkeyServers.ml
Date: Mon, 08 Aug 2005 12:47:43 -0400

Index: mldonkey/src/networks/donkey/donkeyServers.ml
diff -u mldonkey/src/networks/donkey/donkeyServers.ml:1.36 
mldonkey/src/networks/donkey/donkeyServers.ml:1.37
--- mldonkey/src/networks/donkey/donkeyServers.ml:1.36  Fri Jul 22 14:32:12 2005
+++ mldonkey/src/networks/donkey/donkeyServers.ml       Mon Aug  8 16:47:31 2005
@@ -30,7 +30,7 @@
 open CommonComplexOptions
 open CommonServer
 open CommonOptions
-open CommonTypes  
+open CommonTypes
 open CommonOptions
 open CommonGlobals
 open CommonSources
@@ -61,7 +61,7 @@
  *
  * add_query_location (file) (server) -> add file as head to Queue of server
  * fill_query_queue (server)          -> fill Queue with files to request
- * get_query_files (server) (number)  -> strip (number) files from Queue 
+ * get_query_files (server) (number)  -> strip (number) files from Queue
  *                                       and return them
  *)
 
@@ -75,12 +75,12 @@
   ) !current_files in
 
   (* shuffle list so we don't ask all Servers for the same file at once *)
-  let rand_prio = List.map (fun f -> 
+  let rand_prio = List.map (fun f ->
     file_priority f + Random.int 100
   ) downloading in
 
   let joined = List.combine downloading rand_prio in
-  let queries, _ = List.split ( 
+  let queries, _ = List.split (
     List.sort (
       fun (_,p1) (_,p2) -> p2 - p1
     ) joined
@@ -94,7 +94,7 @@
     if n>0 then
       begin
         match server.server_waiting_queries with
-            [] -> 
+            [] ->
               fill_query_queue server;
               []
               (* iter (mini n (List.length server.server_waiting_queries) ) *)
@@ -102,7 +102,7 @@
               server.server_waiting_queries <- files;
               if files = [] then
                 server.server_sent_all_queries <- true;
-              
+
               if file_state file = FileDownloading
                 && DonkeySources.need_new_sources file.file_sources
                 then
@@ -124,22 +124,22 @@
           do_if_connected server.server_sock (
             fun sock ->
               List.iter (
-                fun file -> 
+                fun file ->
                   if !verbose_location then
                     lprintf_nl () "TCP: Query Location of %s"
                       (file_best_name file);
                   let module M = DonkeyProtoServer in
-                  server_send sock ( M.QueryLocationReq file.file_md4  ) 
+                  server_send sock ( M.QueryLocationReq file.file_md4  )
               ) (get_query_files server files_queries_per_minute);
           )
         end
-      else 
-        server.server_queries_credit <- server.server_queries_credit - 1 
+      else
+        server.server_queries_credit <- server.server_queries_credit - 1
 
   )(connected_servers());;
 
 
-(* 
+(*
  *
  * Function to handle UDP Queries for Sources to Server
  *
@@ -151,27 +151,27 @@
   let nservers = ref 0 in
   while !nservers < udp_max_ask (* ask only (udp_max_ask) servers *)
     && (match !udp_servers_list with
-            [] -> 
+            [] ->
               udp_servers_list := Hashtbl2.to_list servers_by_key;
               false
-          | s :: tail -> 
+          | s :: tail ->
               udp_servers_list := tail;
               (match s.server_sock with
                    Connection _ -> ()
-                 | _ -> 
-                     if connection_last_conn s.server_connection_control + 
3600*1 
+                 | _ ->
+                     if connection_last_conn s.server_connection_control + 
3600*1
                        > last_time () &&
-                       s.server_next_udp <= last_time () then 
+                       s.server_next_udp <= last_time () then
                          begin
                            if server_accept_multiple_getsources s then
                              new_servers := s :: !new_servers
                            else
                              old_servers := s :: !old_servers;
-                           
+
                            incr nservers;
                          end
               );
-              true 
+              true
        )
   do
     ()
@@ -185,20 +185,20 @@
     List.iter (
       fun s ->
         let md4s = List.map (
-          fun file -> 
-            file.file_md4; 
+          fun file ->
+            file.file_md4;
         ) (get_query_files s udp_requests_new)
-        in 
+        in
         udp_server_send s (Udp.QueryLocationUdpReq md4s);
         s.server_next_udp <- last_time () + udp_requests_wait;
     ) !new_servers;
-    
+
     (* query "old servers", they need one packet per request *)
     List.iter (
-      fun s -> 
+      fun s ->
         let list = get_query_files s udp_requests_old in
-        List.iter ( 
-          fun file -> 
+        List.iter (
+          fun file ->
             udp_server_send s (Udp.QueryLocationUdpReq [file.file_md4]);
             s.server_next_udp <- last_time () + udp_requests_wait
         ) list;
@@ -208,8 +208,6 @@
     lprintf_nl () "udp_query_sources: %s" (Printexc2.to_string e)
 
 
-      
-
 let disconnect_server s reason =
   match s.server_sock with
       NoConnection -> ()
@@ -222,7 +220,7 @@
         TcpBufferedSocket.close sock reason;
         (*
           lprintf "%s:%d CLOSED received by server\n"
-          (Ip.to_string s.server_ip) s.server_port; 
+          (Ip.to_string s.server_ip) s.server_port;
         *)
         connection_failed (s.server_connection_control);
         s.server_sock <- NoConnection;
@@ -239,7 +237,7 @@
         remove_connected_server s
 
 
-let server_handler s sock event = 
+let server_handler s sock event =
   match event with
       BASIC_EVENT (CLOSED r) ->
         disconnect_server s r
@@ -248,21 +246,18 @@
     | _ -> ()
 
 
-
-
-      
 let last_message_sender = ref (-1)
-      
+
 let client_to_server s t sock =
   let module M = DonkeyProtoServer in
-  
+
   s.server_last_message <- last_time ();
-  
+
   if !verbose_msg_servers then begin
     lprintf_nl () "Message from server:";
     DonkeyProtoServer.print t; lprint_newline ()
   end;
-  
+
   match t with
       M.SetIDReq t ->
         s.server_has_zlib <- t.M.SetID.zlib;
@@ -272,20 +267,20 @@
           s.server_cid <- Some t.M.SetID.ip;
          s.server_realport <- t.M.SetID.port;
           (* disconnect after (connected_server_timeout) seconds of silence *)
-          set_rtimeout sock !!connected_server_timeout; 
+          set_rtimeout sock !!connected_server_timeout;
           set_server_state s Connected_initiating;
           s.server_score <- s.server_score + 5;
           connection_ok (s.server_connection_control);
-          
+
           server_send sock (
             let module A = M.AckID in
             M.AckIDReq A.t
           );
-          
+
           if not (low_id t.M.SetID.ip) && !!use_server_ip then
             last_high_id := t.M.SetID.ip;
         end
-  
+
   | M.MessageReq msg ->
       if !last_message_sender <> server_num s then begin
           let server_header = Printf.sprintf "\n+-- From server %s [%s:%d] 
------\n"
@@ -296,7 +291,7 @@
       s.server_banner <- s.server_banner ^ Printf.sprintf "%s\n" msg;
       let msg = Printf.sprintf "| %s\n" msg in
       CommonEvent.add_event (Console_message_event msg)
-  
+
   | M.ServerListReq l ->
       if !verbose then lprintf_nl () "donkeyServers: Received serverlist";
       if !!update_server_list_server then
@@ -304,14 +299,14 @@
         List.iter (fun s ->
             safe_add_server s.Q.ip s.Q.port
         ) l
-  
+
   | M.ServerInfoReq t ->
       s.server_score <- s.server_score + 1;
       s.server_tags <- t.M.ServerInfo.tags;
       List.iter (
         fun tag ->
           match tag with
-              { tag_name = Field_UNKNOWN "name"; tag_value = String name } -> 
+              { tag_name = Field_UNKNOWN "name"; tag_value = String name } ->
                 s.server_name <- name
             | { tag_name = Field_UNKNOWN "description"; tag_value = String 
desc } ->
                 s.server_description <- desc
@@ -320,7 +315,7 @@
       printf_char 'S';
 
       (* nice and ugly, but it doesn't require any new fields *)
-      set_server_state s (Connected 
+      set_server_state s (Connected
           ( match s.server_cid with
               Some t -> (match Ip.to_ints t with
                           | _, _, _, 0 -> (-1)
@@ -341,15 +336,15 @@
         begin
           lprintf_nl () "%s:%d remove server min_users_on_server limit hit!"
             (Ip.to_string s.server_ip) s.server_port;
-          
+
           disconnect_server s Closed_for_timeout;
           server_remove (as_server s.server_server);
         end;
       server_must_update s
-  
-  | M.QueryIDReplyReq t -> 
+
+  | M.QueryIDReplyReq t ->
       (* This can either be a reply to a QueryID or a indirect request for
-         connection from another client. In this case, we should immediatly 
+         connection from another client. In this case, we should immediatly
          connect. *)
       if !verbose then lprintf_nl () "QueryIDReplyReq: received";
       let module Q = M.QueryIDReply in
@@ -360,9 +355,9 @@
             | Some file ->
                 if !verbose then
                   lprintf_nl () "QueryIDReplyReq: This was a QueryID reply !?";
-                let s = DonkeySources.find_source_by_uid 
+                let s = DonkeySources.find_source_by_uid
                   (Direct_address (t.Q.ip, t.Q.port)) in
-                DonkeySources.set_request_result s file.file_sources 
+                DonkeySources.set_request_result s file.file_sources
                   File_new_source
         with _ ->
           if !verbose then
@@ -376,7 +371,7 @@
       if !verbose then
         lprintf_nl () "QueryIDFailedReq:";
       ignore (Fifo.take s.server_id_requests)
-        
+
   | M.QueryReplyReq t ->
       let rec iter () =
         let search = try
@@ -389,20 +384,20 @@
             search.search_nresults < search.search_max_hits then
               begin
                 server_send sock M.QueryMoreResultsReq;
-                Fifo.put s.server_search_queries search      
+                Fifo.put s.server_search_queries search
               end;
           DonkeyUdp.search_handler search t
         with Already_done -> iter ()
       in
       iter ()
-    
+
   | M.Mldonkey_NotificationReq (num, t) ->
       let s = search_find num in
       List.iter (
         fun f ->
           DonkeyOneFile.search_found false s f.f_md4 f.f_tags
       ) t
-  
+
   | M.QueryUsersReplyReq t ->
       let module M = DonkeyProtoServer in
       let module Q = M.QueryUsersReply in
@@ -423,8 +418,8 @@
               user_ip = cl.Q.ip;
               user_port = cl.Q.port;
               user_tags = cl.Q.tags;
-              user_server = s;                  
-            } 
+              user_server = s;
+            }
           and  user_impl = {
               dummy_user_impl with
               impl_user_val = user;
@@ -434,25 +429,25 @@
           user_add user_impl;
           List.iter (fun tag ->
               match tag with
-                { tag_name = Field_UNKNOWN "name"; tag_value = String s } -> 
+                { tag_name = Field_UNKNOWN "name"; tag_value = String s } ->
                   user.user_name <- s
               | _ -> ()
           ) user.user_tags;
-          
+
           if add_to_friend then DonkeyUdp.add_user_friend s user;
-          
+
           s.server_users <- user :: s.server_users;
           (* lprintf "SERVER NEW USER\n"; *)
           server_new_user (as_server s.server_server) (as_user user.user_user);
       ) t;
       server_must_update s
-  
-  | M.QueryLocationReplyReq t -> 
+
+  | M.QueryLocationReplyReq t ->
       DonkeyClient.query_locations_reply s t
-      
-  | _ -> 
+
+  | _ ->
       ()
-      
+
 let connect_server s =
   if !!enable_servers && can_open_connection connection_manager
     && (not !!connect_only_preferred_server || s.server_preferred)
@@ -466,19 +461,19 @@
               try
                 (* lprintf "CONNECTING ONE SERVER\n"; *)
                 connection_try s.server_connection_control;
-                printf_char 's'; 
+                printf_char 's';
                 let sock = TcpBufferedSocket.connect token "donkey to server"
-                    (Ip.to_inet_addr s.server_ip) s.server_port 
+                    (Ip.to_inet_addr s.server_ip) s.server_port
                     (server_handler s) (* 
DonkeyProtoCom.server_msg_to_string*)  in
                 s.server_cid <- None (*client_ip (Some sock) *);
                 set_server_state s Connecting;
                 set_read_controler sock download_control;
                 set_write_controler sock upload_control;
-                
+
                 set_reader sock (DonkeyProtoCom.cut_messages 
DonkeyProtoServer.parse
                     (client_to_server s));
                 set_rtimeout sock !!server_connection_timeout;
-                
+
                 Fifo.clear s.server_id_requests;
                 s.server_waiting_queries <- [];
                 s.server_queries_credit <- 0;
@@ -495,23 +490,23 @@
                   }
                 );
                 add_connected_server s;
-              with e -> 
+              with e ->
                 (*
                   lprintf "%s:%d IMMEDIAT DISCONNECT \n"
-                  (Ip.to_string s.server_ip) s.server_port; 
+                  (Ip.to_string s.server_ip) s.server_port;
                   lprintf "DISCONNECTED IMMEDIATLY\n";
                  *)
                 disconnect_server s (Closed_for_exception e)
           )
-          in 
+          in
           s.server_sock <- ConnectionWaiting token
-      | _ -> ()        
-        
+      | _ -> ()
+
 let print_empty_list = ref true
 
 (* [restart] prevents infinite looping when [servers_list] contains only
   uninteresting servers. *)
-  
+
 let rec connect_one_server restart =
   (*  lprintf "connect_one_server\n";  *)
   if can_open_connection connection_manager then
@@ -529,18 +524,18 @@
                 lprintf_nl () "You should either use the one provided with 
mldonkey";
                 lprintf_nl () "or import one from the WEB";
               end;
-                
+
               raise Not_found;
             end;
 
-            (* sort the servers list so that last connected servers are 
+            (* sort the servers list so that last connected servers are
                connected first (ie decreasing order of last connections)  *)
             servers_list := List.sort (fun s1 s2 ->
-                compare 
-                  (connection_last_conn s2.server_connection_control) 
+                compare
+                  (connection_last_conn s2.server_connection_control)
                   (connection_last_conn s1.server_connection_control)
             ) !servers_list;
-            
+
             connect_one_server false;
           end
       | s :: list ->
@@ -549,16 +544,15 @@
             begin
               (* connect to server *)
               match s.server_sock with
-                | NoConnection when s.server_score >= 0 -> 
+                | NoConnection when s.server_score >= 0 ->
                     connect_server s
-                | _ -> 
+                | _ ->
                     connect_one_server restart
             end
-          
 
 let force_check_server_connections user =
   (*  lprintf "force_check_server_connections\n";  *)
-  if user || !nservers < max_allowed_connected_servers ()  then 
+  if user || !nservers < max_allowed_connected_servers ()  then
     let rec iter n =
       try
       if n > 0 && can_open_connection connection_manager then begin
@@ -568,18 +562,17 @@
       with Not_found -> ()
     in
     let num = ( if user
-                  then !!max_connected_servers 
-                else max_allowed_connected_servers () )  - !nservers 
+                  then !!max_connected_servers
+                else max_allowed_connected_servers () )  - !nservers
     in
     iter num
-      
-    
+
 let rec check_server_connections () =
   force_check_server_connections false
 
 
-(* 
- * clean serverlist 
+(*
+ * clean serverlist
  *)
 let remove_old_servers () =
   if !verbose then lprintf_nl () "REMOVE OLD SERVERS";
@@ -603,30 +596,30 @@
   ) servers_by_key;
   let t2 = Unix.gettimeofday () in
   if !verbose then lprintf_nl () "Delay to detect black-listed servers: %2.2f" 
(t2 -. t1);
-  
+
   if List.length !to_keep > !!min_left_servers then begin
   let array = Array.of_list !to_keep in
   Array.sort (fun (ls1,_) (ls2,_) ->
       if ls1 = ls2 then 0 else if ls1 > ls2 then -1 else 1
   ) array;
 
-  if !verbose then 
+  if !verbose then
     for i = 0 to Array.length array - 1 do
       let ls, s = array.(i) in
       lprintf_nl () "server %d last_conn %d" (server_num s) ls;
-      
+
     done;
 
   let min_last_conn =  last_time () - !!max_server_age * Date.day_in_secs in
-  
+
   for i = Array.length array - 1 downto !!min_left_servers do
     let ls, s = array.(i) in
-        if ls < min_last_conn && s.server_sock = NoConnection 
+        if ls < min_last_conn && s.server_sock = NoConnection
           && not s.server_preferred then begin
         if !verbose then begin
-            lprintf_nl () "Server too old: %s:%d" 
+            lprintf_nl () "Server too old: %s:%d"
               (Ip.to_string s.server_ip) s.server_port;
-            
+
           end;
         to_remove := s :: !to_remove
       end
@@ -644,30 +637,30 @@
   if (List.length !to_remove) > 0 || !verbose then
     lprintf_nl () "Removed %d old edonkey servers." (List.length !to_remove)
 
-  
-(* Keep connecting to servers in the background. Don't stay connected to 
+
+(* Keep connecting to servers in the background. Don't stay connected to
   them , and don't send your shared files list *)
 let walker_list = ref []
 let delayed_list = ref []
 let next_walker_start = ref 0
-  
+
 (* one call every 5 seconds, so 12/minute, 720/hour *)
-let walker_timer () = 
-  
+let walker_timer () =
+
   if !!servers_walking_period > 0 &&
     !nservers < max_allowed_connected_servers () + !!max_walker_servers then
-      
+
       match !walker_list with
           [] ->
-            if !delayed_list <> [] then 
+            if !delayed_list <> [] then
               begin
                 walker_list := !delayed_list;
                 delayed_list := []
-              end 
+              end
             else
-              if last_time () > !next_walker_start then 
+              if last_time () > !next_walker_start then
                 begin
-                  next_walker_start := 
+                  next_walker_start :=
                     last_time () + !!servers_walking_period * 3600;
 
                   Hashtbl.iter (
@@ -679,7 +672,7 @@
         | s :: tail ->
             walker_list := tail;
             match s.server_sock with
-                NoConnection -> 
+                NoConnection ->
                   if connection_can_try s.server_connection_control then
                     begin
                       if !verbose then
@@ -695,21 +688,21 @@
                           (Ip.to_string s.server_ip);
                     end
               | _ -> ()
-            
-(* Keep connecting to servers in the background. Don't stay connected to 
+
+(* Keep connecting to servers in the background. Don't stay connected to
   them , and don't send your shared files list *)
 let udp_walker_list = ref []
 let next_udp_walker_start = ref 0
-  
+
 (* one call every second, so 3600/hour, must wait one hour before
-restarting 
+restarting
 Each client issues 1 packet/4hour, so 100000 clients means 25000/hour,
 7 packets/second = 7 * 40 bytes = 280 B/s ...
 *)
-  
+
 let udp_ping = String.create 6
-  
-let udp_walker_timer () = 
+
+let udp_walker_timer () =
   match !udp_walker_list with
     [] ->
       if last_time () > !next_udp_walker_start then begin
@@ -731,16 +724,16 @@
   if n = 0 then
     Int64.to_int (s1.server_nusers -- s2.server_nusers)
   else n
-    
+
 (* check connected servers *)
 let update_master_servers _ =
   let server_list = List.sort compare_servers (connected_servers ()) in
   let masters = ref [] in
   List.iter (
     fun s ->
-      if s.server_master then 
+      if s.server_master then
         match s.server_sock with
-        | Connection _ -> 
+        | Connection _ ->
             if !verbose then begin
                 lprintf_nl () "MASTER: OLD MASTER %s" (Ip.to_string 
s.server_ip);
               end;
@@ -748,30 +741,30 @@
         | _ -> s.server_master <- false
   ) server_list;
   let nmasters = ref (List.length !masters) in
-  
+
   if !verbose then
     lprintf_nl () "MASTER: nmaster %d" !nmasters;
-  
+
   let make_master s =
     (* normal servers don't have our SHARE, so send list if it becomes a 
master *)
     do_if_connected s.server_sock (fun sock ->
         if !verbose then
-          lprintf_nl () "   MASTER: %s" (Ip.to_string s.server_ip); 
+          lprintf_nl () "   MASTER: %s" (Ip.to_string s.server_ip);
         s.server_master <- true;
         incr nmasters;
-      
+
         (* Put the server in the list of servers, and update the list *)
         masters := s :: !masters;
         masters := List.rev (List.sort compare_servers !masters);
-        
+
         server_send_share s.server_has_zlib sock
-          (DonkeyShare.all_shared ())        
+          (DonkeyShare.all_shared ())
     )
   in
-  
+
   let max_allowed_connected_servers = max_allowed_connected_servers () in
   let nconnected_servers = ref 0 in
-  
+
   let disconnect_old_server s =
     (* disconnect a server we are connected to for too long if we have too many
        connections *)
@@ -786,10 +779,10 @@
             set_lifetime sock 5.);
       end
   in
-  
+
   List.iter
     (fun s ->
-      do_if_connected  s.server_sock 
+      do_if_connected  s.server_sock
         (fun _ ->
           incr nconnected_servers;
           let connection_time =
@@ -798,7 +791,7 @@
           in
           if !verbose then
               lprintf_nl () "MASTER: Checking ip:%s ct:%d" (Ip.to_string 
s.server_ip) connection_time;
-          if not s.server_master 
+          if not s.server_master
             && (s.server_preferred
                  || connection_time > !!become_master_delay
                  || !!immediate_master
@@ -847,15 +840,15 @@
 
 
 open LittleEndian
-    
-let _ = 
+
+let _ =
   udp_ping.[0] <- char_of_int 0xe3;
   udp_ping.[1] <- char_of_int 0x96;
   udp_ping.[2] <- char_of_int (Random.int 256);
   udp_ping.[3] <- char_of_int (Random.int 256);
   udp_ping.[4] <- char_of_int 0xAA;
   udp_ping.[5] <- char_of_int 0x55;
-  
+
   CommonWeb.add_redirector_info "DKSV" (fun buf ->
       buf_list (fun buf s ->
           buf_ip buf s.server_ip;
@@ -863,7 +856,6 @@
       ) buf (connected_servers ())
   );
 
-  server_ops.op_server_sort <- ( fun s -> 
+  server_ops.op_server_sort <- ( fun s ->
     (3600 * s.server_score) + connection_last_conn s.server_connection_control
   )
-




reply via email to

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