thuireuighofl

This commit is contained in:
sirjonasxx 2021-04-29 01:32:19 +02:00
parent ff981e3cc7
commit 12f5c83175
8 changed files with 53 additions and 56 deletions

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}
};

View File

@ -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);
}

View File

@ -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}");

View File

@ -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<String> 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() + ")");
}

View File

@ -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;