From 12f5c83175affa0aacbb639fb057b5eceb744557 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Thu, 29 Apr 2021 01:32:19 +0200 Subject: [PATCH] thuireuighofl --- .../java/gearth/extensions/Extension.java | 2 +- .../java/gearth/protocol/HConnection.java | 20 +++++----- .../main/java/gearth/protocol/HPacket.java | 38 ++++++++++++------- .../extensionhandler/ExtensionHandler.java | 2 +- .../rules/RuleFactory.java | 2 +- .../PacketStringUtils.java | 11 ++++-- .../ui/injection/InjectionController.java | 27 ++++--------- .../java/gearth/ui/tools/ToolsController.java | 7 +--- 8 files changed, 53 insertions(+), 56 deletions(-) diff --git a/G-Earth/src/main/java/gearth/extensions/Extension.java b/G-Earth/src/main/java/gearth/extensions/Extension.java index 4e49c0b..bcd67ac 100644 --- a/G-Earth/src/main/java/gearth/extensions/Extension.java +++ b/G-Earth/src/main/java/gearth/extensions/Extension.java @@ -216,7 +216,7 @@ public abstract class Extension extends ExtensionBase { private boolean send(HPacket packet, HMessage.Direction direction) { if (packet.isCorrupted()) return false; - if (!packet.isPacketComplete()) packet.completePacket(direction, packetInfoManager); + if (!packet.isPacketComplete()) packet.completePacket(packetInfoManager); if (!packet.isPacketComplete()) return false; HPacket packet1 = new HPacket(NetworkExtensionInfo.INCOMING_MESSAGES_IDS.SENDMESSAGE); diff --git a/G-Earth/src/main/java/gearth/protocol/HConnection.java b/G-Earth/src/main/java/gearth/protocol/HConnection.java index 6c12766..f4fa37f 100644 --- a/G-Earth/src/main/java/gearth/protocol/HConnection.java +++ b/G-Earth/src/main/java/gearth/protocol/HConnection.java @@ -137,30 +137,30 @@ public class HConnection { } - public boolean sendToClient(HPacket message) { + public boolean sendToClient(HPacket packet) { if (proxy == null) return false; - if (!message.isPacketComplete()) { + if (!packet.isPacketComplete()) { PacketInfoManager packetInfoManager = getPacketInfoManager(); - message.completePacket(HMessage.Direction.TOCLIENT, packetInfoManager); + packet.completePacket(packetInfoManager); - if (!message.isPacketComplete()) return false; + if (!packet.isPacketComplete() || !packet.canSendToClient()) return false; } - proxy.getPacketSenderQueue().queueToClient(message); + proxy.getPacketSenderQueue().queueToClient(packet); return true; } - public boolean sendToServer(HPacket message) { + public boolean sendToServer(HPacket packet) { if (proxy == null) return false; - if (!message.isPacketComplete()) { + if (!packet.isPacketComplete()) { PacketInfoManager packetInfoManager = getPacketInfoManager(); - message.completePacket(HMessage.Direction.TOSERVER, packetInfoManager); + packet.completePacket(packetInfoManager); - if (!message.isPacketComplete()) return false; + if (!packet.isPacketComplete() || !packet.canSendToServer()) return false; } - proxy.getPacketSenderQueue().queueToServer(message); + proxy.getPacketSenderQueue().queueToServer(packet); return true; } diff --git a/G-Earth/src/main/java/gearth/protocol/HPacket.java b/G-Earth/src/main/java/gearth/protocol/HPacket.java index 7e22131..b488b0d 100644 --- a/G-Earth/src/main/java/gearth/protocol/HPacket.java +++ b/G-Earth/src/main/java/gearth/protocol/HPacket.java @@ -1,5 +1,6 @@ package gearth.protocol; +import gearth.extensions.parsers.HDirection; import gearth.misc.StringifyAble; import gearth.services.packet_info.PacketInfo; import gearth.services.packet_info.PacketInfoManager; @@ -21,6 +22,7 @@ public class HPacket implements StringifyAble { // if identifier != null, this is a placeholder name for the type of packet, headerId will be "-1" private String identifier = null; + private HMessage.Direction identifierDirection = null; public HPacket(byte[] packet) { packetInBytes = packet.clone(); @@ -61,9 +63,14 @@ public class HPacket implements StringifyAble { isEdited = false; } - public HPacket(String identifier, Object... objects) throws InvalidParameterException { + public HPacket(String identifier, HMessage.Direction direction) throws InvalidParameterException { packetInBytes = new byte[]{0,0,0,2,-1,-1}; this.identifier = identifier; + this.identifierDirection = direction; + } + + public HPacket(String identifier, HMessage.Direction direction, Object... objects) throws InvalidParameterException { + this(identifier, direction); appendObjects(objects); isEdited = false; } @@ -88,16 +95,20 @@ public class HPacket implements StringifyAble { this.identifier = identifier; } + public void setIdentifierDirection(HMessage.Direction identifierDirection) { + this.identifierDirection = identifierDirection; + } + public String getIdentifier() { return identifier; } - public void completePacket(HMessage.Direction direction, PacketInfoManager packetInfoManager) { + public void completePacket(PacketInfoManager packetInfoManager) { if (isCorrupted() || identifier == null) return; - PacketInfo packetInfo = packetInfoManager.getPacketInfoFromName(direction, identifier); + PacketInfo packetInfo = packetInfoManager.getPacketInfoFromName(identifierDirection, identifier); if (packetInfo == null) { - packetInfo = packetInfoManager.getPacketInfoFromHash(direction, identifier); + packetInfo = packetInfoManager.getPacketInfoFromHash(identifierDirection, identifier); if (packetInfo == null) return; } @@ -108,21 +119,20 @@ public class HPacket implements StringifyAble { isEdited = wasEdited; } - public void maybeCompletePacket(PacketInfoManager packetInfoManager) { - if (canComplete(HMessage.Direction.TOCLIENT, packetInfoManager) && !canComplete(HMessage.Direction.TOSERVER, packetInfoManager)) { - completePacket(HMessage.Direction.TOCLIENT, packetInfoManager); - } - else if (!canComplete(HMessage.Direction.TOCLIENT, packetInfoManager) && canComplete(HMessage.Direction.TOSERVER, packetInfoManager)) { - completePacket(HMessage.Direction.TOSERVER, packetInfoManager); - } + public boolean canSendToClient() { + return identifierDirection == null || identifierDirection == HMessage.Direction.TOCLIENT; } - public boolean canComplete(HMessage.Direction direction, PacketInfoManager packetInfoManager) { + public boolean canSendToServer() { + return identifierDirection == null || identifierDirection == HMessage.Direction.TOSERVER; + } + + public boolean canComplete(PacketInfoManager packetInfoManager) { if (isCorrupted() || identifier == null) return false; - PacketInfo packetInfo = packetInfoManager.getPacketInfoFromName(direction, identifier); + PacketInfo packetInfo = packetInfoManager.getPacketInfoFromName(identifierDirection, identifier); if (packetInfo == null) { - packetInfo = packetInfoManager.getPacketInfoFromHash(direction, identifier); + packetInfo = packetInfoManager.getPacketInfoFromHash(identifierDirection, identifier); return packetInfo != null; } 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 cf6f47c..98e7056 100644 --- a/G-Earth/src/main/java/gearth/services/extensionhandler/ExtensionHandler.java +++ b/G-Earth/src/main/java/gearth/services/extensionhandler/ExtensionHandler.java @@ -231,7 +231,7 @@ public class ExtensionHandler { @Override protected void stringToPacketRequest(String string) { HPacket packet = new HPacket(string); - packet.maybeCompletePacket(hConnection.getPacketInfoManager()); + if (!packet.isPacketComplete()) packet.completePacket(hConnection.getPacketInfoManager()); extension.stringToPacketResponse(packet); } }; diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java index a6dc50f..608ab40 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java @@ -28,7 +28,7 @@ public class RuleFactory { if (rType == BlockReplaceRule.Type.PACKET) { HPacket packet = new HPacket(replacement); if (!packet.isPacketComplete()) { - packet.completePacket(rSide == BlockReplaceRule.Side.INCOMING ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER, packetInfoManager); + packet.completePacket(packetInfoManager); } return new ReplacePacketRule(rSide, Integer.parseInt(value), packet); } diff --git a/G-Earth/src/main/java/gearth/services/packet_representation/PacketStringUtils.java b/G-Earth/src/main/java/gearth/services/packet_representation/PacketStringUtils.java index ae36a7a..1732900 100644 --- a/G-Earth/src/main/java/gearth/services/packet_representation/PacketStringUtils.java +++ b/G-Earth/src/main/java/gearth/services/packet_representation/PacketStringUtils.java @@ -1,5 +1,6 @@ package gearth.services.packet_representation; +import gearth.protocol.HMessage; import gearth.services.packet_info.PacketInfo; import gearth.services.packet_representation.prediction.StructurePredictor; import gearth.protocol.HPacket; @@ -137,7 +138,7 @@ public class PacketStringUtils { String[] identifier = {null}; if (!fixLengthLater && packet.startsWith("{")) { - packet = replaceAll(packet, "^\\{([^:{}]*)}", m -> { + packet = replaceAll(packet, "^\\{((in|out):[^:{}]*)}", m -> { identifier[0] = m.group(1); return "[255][255]"; }); @@ -173,7 +174,9 @@ public class PacketStringUtils { hPacket.fixLength(); } if (identifier[0] != null) { - hPacket.setIdentifier(identifier[0]); + String[] split = identifier[0].split(":"); + hPacket.setIdentifierDirection(split[0].equals("in") ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER); + hPacket.setIdentifier(split[1]); } return hPacket; } @@ -197,7 +200,7 @@ public class PacketStringUtils { StringBuilder builder = new StringBuilder(); if (packetInfo != null) { String identifier = packetInfo.getName() == null ? packetInfo.getHash() : packetInfo.getName(); - builder.append("{").append(identifier).append("}"); + builder.append("{").append(packetInfo.getDestination() == HMessage.Direction.TOCLIENT ? "in:" : "out:").append(identifier).append("}"); } else { builder.append("{l}{h:").append(packet.headerId()).append("}"); @@ -269,7 +272,7 @@ public class PacketStringUtils { HPacket fghdft = fromString("{l}{h:-1}{i:1}{i:0}{i:6}{i:4}{s:\"1.0\"}"); System.out.println(fghdft); - HPacket zed = fromString("{test}{s:\"¥\"}{i:0}{i:0}"); + HPacket zed = fromString("{out:test}{s:\"¥\"}{i:0}{i:0}"); System.out.println(zed); HPacket p1 = fromString("{l}{h:1129}{s:\"\\\\\\\\\"}{i:0}{i:0}"); diff --git a/G-Earth/src/main/java/gearth/ui/injection/InjectionController.java b/G-Earth/src/main/java/gearth/ui/injection/InjectionController.java index 0f20b41..5023ebb 100644 --- a/G-Earth/src/main/java/gearth/ui/injection/InjectionController.java +++ b/G-Earth/src/main/java/gearth/ui/injection/InjectionController.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import java.util.function.Predicate; import java.util.stream.Collectors; public class InjectionController extends SubForm { @@ -132,30 +133,18 @@ public class InjectionController extends SubForm { if (!dirty) { PacketInfoManager packetInfoManager = getHConnection().getPacketInfoManager(); - List unIdentifiedPackets = Arrays.stream(packets) - .filter(hPacket -> !hPacket.isPacketComplete()) - .map(HPacket::getIdentifier).collect(Collectors.toList()); + for (HPacket packet : packets) { + packet.completePacket(packetInfoManager); + } - boolean canSendToClient = unIdentifiedPackets.stream().allMatch(s -> { - if (packetInfoManager == null) return false; - return packetInfoManager.getPacketInfoFromHash(HMessage.Direction.TOCLIENT, s) != null || - packetInfoManager.getPacketInfoFromName(HMessage.Direction.TOCLIENT, s) != null; - }); - boolean canSendToServer = unIdentifiedPackets.stream().allMatch(s -> { - if (packetInfoManager == null) return false; - return packetInfoManager.getPacketInfoFromHash(HMessage.Direction.TOSERVER, s) != null || - packetInfoManager.getPacketInfoFromName(HMessage.Direction.TOSERVER, s) != null; - }); + boolean canSendToClient = Arrays.stream(packets).allMatch(packet -> + packet.isPacketComplete() && packet.canSendToClient()); + boolean canSendToServer = Arrays.stream(packets).allMatch(packet -> + packet.isPacketComplete() && packet.canSendToServer()); btn_sendToClient.setDisable(!canSendToClient || getHConnection().getState() != HState.CONNECTED); btn_sendToServer.setDisable(!canSendToServer || getHConnection().getState() != HState.CONNECTED); if (packets.length == 1) { - - // complete packet to show correct headerId - if (!packets[0].isPacketComplete()) { - packets[0].maybeCompletePacket(packetInfoManager); - } - lbl_pcktInfo.setText("header (id:" + packets[0].headerId() + ", length:" + packets[0].length() + ")"); } 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 f6aeab4..701174c 100644 --- a/G-Earth/src/main/java/gearth/ui/tools/ToolsController.java +++ b/G-Earth/src/main/java/gearth/ui/tools/ToolsController.java @@ -144,12 +144,7 @@ public class ToolsController extends SubForm { PacketInfoManager packetInfoManager = getHConnection().getPacketInfoManager(); HPacket packet = new HPacket(p); if (!packet.isPacketComplete() && packetInfoManager != null) { - if (packet.canComplete(HMessage.Direction.TOCLIENT, packetInfoManager) && !packet.canComplete(HMessage.Direction.TOSERVER, packetInfoManager)) { - packet.completePacket(HMessage.Direction.TOCLIENT, packetInfoManager); - } - else if (!packet.canComplete(HMessage.Direction.TOCLIENT, packetInfoManager) && packet.canComplete(HMessage.Direction.TOSERVER, packetInfoManager)) { - packet.completePacket(HMessage.Direction.TOSERVER, packetInfoManager); - } + packet.completePacket(packetInfoManager); } return packet;