diff --git a/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java b/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java index a706e00819a651c68ca42d1506396f67d688e6b8..868b5239dfe3ac627fbcec08499e3cebda3acc54 100644 --- a/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java +++ b/src/edu/nps/moves/dis7/utilities/stream/PduRecorder.java @@ -28,6 +28,33 @@ public class PduRecorder implements PduReceiver public static final String COMMENT_MARKER = "#"; static String START_COMMENT_MARKER = COMMENT_MARKER + " Start, "; static String FINISH_COMMENT_MARKER = COMMENT_MARKER + " Finish, "; + + static final String ENCODING_BASE64 = "ENCODING_BASE64"; + static final String ENCODING_PLAINTEXT = "ENCODING_PLAINTEXT"; + static final String ENCODING_BINARY = "ENCODING_BINARY"; // TODO likely requires different code path + static final String ENCODING_XML = "ENCODING_XML"; // TODO, repeat Open-DIS version 4 effort + static final String ENCODING_EXI = "ENCODING_EXI"; // TODO, use Exificient or Nagasena libraries + static final String ENCODING_JSON = "ENCODING_JSON"; // TODO, repeat Open-DIS version 4 effort + static final String ENCODING_MAK_DATA_LOGGER = "ENCODING_MAK_DATA_LOGGER"; // verbose pretty-print. perhaps output only (MAK format itself is binary) + static final String ENCODING_WIRESHARK_DATA_LOGGER = "ENCODING_WIRESHARK_DATA_LOGGER"; // + static final String ENCODING_CDIS = "ENCODING_CDIS"; // future work based on new SISO standard + + private static String pduLogEncoding = ENCODING_PLAINTEXT; // TODO use Java enumerations, generalize/share across library + + /** + * TODO change this to enumeration type for strictness + * @return the pduLogEncoding + */ + public static String getEncoding() { + return pduLogEncoding; + } + + /** + * @param aEncoding the pduLogEncoding to set + */ + public static void setEncoding(String aEncoding) { + pduLogEncoding = aEncoding; + } private BufferedWriter bufferedWriter; private File logFile; @@ -79,7 +106,7 @@ public class PduRecorder implements PduReceiver Long startNanoTime = null; StringBuilder sb = new StringBuilder(); - Base64.Encoder base64Encoder = Base64.getEncoder(); + java.util.Base64.Encoder base64Encoder = Base64.getEncoder(); int pduCount = 0; boolean headerWritten = false; boolean doSave = true; @@ -98,10 +125,31 @@ public class PduRecorder implements PduReceiver //System.out.println("wrote time "+(packetRcvNanoTime - startNanoTime)); sb.setLength(0); - sb.append(base64Encoder.encodeToString(timeByteArray)); - sb.append(','); - byte[] buffsized = Arrays.copyOf(buff, len); - sb.append(base64Encoder.encodeToString(buffsized)); // TODO offer alternative encodings + byte[] buffsized; + + switch (pduLogEncoding) + { + case ENCODING_BASE64: + sb.append(base64Encoder.encodeToString(timeByteArray)); + sb.append(','); + buffsized = Arrays.copyOf(buff, len); + sb.append(base64Encoder.encodeToString(buffsized)); + break; + + case ENCODING_PLAINTEXT: + // by Tobias Brennenstuhl SPring 2020 + //sb.append(encdr.encodeToString(timeAr)); + sb.append(Arrays.toString(timeByteArray).replace(" ", "")); + sb.append(','); + buffsized = Arrays.copyOf(buff, len); + sb.append(Arrays.toString(buffsized).replace(" ", "")); + + sb.append(" # " + "TODO PDU type (number and name)"); + break; + + default: + System.err.println ("Encoding'" + pduLogEncoding + " not recognized or supported"); + } try { if (!headerWritten) { writeHeader();