mldonkey-commits
[Top][All Lists]
Advanced

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

[Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/direct_...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/direct_...
Date: Sun, 18 Jul 2010 10:59:20 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       10/07/18 10:59:20

Modified files:
        distrib        : ChangeLog 
        src/networks/direct_connect: dcInteractive.ml dcProtocol.ml 
                                     dcServers.ml 
        src/utils/cdk  : list2.ml list2.mli 

Log message:
        patch #7250

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1445&r2=1.1446
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/direct_connect/dcInteractive.ml?cvsroot=mldonkey&r1=1.38&r2=1.39
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/direct_connect/dcProtocol.ml?cvsroot=mldonkey&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/direct_connect/dcServers.ml?cvsroot=mldonkey&r1=1.20&r2=1.21
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/utils/cdk/list2.ml?cvsroot=mldonkey&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/utils/cdk/list2.mli?cvsroot=mldonkey&r1=1.4&r2=1.5

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1445
retrieving revision 1.1446
diff -u -b -r1.1445 -r1.1446
--- distrib/ChangeLog   18 Jul 2010 10:58:36 -0000      1.1445
+++ distrib/ChangeLog   18 Jul 2010 10:59:19 -0000      1.1446
@@ -15,6 +15,7 @@
 =========
 
 2010/07/18
+7250: DC: discover self IP (ygrek)
 7249: DC: fix parsing MyINFO with non-latin nicks (ygrek)
 
 2010/07/17

Index: src/networks/direct_connect/dcInteractive.ml
===================================================================
RCS file: 
/sources/mldonkey/mldonkey/src/networks/direct_connect/dcInteractive.ml,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -b -r1.38 -r1.39
--- src/networks/direct_connect/dcInteractive.ml        24 May 2010 18:10:49 
-0000      1.38
+++ src/networks/direct_connect/dcInteractive.ml        18 Jul 2010 10:59:20 
-0000      1.39
@@ -92,7 +92,6 @@
 
 let exn_catch f x = try `Ok (f x) with exn -> `Exn exn
 let opt_default default = function None -> default | Some v -> v
-let filter_map f l = List.fold_left (fun acc x -> match f x with Some y -> y 
:: acc | None -> acc) [] l
 
 let parse_url url user group =
   match exn_catch parse_magnet_url url with
@@ -101,7 +100,7 @@
     if !verbose then
       lprintf_nl "Got magnet url %S" url;
     (* TODO multiple TTHs, multiple xt, automatic merge of downloads from 
different networks (?!) *) 
-    match filter_map (function TigerTree tth -> Some tth | _ -> None) 
magnet#uids with
+    match List2.filter_map (function TigerTree tth -> Some tth | _ -> None) 
magnet#uids with
     | [] -> "No TTH found in magnet url", false
     | tth::_ ->
       let _ = start_new_download None (TigerTree.to_string tth) "" magnet#name 
(opt_default 0L magnet#size) in

Index: src/networks/direct_connect/dcProtocol.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/direct_connect/dcProtocol.ml,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- src/networks/direct_connect/dcProtocol.ml   18 Jul 2010 10:58:36 -0000      
1.11
+++ src/networks/direct_connect/dcProtocol.ml   18 Jul 2010 10:59:20 -0000      
1.12
@@ -927,23 +927,24 @@
     if !verbose_msg_clients then lprintf_nl "Sending: (%s)" (Buffer.contents 
buf)
   end
     
-module UserIP = struct (* TODO *)
+module UserIP = struct
   type t = string list
+
   let parse s = String2.split_simplify s '$' 
+
+  let parse_nameip =
+    List2.filter_map (fun s ->
+      match String2.split s ' ' with
+      | [name;addr] -> Some (dc_to_utf name, Ip.addr_of_string addr)
+      | _ -> None)
+
   let print st = 
     lprintf "UserIP list ("; 
-    List.iter (fun s -> lprintf "%s " s) st;
-    lprintf_nl " )" 
+    List.iter (fun s -> lprintf "%s " (dc_to_utf s)) st;
+    lprintf_nl ")"
+
   let write buf st = 
-    lprintf_nl "UserIP:";
-    Buffer.add_char buf ' ';
-    let rec iter s =
-      ( match s with
-      | [] -> lprintf_nl "UserIP: ()"
-      | hd :: [] -> lprintf_nl "UserIP: hd :: []  hd=%s" hd; Buffer.add_string 
buf hd
-      | hd :: tl ->  lprintf_nl "UserIP: hd :: tl  hd=%s" hd; Printf.bprintf 
buf "%s$$" hd; iter tl )
-    in 
-    iter st
+    Printf.bprintf buf "$UserIP %s" (String.concat "$$" (List.map utf_to_dc 
st))
   end
 
 (* Message type definitions and basic parsing *)  
@@ -1100,7 +1101,7 @@
   | UnknownReq t -> Buffer.add_string buf t
   | UGetBlockReq t -> UGetBlock.write buf t
   | UserCommandReq -> ()
-  | UserIPReq t -> Buffer.add_string buf "$UserIP"; UserIP.write buf t      
+  | UserIPReq t -> UserIP.write buf t
   | ValidateNickReq s -> Printf.bprintf buf "$ValidateNick %s" s
   | ValidateDenideReq s -> Buffer.add_string buf s
   | VersionReq s -> Printf.bprintf buf "$Version %s" s )

Index: src/networks/direct_connect/dcServers.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/direct_connect/dcServers.ml,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -b -r1.20 -r1.21
--- src/networks/direct_connect/dcServers.ml    17 Jul 2010 15:24:42 -0000      
1.20
+++ src/networks/direct_connect/dcServers.ml    18 Jul 2010 10:59:20 -0000      
1.21
@@ -461,18 +461,22 @@
   
   | UserIPReq st -> (* CHECK *)
       if !verbose_msg_servers then lprintf_nl "Received $UserIP";
-      List.iter ( fun nameip ->
-        lprintf_nl "UserIPReq: nameip=%s" nameip; 
-        match String2.split nameip ' ' with
-        | name :: ip :: [] -> 
-            (try
+      let st = UserIP.parse_nameip st in
+      List.iter begin fun (name,addr) ->
+        lprintf_nl "UserIP: %s %s" name (Ip.string_of_addr addr); 
+        try
+          if name = s.server_last_nick then
+          begin
+            match addr with 
+            | Ip.AddrIp ip -> lprintf_nl "Received self IP: %s" (Ip.to_string 
ip); last_high_id := ip
+            | Ip.AddrName _ -> ()
+          end;
               let u = search_user_by_name name in 
-              ( try u.user_ip <- Ip.addr_of_string ip with _ -> () );
+          u.user_ip <- addr;
               lprintf_nl "Added ip %s to user %s" (Ip.string_of_addr 
u.user_ip) u.user_nick
             with _ ->
-                if !verbose_unexpected_messages then lprintf_nl "No user by 
name %s" name )
-        | _ -> ()
-      ) st;
+          if !verbose_unexpected_messages then lprintf_nl "No user by name %s" 
name
+      end st
                     
   | ValidateDenideReq n ->  
       let errortxt = Printf.sprintf "Nick %s is already in use" n in

Index: src/utils/cdk/list2.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/utils/cdk/list2.ml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- src/utils/cdk/list2.ml      18 Jul 2005 00:52:31 -0000      1.4
+++ src/utils/cdk/list2.ml      18 Jul 2010 10:59:20 -0000      1.5
@@ -116,3 +116,7 @@
     a.(p) <- tmp;
   done;
   Array.to_list a
+
+let filter_map f =
+  List.fold_left (fun acc x -> match f x with Some y -> y :: acc | None -> 
acc) []
+

Index: src/utils/cdk/list2.mli
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/utils/cdk/list2.mli,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- src/utils/cdk/list2.mli     18 Jul 2005 00:52:31 -0000      1.4
+++ src/utils/cdk/list2.mli     18 Jul 2010 10:59:20 -0000      1.5
@@ -45,3 +45,7 @@
 val max : 'a list -> 'a
 
 val shuffle: 'a list -> 'a list
\ No newline at end of file
+
+(** [filter_map f l] *)
+val filter_map : ('a -> 'b option) -> 'a list -> 'b list
+



reply via email to

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