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

View File

@@ -15,6 +15,7 @@
*/ */
package net.schmizz.sshj.xfer.scp; package net.schmizz.sshj.xfer.scp;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; 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()); private final SessionFactory host;
final SessionFactory host;
private final TransferListener listener; private final TransferListener listener;
Command scp; private Command scp;
int exitStatus; private int exitStatus;
SCPEngine(SessionFactory host, TransferListener listener) { SCPEngine(SessionFactory host, TransferListener listener) {
this.host = host; this.host = host;
@@ -161,8 +161,18 @@ class SCPEngine {
scp.getOutputStream().write(0); scp.getOutputStream().write(0);
scp.getOutputStream().flush(); 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 { throws IOException {
final byte[] buf = new byte[bufSize]; final byte[] buf = new byte[bufSize];
long count = 0; long count = 0;

View File

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

View File

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