/[mldonkey]/mldonkey/src/daemon/common/commonBitzi.ml
ViewVC logotype

Diff of /mldonkey/src/daemon/common/commonBitzi.ml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by spiralvoice, Sun Mar 20 01:41:29 2005 UTC revision 1.6 by spiralvoice, Fri Jul 22 14:32:12 2005 UTC
# Line 24  open Options Line 24  open Options
24  open BasicSocket  open BasicSocket
25  open TcpBufferedSocket  open TcpBufferedSocket
26  open Md4  open Md4
27      
28  open CommonClient  open CommonClient
29  open CommonComplexOptions  open CommonComplexOptions
30  open CommonTypes  open CommonTypes
# Line 40  type bitzi_state = Line 40  type bitzi_state =
40  | Bitzi_ticket of string  | Bitzi_ticket of string
41    
42  and bitzi_ticket = {  and bitzi_ticket = {
43      mutable bitzi_state : bitzi_state;      mutable bitzi_state : bitzi_state;
44      mutable bitzi_uids : Uid.t list;      mutable bitzi_uids : Uid.t list;
45      bitzi_size : int64;      bitzi_size : int64;
46    }    }
# Line 48  and bitzi_ticket = { Line 48  and bitzi_ticket = {
48  let add_uid ticket uid =  let add_uid ticket uid =
49    if not (List.mem uid ticket.bitzi_uids) then    if not (List.mem uid ticket.bitzi_uids) then
50      ticket.bitzi_uids <- uid :: ticket.bitzi_uids      ticket.bitzi_uids <- uid :: ticket.bitzi_uids
51      
52  let add_uids ticket uids =  let add_uids ticket uids =
53    List.iter (add_uid ticket) uids    List.iter (add_uid ticket) uids
54        
55  (*  (*
56      
57  To find equivalent UIDs on different networks, we can use www.bitzi.com:  To find equivalent UIDs on different networks, we can use www.bitzi.com:
58    
59  http://ticket.bitzi.com/rdf/BCLD3DINKJJRGYGHIYAX7HG5HXSM3XNH.E4IHTEMZIJE4NBCWSBZ6TIWQTDGYYXVPGIRJ5KQ  http://ticket.bitzi.com/rdf/BCLD3DINKJJRGYGHIYAX7HG5HXSM3XNH.E4IHTEMZIJE4NBCWSBZ6TIWQTDGYYXVPGIRJ5KQ
60  http://ticket.bitzi.com/rdf/urn:sha1:BCLD3DINKJJRGYGHIYAX7HG5HXSM3XNH  http://ticket.bitzi.com/rdf/urn:sha1:BCLD3DINKJJRGYGHIYAX7HG5HXSM3XNH
61      
62    # let t = Xml.parse_file "xml1";;    # let t = Xml.parse_file "xml1";;
63  val t : Xml.xml =  val t : Xml.xml =
64    Xml.XML ("rdf:RDF",    Xml.XML ("rdf:RDF",
# Line 80  val t : Xml.xml = Line 80  val t : Xml.xml =
80        ("dc:format", "audio/mp3"); ("bz:fileLength", "4577608");        ("dc:format", "audio/mp3"); ("bz:fileLength", "4577608");
81  ("bz:fileFirst20Bytes", "4944330200000000006E54543200000F00546865");  ("bz:fileFirst20Bytes", "4944330200000000006E54543200000F00546865");
82    
83      
84  ("bz:fileMD5", "NTUHNJDIJH6IDHQ5GPOSUFVSCM");  ("bz:fileMD5", "NTUHNJDIJH6IDHQ5GPOSUFVSCM");
85  ("bz:fileUUHash", "mcR96OHbEJLjxV4eudW9YDMW8q4");  ("bz:fileUUHash", "mcR96OHbEJLjxV4eudW9YDMW8q4");
86  ("bz:fileED2kHash", "83d6c3bef2732d310bd9105e850c7864");  ("bz:fileED2kHash", "83d6c3bef2732d310bd9105e850c7864");
87    
88      
89        ("mm:duration", "286743"); ("bz:audioBitrate", "128");        ("mm:duration", "286743"); ("bz:audioBitrate", "128");
90        ("bz:audioSamplerate", "44100"); ("bz:audioChannels", "1");        ("bz:audioSamplerate", "44100"); ("bz:audioChannels", "1");
91        ("bz:audioSha1", "LQAIDHEMU43QFN5JNYFAVFEYZI3TOZ6L")],        ("bz:audioSha1", "LQAIDHEMU43QFN5JNYFAVFEYZI3TOZ6L")],
# Line 110  val t : Xml.xml = Line 110  val t : Xml.xml =
110    
111    *)    *)
112    
113  let make_request url =  let make_request url =
114      
115    let module H = Http_client in    let module H = Http_client in
116    let r = {    let r = {
117        H.basic_request with        H.basic_request with
118          
119        H.req_url = Url.of_string url;        H.req_url = Url.of_string url;
120        H.req_user_agent = "Mozilla/5.0 (Linux 2.4.19-16mdk i686; U) Opera 6.11  [en]";        H.req_user_agent = "Mozilla/5.0 (Linux 2.4.19-16mdk i686; U) Opera 6.11  [en]";
121        H.req_referer = None;        H.req_referer = None;
122        H.req_request = H.GET;        H.req_request = H.GET;
123      } in      } in
124      
125    r    r
126    
127  let progress _ _ = ()  let progress _ _ = ()
# Line 134  let parse_bitzi_ticket ticket s = Line 134  let parse_bitzi_ticket ticket s =
134    List.iter (fun xml ->    List.iter (fun xml ->
135        let (header, args, _) = Xml.xml_of xml in        let (header, args, _) = Xml.xml_of xml in
136        match header with        match header with
137          "rdf:Description" ->          "rdf:Description" ->
138  (*                                  (*
139  ("bz:fileMD5", "NTUHNJDIJH6IDHQ5GPOSUFVSCM");  ("bz:fileMD5", "NTUHNJDIJH6IDHQ5GPOSUFVSCM");
140  ("bz:fileUUHash", "mcR96OHbEJLjxV4eudW9YDMW8q4");  ("bz:fileUUHash", "mcR96OHbEJLjxV4eudW9YDMW8q4");
141  ("bz:fileED2kHash", "83d6c3bef2732d310bd9105e850c7864");  ("bz:fileED2kHash", "83d6c3bef2732d310bd9105e850c7864");
# Line 170  let parse_possible_bitzi_ticket sha1 tic Line 170  let parse_possible_bitzi_ticket sha1 tic
170    List.iter (fun xml ->    List.iter (fun xml ->
171        let (header, args, _) = Xml.xml_of xml in        let (header, args, _) = Xml.xml_of xml in
172        match header with        match header with
173          "rdf:Description" ->          "rdf:Description" ->
174  (*                                  (*
175  ("bz:fileMD5", "NTUHNJDIJH6IDHQ5GPOSUFVSCM");  ("bz:fileMD5", "NTUHNJDIJH6IDHQ5GPOSUFVSCM");
176  ("bz:fileUUHash", "mcR96OHbEJLjxV4eudW9YDMW8q4");  ("bz:fileUUHash", "mcR96OHbEJLjxV4eudW9YDMW8q4");
177  ("bz:fileED2kHash", "83d6c3bef2732d310bd9105e850c7864");  ("bz:fileED2kHash", "83d6c3bef2732d310bd9105e850c7864");
# Line 203  let parse_possible_bitzi_ticket sha1 tic Line 203  let parse_possible_bitzi_ticket sha1 tic
203    
204  let request_possible_bitzi_ticket file sha1 =  let request_possible_bitzi_ticket file sha1 =
205    lprintf "***** request_possible_bitzi_ticket *****\n";    lprintf "***** request_possible_bitzi_ticket *****\n";
206    Http_client.wget_string    Http_client.wget_string
207      (make_request      (make_request
208        (Printf.sprintf "http://ticket.bitzi.com/rdf/urn:sha1:%s"        (Printf.sprintf "http://ticket.bitzi.com/rdf/urn:sha1:%s"
209          (Sha1.to_string sha1)))          (Sha1.to_string sha1)))
210    (parse_possible_bitzi_ticket sha1 file) progress    (parse_possible_bitzi_ticket sha1 file) progress
211    
212  let parse_bitzi_lookup file s =  let parse_bitzi_lookup file s =
213    lprintf "******* parse_bitzi_lookup *******\n%s\n"    lprintf "******* parse_bitzi_lookup *******\n%s\n"
214      (String.escaped s);      (String.escaped s);
215    let rec iter pos =    let rec iter pos =
# Line 232  let query_bitzi_ticket ticket = Line 232  let query_bitzi_ticket ticket =
232        ticket.bitzi_state <- Bitzi_try_indirect_lookup;        ticket.bitzi_state <- Bitzi_try_indirect_lookup;
233        List.iter (fun uid ->        List.iter (fun uid ->
234            match Uid.to_uid uid with            match Uid.to_uid uid with
235              Sha1 sha1 ->                            Sha1 sha1 ->
236                lprintf "Retrieve bitzi ticket\n";                lprintf "Retrieve bitzi ticket\n";
237                Http_client.wget_string                Http_client.wget_string
238                  (make_request                  (make_request
239                    (Printf.sprintf "http://ticket.bitzi.com/rdf/urn:sha1:%s"                    (Printf.sprintf "http://ticket.bitzi.com/rdf/urn:sha1:%s"
240                      (Sha1.to_string sha1)))                      (Sha1.to_string sha1)))
241                (parse_bitzi_ticket ticket) progress                (parse_bitzi_ticket ticket) progress
242            | _ -> ()            | _ -> ()
243        ) ticket.bitzi_uids;        ) ticket.bitzi_uids;
244          
245    | Bitzi_try_indirect_lookup ->    | Bitzi_try_indirect_lookup ->
246        ticket.bitzi_state <- Bitzi_not_found;        ticket.bitzi_state <- Bitzi_not_found;
247        List.iter (fun uid ->        List.iter (fun uid ->
248            match Uid.to_uid uid with            match Uid.to_uid uid with
249              Ed2k ed2k ->              Ed2k ed2k ->
250                  
251                lprintf "********** Retrieve bitzi lookup by ed2k\n";                lprintf "********** Retrieve bitzi lookup by ed2k\n";
252                Http_client.wget_string                Http_client.wget_string
253                  (make_request                  (make_request
254                    (Printf.sprintf "http://bitzi.com/lookup/urn:ed2k:%s" (Md4.to_string ed2k)))                    (Printf.sprintf "http://bitzi.com/lookup/urn:ed2k:%s" (Md4.to_string ed2k)))
255                (parse_bitzi_lookup ticket) progress                (parse_bitzi_lookup ticket) progress
256            | Md5Ext md5ext ->            | Md5Ext md5ext ->
257                  
258                lprintf "********** Retrieve bitzi lookup by sig2dat\n";                lprintf "********** Retrieve bitzi lookup by sig2dat\n";
259                let md5ext = Md5Ext.to_string md5ext in                let md5ext = Md5Ext.to_string md5ext in
260                let len = String.length md5ext in                let len = String.length md5ext in
261                Http_client.wget_string                Http_client.wget_string
262                  (make_request                  (make_request
263                    (Printf.sprintf "http://bitzi.com/lookup/sig2dat:%s" (String.sub md5ext 1 (len -2))))                    (Printf.sprintf "http://bitzi.com/lookup/sig2dat:%s" (String.sub md5ext 1 (len -2))))
264                (parse_bitzi_lookup ticket) progress                (parse_bitzi_lookup ticket) progress

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26