• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2006-2011 Christian Plattner. All rights reserved.
3  * Please refer to the LICENSE.txt for licensing details.
4  */
5 package ch.ethz.ssh2.channel;
6 
7 import java.io.IOException;
8 import java.io.OutputStream;
9 
10 /**
11  * ChannelOutputStream.
12  *
13  * @author Christian Plattner
14  * @version 2.50, 03/15/10
15  */
16 public final class ChannelOutputStream extends OutputStream
17 {
18 	Channel c;
19 
20 	boolean isClosed = false;
21 
ChannelOutputStream(Channel c)22 	ChannelOutputStream(Channel c)
23 	{
24 		this.c = c;
25 	}
26 
27 	@Override
write(int b)28 	public void write(int b) throws IOException
29 	{
30 		byte[] buff = new byte[1];
31 
32 		buff[0] = (byte) b;
33 
34 		write(buff, 0, 1);
35 	}
36 
37 	@Override
close()38 	public void close() throws IOException
39 	{
40 		if (isClosed == false)
41 		{
42 			isClosed = true;
43 			c.cm.sendEOF(c);
44 		}
45 	}
46 
47 	@Override
flush()48 	public void flush() throws IOException
49 	{
50 		if (isClosed)
51 			throw new IOException("This OutputStream is closed.");
52 
53 		/* This is a no-op, since this stream is unbuffered */
54 	}
55 
56 	@Override
write(byte[] b, int off, int len)57 	public void write(byte[] b, int off, int len) throws IOException
58 	{
59 		if (isClosed)
60 			throw new IOException("This OutputStream is closed.");
61 
62 		if (b == null)
63 			throw new NullPointerException();
64 
65 		if ((off < 0) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0) || (off > b.length))
66 			throw new IndexOutOfBoundsException();
67 
68 		if (len == 0)
69 			return;
70 
71 		c.cm.sendData(c, b, off, len);
72 	}
73 
74 	@Override
write(byte[] b)75 	public void write(byte[] b) throws IOException
76 	{
77 		write(b, 0, b.length);
78 	}
79 }
80