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;
}
/**