From 9698348503217517c0713234b7433f7846fec2f9 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Fri, 23 Apr 2021 00:47:33 +0200 Subject: [PATCH] parsers --- .../misc/packet_info/PacketInfoManager.java | 2 + .../HarblePacketInfoProvider.java | 45 ++++++++++++++++++- .../SulekPacketInfoProvider.java | 33 +++++++++++++- .../UnityPacketInfoProvider.java | 33 +++++++++++++- 4 files changed, 110 insertions(+), 3 deletions(-) diff --git a/G-Earth/src/main/java/gearth/misc/packet_info/PacketInfoManager.java b/G-Earth/src/main/java/gearth/misc/packet_info/PacketInfoManager.java index dc40baa..94d6ec3 100644 --- a/G-Earth/src/main/java/gearth/misc/packet_info/PacketInfoManager.java +++ b/G-Earth/src/main/java/gearth/misc/packet_info/PacketInfoManager.java @@ -35,6 +35,8 @@ public class PacketInfoManager { } private void addMessage(PacketInfo packetInfo) { + if (packetInfo.getHash() == null && packetInfo.getName() == null) return; + Map> headerIdToMessage = packetInfo.getDestination() == HMessage.Direction.TOCLIENT ? headerIdToMessage_incoming : diff --git a/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/HarblePacketInfoProvider.java b/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/HarblePacketInfoProvider.java index 995deb1..26d0e62 100644 --- a/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/HarblePacketInfoProvider.java +++ b/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/HarblePacketInfoProvider.java @@ -4,9 +4,12 @@ import gearth.misc.Cacher; import gearth.misc.packet_info.PacketInfo; import gearth.misc.packet_info.providers.PacketInfoProvider; import gearth.misc.packet_info.providers.RemotePacketInfoProvider; +import gearth.protocol.HMessage; +import org.json.JSONArray; import org.json.JSONObject; import java.io.File; +import java.util.ArrayList; import java.util.List; public class HarblePacketInfoProvider extends RemotePacketInfoProvider { @@ -28,8 +31,48 @@ public class HarblePacketInfoProvider extends RemotePacketInfoProvider { return CACHE_PREFIX + hotelVersion; } + private PacketInfo jsonToPacketInfo(JSONObject object, HMessage.Direction destination) { + String name; + String hash; + String structure; + try { name = object.getString("Name"); } + catch (Exception e) { name = null; } + try { hash = object.getString("Hash"); } + catch (Exception e) { hash = null; } + try { structure = object.getString("Structure"); + } catch (Exception e) { structure = null; } + + int headerId; + try {headerId = object.getInt("Id"); } + catch (Exception e) { headerId = Integer.parseInt(object.getString("Id")); } + + return new PacketInfo(destination, headerId, hash, name, structure); + } + @Override protected List parsePacketInfo(JSONObject jsonObject) { - return null; + List packetInfos = new ArrayList<>(); + + try { + JSONArray incoming = jsonObject.getJSONArray("Incoming"); + JSONArray outgoing = jsonObject.getJSONArray("Outgoing"); + + if (incoming != null && outgoing != null) { + for (int i = 0; i < incoming.length(); i++) { + JSONObject jsonInfo = incoming.getJSONObject(i); + PacketInfo packetInfo = jsonToPacketInfo(jsonInfo, HMessage.Direction.TOCLIENT); + packetInfos.add(packetInfo); + } + for (int i = 0; i < outgoing.length(); i++) { + JSONObject jsonInfo = outgoing.getJSONObject(i); + PacketInfo packetInfo = jsonToPacketInfo(jsonInfo, HMessage.Direction.TOSERVER); + packetInfos.add(packetInfo); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return packetInfos; } } diff --git a/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/SulekPacketInfoProvider.java b/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/SulekPacketInfoProvider.java index 7e5e0f4..9336c9c 100644 --- a/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/SulekPacketInfoProvider.java +++ b/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/SulekPacketInfoProvider.java @@ -2,8 +2,11 @@ package gearth.misc.packet_info.providers.implementations; import gearth.misc.packet_info.PacketInfo; import gearth.misc.packet_info.providers.RemotePacketInfoProvider; +import gearth.protocol.HMessage; +import org.json.JSONArray; import org.json.JSONObject; +import java.util.ArrayList; import java.util.List; public class SulekPacketInfoProvider extends RemotePacketInfoProvider { @@ -25,8 +28,36 @@ public class SulekPacketInfoProvider extends RemotePacketInfoProvider { return CACHE_PREFIX + hotelVersion; } + private PacketInfo jsonToPacketInfo(JSONObject object, HMessage.Direction destination) { + int headerId = object.getInt("id"); + String name = object.getString("name") + .replaceAll("(((Message)?Composer)|((Message)?Event))$", ""); + + return new PacketInfo(destination, headerId, null, name, null); + } + @Override protected List parsePacketInfo(JSONObject jsonObject) { - return null; + List packetInfos = new ArrayList<>(); + + try { + JSONArray incoming = jsonObject.getJSONObject("messages").getJSONArray("incoming"); + JSONArray outgoing = jsonObject.getJSONObject("messages").getJSONArray("outgoing"); + + for (int i = 0; i < incoming.length(); i++) { + JSONObject jsonInfo = incoming.getJSONObject(i); + PacketInfo packetInfo = jsonToPacketInfo(jsonInfo, HMessage.Direction.TOCLIENT); + packetInfos.add(packetInfo); + } + for (int i = 0; i < outgoing.length(); i++) { + JSONObject jsonInfo = outgoing.getJSONObject(i); + PacketInfo packetInfo = jsonToPacketInfo(jsonInfo, HMessage.Direction.TOSERVER); + packetInfos.add(packetInfo); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return packetInfos; } } diff --git a/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/UnityPacketInfoProvider.java b/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/UnityPacketInfoProvider.java index b287dd3..672baa9 100644 --- a/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/UnityPacketInfoProvider.java +++ b/G-Earth/src/main/java/gearth/misc/packet_info/providers/implementations/UnityPacketInfoProvider.java @@ -3,10 +3,13 @@ package gearth.misc.packet_info.providers.implementations; import gearth.Main; import gearth.misc.packet_info.PacketInfo; import gearth.misc.packet_info.providers.PacketInfoProvider; +import gearth.protocol.HMessage; +import org.json.JSONArray; import org.json.JSONObject; import java.io.File; import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.List; public class UnityPacketInfoProvider extends PacketInfoProvider { @@ -26,8 +29,36 @@ public class UnityPacketInfoProvider extends PacketInfoProvider { } } + private PacketInfo jsonToPacketInfo(JSONObject object, HMessage.Direction destination) { + String name = object.getString("Name"); + int headerId = object.getInt("Id"); + return new PacketInfo(destination, headerId, null, name, null); + } + @Override protected List parsePacketInfo(JSONObject jsonObject) { - return null; + List packetInfos = new ArrayList<>(); + + try { + JSONArray incoming = jsonObject.getJSONArray("Incoming"); + JSONArray outgoing = jsonObject.getJSONArray("Outgoing"); + + if (incoming != null && outgoing != null) { + for (int i = 0; i < incoming.length(); i++) { + JSONObject jsonInfo = incoming.getJSONObject(i); + PacketInfo packetInfo = jsonToPacketInfo(jsonInfo, HMessage.Direction.TOCLIENT); + packetInfos.add(packetInfo); + } + for (int i = 0; i < outgoing.length(); i++) { + JSONObject jsonInfo = outgoing.getJSONObject(i); + PacketInfo packetInfo = jsonToPacketInfo(jsonInfo, HMessage.Direction.TOSERVER); + packetInfos.add(packetInfo); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return packetInfos; } }