1 package com.instantbank.collections.util; 2 3 import java.net.InetAddress; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 import java.net.UnknownHostException; 7 import java.io.BufferedInputStream; 8 import java.io.BufferedReader; 9 import java.io.FileInputStream; 10 import java.io.FileOutputStream; 11 import java.io.IOException; 12 import java.io.InputStreamReader; 13 import java.io.OutputStream; 14 import java.io.PrintWriter; 15 16 public class FTPServices { 17 Socket ctrlSocket; 18 public PrintWriter ctrlOutput; 19 public BufferedReader ctrlInput; 20 final int CTRLPORT = 21; 21 String serverType; 22 23 24 public FTPServices() { } 25 26 27 public void closeConnection() throws IOException { 28 try { 29 ctrlOutput.println("QUIT "); 30 ctrlOutput.flush(); 31 ctrlSocket.close(); 32 } 33 catch(IOException e) { 34 throw e; 35 } 36 } 37 38 39 public Socket dataConnection(String ctrlcmd) throws Exception { 40 String cmd = "PORT "; 41 int i; 42 Socket dataSocket = null; 43 44 try { 45 byte[] address = InetAddress.getLocalHost().getAddress(); 46 47 ServerSocket serverDataSocket = new ServerSocket(0, 1); 48 49 for(i = 0; i < 4; ++i) { 50 cmd = cmd + (address[i] & 0xff) + ","; 51 } 52 cmd = cmd + (((serverDataSocket.getLocalPort()) / 256) & 0xff) 53 + "," 54 + (serverDataSocket.getLocalPort() & 0xff); 55 56 ctrlOutput.println(cmd); 57 ctrlOutput.flush(); 58 59 ctrlOutput.println(ctrlcmd); 60 ctrlOutput.flush(); 61 62 serverDataSocket.setSoTimeout(5000); 63 dataSocket = serverDataSocket.accept(); 64 serverDataSocket.close(); 65 66 } 67 catch(Exception e) { 68 throw e; 69 } 70 return dataSocket; 71 } 72 73 74 public void doAscii() throws Exception { 75 try { 76 ctrlOutput.println("TYPE A"); 77 ctrlOutput.flush(); 78 } 79 catch(Exception e) { 80 throw e; 81 } 82 } 83 84 85 public void doBinary() throws Exception { 86 try { 87 ctrlOutput.println("TYPE I"); 88 ctrlOutput.flush(); 89 } 90 catch(Exception e) { 91 throw e; 92 } 93 } 94 95 96 public void doCd(String dirName) throws Exception { 97 try { 98 ctrlOutput.println("CWD " + dirName); 99 ctrlOutput.flush(); 100 } 101 catch(Exception e) { 102 throw e; 103 } 104 } 105 106 107 public void doLs() throws Exception { 108 try { 109 int n; 110 byte[] buff = new byte[1024]; 111 112 Socket dataSocket = dataConnection("LIST"); 113 114 BufferedInputStream dataInput = new BufferedInputStream(dataSocket.getInputStream()); 115 116 while((n = dataInput.read(buff)) > 0) { 117 System.out.write(buff, 0, n); 118 } 119 dataSocket.close(); 120 } 121 catch(Exception e) { 122 throw e; 123 } 124 } 125 126 127 public void doGet(String fileName, String path) throws Exception { 128 129 try { 130 byte[] buff = new byte[1024]; 131 FileServices f = new FileServices(); 132 int n; 133 Socket dataSocket = null; 134 135 FileOutputStream outfile = new FileOutputStream(fileName); 136 if(serverType.equals("windows")) { 137 dataSocket = dataConnection("RECV " + fileName); 138 } 139 else 140 if(serverType.equals("unix")) { 141 dataSocket = dataConnection("RETR " + fileName); 142 } 143 144 BufferedInputStream dataInput = new BufferedInputStream(dataSocket.getInputStream()); 145 while((n = dataInput.read(buff)) > 0) { 146 outfile.write(buff, 0, n); 147 } 148 dataSocket.close(); 149 outfile.close(); 150 f.copy(fileName, "", path); 151 f.delete(fileName, ""); 152 153 } 154 catch(Exception e) { 155 throw e; 156 } 157 } 158 159 160 public void doPut(String fileName, String path) throws Exception { 161 162 try { 163 byte[] buff = new byte[1024]; 164 FileServices f = new FileServices(); 165 int n; 166 FileInputStream sendfile = null; 167 Socket dataSocket = null; 168 169 f.copy(fileName, path, ""); 170 171 try { 172 sendfile = new FileInputStream(fileName); 173 } 174 catch(Exception e) { 175 throw e; 176 } 177 178 if(serverType.equals("windows")) { 179 dataSocket = dataConnection("SEND " + fileName); 180 } 181 else 182 if(serverType.equals("unix")) { 183 dataSocket = dataConnection("STOR " + fileName); 184 } 185 186 OutputStream outstr = dataSocket.getOutputStream(); 187 188 while((n = sendfile.read(buff)) > 0) { 189 outstr.write(buff, 0, n); 190 } 191 dataSocket.close(); 192 sendfile.close(); 193 194 f.delete(fileName, ""); 195 196 } 197 catch(Exception e) { 198 throw e; 199 } 200 } 201 202 203 public FTPServices(String type) { 204 serverType = type; 205 } 206 207 208 public String getServerType(String type) { 209 return serverType; 210 } 211 212 213 public void openConnection(String host, String userName, String password) throws IOException, UnknownHostException { 214 openConnection(host, CTRLPORT, userName, password); 215 } 216 217 218 public void openConnection(String host, int port, String userName, String password) throws IOException, UnknownHostException { 219 try { 220 ctrlSocket = new Socket(host, port); 221 ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream()); 222 ctrlInput = new BufferedReader(new InputStreamReader(ctrlSocket.getInputStream())); 223 224 ctrlOutput.println("USER " + userName); 225 ctrlOutput.flush(); 226 ctrlOutput.println("PASS " + password); 227 ctrlOutput.flush(); 228 } 229 catch(IOException e) { 230 throw e; 231 } 232 } 233 234 235 public void setServerType(String type) { 236 serverType = type; 237 } 238 239 } 240 241