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


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/fileTP/...
Date: Sun, 07 Jul 2013 11:00:54 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       13/07/07 11:00:54

Modified files:
        distrib        : ChangeLog 
        src/networks/fileTP: fileTPFTP.ml 

Log message:
        patch #8109

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1573&r2=1.1574
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/fileTP/fileTPFTP.ml?cvsroot=mldonkey&r1=1.18&r2=1.19

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1573
retrieving revision 1.1574
diff -u -b -r1.1573 -r1.1574
--- distrib/ChangeLog   7 Jul 2013 11:00:21 -0000       1.1573
+++ distrib/ChangeLog   7 Jul 2013 11:00:52 -0000       1.1574
@@ -15,6 +15,7 @@
 =========
 
 2013/07/07:
+8109: FTP: fix CWD (ygrek)
 8108: FTP: fix authentication (ygrek)
 8107: HTML: fix "Request URI too large" errors (ygrek)
       drop unused selectPriority parameters

Index: src/networks/fileTP/fileTPFTP.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/fileTP/fileTPFTP.ml,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- src/networks/fileTP/fileTPFTP.ml    7 Jul 2013 11:00:21 -0000       1.18
+++ src/networks/fileTP/fileTPFTP.ml    7 Jul 2013 11:00:53 -0000       1.19
@@ -185,6 +185,11 @@
 (*                                                                       *)
 (*************************************************************************)
 
+let get_path_components s =
+  match List.rev (List.map (Url.decode ~raw:true) (String2.split s '/')) with
+  | file::path -> String.concat "/" (List.rev path), file
+  | [] -> ("","") (* empty path *)
+
 let ftp_send_range_request c (x,y) sock d =
 
   if !verbose then lprintf_nl "Asking range %Ld-%Ld" x y;
@@ -230,7 +235,13 @@
                   let reqs = ["TYPE I"] in
                   write_reqs sock reqs;
                 | "200 " -> 
-                  let reqs = [Printf.sprintf "CWD %s" (Filename.dirname file)] 
in
+                  let reqs =
+                    match get_path_components file with
+                    | ("",_) -> (* no CWD needed *) ["PASV"]
+                    | (dir,_) -> [Printf.sprintf "CWD %s" dir]
+                  in
+                  (* FIXME should really issue several CWDs (one for each 
directory)
+                     TODO implement state for protocol *)
                   write_reqs sock reqs; 
                 | "227 " ->
                   (try
@@ -253,7 +264,7 @@
                     lprintf_nl "Error %s in reader" (Printexc.to_string e);
                     close sock Closed_by_user)
                 | "350 " ->  
-                    let reqs = [Printf.sprintf "RETR %s" (Filename.basename 
file)] in
+                    let reqs = [Printf.sprintf "RETR %s" (snd 
(get_path_components file))] in
                     write_reqs sock reqs; 
                 | "150 " ->
                     if !verbose then begin
@@ -372,8 +383,7 @@
 
 *)
 
-  let dirname =  Filename.dirname url.Url.full_file in
-  let basename = Filename.basename url.Url.full_file in
+  let (dirname,basename) = get_path_components url.Url.full_file in
   let server, port = url.Url.server, url.Url.port in
 (*    lprintf "async_ip ...\n"; *)
   Ip.async_ip server (fun ip ->
@@ -417,7 +427,11 @@
                       let reqs = ["TYPE I"] in
                       write_reqs sock reqs;
                     | "200 " ->
-                      let reqs = [Printf.sprintf "CWD %s" dirname] in
+                      let reqs =
+                        match dirname with
+                        | "" -> (* no CWD needed *) [Printf.sprintf "SIZE %s" 
basename]
+                        | dir -> [Printf.sprintf "CWD %s" dir]
+                      in
                       write_reqs sock reqs;
                     | "250 " -> 
                       let reqs = [Printf.sprintf "SIZE %s" basename] in



reply via email to

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