Encapsulate SCPEngine

No more SCPEngine variable exposed to the outside.
This commit is contained in:
Cyril Ledru
2011-03-16 17:56:05 +08:00
committed by Shikhar Bhushan
parent 286a22270b
commit 137dc5ed42
4 changed files with 32 additions and 26 deletions

View File

@@ -23,10 +23,8 @@ import java.util.List;
import net.schmizz.sshj.common.IOUtils;
import net.schmizz.sshj.common.SSHException;
import net.schmizz.sshj.connection.channel.direct.SessionFactory;
import net.schmizz.sshj.xfer.FileTransferUtil;
import net.schmizz.sshj.xfer.ModeSetter;
import net.schmizz.sshj.xfer.TransferListener;
import net.schmizz.sshj.xfer.scp.SCPEngine.Arg;
/** Support for uploading files over a connected link using SCP. */
@@ -38,8 +36,8 @@ public final class SCPDownloadClient {
private SCPEngine engine;
SCPDownloadClient(SessionFactory host, TransferListener listener, ModeSetter modeSetter) {
engine = new SCPEngine(host, listener);
SCPDownloadClient(SCPEngine engine, ModeSetter modeSetter) {
this.engine = engine;
this.modeSetter = modeSetter;
}
@@ -52,7 +50,7 @@ public final class SCPDownloadClient {
} finally {
engine.exit();
}
return engine.exitStatus;
return engine.getExitStatus();
}
public boolean getRecursive() {
@@ -171,7 +169,7 @@ public final class SCPDownloadClient {
engine.signal("Remote can start transfer");
final FileOutputStream fos = new FileOutputStream(f);
try {
engine.transfer(engine.scp.getInputStream(), fos, engine.scp.getLocalMaxPacketSize(), length);
engine.transfertFromRemote(length, fos);
} finally {
IOUtils.closeQuietly(fos);
}

View File

@@ -15,6 +15,7 @@
*/
package net.schmizz.sshj.xfer.scp;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -53,17 +54,16 @@ class SCPEngine {
}
}
static final String SCP_COMMAND = "scp";
private static final String SCP_COMMAND = "scp";
private static final char LF = '\n';
static final char LF = '\n';
private final Logger log = LoggerFactory.getLogger(getClass());
final Logger log = LoggerFactory.getLogger(getClass());
final SessionFactory host;
private final SessionFactory host;
private final TransferListener listener;
Command scp;
int exitStatus;
private Command scp;
private int exitStatus;
SCPEngine(SessionFactory host, TransferListener listener) {
this.host = host;
@@ -161,8 +161,18 @@ class SCPEngine {
scp.getOutputStream().write(0);
scp.getOutputStream().flush();
}
void transfertToRemote(LocalFile f, final InputStream src)
throws IOException {
transfer(src, scp.getOutputStream(), scp.getRemoteMaxPacketSize(), f.length());
}
void transfertFromRemote(final long length, final FileOutputStream fos)
throws IOException {
transfer(scp.getInputStream(), fos, scp.getLocalMaxPacketSize(), length);
}
void transfer(InputStream in, OutputStream out, int bufSize, long len)
private void transfer(InputStream in, OutputStream out, int bufSize, long len)
throws IOException {
final byte[] buf = new byte[bufSize];
long count = 0;

View File

@@ -34,11 +34,15 @@ public class SCPFileTransfer
}
public SCPDownloadClient newSCPDownloadClient() {
return new SCPDownloadClient(sessionFactory, getTransferListener(), getModeSetter());
return new SCPDownloadClient(getSCPEngine(), getModeSetter());
}
public SCPUploadClient newSCPUploadClient() {
return new SCPUploadClient(sessionFactory, getTransferListener(), getModeGetter());
return new SCPUploadClient(getSCPEngine(), getModeGetter());
}
private SCPEngine getSCPEngine() {
return new SCPEngine(sessionFactory, getTransferListener());
}
@Override

View File

@@ -15,7 +15,6 @@
*/
package net.schmizz.sshj.xfer.scp;
import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
@@ -23,10 +22,8 @@ import java.util.List;
import net.schmizz.sshj.common.IOUtils;
import net.schmizz.sshj.common.SSHException;
import net.schmizz.sshj.connection.channel.direct.SessionFactory;
import net.schmizz.sshj.xfer.LocalFile;
import net.schmizz.sshj.xfer.ModeGetter;
import net.schmizz.sshj.xfer.TransferListener;
import net.schmizz.sshj.xfer.scp.SCPEngine.Arg;
/** Support for uploading files over a connected link using SCP. */
@@ -36,8 +33,8 @@ public final class SCPUploadClient {
private SCPEngine engine;
SCPUploadClient(SessionFactory host, TransferListener listener, ModeGetter modeGetter) {
engine = new SCPEngine(host, listener);
SCPUploadClient(SCPEngine engine, ModeGetter modeGetter) {
this.engine = engine;
this.modeGetter = modeGetter;
}
@@ -50,10 +47,7 @@ public final class SCPUploadClient {
} finally {
engine.exit();
}
return engine.exitStatus;
}
public void setFileFilter(FileFilter fileFilter) {
return engine.getExitStatus();
}
private synchronized void startCopy(LocalFile sourceFile, String targetPath)
@@ -102,7 +96,7 @@ public final class SCPUploadClient {
final InputStream src = f.stream();
try {
engine.sendMessage("C0" + getPermString(f) + " " + f.length() + " " + f.getName());
engine.transfer(src, engine.scp.getOutputStream(), engine.scp.getRemoteMaxPacketSize(), f.length());
engine.transfertToRemote(f, src);
engine.signal("Transfer done");
engine.check("Remote agrees transfer done");
} finally {