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 +}