Package ftpserver

Source Code of ftpserver.Data

/*
* This file is part of the QuickServer library
* Copyright (C) 2003-2005 QuickServer.org
*
* Use, modification, copying and distribution of this software is subject to
* the terms and conditions of the GNU Lesser General Public License.
* You should have received a copy of the GNU LGP License along with this
* library; if not, you can download a copy from <http://www.quickserver.org/>.
*
* For questions, suggestions, bug-reports, enhancement-requests etc.
* visit http://www.quickserver.org
*
*/

package ftpserver;

import org.quickserver.net.*;
import org.quickserver.net.server.*;

import org.quickserver.util.pool.PoolableObject;
import org.apache.commons.pool.BasePoolableObjectFactory;
import org.apache.commons.pool.PoolableObjectFactory;

import java.io.*;
import java.net.*;

public class Data implements ClientData, PoolableObject {
  boolean isTransferring = false;
  boolean isRenameFrom = false;
  boolean isStop = false;
  boolean isPassive = false;

  Socket socket = null;
  ServerSocket server = null; //if passive 
  int socketPort = -1;
  int serverPort = -1;
  boolean closeDataServer = true;
  String ip = null;

  //pipelining
  boolean wasQuit = false;
  boolean isProcessing = false;
  int noOfBytesTransferred = -1;
  int startPosition = 0; //for REST

  String root = null; //no ending slash \
  String wDir = "/"; //WORKING DIRECTORY

  String account = null; //ACCOUNT
  String username = ""; //USERNAME
  boolean binary = false;
  char type = 'A'; //ASCII,IMAGE 
  char typeSub = 'N'; //Non-print,
  String mode = "Stream"; //Stream
  String structure = "File"; //File, Record

  public void sendFile(String file) throws Exception {
    isStop = false;
    if(socket==null)
      throw new IOException("No client connected");
    String input = "";
    int i=0;
    FileInputStream fin = null;
    BufferedOutputStream out = null;
    try {
      out = new BufferedOutputStream(socket.getOutputStream());
      fin = new FileInputStream(file);
      /*
      if(data.type == 'A') {
        PrintWriter rout=new PrintWriter(out);
        BufferedReader br = new BufferedReader(new InputStreamReader(fin));
        while(true) {
          input = br.readLine();
          if(input==null)
            break;
          rout.
        }
        rout.flush();
        //rout.close();
      } else {
       
      }*/
      while(true) {
        i = fin.read();
        if(i==-1 || isStop==true) //if aborted
          break;
        out.write(i);
      }
      out.flush();
    }catch (Exception e){
      throw e;
    } finally {
      if(fin!=null)
        fin.close();
    }
  }

  public void sendData(String sdata) throws Exception {
    //System.out.print("Sending data on datacon ");
    if(socket==null) {
      Thread.currentThread().sleep(500);
      if(socket==null) {
        throw new IOException("No client connected");
      }
    }
    BufferedOutputStream out = null;
    try {
      out = new BufferedOutputStream(socket.getOutputStream());
      out.write( sdata.getBytes(),0,sdata.length() );
      out.flush();
    }catch (Exception e){
      throw e;
    }
  }

  public void startDataServer(ServerSocket acceptSocket, ftpserver.Data data) {
    new DataServer(acceptSocket, data);
  }

  //-- PoolableObject
  public void clean() {
    isTransferring = false;
    isRenameFrom = false;
    isStop = false;
    isPassive = false;
    socket = null;
    server = null;
    socketPort = -1;
    serverPort = -1;
    closeDataServer = true;
    ip = null;
    wasQuit = false;
    isProcessing = false;
    noOfBytesTransferred = -1;
    startPosition = 0;
    root = null;
    wDir = "/";
    account = null;
    username = "";
    binary = false;
    type = 'A';
    typeSub = 'N';
    mode = "Stream";
    structure = "File";
  }

  public boolean isPoolable() {
    return true;
  }

  public PoolableObjectFactory getPoolableObjectFactory() {
    return  new BasePoolableObjectFactory() {
      public Object makeObject() {
        return new Data();
      }
      public void passivateObject(Object obj) {
        Data ed = (Data)obj;
        ed.clean();
      }
      public void destroyObject(Object obj) {
        if(obj==null) return;
        passivateObject(obj);
        obj = null;
      }
      public boolean validateObject(Object obj) {
        if(obj==null)
          return false;
        else
          return true;
      }
    };
  }
}

class DataServer extends Thread {
  ServerSocket acceptSocket=null;
  ftpserver.Data data = null;
  public DataServer(ServerSocket acceptSocket, ftpserver.Data data) {
    super("DataServer");
    this.acceptSocket = acceptSocket;
    this.data = data;
    setDaemon(true);
    this.data.isStop = false;
    start();
  }

  public void run() {
    try {
      data.closeDataServer = false;
      data.socket = acceptSocket.accept();
      //System.out.println("Data con opened.");
      while(data!=null && data.closeDataServer == false
        && data.isStop==false ) {
        Thread.sleep(300);
      }
      if(data.socket!=null) {
        data.socket.close();
      }
    } catch(IOException e) {
      System.err.println("Error at dataServer :"+e);
    } catch(InterruptedException e) {
      System.err.println("Thread Error at dataServer :"+e);
    } finally {
      try {
        acceptSocket.close();
      }catch(Exception re){
        System.err.println("BAD Error at dataServer :"+re);
      }
    }
    data.socket = null;
    data.server = null;
  }

 
}



TOP

Related Classes of ftpserver.Data

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.