diff --git a/pom.xml b/pom.xml
index a9ac1e9..7d5a9bb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
org.openautonomousconnection
Protocol
- 1.0.1-BETA.0.5
+ 1.0.1-BETA.0.6
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 b5c5619..0d04721 100644
--- a/src/main/java/org/openautonomousconnection/protocol/ProtocolBridge.java
+++ b/src/main/java/org/openautonomousconnection/protocol/ProtocolBridge.java
@@ -1,9 +1,7 @@
package org.openautonomousconnection.protocol;
-import dev.unlegitdqrk.unlegitlibrary.addon.AddonLoader;
import dev.unlegitdqrk.unlegitlibrary.file.FileUtils;
import dev.unlegitdqrk.unlegitlibrary.network.system.utils.ClientAuthMode;
-import dev.unlegitdqrk.unlegitlibrary.utils.Logger;
import lombok.Getter;
import org.openautonomousconnection.protocol.annotations.ProtocolInfo;
import org.openautonomousconnection.protocol.listeners.ClientListener;
@@ -28,7 +26,6 @@ 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;
@@ -40,7 +37,6 @@ import org.openautonomousconnection.protocol.versions.v1_0_0.beta.ProtocolWebSer
import java.io.File;
import java.io.IOException;
-import java.util.ResourceBundle;
import java.util.function.Supplier;
/**
diff --git a/src/main/java/org/openautonomousconnection/protocol/annotations/processing/CallTracker.java b/src/main/java/org/openautonomousconnection/protocol/annotations/processing/CallTracker.java
index 0d9a042..bc3abd4 100644
--- a/src/main/java/org/openautonomousconnection/protocol/annotations/processing/CallTracker.java
+++ b/src/main/java/org/openautonomousconnection/protocol/annotations/processing/CallTracker.java
@@ -5,7 +5,6 @@ import net.bytebuddy.agent.ByteBuddyAgent;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.asm.Advice;
-import javax.annotation.Nullable;
import java.lang.annotation.Annotation;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Method;
@@ -73,6 +72,6 @@ public class CallTracker extends GenericReflectClass {
/**
* Code executed on any method call
*/
- public abstract void onCall(Method method, @Nullable StackTraceElement callerMethod);
+ public abstract void onCall(Method method, StackTraceElement callerMethod);
}
}
diff --git a/src/main/java/org/openautonomousconnection/protocol/annotations/processing/ProtocolInfoProcessing.java b/src/main/java/org/openautonomousconnection/protocol/annotations/processing/ProtocolInfoProcessing.java
index 52e71cb..7524fe6 100644
--- a/src/main/java/org/openautonomousconnection/protocol/annotations/processing/ProtocolInfoProcessing.java
+++ b/src/main/java/org/openautonomousconnection/protocol/annotations/processing/ProtocolInfoProcessing.java
@@ -8,7 +8,6 @@ import org.openautonomousconnection.protocol.annotations.ProtocolInfo;
import org.openautonomousconnection.protocol.exceptions.IncompatibleProtocolSideException;
import org.openautonomousconnection.protocol.versions.ProtocolVersion;
-import javax.annotation.Nullable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -36,7 +35,7 @@ public class ProtocolInfoProcessing extends AnnotationProcessor {
this.tracker = new CallTracker<>(new CallTracker.CallInterceptor() {
@Override
- public void onCall(Method method, @Nullable StackTraceElement callerMethod) {
+ public void onCall(Method method, StackTraceElement callerMethod) {
ProtocolVersion.ProtocolSide side, callerSide;
Object o;
diff --git a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_1/beta/web/impl/resource/WebResourceRequestPacket.java b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_1/beta/web/impl/resource/WebResourceRequestPacket.java
index bf860b6..a9cade6 100644
--- a/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_1/beta/web/impl/resource/WebResourceRequestPacket.java
+++ b/src/main/java/org/openautonomousconnection/protocol/packets/v1_0_1/beta/web/impl/resource/WebResourceRequestPacket.java
@@ -90,7 +90,13 @@ public final class WebResourceRequestPacket extends WebPacket {
boolean hasBct = in.readBoolean();
this.bodyContentType = hasBct ? in.readUTF() : null;
- this.initiatorType = WebInitiatorType.valueOf(in.readUTF());
+ try {
+ this.initiatorType = WebInitiatorType.valueOf(in.readUTF());
+ } catch (IllegalArgumentException e) {
+ getProtocolBridge().getProtocolValues().logger.exception("Invalid initiator type: " + initiatorType, e);
+ this.initiatorType = WebInitiatorType.OTHER;
+ }
+
this.cacheMode = WebCacheMode.valueOf(in.readUTF());
int len = in.readInt();
@@ -100,6 +106,7 @@ public final class WebResourceRequestPacket extends WebPacket {
if (protocolBridge.isRunningAsWebServer()) {
ProtocolWebServer server = (ProtocolWebServer) protocolBridge.getProtocolServer();
CustomConnectedClient client = server.getClientByID(clientID);
+ if (client == null) return;
client.getConnection().sendPacket(server.handleResource(client, this), TransportProtocol.TCP);
}
}
diff --git a/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/InsResolutionCoordinator_v1_0_1_B.java b/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/InsResolutionCoordinator_v1_0_1_B.java
index 995af4c..a4e3951 100644
--- a/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/InsResolutionCoordinator_v1_0_1_B.java
+++ b/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/InsResolutionCoordinator_v1_0_1_B.java
@@ -4,6 +4,7 @@ import dev.unlegitdqrk.unlegitlibrary.event.EventListener;
import dev.unlegitdqrk.unlegitlibrary.event.EventPriority;
import dev.unlegitdqrk.unlegitlibrary.event.Listener;
import dev.unlegitdqrk.unlegitlibrary.network.system.client.events.packets.C_PacketReadEvent;
+import dev.unlegitdqrk.unlegitlibrary.network.system.client.events.state.ClientDisconnectedEvent;
import org.openautonomousconnection.protocol.ProtocolBridge;
import org.openautonomousconnection.protocol.packets.v1_0_0.beta.INSResponsePacket;
import org.openautonomousconnection.protocol.side.client.ProtocolClient;
@@ -40,6 +41,7 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
private volatile ProtocolClient insClient; // from ConnectedToProtocolINSServerEvent
private volatile boolean insConnected;
+ private volatile Object activeServerConnection;
private volatile String activeInfoName;
private volatile String pendingInfoName;
@@ -197,9 +199,37 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
@Listener(priority = EventPriority.HIGHEST)
public void onConnectedToServer(ConnectedToProtocolServerEvent event) {
Objects.requireNonNull(event, "event");
+ ProtocolClient client = event.getClient();
+ if (client != null) {
+ this.activeServerConnection = client.getClientServerConnection();
+ }
OacWebRequestBroker.get().notifyServerConnected();
}
+ @Listener(priority = EventPriority.HIGHEST)
+ public void onDisconnected(ClientDisconnectedEvent event) {
+ Objects.requireNonNull(event, "event");
+
+ Object disconnected = event.getClient();
+ if (disconnected == null) return;
+
+ ProtocolBridge b = this.bridge;
+ ProtocolClient client = (b == null) ? null : b.getProtocolClient();
+
+ if (disconnected == activeServerConnection) {
+ activeServerConnection = null;
+ activeInfoName = null;
+ OacWebRequestBroker.get().notifyServerConnectionFailed(
+ new IllegalStateException("Server connection was lost")
+ );
+ }
+
+ if (client != null && disconnected == client.getClientINSConnection()) {
+ this.insConnected = false;
+ this.pendingInfoName = null;
+ }
+ }
+
private boolean canReuseCurrentServerConnection(String infoName) {
ProtocolBridge b = this.bridge;
if (b == null) return false;
@@ -226,7 +256,6 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
InsParts parts = InsParts.parse(infoName);
try {
- // IMPORTANT: direct INS query, no impl.sendIns()
c.sendINSQuery(parts.tln(), parts.name(), parts.sub(), INSRecordType.A);
} catch (Exception e) {
OacWebRequestBroker.get().notifyServerConnectionFailed(e);
@@ -254,9 +283,13 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
);
client.getClientServerConnection().connect(hostname, port);
+ this.activeServerConnection = client.getClientServerConnection();
this.activeInfoName = infoName;
// Broker gate is opened by ConnectedToProtocolServerEvent.
} catch (Exception e) {
+ e.printStackTrace();
+ this.activeServerConnection = null;
+ this.activeInfoName = null;
OacWebRequestBroker.get().notifyServerConnectionFailed(e);
}
}
diff --git a/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/web/OacWebRequestBroker.java b/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/web/OacWebRequestBroker.java
index 289b76d..1ceaa66 100644
--- a/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/web/OacWebRequestBroker.java
+++ b/src/main/java/org/openautonomousconnection/protocol/urlhandler/v1_0_1/beta/web/OacWebRequestBroker.java
@@ -216,7 +216,6 @@ public final class OacWebRequestBroker {
Map safeHeaders = (headers == null) ? Map.of() : new LinkedHashMap<>(headers);
byte[] safeBody = (body == null) ? new byte[0] : body;
-
WebResourceRequestPacket packet = new WebResourceRequestPacket(
header,
url.toString(),
@@ -612,4 +611,4 @@ public final class OacWebRequestBroker {
}
}
}
-}
\ No newline at end of file
+}