diff app/src/main/java/org/tn5250j/framework/tn5250/DataStreamDumper.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
children 5ce5235adde6
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/src/main/java/org/tn5250j/framework/tn5250/DataStreamDumper.java	Mon Jan 04 15:52:25 2016 -0800
@@ -0,0 +1,144 @@
+/**
+ * Title: DataStreamDumper.java
+ * Copyright:   Copyright (c) 2015
+ * Company:
+ *
+ * @author Martin W. Kirst
+ * <p/>
+ * Description:
+ * <p/>
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * <p/>
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * <p/>
+ * You should have received a copy of the GNU General Public License
+ * along with this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ * Boston, MA 02111-1307 USA
+ */
+package org.tn5250j.framework.tn5250;
+
+import org.tn5250j.encoding.ICodePage;
+
+import java.io.BufferedOutputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import android.util.Log;
+
+public class DataStreamDumper {
+    private static final String TAG = "DataStreamDumper";
+
+    private AtomicInteger counter = new AtomicInteger(0);
+
+    private FileOutputStream fw;
+    private BufferedOutputStream dw;
+    private boolean dumpActive = false;
+    private ICodePage codePage;
+
+    public void toggleDebug(ICodePage cp) {
+        if (codePage == null) codePage = cp;
+
+        dumpActive = !dumpActive;
+        if (dumpActive) {
+            try {
+                if (fw == null) {
+                    fw = new FileOutputStream("log.txt");
+                    dw = new BufferedOutputStream(fw);
+                }
+            } catch (FileNotFoundException fnfe) {
+                Log.w(TAG, fnfe.getMessage());
+            }
+
+        } else {
+            try {
+                if (dw != null) dw.close();
+                if (fw != null) fw.close();
+                dw = null;
+                fw = null;
+                codePage = null;
+            } catch (IOException ioe) {
+                Log.w(TAG, ioe.getMessage());
+            }
+        }
+
+        Log.i(TAG, "Data Stream output is now " + dumpActive);
+    }
+
+    public void dump(byte[] abyte0) {
+        if (!dumpActive) return;
+
+        try {
+            Log.i(TAG, "\n Buffer Dump of data from AS400: ");
+            dw.write("\r\n Buffer Dump of data from AS400: ".getBytes());
+            StringBuilder h = new StringBuilder();
+
+            for (int x = 0; x < abyte0.length; x++) {
+                if (x % 16 == 0) {
+                    System.out.println("  " + h.toString());
+                    dw.write(("  " + h.toString() + "\r\n").getBytes());
+                    h.setLength(0);
+                    h.append("+0000");
+                    h.setLength(5 - Integer.toHexString(x).length());
+                    h.append(Integer.toHexString(x).toUpperCase());
+                    System.out.print(h.toString());
+                    dw.write(h.toString().getBytes());
+                    h.setLength(0);
+                }
+
+                char ac = codePage.ebcdic2uni(abyte0[x]);
+
+                if (ac < ' ')
+                    h.append('.');
+                else
+                    h.append(ac);
+
+                if (x % 4 == 0) {
+                    System.out.print(" ");
+                    dw.write((" ").getBytes());
+                }
+
+                if (Integer.toHexString(abyte0[x] & 0xff).length() == 1) {
+                    System.out.print("0" + Integer.toHexString(abyte0[x] & 0xff).toUpperCase());
+                    dw.write(("0" + Integer.toHexString(abyte0[x] & 0xff).toUpperCase()).getBytes());
+                }
+                else {
+                    System.out.print(Integer.toHexString(abyte0[x] & 0xff).toUpperCase());
+                    dw.write((Integer.toHexString(abyte0[x] & 0xff).toUpperCase()).getBytes());
+                }
+            }
+
+            System.out.println();
+            dw.write("\r\n".getBytes());
+            dw.flush();
+        }
+        catch (EOFException _ex) { }
+        catch (Exception _ex) {
+            Log.w(TAG, "Cannot dump from host\n\r");
+        }
+    }
+
+    void dumpRaw(byte[] buffer) {
+        try {
+            String fname = "dump_" + counter.get() + ".data";
+            Log.d(TAG, "Dumping file: " + fname);
+            FileOutputStream fos = new FileOutputStream(fname);
+            fos.write(buffer);
+            fos.close();
+        }
+        catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}