diff options
author | Kenny Root <kenny@the-b.org> | 2009-06-20 01:43:46 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-06-20 01:43:46 +0000 |
commit | 9bef0b9f5741aef298ddabc7a3c27a0c287fbd96 (patch) | |
tree | 1fc066e5ede36604adf2a6b8f9cf0d2ed3ba0111 /src/org | |
parent | 2b73500e56675a0c1bfb8261770d52515223ea98 (diff) | |
download | connectbot-9bef0b9f5741aef298ddabc7a3c27a0c287fbd96.tar.gz connectbot-9bef0b9f5741aef298ddabc7a3c27a0c287fbd96.tar.bz2 connectbot-9bef0b9f5741aef298ddabc7a3c27a0c287fbd96.zip |
Try to resume input stream
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@321 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/connectbot/service/Relay.java | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/org/connectbot/service/Relay.java b/src/org/connectbot/service/Relay.java index cd1c227..8cf9bf9 100644 --- a/src/org/connectbot/service/Relay.java +++ b/src/org/connectbot/service/Relay.java @@ -25,6 +25,7 @@ import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; +import java.nio.charset.CoderResult; import java.nio.charset.CodingErrorAction; import org.connectbot.transport.AbsTransport; @@ -90,18 +91,33 @@ public class Relay implements Runnable { byteArray = byteBuffer.array(); charArray = charBuffer.array(); + CoderResult result; + int bytesRead = 0; + byteBuffer.limit(0); + int bytesToRead; + int offset; try { while (true) { - bytesRead = transport.read(byteArray, 0, BUFFER_SIZE); + bytesToRead = byteBuffer.capacity() - byteBuffer.limit(); + offset = byteBuffer.arrayOffset() + byteBuffer.limit(); + bytesRead = transport.read(byteArray, offset, bytesToRead); if (bytesRead > 0) { - byteBuffer.position(0); - byteBuffer.limit(bytesRead); + byteBuffer.limit(byteBuffer.limit() + bytesRead); + synchronized (this) { - decoder.decode(byteBuffer, charBuffer, false); + result = decoder.decode(byteBuffer, charBuffer, false); } + + if (result.isUnderflow() && + byteBuffer.limit() == byteBuffer.capacity()) { + byteBuffer.compact(); + byteBuffer.limit(byteBuffer.position()); + byteBuffer.position(0); + } + buffer.putString(charArray, 0, charBuffer.position()); charBuffer.clear(); bridge.redraw(); |