148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/* 248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Copyright (c) 2011 David Kocher. All rights reserved. 348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * Please refer to the LICENSE.txt for licensing details. 448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */ 548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpackage ch.ethz.ssh2; 648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.BufferedInputStream; 848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.BufferedOutputStream; 948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.IOException; 1048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport java.io.InputStream; 1148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 1248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodimport ch.ethz.ssh2.util.StringEncoder; 1348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 1448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood/** 1548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood * @version $Id:$ 1648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood */ 1748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwoodpublic class SCPOutputStream extends BufferedOutputStream 1848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood{ 1948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 2048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood private Session session; 2148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 2248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood private SCPClient scp; 2348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 2448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood public SCPOutputStream(SCPClient client, Session session, final String remoteFile, long length, String mode) throws IOException 2548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 2648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood super(session.getStdin(), 40000); 2748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.session = session; 2848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.scp = client; 2948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood InputStream is = new BufferedInputStream(session.getStdout(), 512); 3148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood scp.readResponse(is); 3348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood String cline = "C" + mode + " " + length + " " + remoteFile + "\n"; 3548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood super.write(StringEncoder.GetBytes(cline)); 3748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.flush(); 3848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 3948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood scp.readResponse(is); 4048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 4148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 4248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood @Override 4348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood public void close() throws IOException 4448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 4548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood try 4648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 4748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.write(0); 4848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.flush(); 4948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 5048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood scp.readResponse(session.getStdout()); 5148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood 5248ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.write(StringEncoder.GetBytes("E\n")); 5348ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood this.flush(); 5448ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 5548ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood finally 5648ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood { 5748ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood if (session != null) 5848ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood session.close(); 5948ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 6048ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood } 6148ded2421114c4c87ef3f8005c9f793a5d077cbdMike Lockwood} 62