Mercurial > 510Connectbot
annotate app/src/main/java/org/tn5250j/framework/tn5250/DataStreamProducer.java @ 445:8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Mon, 04 Jan 2016 15:52:25 -0800 |
parents | d29cce60f393 |
children | 5ce5235adde6 |
rev | line source |
---|---|
3 | 1 package org.tn5250j.framework.tn5250; |
2 | |
3 import java.io.BufferedInputStream; | |
4 import java.io.ByteArrayOutputStream; | |
5 import java.io.IOException; | |
6 import java.net.SocketException; | |
7 import java.util.concurrent.BlockingQueue; | |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
8 |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
9 import static org.tn5250j.framework.tn5250.Stream5250.OPCODE_OFFSET; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
10 |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
11 import java.util.Timer; |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
12 import java.util.TimerTask; |
3 | 13 |
25
5949eb469a79
adding tn5250 files, native android logging
Carl Byington <carl@five-ten-sg.com>
parents:
3
diff
changeset
|
14 import android.util.Log; |
5949eb469a79
adding tn5250 files, native android logging
Carl Byington <carl@five-ten-sg.com>
parents:
3
diff
changeset
|
15 |
3 | 16 |
17 public class DataStreamProducer implements Runnable { | |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
18 private static final int MINIMAL_PARTIAL_STREAM_LEN = 2; |
25
5949eb469a79
adding tn5250 files, native android logging
Carl Byington <carl@five-ten-sg.com>
parents:
3
diff
changeset
|
19 private static final String TAG = "DataStreamProducer"; |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
20 private tnvt vt; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
21 private BufferedInputStream bin; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
22 private ByteArrayOutputStream baosin; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
23 private byte[] saveStream; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
24 private final BlockingQueue<Object> dsq; |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
25 private byte[] dataStream; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
26 private DataStreamDumper dataStreamDumper = new DataStreamDumper(); |
3 | 27 |
25
5949eb469a79
adding tn5250 files, native android logging
Carl Byington <carl@five-ten-sg.com>
parents:
3
diff
changeset
|
28 |
3 | 29 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
30 public DataStreamProducer(tnvt vt, BufferedInputStream bin, BlockingQueue<Object> queue, byte[] init) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
31 this.bin = bin; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
32 this.vt = vt; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
33 baosin = new ByteArrayOutputStream(); |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
34 dsq = queue; |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
35 dataStream = init; |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
36 } |
3 | 37 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
38 public final void run() { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
39 boolean done = false; |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
40 Thread me = Thread.currentThread(); |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
41 // load the first response screen |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
42 loadStream(dataStream, 0); |
25
5949eb469a79
adding tn5250 files, native android logging
Carl Byington <carl@five-ten-sg.com>
parents:
3
diff
changeset
|
43 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
44 while (!done) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
45 try { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
46 byte[] abyte0 = readIncoming(); |
3 | 47 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
48 // WVL - LDC : 17/05/2004 : Device name negotiations send TIMING MARK |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
49 // Restructured to the readIncoming() method to return null |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
50 // on TIMING MARK. Don't process in that case (abyte0 == null)! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
51 if (abyte0 != null) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
52 // WVL - LDC : 16/07/2003 : TR.000345 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
53 // When the socket has been closed, the reading returns |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
54 // no bytes (an empty byte arrray). |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
55 // But the loadStream fails on this, so we check it here! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
56 if (abyte0.length > 0) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
57 loadStream(abyte0, 0); |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
58 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
59 // WVL - LDC : 16/07/2003 : TR.000345 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
60 // Returning no bytes means the input buffer has |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
61 // reached end-of-stream, so we do a disconnect! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
62 else { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
63 done = true; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
64 vt.disconnect(); |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
65 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
66 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
67 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
68 catch (SocketException se) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
69 Log.w(TAG, " DataStreamProducer thread interrupted and stopping " + se.getMessage()); |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
70 done = true; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
71 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
72 catch (IOException ioe) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
73 Log.w(TAG, ioe.getMessage()); |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
74 if (me.isInterrupted()) done = true; |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
75 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
76 catch (Exception ex) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
77 Log.w(TAG, ex.getMessage()); |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
78 if (me.isInterrupted()) done = true; |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
79 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
80 } |
3 | 81 } |
82 | |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
83 private void loadStream(byte streamBuffer[], int offset) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
84 |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
85 int partialLen = (streamBuffer[offset] & 0xff) << 8 | streamBuffer[offset + 1] & 0xff; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
86 int bufferLen = streamBuffer.length; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
87 |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
88 Log.d(TAG, "loadStream() offset=" + offset + " partialLen=" + partialLen + " bufferLen=" + bufferLen); |
3 | 89 |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
90 if (saveStream != null) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
91 log.debug("partial stream found"); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
92 bufferLen = saveStream.length + streamBuffer.length; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
93 byte[] inter = new byte[bufferLen]; |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
94 System.arraycopy(saveStream, 0, inter, 0, saveStream.length); |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
95 System.arraycopy(streamBuffer, 0, inter, saveStream.length, streamBuffer.length); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
96 streamBuffer = new byte[bufferLen]; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
97 System.arraycopy(inter, 0, streamBuffer, 0, bufferLen); |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
98 saveStream = null; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
99 } |
3 | 100 |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
101 if (partialLen > bufferLen) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
102 saveStream = new byte[streamBuffer.length]; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
103 Log.d(TAG, "partial stream saved"); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
104 System.arraycopy(streamBuffer, 0, saveStream, 0, streamBuffer.length); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
105 } else { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
106 int buf_len = partialLen + 2; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
107 byte[] buf = new byte[buf_len]; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
108 if (isBufferShifted(partialLen, bufferLen) && isOpcodeShifted(streamBuffer, offset)) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
109 log.debug("Invalid stream buffer detected. Ignoring the inserted byte."); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
110 System.arraycopy(streamBuffer, offset, buf, 0, MINIMAL_PARTIAL_STREAM_LEN); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
111 System.arraycopy(streamBuffer, offset + MINIMAL_PARTIAL_STREAM_LEN + 1, buf, MINIMAL_PARTIAL_STREAM_LEN, partialLen); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
112 } else { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
113 System.arraycopy(streamBuffer, offset, buf, 0, buf_len); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
114 } |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
115 try { |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
116 dsq.put(buf); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
117 if (streamBuffer.length > buf.length + offset + MINIMAL_PARTIAL_STREAM_LEN) |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
118 loadStream(streamBuffer, offset + buf_len); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
119 } catch (InterruptedException ex) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
120 Log.w(TAG, "load stream error.", ex); |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
121 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
122 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
123 } |
3 | 124 |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
125 private boolean isOpcodeShifted(byte[] streamBuffer, int offset) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
126 byte code = streamBuffer[offset + 1 + OPCODE_OFFSET]; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
127 return (0 <= code && code <= 12); |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
128 } |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
129 |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
130 private boolean isBufferShifted(int partialLen, int bufferLen) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
131 return partialLen + MINIMAL_PARTIAL_STREAM_LEN + 1 == bufferLen; |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
132 } |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
133 |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
134 public final byte[] readIncoming() throws IOException { |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
135 boolean done = false; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
136 boolean negotiate = false; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
137 baosin.reset(); |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
138 int j = -1; |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
139 Timer timer = new Timer("data.stream", true); |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
140 TimerTask task = null; |
3 | 141 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
142 while (!done) { |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
143 if (bin.available() == 0) { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
144 task = new TimerTask() { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
145 public void run() { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
146 try { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
147 dsq.put(new Integer(0)); // trigger buffer.testChanged() |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
148 } |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
149 catch (Exception ex) { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
150 Log.w(TAG, "readIncoming error " + ex.getMessage()); |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
151 } |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
152 } |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
153 }; |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
154 timer.schedule(task, 10); // 10 ms delay |
392
7ac1a0b02f44
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
219
diff
changeset
|
155 } |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
156 |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
157 int i = bin.read(); |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
158 |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
159 if (task != null) { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
160 task.cancel(); |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
161 task = null; |
392
7ac1a0b02f44
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
219
diff
changeset
|
162 } |
3 | 163 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
164 // WVL - LDC : 16/07/2003 : TR.000345 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
165 // The inStream return -1 when end-of-stream is reached. This |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
166 // happens e.g. when the connection is closed from the AS/400. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
167 // So we stop in this case! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
168 // ==> an empty byte array is returned from this method. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
169 if (i == -1) { // nothing read! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
170 done = true; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
171 vt.disconnect(); |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
172 continue; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
173 } |
3 | 174 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
175 // We use the values instead of the static values IAC and EOR |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
176 // because they are defined as bytes. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
177 // |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
178 // The > if(i != 255 || j != 255) < is a hack for the double FF FF's |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
179 // that are being returned. I do not know why this is like this and |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
180 // can not find any documentation for it. It is also being returned |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
181 // on my Client Access tcp dump as well so they are handling it. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
182 // |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
183 // my5250 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
184 // 0000: 00 50 DA 44 C8 45 42 00 00 00 00 24 08 00 45 00 .P.D.EB....$..E. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
185 // 0010: 04 2A BC F9 00 00 40 06 D0 27 C1 A8 33 04 C1 A8 .*....@..'..3... |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
186 // 0020: 33 58 00 17 04 18 6F A2 83 CB 00 1E D1 BA 50 18 3X....o.......P. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
187 // 0030: 20 00 8A 9A 00 00 03 FF FF 12 A0 00 00 04 00 00 ............... |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
188 // --------------------------- || || ------------------------------------- |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
189 // 0040: 03 04 40 04 11 00 20 01 07 00 00 00 18 00 00 10 ..@... ......... |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
190 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
191 if (j == 255 && i == 255) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
192 j = -1; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
193 continue; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
194 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
195 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
196 baosin.write(i); |
3 | 197 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
198 // check for end of record EOR and IAC - FFEF |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
199 if (j == 255 && i == 239) |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
200 done = true; |
3 | 201 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
202 // This is to check for the TELNET TIMING MARK OPTION |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
203 // rfc860 explains this in more detail. When we receive it |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
204 // we will negotiate with the server by sending a WONT'T TIMING-MARK |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
205 // This will let the server know that we processed the information |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
206 // and are just waiting for the user to enter some data so keep the |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
207 // socket alive. This is more or less a AYT (ARE YOU THERE) or not. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
208 if (i == 253 && j == 255) { |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
209 done = true; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
210 negotiate = true; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
211 } |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
212 |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
213 j = i; |
3 | 214 } |
215 | |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
216 // after the initial negotiation we might get other options such as |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
217 // timing marks ?????????????? do we ???????????? look at telnet spec |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
218 // yes we do. rfc860 explains about timing marks. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
219 // WVL - LDC : 17/05/2004 : Device name negotiations send TIMING MARK |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
220 // to existing device! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
221 // Handled incorrectly: we cannot continue processing the TIMING MARK DO |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
222 // after we have handled it in the vt.negotiate() |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
223 // We should not return the bytes; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
224 // ==> restructured to return null after negotiation! |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
225 // Impacts the run method! Added the null check. |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
226 byte[] rBytes = baosin.toByteArray(); |
3 | 227 |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
228 dataStreamDumper.dump(rBytes); |
3 | 229 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
230 if (negotiate) { |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
231 if (bin.available() == 0) { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
232 task = new TimerTask() { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
233 public void run() { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
234 try { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
235 dsq.put(new Integer(0)); // trigger buffer.testChanged() |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
236 } |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
237 catch (Exception ex) { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
238 Log.w(TAG, "readIncoming error " + ex.getMessage()); |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
239 } |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
240 } |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
241 }; |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
242 timer.schedule(task, 10); // 10 ms delay |
392
7ac1a0b02f44
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
219
diff
changeset
|
243 } |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
244 |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
245 // get the negotiation option |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
246 baosin.write(bin.read()); |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
247 |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
248 if (task != null) { |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
249 task.cancel(); |
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
250 task = null; |
392
7ac1a0b02f44
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
219
diff
changeset
|
251 } |
394
24186858750f
add test buffer changed when input stream runs dry, similar to async test
Carl Byington <carl@five-ten-sg.com>
parents:
392
diff
changeset
|
252 |
3 | 253 vt.negotiate(rBytes); |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
254 return null; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
255 } |
3 | 256 |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
257 return rBytes; |
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
258 } |
3 | 259 |
445
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
260 protected void toggleDebug(ICodePage codePage) { |
8fa8e73e2f5c
update to tn5250j version 0.7.7, svn r1270
Carl Byington <carl@five-ten-sg.com>
parents:
438
diff
changeset
|
261 dataStreamDumper.toggleDebug(codePage); |
112
77ac18bc1b2f
cleanup java formatting
Carl Byington <carl@five-ten-sg.com>
parents:
99
diff
changeset
|
262 } |
3 | 263 |