The CrushTunnel process can be integrated into an existing workflow using a standalone machine acting as the tunnel provider, or programmatically through your own code.

Here is a stand alone example (one long line):

{{{
java -Dcrushtunnel.pasv.ip=71.123.244.10 -Dcrushtunnel.pasv.port.start=2000 -Dcrushtunnel.pasv.port.stop=2100 -Djava.awt.headless=true -cp CrushTunnel.jar com.crushftp.tunnel.AutoChannelProxy protocol=https host=www.crushftp.com port=443 username=demo password=demo localport=2121
}}}

That command would start the tunnel and make it a FTP server handling requests that ultimately ended up going through the tunnel and to the main CrushFTP server on the other side.  You can control the port ranges for PASV, and the IP that is given to the FTP clients for PASV mode.  The tunnel goes over HTTPS, so everything is encrypted between CrushTunnel and the server.

----
To programmatically start the tunnel, include the CrushTunnel.jar file, and do something similar to the following:

{{{
final AutoChannelProxy tunnel = new AutoChannelProxy();
Thread thread = new Thread(new Runnable(){public void run(){ //create a thread for running the tunnel as this method does not return until the tunnel is done.
    String args[] = new String[]{"protocol=https","host=www.crushftp.com","port=443","username=demo","password="demo","localport=2121"};
    tunnel.doTunnel(args);
}});
thread.start();
//tunnel is now open and ready.  Connections to it over FTP on 127.0.0.1 will be proxied securely through the tunnel to the CrushFTP FTP server side.

//to stop it later on
thread.interrupt();
}}}