2
0
Эх сурвалжийг харах

- added read/write streams

Laurent Bedubourg 19 жил өмнө
parent
commit
d52da598af
1 өөрчлөгдсөн 50 нэмэгдсэн , 0 устгасан
  1. 50 0
      std/mtwin/net/Ftp.hx

+ 50 - 0
std/mtwin/net/Ftp.hx

@@ -55,6 +55,9 @@ class Ftp {
 	public var debug : Bool;
 	var host : Host;
 	var port : Int;
+	var user : String;
+	var pass : String;
+	var acct : String;
 	var socket : Socket;
 	var srv : Socket;
 	var passiveMode : Bool;
@@ -79,6 +82,9 @@ class Ftp {
 		if (login == null) login = "anonymous";
 		if (pass == null) pass = "";
 		if (acct == null) acct = "";
+		this.user = login;
+		this.pass = pass;
+		this.acct = acct;
 		var res = command("USER "+login);
 		if (res.charAt(0) == "3") res = command("PASS "+pass);
 		if (res.charAt(0) == "3") res = command("ACCT "+acct);
@@ -213,6 +219,50 @@ class Ftp {
 			srv.close();
 	}
 
+	/**
+		Creates a new FTP connection dedicated to write to specified file.
+
+		Don't forget to close the neko.io.Output when done.
+	**/
+	public function write( remoteName:String ) : neko.io.Output {
+		var pwd = pwd();
+		var ftp = new Ftp(Socket.hostToString(host), port);
+		ftp.login(user, pass, acct);
+		ftp.cwd(pwd);
+		ftp.voidCommand("TYPE I");
+		var cnx = ftp.transferConnection("STOR "+remoteName);
+		var out = cnx.output;
+		untyped out.oldclose = out.close;
+		out.close = function(){
+			untyped out.oldclose();
+			ftp.voidResponse();
+			ftp.close();
+		}
+		return out;
+	}
+
+	/**
+		Creates a new FTP connection dedicated to read specified file.
+
+		Don't forget to close the neko.io.Output when done.
+	**/
+	public function read( remoteFileName:String ) : neko.io.Input {
+		var pwd = pwd();
+		var ftp = new Ftp(Socket.hostToString(host), port);
+		ftp.login(user, pass, acct);
+		ftp.cwd(pwd);
+		ftp.voidCommand("TYPE I");
+		var cnx = ftp.transferConnection("RETR "+remoteFileName);
+		var inp = cnx.input;
+		untyped inp.oldclose = inp.close;
+		inp.close = function(){
+			untyped inp.oldclose();
+			ftp.voidResponse();
+			ftp.close();
+		}
+		return inp;
+	}
+
 	function voidResponse() : String {
 		var res = getLines().join("\n");
 		if (debug) trace("VR< "+res);