From 74a72d199b4e4b04fad4390b2533c6b4176fdcf1 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Fri, 23 Apr 2021 17:38:10 +0200 Subject: [PATCH] new expressions --- .../PacketStringUtils.java | 19 ++++- .../prediction/StructurePredictor.java | 7 -- .../main/java/gearth/protocol/HPacket.java | 85 ++++++++++--------- .../extensionhandler/ExtensionHandler.java | 2 +- .../gearth/ui/logger/LoggerController.java | 3 +- .../loggerdisplays/LinuxTerminalLogger.java | 5 +- .../logger/loggerdisplays/PacketLogger.java | 3 +- .../loggerdisplays/SimpleTerminalLogger.java | 10 ++- .../loggerdisplays/uilogger/UiLogger.java | 4 +- .../uilogger/UiLoggerController.java | 4 +- .../java/gearth/ui/tools/ToolsController.java | 2 +- .../gearth/ui/logger/uilogger/UiLogger.fxml | 1 + 12 files changed, 84 insertions(+), 61 deletions(-) diff --git a/G-Earth/src/main/java/gearth/misc/packetrepresentation/PacketStringUtils.java b/G-Earth/src/main/java/gearth/misc/packetrepresentation/PacketStringUtils.java index c046bdc..4226958 100644 --- a/G-Earth/src/main/java/gearth/misc/packetrepresentation/PacketStringUtils.java +++ b/G-Earth/src/main/java/gearth/misc/packetrepresentation/PacketStringUtils.java @@ -1,5 +1,6 @@ package gearth.misc.packetrepresentation; +import gearth.misc.packet_info.PacketInfo; import gearth.misc.packetrepresentation.prediction.StructurePredictor; import gearth.protocol.HPacket; @@ -178,14 +179,21 @@ public class PacketStringUtils { } // generates an expression for a packet from a packet structure (ex. "i(isi(b))iBd") - public static String toExpressionFromGivenStructure(HPacket packet, String struct) { + public static String toExpressionFromGivenStructure(HPacket packet, String struct, PacketInfo packetInfo) { int oldReadIndex = packet.getReadIndex(); packet.resetReadIndex(); StringBuilder builder = new StringBuilder(); - builder.append("{l}{h:").append(packet.headerId()).append("}"); + if (packetInfo != null) { + String identifier = packetInfo.getName() == null ? packetInfo.getHash() : packetInfo.getName(); + builder.append("{").append(identifier).append("}"); + } + else { + builder.append("{l}{h:").append(packet.headerId()).append("}"); + } buildExpressionFromGivenStructure(packet, struct, 0, builder); + packet.setReadIndex(oldReadIndex); return builder.toString(); } @@ -219,9 +227,12 @@ public class PacketStringUtils { else return; } } - public static String predictedExpression(HPacket packet) { + public static String predictedExpression(HPacket packet, PacketInfo packetInfo) { StructurePredictor structurePredictor = new StructurePredictor(packet); - return structurePredictor.getExpression(); + String structure = structurePredictor.getStructure(); + if (structure == null) return ""; + + return PacketStringUtils.toExpressionFromGivenStructure(packet, structure, packetInfo); } public static boolean structureEquals(HPacket packet, String struct) { diff --git a/G-Earth/src/main/java/gearth/misc/packetrepresentation/prediction/StructurePredictor.java b/G-Earth/src/main/java/gearth/misc/packetrepresentation/prediction/StructurePredictor.java index 8216489..865e16d 100644 --- a/G-Earth/src/main/java/gearth/misc/packetrepresentation/prediction/StructurePredictor.java +++ b/G-Earth/src/main/java/gearth/misc/packetrepresentation/prediction/StructurePredictor.java @@ -65,13 +65,6 @@ public class StructurePredictor { structure = stringBuilder.reverse().toString(); } - public String getExpression() { - if (structure == null) { - return ""; - } - return PacketStringUtils.toExpressionFromGivenStructure(packet, structure); - } - public String getStructure() { return structure; } diff --git a/G-Earth/src/main/java/gearth/protocol/HPacket.java b/G-Earth/src/main/java/gearth/protocol/HPacket.java index e76d55e..0a69fe6 100644 --- a/G-Earth/src/main/java/gearth/protocol/HPacket.java +++ b/G-Earth/src/main/java/gearth/protocol/HPacket.java @@ -1,6 +1,8 @@ package gearth.protocol; import gearth.misc.StringifyAble; +import gearth.misc.packet_info.PacketInfo; +import gearth.misc.packet_info.PacketInfoManager; import gearth.misc.packetrepresentation.InvalidPacketException; import gearth.misc.packetrepresentation.PacketStringUtils; @@ -9,9 +11,12 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.InvalidParameterException; import java.util.Arrays; +import java.util.Optional; public class HPacket implements StringifyAble { + + private boolean isEdited = false; private byte[] packetInBytes; private int readIndex = 6; @@ -577,50 +582,52 @@ public class HPacket implements StringifyAble { isEdited = edited; } -// private String getHarbleStructure(HMessage.Direction direction) { -// PacketInfoManager.HarbleMessage msg; -// if (HarbleAPIFetcher.HARBLEAPI != null && -// ((msg = HarbleAPIFetcher.HARBLEAPI.getHarbleMessageFromHeaderId(direction, headerId())) != null)) { -// if (msg.getStructure() != null && structureEquals(msg.getStructure())) { -// return msg.getStructure(); -// } -// } -// -// return null; -// } + private PacketInfo getPacketInfo(HMessage.Direction direction, PacketInfoManager packetInfoManager) { + if (packetInfoManager == null) return null; -// public String toExpression(HMessage.Direction direction) { -// if (isCorrupted()) return ""; -// -// String structure = getHarbleStructure(direction); -// if (structure != null) { -// return PacketStringUtils.toExpressionFromGivenStructure(this, structure); -// } -// -// return PacketStringUtils.predictedExpression(this); -// } + // prefer packetinfo with structure information (not available in at time of writing) + Optional packetInfoMaybe = packetInfoManager.getAllPacketInfoFromHeaderId(direction, headerId()) + .stream().filter(packetInfo -> packetInfo.getStructure() != null).findFirst(); + return packetInfoMaybe.orElseGet(() -> packetInfoManager.getPacketInfoFromHeaderId(direction, headerId())); + } -// /** -// * returns "" if not found or not sure enough -// */ -// public String toExpression() { -// if (isCorrupted()) return ""; -// -// String structure1 = getHarbleStructure(HMessage.Direction.TOCLIENT); -// String structure2 = getHarbleStructure(HMessage.Direction.TOSERVER); -// if (structure1 != null && structure2 == null) { -// return PacketStringUtils.toExpressionFromGivenStructure(this, structure1); -// } -// else if (structure1 == null && structure2 != null) { -// return PacketStringUtils.toExpressionFromGivenStructure(this, structure2); -// } -// -// return PacketStringUtils.predictedExpression(this); -// } + public String toExpression(HMessage.Direction direction, PacketInfoManager packetInfoManager, boolean removeShuffle) { + if (isCorrupted()) return ""; + + PacketInfo packetInfo = getPacketInfo(direction, packetInfoManager); + if (packetInfo.getStructure() != null) { + return PacketStringUtils.toExpressionFromGivenStructure(this, packetInfo.getStructure(), removeShuffle ? packetInfo : null); + } + return PacketStringUtils.predictedExpression(this, removeShuffle ? packetInfo : null); + } + + /** + * returns "" if not found or not sure enough + */ + public String toExpression(PacketInfoManager packetInfoManager, boolean removeShuffle) { + if (isCorrupted()) return ""; + + PacketInfo maybe1 = getPacketInfo(HMessage.Direction.TOCLIENT, packetInfoManager); + PacketInfo maybe2 = getPacketInfo(HMessage.Direction.TOSERVER, packetInfoManager); + + PacketInfo packetInfo = null; + + if (maybe1 != null && maybe2 == null) { + packetInfo = maybe1; + } + else if (maybe1 == null && maybe2 != null) { + packetInfo = maybe2; + } + + if (packetInfo != null && packetInfo.getStructure() != null) { + return PacketStringUtils.toExpressionFromGivenStructure(this, packetInfo.getStructure(), removeShuffle ? packetInfo : null); + } + return PacketStringUtils.predictedExpression(this, removeShuffle ? packetInfo : null); + } public String toExpression() { if (isCorrupted()) return ""; - return PacketStringUtils.predictedExpression(this); + return PacketStringUtils.predictedExpression(this, null); } @Override diff --git a/G-Earth/src/main/java/gearth/services/extensionhandler/ExtensionHandler.java b/G-Earth/src/main/java/gearth/services/extensionhandler/ExtensionHandler.java index bad48ba..596e858 100644 --- a/G-Earth/src/main/java/gearth/services/extensionhandler/ExtensionHandler.java +++ b/G-Earth/src/main/java/gearth/services/extensionhandler/ExtensionHandler.java @@ -220,7 +220,7 @@ public class ExtensionHandler { try { s = packet.toString(); if (packet.length() < 3000) { - expression = packet.toExpression(); + expression = packet.toExpression(hConnection.getPacketInfoManager(), true); } } finally { diff --git a/G-Earth/src/main/java/gearth/ui/logger/LoggerController.java b/G-Earth/src/main/java/gearth/ui/logger/LoggerController.java index cda87d3..5caa3df 100644 --- a/G-Earth/src/main/java/gearth/ui/logger/LoggerController.java +++ b/G-Earth/src/main/java/gearth/ui/logger/LoggerController.java @@ -1,5 +1,6 @@ package gearth.ui.logger; +import gearth.extensions.parsers.HDirection; import gearth.protocol.connection.HState; import javafx.application.Platform; import javafx.event.ActionEvent; @@ -69,7 +70,7 @@ public class LoggerController extends SubForm { packetLogger.appendMessage(message.getPacket(), types); if (cbx_showstruct.isSelected() && message.getPacket().length() < packetLimit) { - packetLogger.appendStructure(message.getPacket()); + packetLogger.appendStructure(message.getPacket(), message.getDestination()); } }); }); diff --git a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/LinuxTerminalLogger.java b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/LinuxTerminalLogger.java index a39b950..0b125a5 100644 --- a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/LinuxTerminalLogger.java +++ b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/LinuxTerminalLogger.java @@ -1,5 +1,6 @@ package gearth.ui.logger.loggerdisplays; +import gearth.protocol.HMessage; import gearth.protocol.HPacket; import java.util.HashMap; @@ -60,8 +61,8 @@ class LinuxTerminalLogger extends SimpleTerminalLogger { } @Override - public void appendStructure(HPacket packet) { - String expr = packet.toExpression(); + public void appendStructure(HPacket packet, HMessage.Direction direction) { + String expr = packet.toExpression(direction, packetInfoManager, true); if (!expr.equals("")) { System.out.println( colorizePackets.get("EXPRESSION") + diff --git a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/PacketLogger.java b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/PacketLogger.java index 4ff2006..a2e1770 100644 --- a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/PacketLogger.java +++ b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/PacketLogger.java @@ -1,6 +1,7 @@ package gearth.ui.logger.loggerdisplays; import gearth.protocol.HConnection; +import gearth.protocol.HMessage; import gearth.protocol.HPacket; /** @@ -33,6 +34,6 @@ public interface PacketLogger { void appendSplitLine(); void appendMessage(HPacket packet, int types); - void appendStructure(HPacket packet); + void appendStructure(HPacket packet, HMessage.Direction direction); } diff --git a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/SimpleTerminalLogger.java b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/SimpleTerminalLogger.java index 08cfb12..0850e59 100644 --- a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/SimpleTerminalLogger.java +++ b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/SimpleTerminalLogger.java @@ -1,14 +1,20 @@ package gearth.ui.logger.loggerdisplays; +import gearth.misc.packet_info.PacketInfoManager; import gearth.protocol.HConnection; +import gearth.protocol.HMessage; import gearth.protocol.HPacket; /** * Created by Jonas on 04/04/18. */ class SimpleTerminalLogger implements PacketLogger { + + protected PacketInfoManager packetInfoManager = null; + @Override public void start(HConnection hConnection) { + packetInfoManager = hConnection.getPacketInfoManager(); // System.out.println("-- START OF SESSION --"); } @@ -54,8 +60,8 @@ class SimpleTerminalLogger implements PacketLogger { } @Override - public void appendStructure(HPacket packet) { - String expr = packet.toExpression(); + public void appendStructure(HPacket packet, HMessage.Direction direction) { + String expr = packet.toExpression(direction, packetInfoManager, true); if (!expr.equals("")) { System.out.println(expr); } diff --git a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLogger.java b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLogger.java index 67e46e3..3bc4678 100644 --- a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLogger.java +++ b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLogger.java @@ -1,6 +1,8 @@ package gearth.ui.logger.loggerdisplays.uilogger; +import gearth.extensions.parsers.HDirection; import gearth.protocol.HConnection; +import gearth.protocol.HMessage; import gearth.protocol.HPacket; import gearth.ui.logger.loggerdisplays.PacketLogger; import javafx.event.ActionEvent; @@ -95,7 +97,7 @@ public class UiLogger implements PacketLogger { } @Override - public void appendStructure(HPacket packet) { + public void appendStructure(HPacket packet, HMessage.Direction direction) { } } diff --git a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLoggerController.java b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLoggerController.java index ba863c7..22f4532 100644 --- a/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLoggerController.java +++ b/G-Earth/src/main/java/gearth/ui/logger/loggerdisplays/uilogger/UiLoggerController.java @@ -35,6 +35,7 @@ public class UiLoggerController implements Initializable { public CheckMenuItem chkMessageName; public CheckMenuItem chkMessageHash; public Label lblPacketInfo; + public CheckMenuItem chkUseNewStructures; private StyleClassedTextArea area; @@ -156,8 +157,7 @@ public class UiLoggerController implements Initializable { } if (packet.length() <= 2000) { -// String expr = packet.toExpression(isIncoming ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER); - String expr = packet.toExpression(); + String expr = packet.toExpression(isIncoming ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER, packetInfoManager, chkUseNewStructures.isSelected()); String cleaned = cleanTextContent(expr); if (cleaned.equals(expr)) { if (!expr.equals("") && displayStructure) diff --git a/G-Earth/src/main/java/gearth/ui/tools/ToolsController.java b/G-Earth/src/main/java/gearth/ui/tools/ToolsController.java index ef62772..308d1e8 100644 --- a/G-Earth/src/main/java/gearth/ui/tools/ToolsController.java +++ b/G-Earth/src/main/java/gearth/ui/tools/ToolsController.java @@ -139,7 +139,7 @@ public class ToolsController extends SubForm { public void btn_toExpr_clicked(ActionEvent actionEvent) { - txt_exprArea.setText(new HPacket(txt_packetArea.getText()).toExpression()); + txt_exprArea.setText(new HPacket(txt_packetArea.getText()).toExpression(getHConnection().getPacketInfoManager(), true)); } public void btn_toPacket_clicked(ActionEvent actionEvent) { diff --git a/G-Earth/src/main/resources/gearth/ui/logger/uilogger/UiLogger.fxml b/G-Earth/src/main/resources/gearth/ui/logger/uilogger/UiLogger.fxml index cc7e3e1..2d073d3 100644 --- a/G-Earth/src/main/resources/gearth/ui/logger/uilogger/UiLogger.fxml +++ b/G-Earth/src/main/resources/gearth/ui/logger/uilogger/UiLogger.fxml @@ -14,6 +14,7 @@ +