home *** CD-ROM | disk | FTP | other *** search
- package sun.net.ftp;
-
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.StringTokenizer;
- import sun.net.NetworkClient;
- import sun.net.TelnetInputStream;
- import sun.net.TelnetOutputStream;
- import sun.net.TransferProtocolClient;
-
- public class FtpClient extends TransferProtocolClient {
- public static final int FTP_PORT = 21;
- static int FTP_SUCCESS = 1;
- static int FTP_TRY_AGAIN = 2;
- static int FTP_ERROR = 3;
- private Socket dataSocket;
- private boolean replyPending = false;
- private boolean binaryMode = false;
- String user;
- String password;
- String command;
- int lastReplyCode;
- public String welcomeMsg;
- public static boolean useFtpProxy = Boolean.getBoolean("ftpProxySet");
- public static String ftpProxyHost = System.getProperty("ftpProxyHost");
- public static int ftpProxyPort = Integer.getInteger("ftpProxyPort", 80);
-
- public void closeServer() throws IOException {
- if (((NetworkClient)this).serverIsOpen()) {
- this.issueCommand("QUIT");
- super.closeServer();
- }
-
- }
-
- protected int issueCommand(String var1) throws IOException {
- this.command = var1;
- if (this.replyPending && this.readReply() == FTP_ERROR) {
- System.out.print("Error reading pending reply\n");
- }
-
- this.replyPending = false;
-
- int var2;
- do {
- ((TransferProtocolClient)this).sendServer(var1 + "\r\n");
- var2 = this.readReply();
- } while(var2 == FTP_TRY_AGAIN);
-
- return var2;
- }
-
- protected void issueCommandCheck(String var1) throws IOException {
- if (this.issueCommand(var1) != FTP_SUCCESS) {
- throw new FtpProtocolException(var1);
- }
- }
-
- protected int readReply() throws IOException {
- this.lastReplyCode = ((TransferProtocolClient)this).readServerResponse();
- switch (this.lastReplyCode / 100) {
- case 1:
- this.replyPending = true;
- case 2:
- case 3:
- return FTP_SUCCESS;
- case 5:
- if (this.lastReplyCode == 530) {
- if (this.user == null) {
- throw new FtpLoginException("Not logged in");
- }
-
- return FTP_ERROR;
- } else if (this.lastReplyCode == 550) {
- throw new FileNotFoundException(this.command + ": " + ((TransferProtocolClient)this).getResponseString());
- }
- case 4:
- default:
- return FTP_ERROR;
- }
- }
-
- protected Socket openDataConnection(String var1) throws IOException {
- InetAddress var4 = InetAddress.getLocalHost();
- byte[] var5 = var4.getAddress();
- ServerSocket var2 = new ServerSocket(0, 1);
- String var3 = "PORT ";
-
- for(int var7 = 0; var7 < var5.length; ++var7) {
- var3 = var3 + (var5[var7] & 255) + ",";
- }
-
- var3 = var3 + (var2.getLocalPort() >>> 8 & 255) + "," + (var2.getLocalPort() & 255);
- if (this.issueCommand(var3) == FTP_ERROR) {
- FtpProtocolException var9 = new FtpProtocolException("PORT");
- var2.close();
- throw var9;
- } else if (this.issueCommand(var1) == FTP_ERROR) {
- FtpProtocolException var6 = new FtpProtocolException(var1);
- var2.close();
- throw var6;
- } else {
- this.dataSocket = var2.accept();
- var2.close();
- return this.dataSocket;
- }
- }
-
- public void openServer(String var1) throws IOException {
- byte var2 = 21;
- this.openServer(var1, var2);
- }
-
- public void openServer(String var1, int var2) throws IOException {
- super.openServer(var1, var2);
- if (this.readReply() == FTP_ERROR) {
- throw new FtpProtocolException("Welcome message");
- }
- }
-
- public void login(String var1, String var2) throws IOException {
- if (!((NetworkClient)this).serverIsOpen()) {
- throw new FtpLoginException("not connected to host");
- } else {
- this.user = var1;
- this.password = var2;
- if (this.issueCommand("USER " + var1) == FTP_ERROR) {
- throw new FtpLoginException("user");
- } else if (var2 != null && this.issueCommand("PASS " + var2) == FTP_ERROR) {
- throw new FtpLoginException("password");
- } else {
- for(int var4 = 0; var4 < super.serverResponse.size(); ++var4) {
- String var3 = (String)super.serverResponse.elementAt(var4);
- if (var3 != null) {
- if (var3.charAt(3) != '-') {
- break;
- }
-
- var3 = var3.substring(4);
- if (this.welcomeMsg == null) {
- this.welcomeMsg = var3;
- } else {
- this.welcomeMsg = this.welcomeMsg + var3;
- }
- }
- }
-
- }
- }
- }
-
- public TelnetInputStream get(String var1) throws IOException {
- Socket var2;
- try {
- var2 = this.openDataConnection("RETR " + var1);
- } catch (FileNotFoundException var7) {
- StringTokenizer var4 = new StringTokenizer(var1, "/");
- String var5 = null;
-
- while(var4.hasMoreElements()) {
- var5 = var4.nextToken();
- if (!var4.hasMoreElements()) {
- break;
- }
-
- try {
- this.method_0(var5);
- } catch (FtpProtocolException var6) {
- throw var7;
- }
- }
-
- if (var5 == null) {
- throw var7;
- }
-
- var2 = this.openDataConnection("RETR " + var5);
- }
-
- return new FtpInputStream(this, var2.getInputStream(), this.binaryMode);
- }
-
- public TelnetOutputStream put(String var1) throws IOException {
- Socket var2 = this.openDataConnection("STOR " + var1);
- return new TelnetOutputStream(var2.getOutputStream(), this.binaryMode);
- }
-
- public TelnetInputStream list() throws IOException {
- Socket var1 = this.openDataConnection("LIST");
- return new TelnetInputStream(var1.getInputStream(), this.binaryMode);
- }
-
- // $FF: renamed from: cd (java.lang.String) void
- public void method_0(String var1) throws IOException {
- this.issueCommandCheck("CWD " + var1);
- }
-
- public void binary() throws IOException {
- this.issueCommandCheck("TYPE I");
- this.binaryMode = true;
- }
-
- public void ascii() throws IOException {
- this.issueCommandCheck("TYPE A");
- this.binaryMode = false;
- }
-
- public FtpClient(String var1) throws IOException {
- this.openServer(var1, 21);
- }
-
- public FtpClient(String var1, int var2) throws IOException {
- this.openServer(var1, var2);
- }
-
- public FtpClient() {
- }
- }
-