mirror of
https://github.com/hierynomus/sshj.git
synced 2025-12-06 15:20:54 +03:00
Encapsulate SCPEngine
No more SCPEngine variable exposed to the outside.
This commit is contained in:
committed by
Shikhar Bhushan
parent
286a22270b
commit
137dc5ed42
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -162,7 +162,17 @@ class SCPEngine {
|
||||
scp.getOutputStream().flush();
|
||||
}
|
||||
|
||||
void transfer(InputStream in, OutputStream out, int bufSize, long len)
|
||||
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);
|
||||
}
|
||||
|
||||
private void transfer(InputStream in, OutputStream out, int bufSize, long len)
|
||||
throws IOException {
|
||||
final byte[] buf = new byte[bufSize];
|
||||
long count = 0;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user