//////////////////////////////////////////////////////////////////////////////// // RETRcomm class. // //////////////////////////////////////////////////////////////////////////////// import java.net.*; import java.io.*; class RETRcomm extends ftpFunc { public void start(ftpState sessionState) { System.out.println("RETRobj started!!"); DataOutputStream sendBuf = null; //Escrita. Socket tSocket = null; // Data connection. File listFile = null; // Para testar o arquivo. if(sessionState.param == null) { try { // Mensagem de arquivo inexistente. sessionState.sendMesg.writeBytes("550 Arquivo não existe.\r\n"); sessionState.sendMesg.flush(); } catch (IOException e) { System.out.println(e); } return; } else if(sessionState.param.charAt(0) == File.pathSeparatorChar) { //-------------------------------------------------------------------- // Path 'absoluto'. listFile = new File(sessionState.rootPath,sessionState.param); } else { //-------------------------------------------------------------------- // Path 'relativo'. listFile = new File(sessionState.rootPath,sessionState.path+sessionState.param); } //----------------------------------------------------------------------------------- // Envia o arquivo se existir. // if(listFile.exists()) { if(listFile.isFile() && listFile.canRead()) { //-------------------------------------------------------------------- // Envia mensagem na data connection. try { sessionState.sendMesg.writeBytes("150 Abrindo conexão binária.\r\n"); sessionState.sendMesg.flush(); // Cria o socket. tSocket = new Socket(sessionState.remoteInetAddress,2222);// sessionState.remotePort); // Output stream. sendBuf = new DataOutputStream(new BufferedOutputStream(tSocket.getOutputStream())); } catch (UnknownHostException e) { System.out.println("Don't know about host."); } catch (IOException e) { System.out.println(e); } try { FileInputStream readFile = new FileInputStream(listFile); int byteValue; //--------------------------------------------------------------- // Envia o arquivo. while((byteValue = readFile.read()) != -1) { sendBuf.writeByte(byteValue); } sendBuf.flush(); //--------------------------------------------------------------- // Termina a conexão de dado. tSocket.close(); // Envia mensagem de transmissão terminada. sessionState.sendMesg.writeBytes("226 Transferência efetuada.\r\n"); sessionState.sendMesg.flush(); } catch (IOException e) { System.out.println(e); } } else if(listFile.isDirectory()) { try { //--------------------------------------------------------------- // Mensagem de arquivo inexistente. sessionState.sendMesg.writeBytes("550 O arquivo é um diretório.\r\n"); sessionState.sendMesg.flush(); } catch (IOException e) { System.out.println(e); } } } else { try { //--------------------------------------------------------------- // Mensagem de arquivo inexistente. sessionState.sendMesg.writeBytes("550 Arquivo não existe.\r\n"); sessionState.sendMesg.flush(); } catch (IOException e) { System.out.println(e); } } } }