home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / net / ftp / FtpClient.class (.txt) next >
Encoding:
Java Class File  |  1998-04-23  |  5.5 KB  |  222 lines

  1. package sun.net.ftp;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.net.InetAddress;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.util.StringTokenizer;
  9. import sun.net.NetworkClient;
  10. import sun.net.TelnetInputStream;
  11. import sun.net.TelnetOutputStream;
  12. import sun.net.TransferProtocolClient;
  13.  
  14. public class FtpClient extends TransferProtocolClient {
  15.    public static final int FTP_PORT = 21;
  16.    static int FTP_SUCCESS = 1;
  17.    static int FTP_TRY_AGAIN = 2;
  18.    static int FTP_ERROR = 3;
  19.    private Socket dataSocket;
  20.    private boolean replyPending = false;
  21.    private boolean binaryMode = false;
  22.    String user;
  23.    String password;
  24.    String command;
  25.    int lastReplyCode;
  26.    public String welcomeMsg;
  27.    public static boolean useFtpProxy = Boolean.getBoolean("ftpProxySet");
  28.    public static String ftpProxyHost = System.getProperty("ftpProxyHost");
  29.    public static int ftpProxyPort = Integer.getInteger("ftpProxyPort", 80);
  30.  
  31.    public void closeServer() throws IOException {
  32.       if (((NetworkClient)this).serverIsOpen()) {
  33.          this.issueCommand("QUIT");
  34.          super.closeServer();
  35.       }
  36.  
  37.    }
  38.  
  39.    protected int issueCommand(String var1) throws IOException {
  40.       this.command = var1;
  41.       if (this.replyPending && this.readReply() == FTP_ERROR) {
  42.          System.out.print("Error reading pending reply\n");
  43.       }
  44.  
  45.       this.replyPending = false;
  46.  
  47.       int var2;
  48.       do {
  49.          ((TransferProtocolClient)this).sendServer(var1 + "\r\n");
  50.          var2 = this.readReply();
  51.       } while(var2 == FTP_TRY_AGAIN);
  52.  
  53.       return var2;
  54.    }
  55.  
  56.    protected void issueCommandCheck(String var1) throws IOException {
  57.       if (this.issueCommand(var1) != FTP_SUCCESS) {
  58.          throw new FtpProtocolException(var1);
  59.       }
  60.    }
  61.  
  62.    protected int readReply() throws IOException {
  63.       this.lastReplyCode = ((TransferProtocolClient)this).readServerResponse();
  64.       switch (this.lastReplyCode / 100) {
  65.          case 1:
  66.             this.replyPending = true;
  67.          case 2:
  68.          case 3:
  69.             return FTP_SUCCESS;
  70.          case 5:
  71.             if (this.lastReplyCode == 530) {
  72.                if (this.user == null) {
  73.                   throw new FtpLoginException("Not logged in");
  74.                }
  75.  
  76.                return FTP_ERROR;
  77.             } else if (this.lastReplyCode == 550) {
  78.                throw new FileNotFoundException(this.command + ": " + ((TransferProtocolClient)this).getResponseString());
  79.             }
  80.          case 4:
  81.          default:
  82.             return FTP_ERROR;
  83.       }
  84.    }
  85.  
  86.    protected Socket openDataConnection(String var1) throws IOException {
  87.       InetAddress var4 = InetAddress.getLocalHost();
  88.       byte[] var5 = var4.getAddress();
  89.       ServerSocket var2 = new ServerSocket(0, 1);
  90.       String var3 = "PORT ";
  91.  
  92.       for(int var7 = 0; var7 < var5.length; ++var7) {
  93.          var3 = var3 + (var5[var7] & 255) + ",";
  94.       }
  95.  
  96.       var3 = var3 + (var2.getLocalPort() >>> 8 & 255) + "," + (var2.getLocalPort() & 255);
  97.       if (this.issueCommand(var3) == FTP_ERROR) {
  98.          FtpProtocolException var9 = new FtpProtocolException("PORT");
  99.          var2.close();
  100.          throw var9;
  101.       } else if (this.issueCommand(var1) == FTP_ERROR) {
  102.          FtpProtocolException var6 = new FtpProtocolException(var1);
  103.          var2.close();
  104.          throw var6;
  105.       } else {
  106.          this.dataSocket = var2.accept();
  107.          var2.close();
  108.          return this.dataSocket;
  109.       }
  110.    }
  111.  
  112.    public void openServer(String var1) throws IOException {
  113.       byte var2 = 21;
  114.       this.openServer(var1, var2);
  115.    }
  116.  
  117.    public void openServer(String var1, int var2) throws IOException {
  118.       super.openServer(var1, var2);
  119.       if (this.readReply() == FTP_ERROR) {
  120.          throw new FtpProtocolException("Welcome message");
  121.       }
  122.    }
  123.  
  124.    public void login(String var1, String var2) throws IOException {
  125.       if (!((NetworkClient)this).serverIsOpen()) {
  126.          throw new FtpLoginException("not connected to host");
  127.       } else {
  128.          this.user = var1;
  129.          this.password = var2;
  130.          if (this.issueCommand("USER " + var1) == FTP_ERROR) {
  131.             throw new FtpLoginException("user");
  132.          } else if (var2 != null && this.issueCommand("PASS " + var2) == FTP_ERROR) {
  133.             throw new FtpLoginException("password");
  134.          } else {
  135.             for(int var4 = 0; var4 < super.serverResponse.size(); ++var4) {
  136.                String var3 = (String)super.serverResponse.elementAt(var4);
  137.                if (var3 != null) {
  138.                   if (var3.charAt(3) != '-') {
  139.                      break;
  140.                   }
  141.  
  142.                   var3 = var3.substring(4);
  143.                   if (this.welcomeMsg == null) {
  144.                      this.welcomeMsg = var3;
  145.                   } else {
  146.                      this.welcomeMsg = this.welcomeMsg + var3;
  147.                   }
  148.                }
  149.             }
  150.  
  151.          }
  152.       }
  153.    }
  154.  
  155.    public TelnetInputStream get(String var1) throws IOException {
  156.       Socket var2;
  157.       try {
  158.          var2 = this.openDataConnection("RETR " + var1);
  159.       } catch (FileNotFoundException var7) {
  160.          StringTokenizer var4 = new StringTokenizer(var1, "/");
  161.          String var5 = null;
  162.  
  163.          while(var4.hasMoreElements()) {
  164.             var5 = var4.nextToken();
  165.             if (!var4.hasMoreElements()) {
  166.                break;
  167.             }
  168.  
  169.             try {
  170.                this.method_0(var5);
  171.             } catch (FtpProtocolException var6) {
  172.                throw var7;
  173.             }
  174.          }
  175.  
  176.          if (var5 == null) {
  177.             throw var7;
  178.          }
  179.  
  180.          var2 = this.openDataConnection("RETR " + var5);
  181.       }
  182.  
  183.       return new FtpInputStream(this, var2.getInputStream(), this.binaryMode);
  184.    }
  185.  
  186.    public TelnetOutputStream put(String var1) throws IOException {
  187.       Socket var2 = this.openDataConnection("STOR " + var1);
  188.       return new TelnetOutputStream(var2.getOutputStream(), this.binaryMode);
  189.    }
  190.  
  191.    public TelnetInputStream list() throws IOException {
  192.       Socket var1 = this.openDataConnection("LIST");
  193.       return new TelnetInputStream(var1.getInputStream(), this.binaryMode);
  194.    }
  195.  
  196.    // $FF: renamed from: cd (java.lang.String) void
  197.    public void method_0(String var1) throws IOException {
  198.       this.issueCommandCheck("CWD " + var1);
  199.    }
  200.  
  201.    public void binary() throws IOException {
  202.       this.issueCommandCheck("TYPE I");
  203.       this.binaryMode = true;
  204.    }
  205.  
  206.    public void ascii() throws IOException {
  207.       this.issueCommandCheck("TYPE A");
  208.       this.binaryMode = false;
  209.    }
  210.  
  211.    public FtpClient(String var1) throws IOException {
  212.       this.openServer(var1, 21);
  213.    }
  214.  
  215.    public FtpClient(String var1, int var2) throws IOException {
  216.       this.openServer(var1, var2);
  217.    }
  218.  
  219.    public FtpClient() {
  220.    }
  221. }
  222.