diff --git a/pom.xml b/pom.xml index ffe9aa6..25bb5df 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.openautonomousconnection Protocol - 1.0.1-BETA.0.1 + 1.0.1-BETA.0.2 Open Autonomous Connection https://open-autonomous-connection.org/ diff --git a/src/main/java/org/openautonomousconnection/protocol/ProtocolBridge.java b/src/main/java/org/openautonomousconnection/protocol/ProtocolBridge.java index 9f27636..82fd42e 100644 --- a/src/main/java/org/openautonomousconnection/protocol/ProtocolBridge.java +++ b/src/main/java/org/openautonomousconnection/protocol/ProtocolBridge.java @@ -28,8 +28,10 @@ import org.openautonomousconnection.protocol.packets.v1_0_1.beta.web.impl.stream import org.openautonomousconnection.protocol.packets.v1_0_1.beta.web.impl.stream.WebStreamEndPacket_v1_0_1_B; import org.openautonomousconnection.protocol.packets.v1_0_1.beta.web.impl.stream.WebStreamStartPacket_v1_0_1_B; import org.openautonomousconnection.protocol.side.client.ProtocolClient; +import org.openautonomousconnection.protocol.side.client.ProtocolWebClient; import org.openautonomousconnection.protocol.side.ins.ProtocolINSServer; import org.openautonomousconnection.protocol.side.server.ProtocolCustomServer; +import org.openautonomousconnection.protocol.side.web.ProtocolWebServer; import org.openautonomousconnection.protocol.versions.ProtocolVersion; import org.openautonomousconnection.protocol.versions.v1_0_0.beta.ProtocolWebServer_1_0_0_B; @@ -287,7 +289,13 @@ public final class ProtocolBridge { * @return true if the target packet is supported, false otherwise */ public boolean isPacketSupported(OACPacket packet) { - return isVersionSupported(packet.getProtocolVersion()); + boolean compatible = false; + + for (ProtocolVersion compatibleVersion : packet.getCompatibleVersions()) { + if (!compatible) compatible = isVersionSupported(compatibleVersion); + } + + return compatible; } /** @@ -350,7 +358,7 @@ public final class ProtocolBridge { * @return true if the current instance is running as a web server, false otherwise */ public boolean isRunningAsWebServer() { - return isRunningAsServer() && protocolServer instanceof ProtocolWebServer_1_0_0_B; + return isRunningAsServer() && protocolServer instanceof ProtocolWebServer; } /** diff --git a/src/main/java/org/openautonomousconnection/protocol/packets/OACPacket.java b/src/main/java/org/openautonomousconnection/protocol/packets/OACPacket.java index fbc3e3a..7c3bfe4 100644 --- a/src/main/java/org/openautonomousconnection/protocol/packets/OACPacket.java +++ b/src/main/java/org/openautonomousconnection/protocol/packets/OACPacket.java @@ -8,10 +8,7 @@ import org.openautonomousconnection.protocol.versions.v1_0_0.beta.INSResponseSta import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * Abstract class representing a packet in the Open Autonomous Connection (OAC) protocol. @@ -23,7 +20,7 @@ public abstract class OACPacket extends Packet { * The protocol version associated with this packet. */ @Getter - private final ProtocolVersion protocolVersion; + private final List compatibleVersions; private final int id; /** * The response code for the packet, defaulting to RESPONSE_NOT_REQUIRED. @@ -34,11 +31,11 @@ public abstract class OACPacket extends Packet { * Constructor for OACPacket. * * @param id The unique identifier for the packet. - * @param protocolVersion The protocol version associated with this packet. + * @param supportedVersions The protocol version associated with this packet. */ - public OACPacket(int id, ProtocolVersion protocolVersion) { + public OACPacket(int id, ProtocolVersion... supportedVersions) { this.id = id; - this.protocolVersion = protocolVersion; + this.compatibleVersions = List.of(supportedVersions); } @Override @@ -76,7 +73,7 @@ public abstract class OACPacket extends Packet { onWrite(outputStream); // Write the response code if the protocol version is not classic - if (protocolVersion != ProtocolVersion.PV_1_0_0_CLASSIC) outputStream.writeUTF(responseCode.name()); + if (!compatibleVersions.contains(ProtocolVersion.PV_1_0_0_CLASSIC)) outputStream.writeUTF(responseCode.name()); } @Override @@ -85,7 +82,7 @@ public abstract class OACPacket extends Packet { onRead(inputStream, clientID); // Read the response code if the protocol version is not classic - if (protocolVersion != ProtocolVersion.PV_1_0_0_CLASSIC) + if (!compatibleVersions.contains(ProtocolVersion.PV_1_0_0_CLASSIC)) responseCode = INSResponseStatus.valueOf(inputStream.readUTF()); else responseCode = INSResponseStatus.RESPONSE_NOT_REQUIRED; diff --git a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/AuthPacket.java b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/AuthPacket.java index 387f25f..e392676 100644 --- a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/AuthPacket.java +++ b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/AuthPacket.java @@ -50,7 +50,7 @@ public final class AuthPacket extends OACPacket { * Registration constructor. */ public AuthPacket() { - super(8, ProtocolVersion.PV_1_0_0_BETA); + super(8, ProtocolVersion.PV_1_0_0_BETA, ProtocolVersion.PV_1_0_1_BETA); } @Override diff --git a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSQueryPacket.java b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSQueryPacket.java index 4cf7d78..68c1db0 100644 --- a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSQueryPacket.java +++ b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSQueryPacket.java @@ -57,7 +57,7 @@ public final class INSQueryPacket extends OACPacket { * Registration constructor */ public INSQueryPacket() { - super(7, ProtocolVersion.PV_1_0_0_BETA); + super(7, ProtocolVersion.PV_1_0_0_BETA, ProtocolVersion.PV_1_0_1_BETA); } /** diff --git a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSResponsePacket.java b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSResponsePacket.java index a9edf4d..e595357 100644 --- a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSResponsePacket.java +++ b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_0/beta/INSResponsePacket.java @@ -58,7 +58,7 @@ public final class INSResponsePacket extends OACPacket { * @param bridge Protocol runtime context. */ public INSResponsePacket(ProtocolBridge bridge) { - super(6, ProtocolVersion.PV_1_0_0_BETA); + super(6, ProtocolVersion.PV_1_0_0_BETA, ProtocolVersion.PV_1_0_1_BETA); this.bridge = bridge; } diff --git a/src/main/java/org/openautonomousconnection/protocol/side/client/ProtocolClient.java b/src/main/java/org/openautonomousconnection/protocol/side/client/ProtocolClient.java index 890f595..c763311 100644 --- a/src/main/java/org/openautonomousconnection/protocol/side/client/ProtocolClient.java +++ b/src/main/java/org/openautonomousconnection/protocol/side/client/ProtocolClient.java @@ -229,7 +229,13 @@ public abstract class ProtocolClient extends EventListener { } public final boolean supportINSServerPacket(OACPacket packet) { - return supportINSServerVersion(packet.getProtocolVersion()); + boolean compatible = false; + + for (ProtocolVersion compatibleVersion : packet.getCompatibleVersions()) { + if (!compatible) compatible = supportINSServerVersion(compatibleVersion); + } + + return compatible; } public final boolean supportINSServerVersion(ProtocolVersion targetVersion) { @@ -285,7 +291,13 @@ public abstract class ProtocolClient extends EventListener { } public final boolean supportServerPacket(OACPacket packet) { - return supportServerVersion(packet.getProtocolVersion()); + boolean compatible = false; + + for (ProtocolVersion compatibleVersion : packet.getCompatibleVersions()) { + if (!compatible) compatible = supportServerVersion(compatibleVersion); + } + + return compatible; } public final boolean supportServerVersion(ProtocolVersion targetVersion) { diff --git a/src/main/java/org/openautonomousconnection/protocol/side/server/CustomConnectedClient.java b/src/main/java/org/openautonomousconnection/protocol/side/server/CustomConnectedClient.java index 385eec4..d1096f0 100644 --- a/src/main/java/org/openautonomousconnection/protocol/side/server/CustomConnectedClient.java +++ b/src/main/java/org/openautonomousconnection/protocol/side/server/CustomConnectedClient.java @@ -156,7 +156,13 @@ public class CustomConnectedClient extends EventListener { * @return True if the client supports the packet's protocol version, false otherwise. */ public boolean supportClientPacket(OACPacket packet) { - return supportClientVersion(packet.getProtocolVersion()); + boolean compatible = false; + + for (ProtocolVersion compatibleVersion : packet.getCompatibleVersions()) { + if (!compatible) compatible = supportClientVersion(compatibleVersion); + } + + return compatible; } /**