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/bittorr...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/bittorr...
Date: Sun, 07 Nov 2010 15:02:57 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       10/11/07 15:02:57

Modified files:
        distrib        : ChangeLog 
        src/networks/bittorrent: bTTorrent.ml bencode.ml 

Log message:
        patch #7374

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1499&r2=1.1500
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/bittorrent/bTTorrent.ml?cvsroot=mldonkey&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/bittorrent/bencode.ml?cvsroot=mldonkey&r1=1.6&r2=1.7

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1499
retrieving revision 1.1500
diff -u -b -r1.1499 -r1.1500
--- distrib/ChangeLog   7 Nov 2010 15:01:40 -0000       1.1499
+++ distrib/ChangeLog   7 Nov 2010 15:02:55 -0000       1.1500
@@ -15,6 +15,7 @@
 =========
 
 2010/11/07
+7374: BT: calculate compatible hash for wrong torrents (ygrek)
 6012: http_client: Support gzip accept-encoding + content-encoding (ygrek)
 
 2010/11/03

Index: src/networks/bittorrent/bTTorrent.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/bittorrent/bTTorrent.ml,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- src/networks/bittorrent/bTTorrent.ml        29 Aug 2010 20:17:56 -0000      
1.23
+++ src/networks/bittorrent/bTTorrent.ml        7 Nov 2010 15:02:57 -0000       
1.24
@@ -280,9 +280,9 @@
   assert (real_file_name <> "");
   assert (!file_piece_size <> zero);
   assert (!file_pieces <> "");
-  assert (!file_info = Bencode.decode (Bencode.encode !file_info));
+  assert (!file_info = Bencode.decode (Bencode.encode ~strict:false 
!file_info));
 
-  let file_id = Sha1.string (Bencode.encode !file_info) in
+  let file_id = Sha1.string (Bencode.encode ~strict:false !file_info) in
   let npieces = 1 + Int64.to_int ((!length -- one) // !file_piece_size) in
   let pieces = Array.init npieces (fun i ->
         let s = String.sub !file_pieces (i*20) 20 in

Index: src/networks/bittorrent/bencode.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/bittorrent/bencode.ml,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- src/networks/bittorrent/bencode.ml  4 Apr 2010 09:16:28 -0000       1.6
+++ src/networks/bittorrent/bencode.ml  7 Nov 2010 15:02:57 -0000       1.7
@@ -121,7 +121,7 @@
   let (v,pos) = decode s 0 len in
   v
 
-let encode v =
+let encode ?(strict=true) v =
   let buf = Buffer.create 100 in
   let encode_string s = Printf.bprintf buf "%d:%s" (String.length s) s in
   let rec encode v =
@@ -134,7 +134,11 @@
        Buffer.add_char buf 'e'
     | Dictionary list ->
        Buffer.add_char buf 'd';
-       List.iter (fun (key,v) -> encode_string key; encode v) (List.sort (fun 
(s1, _) (s2, _) -> compare s1 s2) list);
+       (* When calculating hash for the torrent file we leave the dictionary
+       "as is" in order to get the same hash as the client that created
+       this torrent even when the keys are not sorted (as required by BEP-3) *)
+       let list = if strict then List.sort (fun (s1, _) (s2, _) -> compare s1 
s2) list else list in
+       List.iter (fun (key,v) -> encode_string key; encode v) list;
        Buffer.add_char buf 'e'
   in
   encode v;



reply via email to

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