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/driver/dr...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/driver/dr...
Date: Mon, 06 Feb 2006 21:47:02 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Branch:         
Changes by:     spiralvoice <address@hidden>    06/02/06 21:47:02

Modified files:
        distrib        : ChangeLog 
        src/daemon/driver: driverCommands.ml 
        src/networks/donkey: donkeyClient.mli donkeyInteractive.ml 

Log message:
        patch #4879

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/distrib/ChangeLog.diff?tr1=1.722&tr2=1.723&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/daemon/driver/driverCommands.ml.diff?tr1=1.124&tr2=1.125&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/donkey/donkeyClient.mli.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/mldonkey/mldonkey/src/networks/donkey/donkeyInteractive.ml.diff?tr1=1.90&tr2=1.91&r1=text&r2=text

Patches:
Index: mldonkey/distrib/ChangeLog
diff -u mldonkey/distrib/ChangeLog:1.722 mldonkey/distrib/ChangeLog:1.723
--- mldonkey/distrib/ChangeLog:1.722    Mon Feb  6 21:45:03 2006
+++ mldonkey/distrib/ChangeLog  Mon Feb  6 21:47:02 2006
@@ -15,6 +15,9 @@
 =========
 
 2006/02/06
+4879: EDK: Support for sources in ed2k:// links
+- example:
+ed2k://|file|a.txt|1|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|/|sources,1.0.0.0:4662|/
 4849: EDK: Fix hashing of newly shared files
 - avoid hashing shared files twice
 - avoid problems while hashing big files
Index: mldonkey/src/daemon/driver/driverCommands.ml
diff -u mldonkey/src/daemon/driver/driverCommands.ml:1.124 
mldonkey/src/daemon/driver/driverCommands.ml:1.125
--- mldonkey/src/daemon/driver/driverCommands.ml:1.124  Sun Feb  5 13:25:22 2006
+++ mldonkey/src/daemon/driver/driverCommands.ml        Mon Feb  6 21:47:02 2006
@@ -2685,6 +2685,16 @@
 
     "dllink", Arg_multiple (fun args o ->
         let query_networks url =
+       let print_result buf o result =
+         List.iter (fun s ->
+           if o.conn_output = HTML then
+             begin
+               Printf.bprintf buf "\\</tr\\>\\<tr class=\\\"dl-1\\\"\\>";
+               html_mods_td buf [ ("", "sr", s); ]
+             end
+           else
+             Printf.bprintf buf "%s\n" s) (List.rev result);
+       in
        let result = ref [] in
           if not (networks_iter_until_true (fun n ->
                try
@@ -2713,14 +2723,7 @@
                    end
                  else
                     Printf.bprintf buf "Unable to match URL : %s\n" url;
-                 List.iter (fun s ->
-                   if o.conn_output = HTML then
-                     begin
-                       Printf.bprintf buf "\\</tr\\>\\<tr 
class=\\\"dl-1\\\"\\>";
-                        html_mods_td buf [ ("", "sr", s); ]
-                     end
-                   else
-                      Printf.bprintf buf "%s\n" s) (List.rev !result);
+                   print_result buf o !result;
                  if o.conn_output = HTML then
                    Printf.bprintf buf 
"\\</tr\\>\\</table\\>\\</div\\>\\</div\\>";
                 Buffer.contents buf) in
@@ -2734,6 +2737,7 @@
                 html_mods_td buf [ ("", "srh", "Added link"); ];
                 Printf.bprintf buf "\\</tr\\>\\<tr class=\\\"dl-1\\\"\\>";
                 html_mods_td buf [ ("", "sr", url); ];
+               print_result buf o !result;
                 Printf.bprintf buf "\\</tr\\>\\</table\\>\\</div\\>\\</div\\>";
                 Buffer.contents buf
               end
Index: mldonkey/src/networks/donkey/donkeyClient.mli
diff -u mldonkey/src/networks/donkey/donkeyClient.mli:1.4 
mldonkey/src/networks/donkey/donkeyClient.mli:1.5
--- mldonkey/src/networks/donkey/donkeyClient.mli:1.4   Thu Aug  5 15:52:12 2004
+++ mldonkey/src/networks/donkey/donkeyClient.mli       Mon Feb  6 21:47:02 2006
@@ -43,3 +43,5 @@
 val clean_requests : unit -> unit
 
 val disconnect_client : DonkeyTypes.client -> BasicSocket.close_reason -> unit
+
+val add_source : DonkeyTypes.file -> Ip.t -> int -> Ip.t -> int -> unit
Index: mldonkey/src/networks/donkey/donkeyInteractive.ml
diff -u mldonkey/src/networks/donkey/donkeyInteractive.ml:1.90 
mldonkey/src/networks/donkey/donkeyInteractive.ml:1.91
--- mldonkey/src/networks/donkey/donkeyInteractive.ml:1.90      Sun Feb  5 
13:19:14 2006
+++ mldonkey/src/networks/donkey/donkeyInteractive.ml   Mon Feb  6 21:47:02 2006
@@ -531,8 +531,47 @@
 
 
 let parse_donkey_url url =
-  match String2.split ((*String.escaped*) url) '|' with
+  let url = Str.global_replace (Str.regexp "|sources,") "|sources|" url in
+  match String2.split (String.escaped url) '|' with
 (* TODO RESULT *)
+  | "ed2k://" :: "file" :: name :: size :: md4 :: "/" :: "sources" :: sources 
:: _
+  | "file" :: name :: size :: md4 :: "/" :: "sources" :: sources :: _ ->
+(*  
ed2k://|file|Wikipedia_3.3_noimages.iso|2666311680|747735CD46B61DA92973E9A8840A9C99|/|sources,62.143.4.124:4662|/
  *)
+      if Int64.of_string size >= 4294967295L then
+       "Files > 4GB are not allowed", false
+      else
+        begin
+         let md4 = if String.length md4 > 32 then
+            String.sub md4 0 32 else md4 in
+         let new_sources = ref [] in
+          let s = String2.split sources ',' in
+            List.iter (fun s ->
+              begin try
+               match String2.split s ':' with
+                 [ip;port] ->
+                    let source_ip = Ip.of_string ip in
+                    let source_port = int_of_string port in
+                   new_sources := (source_ip, source_port) :: !new_sources
+               | _ -> ()
+             with _ -> ()
+          end) s;
+          begin
+           try
+              let file = query_download [name] (Int64.of_string size)
+                (Md4.of_string md4) None None None false in
+             let new_file = find_file (Md4.of_string md4) in
+             CommonInteractive.start_download file;
+             if !new_sources <> [] then
+               begin
+                 List.iter (fun (source_ip, source_port) ->
+                   add_source new_file source_ip source_port Ip.null 0
+                 ) !new_sources;
+                 (Printf.sprintf "added %d sources to new download" 
(List.length !new_sources)), true
+               end
+             else "", true
+           with e -> (Printexc2.to_string e), false
+         end
+       end
   | "ed2k://" :: "file" :: name :: size :: md4 :: _
   | "file" :: name :: size :: md4 :: _ ->
       if Int64.of_string size >= 4294967295L then




reply via email to

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