Mercurial > 510Connectbot
comparison src/ch/ethz/ssh2/channel/ChannelInputStream.java @ 273:91a31873c42a ganymed
start conversion from trilead to ganymed
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Fri, 18 Jul 2014 11:21:46 -0700 |
parents | |
children | 071eccdff8ea |
comparison
equal
deleted
inserted
replaced
272:ce2f4e397703 | 273:91a31873c42a |
---|---|
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.InputStream; | |
9 | |
10 /** | |
11 * ChannelInputStream. | |
12 * | |
13 * @author Christian Plattner | |
14 * @version 2.50, 03/15/10 | |
15 */ | |
16 public final class ChannelInputStream extends InputStream | |
17 { | |
18 Channel c; | |
19 | |
20 boolean isClosed = false; | |
21 boolean isEOF = false; | |
22 boolean extendedFlag = false; | |
23 | |
24 ChannelInputStream(Channel c, boolean isExtended) | |
25 { | |
26 this.c = c; | |
27 this.extendedFlag = isExtended; | |
28 } | |
29 | |
30 @Override | |
31 public int available() throws IOException | |
32 { | |
33 if (isEOF) | |
34 return 0; | |
35 | |
36 int avail = c.cm.getAvailable(c, extendedFlag); | |
37 | |
38 /* We must not return -1 on EOF */ | |
39 | |
40 return (avail > 0) ? avail : 0; | |
41 } | |
42 | |
43 @Override | |
44 public void close() throws IOException | |
45 { | |
46 isClosed = true; | |
47 } | |
48 | |
49 @Override | |
50 public int read(byte[] b, int off, int len) throws IOException | |
51 { | |
52 if (b == null) | |
53 throw new NullPointerException(); | |
54 | |
55 if ((off < 0) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0) || (off > b.length)) | |
56 throw new IndexOutOfBoundsException(); | |
57 | |
58 if (len == 0) | |
59 return 0; | |
60 | |
61 if (isEOF) | |
62 return -1; | |
63 | |
64 int ret = c.cm.getChannelData(c, extendedFlag, b, off, len); | |
65 | |
66 if (ret == -1) | |
67 { | |
68 isEOF = true; | |
69 } | |
70 | |
71 return ret; | |
72 } | |
73 | |
74 @Override | |
75 public int read(byte[] b) throws IOException | |
76 { | |
77 return read(b, 0, b.length); | |
78 } | |
79 | |
80 @Override | |
81 public int read() throws IOException | |
82 { | |
83 /* Yes, this stream is pure and unbuffered, a single byte read() is slow */ | |
84 | |
85 final byte b[] = new byte[1]; | |
86 | |
87 int ret = read(b, 0, 1); | |
88 | |
89 if (ret != 1) | |
90 return -1; | |
91 | |
92 return b[0] & 0xff; | |
93 } | |
94 } |