Bug fix
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>org.openautonomousconnection</groupId>
|
<groupId>org.openautonomousconnection</groupId>
|
||||||
<artifactId>Protocol</artifactId>
|
<artifactId>Protocol</artifactId>
|
||||||
<version>1.0.1-BETA.0.5</version>
|
<version>1.0.1-BETA.0.6</version>
|
||||||
<organization>
|
<organization>
|
||||||
<name>Open Autonomous Connection</name>
|
<name>Open Autonomous Connection</name>
|
||||||
<url>https://open-autonomous-connection.org/</url>
|
<url>https://open-autonomous-connection.org/</url>
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
package org.openautonomousconnection.protocol;
|
package org.openautonomousconnection.protocol;
|
||||||
|
|
||||||
import dev.unlegitdqrk.unlegitlibrary.addon.AddonLoader;
|
|
||||||
import dev.unlegitdqrk.unlegitlibrary.file.FileUtils;
|
import dev.unlegitdqrk.unlegitlibrary.file.FileUtils;
|
||||||
import dev.unlegitdqrk.unlegitlibrary.network.system.utils.ClientAuthMode;
|
import dev.unlegitdqrk.unlegitlibrary.network.system.utils.ClientAuthMode;
|
||||||
import dev.unlegitdqrk.unlegitlibrary.utils.Logger;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.openautonomousconnection.protocol.annotations.ProtocolInfo;
|
import org.openautonomousconnection.protocol.annotations.ProtocolInfo;
|
||||||
import org.openautonomousconnection.protocol.listeners.ClientListener;
|
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.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.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.ProtocolClient;
|
||||||
import org.openautonomousconnection.protocol.side.client.ProtocolWebClient;
|
|
||||||
import org.openautonomousconnection.protocol.side.ins.ProtocolINSServer;
|
import org.openautonomousconnection.protocol.side.ins.ProtocolINSServer;
|
||||||
import org.openautonomousconnection.protocol.side.server.ProtocolCustomServer;
|
import org.openautonomousconnection.protocol.side.server.ProtocolCustomServer;
|
||||||
import org.openautonomousconnection.protocol.side.web.ProtocolWebServer;
|
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.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ResourceBundle;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import net.bytebuddy.agent.ByteBuddyAgent;
|
|||||||
import net.bytebuddy.agent.builder.AgentBuilder;
|
import net.bytebuddy.agent.builder.AgentBuilder;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.instrument.Instrumentation;
|
import java.lang.instrument.Instrumentation;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -73,6 +72,6 @@ public class CallTracker<A extends Annotation> extends GenericReflectClass<A> {
|
|||||||
/**
|
/**
|
||||||
* Code executed on any method call
|
* Code executed on any method call
|
||||||
*/
|
*/
|
||||||
public abstract void onCall(Method method, @Nullable StackTraceElement callerMethod);
|
public abstract void onCall(Method method, StackTraceElement callerMethod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.openautonomousconnection.protocol.annotations.ProtocolInfo;
|
|||||||
import org.openautonomousconnection.protocol.exceptions.IncompatibleProtocolSideException;
|
import org.openautonomousconnection.protocol.exceptions.IncompatibleProtocolSideException;
|
||||||
import org.openautonomousconnection.protocol.versions.ProtocolVersion;
|
import org.openautonomousconnection.protocol.versions.ProtocolVersion;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@@ -36,7 +35,7 @@ public class ProtocolInfoProcessing extends AnnotationProcessor<ProtocolInfo> {
|
|||||||
|
|
||||||
this.tracker = new CallTracker<>(new CallTracker.CallInterceptor() {
|
this.tracker = new CallTracker<>(new CallTracker.CallInterceptor() {
|
||||||
@Override
|
@Override
|
||||||
public void onCall(Method method, @Nullable StackTraceElement callerMethod) {
|
public void onCall(Method method, StackTraceElement callerMethod) {
|
||||||
ProtocolVersion.ProtocolSide side, callerSide;
|
ProtocolVersion.ProtocolSide side, callerSide;
|
||||||
Object o;
|
Object o;
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,13 @@ public final class WebResourceRequestPacket extends WebPacket {
|
|||||||
boolean hasBct = in.readBoolean();
|
boolean hasBct = in.readBoolean();
|
||||||
this.bodyContentType = hasBct ? in.readUTF() : null;
|
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());
|
this.cacheMode = WebCacheMode.valueOf(in.readUTF());
|
||||||
|
|
||||||
int len = in.readInt();
|
int len = in.readInt();
|
||||||
@@ -100,6 +106,7 @@ public final class WebResourceRequestPacket extends WebPacket {
|
|||||||
if (protocolBridge.isRunningAsWebServer()) {
|
if (protocolBridge.isRunningAsWebServer()) {
|
||||||
ProtocolWebServer server = (ProtocolWebServer) protocolBridge.getProtocolServer();
|
ProtocolWebServer server = (ProtocolWebServer) protocolBridge.getProtocolServer();
|
||||||
CustomConnectedClient client = server.getClientByID(clientID);
|
CustomConnectedClient client = server.getClientByID(clientID);
|
||||||
|
if (client == null) return;
|
||||||
client.getConnection().sendPacket(server.handleResource(client, this), TransportProtocol.TCP);
|
client.getConnection().sendPacket(server.handleResource(client, this), TransportProtocol.TCP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import dev.unlegitdqrk.unlegitlibrary.event.EventListener;
|
|||||||
import dev.unlegitdqrk.unlegitlibrary.event.EventPriority;
|
import dev.unlegitdqrk.unlegitlibrary.event.EventPriority;
|
||||||
import dev.unlegitdqrk.unlegitlibrary.event.Listener;
|
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.packets.C_PacketReadEvent;
|
||||||
|
import dev.unlegitdqrk.unlegitlibrary.network.system.client.events.state.ClientDisconnectedEvent;
|
||||||
import org.openautonomousconnection.protocol.ProtocolBridge;
|
import org.openautonomousconnection.protocol.ProtocolBridge;
|
||||||
import org.openautonomousconnection.protocol.packets.v1_0_0.beta.INSResponsePacket;
|
import org.openautonomousconnection.protocol.packets.v1_0_0.beta.INSResponsePacket;
|
||||||
import org.openautonomousconnection.protocol.side.client.ProtocolClient;
|
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 ProtocolClient insClient; // from ConnectedToProtocolINSServerEvent
|
||||||
private volatile boolean insConnected;
|
private volatile boolean insConnected;
|
||||||
|
private volatile Object activeServerConnection;
|
||||||
|
|
||||||
private volatile String activeInfoName;
|
private volatile String activeInfoName;
|
||||||
private volatile String pendingInfoName;
|
private volatile String pendingInfoName;
|
||||||
@@ -197,9 +199,37 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
|
|||||||
@Listener(priority = EventPriority.HIGHEST)
|
@Listener(priority = EventPriority.HIGHEST)
|
||||||
public void onConnectedToServer(ConnectedToProtocolServerEvent event) {
|
public void onConnectedToServer(ConnectedToProtocolServerEvent event) {
|
||||||
Objects.requireNonNull(event, "event");
|
Objects.requireNonNull(event, "event");
|
||||||
|
ProtocolClient client = event.getClient();
|
||||||
|
if (client != null) {
|
||||||
|
this.activeServerConnection = client.getClientServerConnection();
|
||||||
|
}
|
||||||
OacWebRequestBroker.get().notifyServerConnected();
|
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) {
|
private boolean canReuseCurrentServerConnection(String infoName) {
|
||||||
ProtocolBridge b = this.bridge;
|
ProtocolBridge b = this.bridge;
|
||||||
if (b == null) return false;
|
if (b == null) return false;
|
||||||
@@ -226,7 +256,6 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
|
|||||||
InsParts parts = InsParts.parse(infoName);
|
InsParts parts = InsParts.parse(infoName);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// IMPORTANT: direct INS query, no impl.sendIns()
|
|
||||||
c.sendINSQuery(parts.tln(), parts.name(), parts.sub(), INSRecordType.A);
|
c.sendINSQuery(parts.tln(), parts.name(), parts.sub(), INSRecordType.A);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
OacWebRequestBroker.get().notifyServerConnectionFailed(e);
|
OacWebRequestBroker.get().notifyServerConnectionFailed(e);
|
||||||
@@ -254,9 +283,13 @@ public final class InsResolutionCoordinator_v1_0_1_B extends EventListener {
|
|||||||
);
|
);
|
||||||
|
|
||||||
client.getClientServerConnection().connect(hostname, port);
|
client.getClientServerConnection().connect(hostname, port);
|
||||||
|
this.activeServerConnection = client.getClientServerConnection();
|
||||||
this.activeInfoName = infoName;
|
this.activeInfoName = infoName;
|
||||||
// Broker gate is opened by ConnectedToProtocolServerEvent.
|
// Broker gate is opened by ConnectedToProtocolServerEvent.
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
this.activeServerConnection = null;
|
||||||
|
this.activeInfoName = null;
|
||||||
OacWebRequestBroker.get().notifyServerConnectionFailed(e);
|
OacWebRequestBroker.get().notifyServerConnectionFailed(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,7 +216,6 @@ public final class OacWebRequestBroker {
|
|||||||
|
|
||||||
Map<String, String> safeHeaders = (headers == null) ? Map.of() : new LinkedHashMap<>(headers);
|
Map<String, String> safeHeaders = (headers == null) ? Map.of() : new LinkedHashMap<>(headers);
|
||||||
byte[] safeBody = (body == null) ? new byte[0] : body;
|
byte[] safeBody = (body == null) ? new byte[0] : body;
|
||||||
|
|
||||||
WebResourceRequestPacket packet = new WebResourceRequestPacket(
|
WebResourceRequestPacket packet = new WebResourceRequestPacket(
|
||||||
header,
|
header,
|
||||||
url.toString(),
|
url.toString(),
|
||||||
@@ -612,4 +611,4 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user