1/*
2 * Copyright (c) 2011 David Kocher. All rights reserved.
3 * Please refer to the LICENSE.txt for licensing details.
4 */
5package ch.ethz.ssh2;
6
7import java.io.BufferedInputStream;
8import java.io.BufferedOutputStream;
9import java.io.IOException;
10import java.io.InputStream;
11
12import ch.ethz.ssh2.util.StringEncoder;
13
14/**
15 * @version $Id:$
16 */
17public class SCPOutputStream extends BufferedOutputStream
18{
19
20	private Session session;
21
22	private SCPClient scp;
23
24	public SCPOutputStream(SCPClient client, Session session, final String remoteFile, long length, String mode) throws IOException
25	{
26		super(session.getStdin(), 40000);
27		this.session = session;
28		this.scp = client;
29
30		InputStream is = new BufferedInputStream(session.getStdout(), 512);
31
32		scp.readResponse(is);
33
34		String cline = "C" + mode + " " + length + " " + remoteFile + "\n";
35
36		super.write(StringEncoder.GetBytes(cline));
37		this.flush();
38
39		scp.readResponse(is);
40	}
41
42	@Override
43	public void close() throws IOException
44	{
45		try
46		{
47			this.write(0);
48			this.flush();
49
50			scp.readResponse(session.getStdout());
51
52			this.write(StringEncoder.GetBytes("E\n"));
53			this.flush();
54		}
55		finally
56		{
57			if (session != null)
58				session.close();
59		}
60	}
61}
62