mirror of
https://github.com/sirjonasxx/G-Earth.git
synced 2025-02-17 03:32:36 +01:00
thuireuighofl
This commit is contained in:
parent
ff981e3cc7
commit
12f5c83175
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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}");
|
||||
|
@ -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() + ")");
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user