aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ch/ethz/ssh2/SCPOutputStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ch/ethz/ssh2/SCPOutputStream.java')
-rw-r--r--src/main/java/ch/ethz/ssh2/SCPOutputStream.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/java/ch/ethz/ssh2/SCPOutputStream.java b/src/main/java/ch/ethz/ssh2/SCPOutputStream.java
new file mode 100644
index 0000000..8c511ea
--- /dev/null
+++ b/src/main/java/ch/ethz/ssh2/SCPOutputStream.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2011 David Kocher. All rights reserved.
+ * Please refer to the LICENSE.txt for licensing details.
+ */
+package ch.ethz.ssh2;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import ch.ethz.ssh2.util.StringEncoder;
+
+/**
+ * @version $Id:$
+ */
+public class SCPOutputStream extends BufferedOutputStream
+{
+
+ private Session session;
+
+ private SCPClient scp;
+
+ public SCPOutputStream(SCPClient client, Session session, final String remoteFile, long length, String mode) throws IOException
+ {
+ super(session.getStdin(), 40000);
+ this.session = session;
+ this.scp = client;
+
+ InputStream is = new BufferedInputStream(session.getStdout(), 512);
+
+ scp.readResponse(is);
+
+ String cline = "C" + mode + " " + length + " " + remoteFile + "\n";
+
+ super.write(StringEncoder.GetBytes(cline));
+ this.flush();
+
+ scp.readResponse(is);
+ }
+
+ @Override
+ public void close() throws IOException
+ {
+ try
+ {
+ this.write(0);
+ this.flush();
+
+ scp.readResponse(session.getStdout());
+
+ this.write(StringEncoder.GetBytes("E\n"));
+ this.flush();
+ }
+ finally
+ {
+ if (session != null)
+ session.close();
+ }
+ }
+}