Finished
This commit is contained in:
4
pom.xml
4
pom.xml
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>org.openautonomousconnection</groupId>
|
<groupId>org.openautonomousconnection</groupId>
|
||||||
<artifactId>InfoNameLib</artifactId>
|
<artifactId>InfoNameLib</artifactId>
|
||||||
<version>1.0.0-BETA.1.3</version>
|
<version>1.0.0-BETA.1.0</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>
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openautonomousconnection</groupId>
|
<groupId>org.openautonomousconnection</groupId>
|
||||||
<artifactId>Protocol</artifactId>
|
<artifactId>Protocol</artifactId>
|
||||||
<version>1.0.0-BETA.7.7</version>
|
<version>1.0.0-BETA.1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package org.openautonomousconnection.infonamelib;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores the current session token across multiple HttpURLConnection instances.
|
||||||
|
*
|
||||||
|
* <p>JavaFX WebView creates a new connection per navigation, so headers must be re-injected
|
||||||
|
* for every request.</p>
|
||||||
|
*/
|
||||||
|
public final class OacSessionJar {
|
||||||
|
|
||||||
|
private volatile String session;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores a session token (e.g. from response header "session").
|
||||||
|
*
|
||||||
|
* @param session session token
|
||||||
|
*/
|
||||||
|
public void store(String session) {
|
||||||
|
String s = (session == null) ? null : session.trim();
|
||||||
|
this.session = (s == null || s.isEmpty()) ? null : s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return stored session token or null
|
||||||
|
*/
|
||||||
|
public String get() {
|
||||||
|
return session;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
package org.openautonomousconnection.infonamelib;
|
||||||
|
|
||||||
|
import org.openautonomousconnection.protocol.versions.v1_0_0.beta.WebRequestMethod;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.ProtocolException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HttpURLConnection implementation that maps "web://" URLs to OAC WebRequestPacket/WebResponsePacket.
|
||||||
|
*
|
||||||
|
* <p>Important semantics for JavaFX WebView:</p>
|
||||||
|
* <ul>
|
||||||
|
* <li>WebView may call {@link #connect()} before {@link #getOutputStream()}.</li>
|
||||||
|
* <li>WebView creates a NEW connection instance per navigation; therefore persistent headers
|
||||||
|
* (like session) must be injected from an external store per request.</li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
public final class OacWebHttpURLConnection extends HttpURLConnection {
|
||||||
|
|
||||||
|
private static final int MAX_REDIRECTS = 8;
|
||||||
|
|
||||||
|
private final OacWebRequestBroker broker;
|
||||||
|
private final OacSessionJar sessionJar;
|
||||||
|
|
||||||
|
private final Map<String, String> requestHeaders = new LinkedHashMap<>();
|
||||||
|
private final ByteArrayOutputStream requestBody = new ByteArrayOutputStream(1024);
|
||||||
|
|
||||||
|
private boolean connected;
|
||||||
|
private boolean requestSent;
|
||||||
|
|
||||||
|
private OacWebResponse response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new OAC HttpURLConnection.
|
||||||
|
*
|
||||||
|
* @param url the web:// URL
|
||||||
|
* @param broker request broker
|
||||||
|
* @param sessionJar shared session store (must be shared across connections)
|
||||||
|
*/
|
||||||
|
public OacWebHttpURLConnection(URL url, OacWebRequestBroker broker, OacSessionJar sessionJar) {
|
||||||
|
super(url);
|
||||||
|
this.broker = Objects.requireNonNull(broker, "broker");
|
||||||
|
this.sessionJar = Objects.requireNonNull(sessionJar, "sessionJar");
|
||||||
|
this.method = "GET";
|
||||||
|
setInstanceFollowRedirects(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String headerValue(Map<String, String> headers, String nameLower) {
|
||||||
|
if (headers == null || headers.isEmpty() || nameLower == null) return null;
|
||||||
|
String needle = nameLower.trim().toLowerCase(Locale.ROOT);
|
||||||
|
for (Map.Entry<String, String> e : headers.entrySet()) {
|
||||||
|
if (e.getKey() == null) continue;
|
||||||
|
if (e.getKey().trim().toLowerCase(Locale.ROOT).equals(needle)) {
|
||||||
|
return e.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRequestProperty(String key, String value) {
|
||||||
|
if (key == null) return;
|
||||||
|
// DO NOT block after connect(): WebView may call connect() early.
|
||||||
|
// Only block once the request was actually sent.
|
||||||
|
if (requestSent) throw new IllegalStateException("Request already sent");
|
||||||
|
if (value == null) requestHeaders.remove(key);
|
||||||
|
else requestHeaders.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRequestProperty(String key) {
|
||||||
|
if (key == null) return null;
|
||||||
|
for (Map.Entry<String, String> e : requestHeaders.entrySet()) {
|
||||||
|
if (e.getKey() != null && e.getKey().equalsIgnoreCase(key)) return e.getValue();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, List<String>> getRequestProperties() {
|
||||||
|
Map<String, List<String>> out = new LinkedHashMap<>();
|
||||||
|
for (Map.Entry<String, String> e : requestHeaders.entrySet()) {
|
||||||
|
out.put(e.getKey(), e.getValue() == null ? List.of() : List.of(e.getValue()));
|
||||||
|
}
|
||||||
|
return Collections.unmodifiableMap(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRequestMethod(String method) throws ProtocolException {
|
||||||
|
if (method == null) throw new ProtocolException("method is null");
|
||||||
|
if (requestSent) throw new ProtocolException("Request already sent");
|
||||||
|
|
||||||
|
String m = method.trim().toUpperCase(Locale.ROOT);
|
||||||
|
if (!m.equals("GET") && !m.equals("POST")) {
|
||||||
|
throw new ProtocolException("Unsupported method: " + method);
|
||||||
|
}
|
||||||
|
this.method = m;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OutputStream getOutputStream() throws IOException {
|
||||||
|
// WebView may call connect() first, so do NOT throw "Already connected".
|
||||||
|
if (requestSent) throw new IllegalStateException("Request already sent");
|
||||||
|
|
||||||
|
setDoOutput(true);
|
||||||
|
return requestBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void connect() {
|
||||||
|
// MUST NOT send here. WebView may call connect() before writing the POST body.
|
||||||
|
connected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ensureResponse() throws IOException {
|
||||||
|
if (requestSent) return;
|
||||||
|
|
||||||
|
URL cur = this.url;
|
||||||
|
|
||||||
|
String methodStr = (this.method == null) ? "GET" : this.method.trim().toUpperCase(Locale.ROOT);
|
||||||
|
WebRequestMethod reqMethod = "POST".equals(methodStr) ? WebRequestMethod.POST : WebRequestMethod.GET;
|
||||||
|
|
||||||
|
// Snapshot headers/body at send time.
|
||||||
|
Map<String, String> carryHeaders = new LinkedHashMap<>(requestHeaders);
|
||||||
|
|
||||||
|
// ---- SESSION HEADER INJECTION (the core fix for your "header resets") ----
|
||||||
|
// Each navigation creates a new connection, so we re-add the session for every request.
|
||||||
|
String session = sessionJar.get();
|
||||||
|
if (session != null && !session.isBlank() && headerValue(carryHeaders, "session") == null) {
|
||||||
|
carryHeaders.put("session", session);
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] carryBody = null;
|
||||||
|
if (getDoOutput()) {
|
||||||
|
carryBody = requestBody.toByteArray();
|
||||||
|
if (reqMethod == WebRequestMethod.POST && carryBody == null) carryBody = new byte[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reqMethod == WebRequestMethod.POST && headerValue(carryHeaders, "content-type") == null) {
|
||||||
|
carryHeaders.put("content-type", "application/x-www-form-urlencoded; charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
OacWebResponse resp = null;
|
||||||
|
WebRequestMethod carryMethod = reqMethod;
|
||||||
|
|
||||||
|
for (int i = 0; i <= MAX_REDIRECTS; i++) {
|
||||||
|
resp = broker.fetch(cur, carryMethod, carryHeaders, carryBody);
|
||||||
|
|
||||||
|
// ---- capture session from response (login/register) ----
|
||||||
|
String newSession = headerValue(resp.headers(), "session");
|
||||||
|
if (newSession != null && !newSession.isBlank()) {
|
||||||
|
sessionJar.store(newSession);
|
||||||
|
// keep it for the next request in this redirect chain too
|
||||||
|
carryHeaders.put("session", newSession);
|
||||||
|
}
|
||||||
|
|
||||||
|
int code = resp.statusCode();
|
||||||
|
if (!getInstanceFollowRedirects()) break;
|
||||||
|
|
||||||
|
if (code == 301 || code == 302 || code == 303 || code == 307 || code == 308) {
|
||||||
|
String loc = headerValue(resp.headers(), "location");
|
||||||
|
if (loc == null || loc.isBlank()) break;
|
||||||
|
|
||||||
|
try {
|
||||||
|
cur = new URL(cur, loc);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (code == 303) {
|
||||||
|
carryMethod = WebRequestMethod.GET;
|
||||||
|
carryBody = null;
|
||||||
|
} else if ((code == 301 || code == 302) && carryMethod == WebRequestMethod.POST) {
|
||||||
|
carryMethod = WebRequestMethod.GET;
|
||||||
|
carryBody = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.response = resp;
|
||||||
|
this.requestSent = true;
|
||||||
|
this.connected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream getInputStream() throws IOException {
|
||||||
|
ensureResponse();
|
||||||
|
if (response == null) return new ByteArrayInputStream(new byte[0]);
|
||||||
|
return response.bodyStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream getErrorStream() {
|
||||||
|
try {
|
||||||
|
ensureResponse();
|
||||||
|
if (response == null) return null;
|
||||||
|
int code = response.statusCode();
|
||||||
|
return (code >= 400) ? response.bodyStream() : null;
|
||||||
|
} catch (IOException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getResponseCode() throws IOException {
|
||||||
|
ensureResponse();
|
||||||
|
return response == null ? -1 : response.statusCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getContentType() {
|
||||||
|
try {
|
||||||
|
ensureResponse();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return "application/octet-stream";
|
||||||
|
}
|
||||||
|
String ct = (response == null) ? null : response.contentType();
|
||||||
|
return (ct == null || ct.isBlank()) ? "application/octet-stream" : ct;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentLength() {
|
||||||
|
try {
|
||||||
|
ensureResponse();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
long len = (response == null) ? -1L : response.contentLength();
|
||||||
|
return (len <= 0 || len > Integer.MAX_VALUE) ? -1 : (int) len;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getContentLengthLong() {
|
||||||
|
try {
|
||||||
|
ensureResponse();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return -1L;
|
||||||
|
}
|
||||||
|
return (response == null) ? -1L : response.contentLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, List<String>> getHeaderFields() {
|
||||||
|
try {
|
||||||
|
ensureResponse();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return Map.of();
|
||||||
|
}
|
||||||
|
if (response == null) return Map.of();
|
||||||
|
|
||||||
|
Map<String, List<String>> out = new LinkedHashMap<>();
|
||||||
|
for (Map.Entry<String, String> e : response.headers().entrySet()) {
|
||||||
|
String k = e.getKey();
|
||||||
|
String v = e.getValue();
|
||||||
|
if (k == null) continue;
|
||||||
|
out.put(k, v == null ? List.of() : List.of(v));
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHeaderField(String name) {
|
||||||
|
if (name == null) return null;
|
||||||
|
try {
|
||||||
|
ensureResponse();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (response == null) return null;
|
||||||
|
return headerValue(response.headers(), name.trim().toLowerCase(Locale.ROOT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disconnect() {
|
||||||
|
// No persistent socket owned by this object.
|
||||||
|
connected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean usingProxy() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -75,7 +75,9 @@ public final class OacWebPacketListener extends EventListener {
|
|||||||
|
|
||||||
if (!host.contains(":")) {
|
if (!host.contains(":")) {
|
||||||
hostname = host;
|
hostname = host;
|
||||||
port = 1028;
|
|
||||||
|
if (records.getFirst().port == 0) port = 1028;
|
||||||
|
else port = records.getFirst().port;
|
||||||
} else {
|
} else {
|
||||||
String[] split = host.split(":", 2);
|
String[] split = host.split(":", 2);
|
||||||
hostname = split[0].trim();
|
hostname = split[0].trim();
|
||||||
|
|||||||
@@ -48,6 +48,30 @@ public final class OacWebRequestBroker {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String safeContentType(String ct) {
|
||||||
|
return (ct == null || ct.isBlank()) ? "application/octet-stream" : ct;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<String, String> safeHeaders(Map<String, String> headers) {
|
||||||
|
return (headers == null || headers.isEmpty()) ? Map.of() : Map.copyOf(headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String normalizePathWithQuery(String path, String query) {
|
||||||
|
String p;
|
||||||
|
if (path == null || path.isBlank() || "/".equals(path)) {
|
||||||
|
p = "index.html";
|
||||||
|
} else {
|
||||||
|
p = path.startsWith("/") ? path.substring(1) : path;
|
||||||
|
if (p.isBlank()) p = "index.html";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query != null && !query.isBlank()) {
|
||||||
|
// Keep query for server-side fallback parsing
|
||||||
|
return p + "?" + query;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attaches the client used to send INS/Web packets.
|
* Attaches the client used to send INS/Web packets.
|
||||||
*
|
*
|
||||||
@@ -102,13 +126,6 @@ public final class OacWebRequestBroker {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a resource and blocks until the current single-flight response completes.
|
* Opens a resource and blocks until the current single-flight response completes.
|
||||||
*
|
|
||||||
* @param client protocol client
|
|
||||||
* @param url web:// URL
|
|
||||||
* @param method request method
|
|
||||||
* @param headers request headers
|
|
||||||
* @param body request body
|
|
||||||
* @return response snapshot
|
|
||||||
*/
|
*/
|
||||||
public Response openAndAwait(ProtocolClient client, URL url, WebRequestMethod method, Map<String, String> headers, byte[] body) {
|
public Response openAndAwait(ProtocolClient client, URL url, WebRequestMethod method, Map<String, String> headers, byte[] body) {
|
||||||
Objects.requireNonNull(client, "client");
|
Objects.requireNonNull(client, "client");
|
||||||
@@ -121,12 +138,6 @@ public final class OacWebRequestBroker {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends required packets for a {@code web://} URL.
|
* Sends required packets for a {@code web://} URL.
|
||||||
*
|
|
||||||
* @param client protocol client
|
|
||||||
* @param url web:// URL
|
|
||||||
* @param method request method
|
|
||||||
* @param headers request headers
|
|
||||||
* @param body request body
|
|
||||||
*/
|
*/
|
||||||
public synchronized void open(ProtocolClient client, URL url, WebRequestMethod method, Map<String, String> headers, byte[] body) {
|
public synchronized void open(ProtocolClient client, URL url, WebRequestMethod method, Map<String, String> headers, byte[] body) {
|
||||||
Objects.requireNonNull(client, "client");
|
Objects.requireNonNull(client, "client");
|
||||||
@@ -142,7 +153,8 @@ public final class OacWebRequestBroker {
|
|||||||
throw new IllegalArgumentException("Missing InfoName in URL: " + url);
|
throw new IllegalArgumentException("Missing InfoName in URL: " + url);
|
||||||
}
|
}
|
||||||
|
|
||||||
String path = normalizePath(url.getPath());
|
// IMPORTANT FIX: include query in the path, so the server can read it as fallback.
|
||||||
|
String path = normalizePathWithQuery(url.getPath(), url.getQuery());
|
||||||
|
|
||||||
beginNewResponse();
|
beginNewResponse();
|
||||||
|
|
||||||
@@ -156,9 +168,6 @@ public final class OacWebRequestBroker {
|
|||||||
sendWebRequest(client, path, method, headers, body);
|
sendWebRequest(client, path, method, headers, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Called once the ServerConnection is established (from listener).
|
|
||||||
*/
|
|
||||||
public void notifyServerConnected() {
|
public void notifyServerConnected() {
|
||||||
CountDownLatch latch = connectionLatch;
|
CountDownLatch latch = connectionLatch;
|
||||||
if (latch != null) {
|
if (latch != null) {
|
||||||
@@ -166,21 +175,10 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Forces re-resolution on next request.
|
|
||||||
*/
|
|
||||||
public synchronized void invalidateCurrentInfoName() {
|
public synchronized void invalidateCurrentInfoName() {
|
||||||
currentInfoName = null;
|
currentInfoName = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives non-streamed WebResponsePacket.
|
|
||||||
*
|
|
||||||
* @param statusCode status code
|
|
||||||
* @param contentType content type
|
|
||||||
* @param headers headers
|
|
||||||
* @param body body bytes
|
|
||||||
*/
|
|
||||||
public void onWebResponse(int statusCode, String contentType, Map<String, String> headers, byte[] body) {
|
public void onWebResponse(int statusCode, String contentType, Map<String, String> headers, byte[] body) {
|
||||||
ResponseState st = responseState;
|
ResponseState st = responseState;
|
||||||
if (st == null) return;
|
if (st == null) return;
|
||||||
@@ -201,14 +199,6 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives a stream start.
|
|
||||||
*
|
|
||||||
* @param statusCode status code
|
|
||||||
* @param contentType content type
|
|
||||||
* @param headers headers
|
|
||||||
* @param totalLength total length (may be 0/unknown)
|
|
||||||
*/
|
|
||||||
public void onStreamStart(int statusCode, String contentType, Map<String, String> headers, long totalLength) {
|
public void onStreamStart(int statusCode, String contentType, Map<String, String> headers, long totalLength) {
|
||||||
ResponseState st = responseState;
|
ResponseState st = responseState;
|
||||||
if (st == null) return;
|
if (st == null) return;
|
||||||
@@ -225,12 +215,6 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives a stream chunk (may arrive out-of-order).
|
|
||||||
*
|
|
||||||
* @param seq chunk sequence number
|
|
||||||
* @param data chunk bytes
|
|
||||||
*/
|
|
||||||
public void onStreamChunk(int seq, byte[] data) {
|
public void onStreamChunk(int seq, byte[] data) {
|
||||||
ResponseState st = responseState;
|
ResponseState st = responseState;
|
||||||
if (st == null) return;
|
if (st == null) return;
|
||||||
@@ -249,11 +233,6 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives stream end.
|
|
||||||
*
|
|
||||||
* @param ok whether stream completed successfully
|
|
||||||
*/
|
|
||||||
public void onStreamEnd(boolean ok) {
|
public void onStreamEnd(boolean ok) {
|
||||||
ResponseState st = responseState;
|
ResponseState st = responseState;
|
||||||
if (st == null) return;
|
if (st == null) return;
|
||||||
@@ -276,13 +255,6 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Waits for the current response.
|
|
||||||
*
|
|
||||||
* @param timeout timeout
|
|
||||||
* @param unit unit
|
|
||||||
* @return response snapshot
|
|
||||||
*/
|
|
||||||
public Response awaitResponse(long timeout, TimeUnit unit) {
|
public Response awaitResponse(long timeout, TimeUnit unit) {
|
||||||
Objects.requireNonNull(unit, "unit");
|
Objects.requireNonNull(unit, "unit");
|
||||||
|
|
||||||
@@ -314,26 +286,6 @@ public final class OacWebRequestBroker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============================
|
|
||||||
// Internal helpers
|
|
||||||
// ============================
|
|
||||||
|
|
||||||
private static String safeContentType(String ct) {
|
|
||||||
return (ct == null || ct.isBlank()) ? "application/octet-stream" : ct;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Map<String, String> safeHeaders(Map<String, String> headers) {
|
|
||||||
return (headers == null || headers.isEmpty()) ? Map.of() : Map.copyOf(headers);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String normalizePath(String path) {
|
|
||||||
if (path == null || path.isBlank() || "/".equals(path)) {
|
|
||||||
return "index.html";
|
|
||||||
}
|
|
||||||
String p = path.startsWith("/") ? path.substring(1) : path;
|
|
||||||
return p.isBlank() ? "index.html" : p;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resolveAndConnect(ProtocolClient client, String infoName) {
|
private void resolveAndConnect(ProtocolClient client, String infoName) {
|
||||||
if (client.getClientINSConnection() == null || !client.getClientINSConnection().isConnected()) return;
|
if (client.getClientINSConnection() == null || !client.getClientINSConnection().isConnected()) return;
|
||||||
|
|
||||||
@@ -433,14 +385,6 @@ public final class OacWebRequestBroker {
|
|||||||
st.done.countDown();
|
st.done.countDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Immutable response snapshot.
|
|
||||||
*
|
|
||||||
* @param statusCode status code
|
|
||||||
* @param contentType content type
|
|
||||||
* @param headers headers
|
|
||||||
* @param body body bytes
|
|
||||||
*/
|
|
||||||
public record Response(int statusCode, String contentType, Map<String, String> headers, byte[] body) {
|
public record Response(int statusCode, String contentType, Map<String, String> headers, byte[] body) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ public final class OacWebURLConnection extends URLConnection {
|
|||||||
private static final int MAX_REDIRECTS = 8;
|
private static final int MAX_REDIRECTS = 8;
|
||||||
|
|
||||||
private final OacWebRequestBroker broker;
|
private final OacWebRequestBroker broker;
|
||||||
|
|
||||||
private boolean connected;
|
|
||||||
private OacWebResponse response;
|
|
||||||
|
|
||||||
private final Map<String, String> requestHeaders = new LinkedHashMap<>();
|
private final Map<String, String> requestHeaders = new LinkedHashMap<>();
|
||||||
private final ByteArrayOutputStream requestBody = new ByteArrayOutputStream(1024);
|
private final ByteArrayOutputStream requestBody = new ByteArrayOutputStream(1024);
|
||||||
|
private boolean connected;
|
||||||
|
private OacWebResponse response;
|
||||||
|
private boolean outputOpened;
|
||||||
|
private boolean outputClosed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new OAC URLConnection.
|
* Creates a new OAC URLConnection.
|
||||||
@@ -85,7 +85,24 @@ public final class OacWebURLConnection extends URLConnection {
|
|||||||
@Override
|
@Override
|
||||||
public OutputStream getOutputStream() {
|
public OutputStream getOutputStream() {
|
||||||
setDoOutput(true);
|
setDoOutput(true);
|
||||||
return requestBody;
|
outputOpened = true;
|
||||||
|
|
||||||
|
return new OutputStream() {
|
||||||
|
@Override
|
||||||
|
public void write(int b) {
|
||||||
|
requestBody.write(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(byte[] b, int off, int len) {
|
||||||
|
requestBody.write(b, off, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
outputClosed = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -94,12 +111,24 @@ public final class OacWebURLConnection extends URLConnection {
|
|||||||
|
|
||||||
URL cur = this.url;
|
URL cur = this.url;
|
||||||
|
|
||||||
// Determine initial method/body.
|
// Decide method:
|
||||||
byte[] body = (getDoOutput() && requestBody.size() > 0) ? requestBody.toByteArray() : null;
|
// - If doOutput is true OR content-type is present: treat as POST (even if body is empty).
|
||||||
WebRequestMethod method = (body != null) ? WebRequestMethod.POST : WebRequestMethod.GET;
|
// This fixes engines that perform POST with empty/unknown body.
|
||||||
|
boolean hasContentType = headerValue(requestHeaders, "content-type") != null;
|
||||||
|
boolean wantsPost = getDoOutput() || hasContentType;
|
||||||
|
|
||||||
|
WebRequestMethod method = wantsPost ? WebRequestMethod.POST : WebRequestMethod.GET;
|
||||||
|
|
||||||
|
byte[] body;
|
||||||
|
if (wantsPost) {
|
||||||
|
// Always send a body for POST; may be empty.
|
||||||
|
body = requestBody.toByteArray();
|
||||||
|
} else {
|
||||||
|
body = null;
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure content-type exists for form posts if caller didn't set it.
|
// Ensure content-type exists for form posts if caller didn't set it.
|
||||||
if (method == WebRequestMethod.POST && headerValue(requestHeaders, "content-type") == null) {
|
if (method == WebRequestMethod.POST && !hasContentType) {
|
||||||
requestHeaders.put("content-type", "application/x-www-form-urlencoded; charset=utf-8");
|
requestHeaders.put("content-type", "application/x-www-form-urlencoded; charset=utf-8");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,7 @@ import java.util.Objects;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Installs the "web://" protocol handler using the standard Java mechanism:
|
* Installs the "web://" protocol handler using java.protocol.handler.pkgs.
|
||||||
* {@code java.protocol.handler.pkgs}.
|
|
||||||
*
|
|
||||||
* <p>This avoids {@link java.net.URL#setURLStreamHandlerFactory} which can only be set once per JVM.</p>
|
|
||||||
*/
|
*/
|
||||||
public final class OacWebUrlInstaller {
|
public final class OacWebUrlInstaller {
|
||||||
|
|
||||||
@@ -19,34 +16,16 @@ public final class OacWebUrlInstaller {
|
|||||||
private OacWebUrlInstaller() {
|
private OacWebUrlInstaller() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Installs:
|
|
||||||
* <ul>
|
|
||||||
* <li>protocol handler package prefix</li>
|
|
||||||
* <li>packet listener forwarding WebResponse/WebStream + INSResponse into the broker</li>
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* <p>Must be called before any {@code web://} URL is resolved/loaded.</p>
|
|
||||||
*
|
|
||||||
* @param eventManager global event manager
|
|
||||||
* @param client protocol client (required for connecting ServerConnection after INS resolution)
|
|
||||||
*/
|
|
||||||
public static void installOnce(EventManager eventManager, ProtocolClient client) {
|
public static void installOnce(EventManager eventManager, ProtocolClient client) {
|
||||||
Objects.requireNonNull(eventManager, "eventManager");
|
Objects.requireNonNull(eventManager, "eventManager");
|
||||||
Objects.requireNonNull(client, "client");
|
Objects.requireNonNull(client, "client");
|
||||||
|
|
||||||
if (!INSTALLED.compareAndSet(false, true)) {
|
if (!INSTALLED.compareAndSet(false, true)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make client available for broker.fetch(...)
|
|
||||||
OacWebRequestBroker.get().attachClient(client);
|
OacWebRequestBroker.get().attachClient(client);
|
||||||
|
|
||||||
// Register packet listener (INSResponse + WebResponse + WebStream*)
|
|
||||||
eventManager.registerListener(new OacWebPacketListener(OacWebRequestBroker.get(), client));
|
eventManager.registerListener(new OacWebPacketListener(OacWebRequestBroker.get(), client));
|
||||||
|
|
||||||
// Register protocol handler package prefix:
|
// IMPORTANT: must match "org.openautonomousconnection.infonamelib.web.Handler"
|
||||||
// JVM will load: "org.openautonomousconnection.webclient.recode.url.web.Handler"
|
ProtocolHandlerPackages.installPackage("org.openautonomousconnection.infonamelib");
|
||||||
ProtocolHandlerPackages.installPackage("org.openautonomousconnection.webclient.recode.url");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
package org.openautonomousconnection.infonamelib.web;
|
package org.openautonomousconnection.infonamelib.web;
|
||||||
|
|
||||||
|
import org.openautonomousconnection.infonamelib.OacSessionJar;
|
||||||
|
import org.openautonomousconnection.infonamelib.OacWebHttpURLConnection;
|
||||||
import org.openautonomousconnection.infonamelib.OacWebRequestBroker;
|
import org.openautonomousconnection.infonamelib.OacWebRequestBroker;
|
||||||
import org.openautonomousconnection.infonamelib.OacWebURLConnection;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@@ -9,14 +10,13 @@ import java.net.URLConnection;
|
|||||||
import java.net.URLStreamHandler;
|
import java.net.URLStreamHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URLStreamHandler for the "web" protocol.
|
* URLStreamHandler for the "web" protocol (loaded via java.protocol.handler.pkgs).
|
||||||
*
|
|
||||||
* <p>Loaded via the "java.protocol.handler.pkgs" mechanism.</p>
|
|
||||||
*/
|
*/
|
||||||
public final class Handler extends URLStreamHandler {
|
public final class Handler extends URLStreamHandler {
|
||||||
|
private static final OacSessionJar SESSION_JAR = new OacSessionJar();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected URLConnection openConnection(URL u) throws IOException {
|
protected URLConnection openConnection(URL u) throws IOException {
|
||||||
return new OacWebURLConnection(u, OacWebRequestBroker.get());
|
return new OacWebHttpURLConnection(u, OacWebRequestBroker.get(), SESSION_JAR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,277 +0,0 @@
|
|||||||
Eclipse Public License - v 2.0
|
|
||||||
|
|
||||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
|
|
||||||
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
|
|
||||||
OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
|
||||||
|
|
||||||
1. DEFINITIONS
|
|
||||||
|
|
||||||
"Contribution" means:
|
|
||||||
|
|
||||||
a) in the case of the initial Contributor, the initial content
|
|
||||||
Distributed under this Agreement, and
|
|
||||||
|
|
||||||
b) in the case of each subsequent Contributor:
|
|
||||||
i) changes to the Program, and
|
|
||||||
ii) additions to the Program;
|
|
||||||
where such changes and/or additions to the Program originate from
|
|
||||||
and are Distributed by that particular Contributor. A Contribution
|
|
||||||
"originates" from a Contributor if it was added to the Program by
|
|
||||||
such Contributor itself or anyone acting on such Contributor's behalf.
|
|
||||||
Contributions do not include changes or additions to the Program that
|
|
||||||
are not Modified Works.
|
|
||||||
|
|
||||||
"Contributor" means any person or entity that Distributes the Program.
|
|
||||||
|
|
||||||
"Licensed Patents" mean patent claims licensable by a Contributor which
|
|
||||||
are necessarily infringed by the use or sale of its Contribution alone
|
|
||||||
or when combined with the Program.
|
|
||||||
|
|
||||||
"Program" means the Contributions Distributed in accordance with this
|
|
||||||
Agreement.
|
|
||||||
|
|
||||||
"Recipient" means anyone who receives the Program under this Agreement
|
|
||||||
or any Secondary License (as applicable), including Contributors.
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source Code or other
|
|
||||||
form, that is based on (or derived from) the Program and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship.
|
|
||||||
|
|
||||||
"Modified Works" shall mean any work in Source Code or other form that
|
|
||||||
results from an addition to, deletion from, or modification of the
|
|
||||||
contents of the Program, including, for purposes of clarity any new file
|
|
||||||
in Source Code form that contains any contents of the Program. Modified
|
|
||||||
Works shall not include works that contain only declarations,
|
|
||||||
interfaces, types, classes, structures, or files of the Program solely
|
|
||||||
in each case in order to link to, bind by name, or subclass the Program
|
|
||||||
or Modified Works thereof.
|
|
||||||
|
|
||||||
"Distribute" means the acts of a) distributing or b) making available
|
|
||||||
in any manner that enables the transfer of a copy.
|
|
||||||
|
|
||||||
"Source Code" means the form of a Program preferred for making
|
|
||||||
modifications, including but not limited to software source code,
|
|
||||||
documentation source, and configuration files.
|
|
||||||
|
|
||||||
"Secondary License" means either the GNU General Public License,
|
|
||||||
Version 2.0, or any later versions of that license, including any
|
|
||||||
exceptions or additional permissions as identified by the initial
|
|
||||||
Contributor.
|
|
||||||
|
|
||||||
2. GRANT OF RIGHTS
|
|
||||||
|
|
||||||
a) Subject to the terms of this Agreement, each Contributor hereby
|
|
||||||
grants Recipient a non-exclusive, worldwide, royalty-free copyright
|
|
||||||
license to reproduce, prepare Derivative Works of, publicly display,
|
|
||||||
publicly perform, Distribute and sublicense the Contribution of such
|
|
||||||
Contributor, if any, and such Derivative Works.
|
|
||||||
|
|
||||||
b) Subject to the terms of this Agreement, each Contributor hereby
|
|
||||||
grants Recipient a non-exclusive, worldwide, royalty-free patent
|
|
||||||
license under Licensed Patents to make, use, sell, offer to sell,
|
|
||||||
import and otherwise transfer the Contribution of such Contributor,
|
|
||||||
if any, in Source Code or other form. This patent license shall
|
|
||||||
apply to the combination of the Contribution and the Program if, at
|
|
||||||
the time the Contribution is added by the Contributor, such addition
|
|
||||||
of the Contribution causes such combination to be covered by the
|
|
||||||
Licensed Patents. The patent license shall not apply to any other
|
|
||||||
combinations which include the Contribution. No hardware per se is
|
|
||||||
licensed hereunder.
|
|
||||||
|
|
||||||
c) Recipient understands that although each Contributor grants the
|
|
||||||
licenses to its Contributions set forth herein, no assurances are
|
|
||||||
provided by any Contributor that the Program does not infringe the
|
|
||||||
patent or other intellectual property rights of any other entity.
|
|
||||||
Each Contributor disclaims any liability to Recipient for claims
|
|
||||||
brought by any other entity based on infringement of intellectual
|
|
||||||
property rights or otherwise. As a condition to exercising the
|
|
||||||
rights and licenses granted hereunder, each Recipient hereby
|
|
||||||
assumes sole responsibility to secure any other intellectual
|
|
||||||
property rights needed, if any. For example, if a third party
|
|
||||||
patent license is required to allow Recipient to Distribute the
|
|
||||||
Program, it is Recipient's responsibility to acquire that license
|
|
||||||
before distributing the Program.
|
|
||||||
|
|
||||||
d) Each Contributor represents that to its knowledge it has
|
|
||||||
sufficient copyright rights in its Contribution, if any, to grant
|
|
||||||
the copyright license set forth in this Agreement.
|
|
||||||
|
|
||||||
e) Notwithstanding the terms of any Secondary License, no
|
|
||||||
Contributor makes additional grants to any Recipient (other than
|
|
||||||
those set forth in this Agreement) as a result of such Recipient's
|
|
||||||
receipt of the Program under the terms of a Secondary License
|
|
||||||
(if permitted under the terms of Section 3).
|
|
||||||
|
|
||||||
3. REQUIREMENTS
|
|
||||||
|
|
||||||
3.1 If a Contributor Distributes the Program in any form, then:
|
|
||||||
|
|
||||||
a) the Program must also be made available as Source Code, in
|
|
||||||
accordance with section 3.2, and the Contributor must accompany
|
|
||||||
the Program with a statement that the Source Code for the Program
|
|
||||||
is available under this Agreement, and informs Recipients how to
|
|
||||||
obtain it in a reasonable manner on or through a medium customarily
|
|
||||||
used for software exchange; and
|
|
||||||
|
|
||||||
b) the Contributor may Distribute the Program under a license
|
|
||||||
different than this Agreement, provided that such license:
|
|
||||||
i) effectively disclaims on behalf of all other Contributors all
|
|
||||||
warranties and conditions, express and implied, including
|
|
||||||
warranties or conditions of title and non-infringement, and
|
|
||||||
implied warranties or conditions of merchantability and fitness
|
|
||||||
for a particular purpose;
|
|
||||||
|
|
||||||
ii) effectively excludes on behalf of all other Contributors all
|
|
||||||
liability for damages, including direct, indirect, special,
|
|
||||||
incidental and consequential damages, such as lost profits;
|
|
||||||
|
|
||||||
iii) does not attempt to limit or alter the recipients' rights
|
|
||||||
in the Source Code under section 3.2; and
|
|
||||||
|
|
||||||
iv) requires any subsequent distribution of the Program by any
|
|
||||||
party to be under a license that satisfies the requirements
|
|
||||||
of this section 3.
|
|
||||||
|
|
||||||
3.2 When the Program is Distributed as Source Code:
|
|
||||||
|
|
||||||
a) it must be made available under this Agreement, or if the
|
|
||||||
Program (i) is combined with other material in a separate file or
|
|
||||||
files made available under a Secondary License, and (ii) the initial
|
|
||||||
Contributor attached to the Source Code the notice described in
|
|
||||||
Exhibit A of this Agreement, then the Program may be made available
|
|
||||||
under the terms of such Secondary Licenses, and
|
|
||||||
|
|
||||||
b) a copy of this Agreement must be included with each copy of
|
|
||||||
the Program.
|
|
||||||
|
|
||||||
3.3 Contributors may not remove or alter any copyright, patent,
|
|
||||||
trademark, attribution notices, disclaimers of warranty, or limitations
|
|
||||||
of liability ("notices") contained within the Program from any copy of
|
|
||||||
the Program which they Distribute, provided that Contributors may add
|
|
||||||
their own appropriate notices.
|
|
||||||
|
|
||||||
4. COMMERCIAL DISTRIBUTION
|
|
||||||
|
|
||||||
Commercial distributors of software may accept certain responsibilities
|
|
||||||
with respect to end users, business partners and the like. While this
|
|
||||||
license is intended to facilitate the commercial use of the Program,
|
|
||||||
the Contributor who includes the Program in a commercial product
|
|
||||||
offering should do so in a manner which does not create potential
|
|
||||||
liability for other Contributors. Therefore, if a Contributor includes
|
|
||||||
the Program in a commercial product offering, such Contributor
|
|
||||||
("Commercial Contributor") hereby agrees to defend and indemnify every
|
|
||||||
other Contributor ("Indemnified Contributor") against any losses,
|
|
||||||
damages and costs (collectively "Losses") arising from claims, lawsuits
|
|
||||||
and other legal actions brought by a third party against the Indemnified
|
|
||||||
Contributor to the extent caused by the acts or omissions of such
|
|
||||||
Commercial Contributor in connection with its distribution of the Program
|
|
||||||
in a commercial product offering. The obligations in this section do not
|
|
||||||
apply to any claims or Losses relating to any actual or alleged
|
|
||||||
intellectual property infringement. In order to qualify, an Indemnified
|
|
||||||
Contributor must: a) promptly notify the Commercial Contributor in
|
|
||||||
writing of such claim, and b) allow the Commercial Contributor to control,
|
|
||||||
and cooperate with the Commercial Contributor in, the defense and any
|
|
||||||
related settlement negotiations. The Indemnified Contributor may
|
|
||||||
participate in any such claim at its own expense.
|
|
||||||
|
|
||||||
For example, a Contributor might include the Program in a commercial
|
|
||||||
product offering, Product X. That Contributor is then a Commercial
|
|
||||||
Contributor. If that Commercial Contributor then makes performance
|
|
||||||
claims, or offers warranties related to Product X, those performance
|
|
||||||
claims and warranties are such Commercial Contributor's responsibility
|
|
||||||
alone. Under this section, the Commercial Contributor would have to
|
|
||||||
defend claims against the other Contributors related to those performance
|
|
||||||
claims and warranties, and if a court requires any other Contributor to
|
|
||||||
pay any damages as a result, the Commercial Contributor must pay
|
|
||||||
those damages.
|
|
||||||
|
|
||||||
5. NO WARRANTY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
|
||||||
PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
|
|
||||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
|
|
||||||
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
|
|
||||||
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. Each Recipient is solely responsible for determining the
|
|
||||||
appropriateness of using and distributing the Program and assumes all
|
|
||||||
risks associated with its exercise of rights under this Agreement,
|
|
||||||
including but not limited to the risks and costs of program errors,
|
|
||||||
compliance with applicable laws, damage to or loss of data, programs
|
|
||||||
or equipment, and unavailability or interruption of operations.
|
|
||||||
|
|
||||||
6. DISCLAIMER OF LIABILITY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
|
||||||
PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
|
|
||||||
SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
|
|
||||||
PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
|
|
||||||
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
7. GENERAL
|
|
||||||
|
|
||||||
If any provision of this Agreement is invalid or unenforceable under
|
|
||||||
applicable law, it shall not affect the validity or enforceability of
|
|
||||||
the remainder of the terms of this Agreement, and without further
|
|
||||||
action by the parties hereto, such provision shall be reformed to the
|
|
||||||
minimum extent necessary to make such provision valid and enforceable.
|
|
||||||
|
|
||||||
If Recipient institutes patent litigation against any entity
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that the
|
|
||||||
Program itself (excluding combinations of the Program with other software
|
|
||||||
or hardware) infringes such Recipient's patent(s), then such Recipient's
|
|
||||||
rights granted under Section 2(b) shall terminate as of the date such
|
|
||||||
litigation is filed.
|
|
||||||
|
|
||||||
All Recipient's rights under this Agreement shall terminate if it
|
|
||||||
fails to comply with any of the material terms or conditions of this
|
|
||||||
Agreement and does not cure such failure in a reasonable period of
|
|
||||||
time after becoming aware of such noncompliance. If all Recipient's
|
|
||||||
rights under this Agreement terminate, Recipient agrees to cease use
|
|
||||||
and distribution of the Program as soon as reasonably practicable.
|
|
||||||
However, Recipient's obligations under this Agreement and any licenses
|
|
||||||
granted by Recipient relating to the Program shall continue and survive.
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute copies of this Agreement,
|
|
||||||
but in order to avoid inconsistency the Agreement is copyrighted and
|
|
||||||
may only be modified in the following manner. The Agreement Steward
|
|
||||||
reserves the right to publish new versions (including revisions) of
|
|
||||||
this Agreement from time to time. No one other than the Agreement
|
|
||||||
Steward has the right to modify this Agreement. The Eclipse Foundation
|
|
||||||
is the initial Agreement Steward. The Eclipse Foundation may assign the
|
|
||||||
responsibility to serve as the Agreement Steward to a suitable separate
|
|
||||||
entity. Each new version of the Agreement will be given a distinguishing
|
|
||||||
version number. The Program (including Contributions) may always be
|
|
||||||
Distributed subject to the version of the Agreement under which it was
|
|
||||||
received. In addition, after a new version of the Agreement is published,
|
|
||||||
Contributor may elect to Distribute the Program (including its
|
|
||||||
Contributions) under the new version.
|
|
||||||
|
|
||||||
Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
|
|
||||||
receives no rights or licenses to the intellectual property of any
|
|
||||||
Contributor under this Agreement, whether expressly, by implication,
|
|
||||||
estoppel or otherwise. All rights in the Program not expressly granted
|
|
||||||
under this Agreement are reserved. Nothing in this Agreement is intended
|
|
||||||
to be enforceable by any entity that is not a Contributor or Recipient.
|
|
||||||
No third-party beneficiary rights are created under this Agreement.
|
|
||||||
|
|
||||||
Exhibit A - Form of Secondary Licenses Notice
|
|
||||||
|
|
||||||
"This Source Code may also be made available under the following
|
|
||||||
Secondary Licenses when the conditions for such availability set forth
|
|
||||||
in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
|
|
||||||
version(s), and exceptions or additional permissions here}."
|
|
||||||
|
|
||||||
Simply including a copy of this Agreement, including this Exhibit A
|
|
||||||
is not sufficient to license the Source Code under Secondary Licenses.
|
|
||||||
|
|
||||||
If it is not possible or desirable to put the notice in a particular
|
|
||||||
file, then You may include the notice in a location (such as a LICENSE
|
|
||||||
file in a relevant directory) where a recipient would be likely to
|
|
||||||
look for such a notice.
|
|
||||||
|
|
||||||
You may add additional accurate notices of copyright ownership.
|
|
||||||
@@ -1,277 +0,0 @@
|
|||||||
Eclipse Public License - v 2.0
|
|
||||||
|
|
||||||
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
|
|
||||||
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
|
|
||||||
OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
|
||||||
|
|
||||||
1. DEFINITIONS
|
|
||||||
|
|
||||||
"Contribution" means:
|
|
||||||
|
|
||||||
a) in the case of the initial Contributor, the initial content
|
|
||||||
Distributed under this Agreement, and
|
|
||||||
|
|
||||||
b) in the case of each subsequent Contributor:
|
|
||||||
i) changes to the Program, and
|
|
||||||
ii) additions to the Program;
|
|
||||||
where such changes and/or additions to the Program originate from
|
|
||||||
and are Distributed by that particular Contributor. A Contribution
|
|
||||||
"originates" from a Contributor if it was added to the Program by
|
|
||||||
such Contributor itself or anyone acting on such Contributor's behalf.
|
|
||||||
Contributions do not include changes or additions to the Program that
|
|
||||||
are not Modified Works.
|
|
||||||
|
|
||||||
"Contributor" means any person or entity that Distributes the Program.
|
|
||||||
|
|
||||||
"Licensed Patents" mean patent claims licensable by a Contributor which
|
|
||||||
are necessarily infringed by the use or sale of its Contribution alone
|
|
||||||
or when combined with the Program.
|
|
||||||
|
|
||||||
"Program" means the Contributions Distributed in accordance with this
|
|
||||||
Agreement.
|
|
||||||
|
|
||||||
"Recipient" means anyone who receives the Program under this Agreement
|
|
||||||
or any Secondary License (as applicable), including Contributors.
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source Code or other
|
|
||||||
form, that is based on (or derived from) the Program and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship.
|
|
||||||
|
|
||||||
"Modified Works" shall mean any work in Source Code or other form that
|
|
||||||
results from an addition to, deletion from, or modification of the
|
|
||||||
contents of the Program, including, for purposes of clarity any new file
|
|
||||||
in Source Code form that contains any contents of the Program. Modified
|
|
||||||
Works shall not include works that contain only declarations,
|
|
||||||
interfaces, types, classes, structures, or files of the Program solely
|
|
||||||
in each case in order to link to, bind by name, or subclass the Program
|
|
||||||
or Modified Works thereof.
|
|
||||||
|
|
||||||
"Distribute" means the acts of a) distributing or b) making available
|
|
||||||
in any manner that enables the transfer of a copy.
|
|
||||||
|
|
||||||
"Source Code" means the form of a Program preferred for making
|
|
||||||
modifications, including but not limited to software source code,
|
|
||||||
documentation source, and configuration files.
|
|
||||||
|
|
||||||
"Secondary License" means either the GNU General Public License,
|
|
||||||
Version 2.0, or any later versions of that license, including any
|
|
||||||
exceptions or additional permissions as identified by the initial
|
|
||||||
Contributor.
|
|
||||||
|
|
||||||
2. GRANT OF RIGHTS
|
|
||||||
|
|
||||||
a) Subject to the terms of this Agreement, each Contributor hereby
|
|
||||||
grants Recipient a non-exclusive, worldwide, royalty-free copyright
|
|
||||||
license to reproduce, prepare Derivative Works of, publicly display,
|
|
||||||
publicly perform, Distribute and sublicense the Contribution of such
|
|
||||||
Contributor, if any, and such Derivative Works.
|
|
||||||
|
|
||||||
b) Subject to the terms of this Agreement, each Contributor hereby
|
|
||||||
grants Recipient a non-exclusive, worldwide, royalty-free patent
|
|
||||||
license under Licensed Patents to make, use, sell, offer to sell,
|
|
||||||
import and otherwise transfer the Contribution of such Contributor,
|
|
||||||
if any, in Source Code or other form. This patent license shall
|
|
||||||
apply to the combination of the Contribution and the Program if, at
|
|
||||||
the time the Contribution is added by the Contributor, such addition
|
|
||||||
of the Contribution causes such combination to be covered by the
|
|
||||||
Licensed Patents. The patent license shall not apply to any other
|
|
||||||
combinations which include the Contribution. No hardware per se is
|
|
||||||
licensed hereunder.
|
|
||||||
|
|
||||||
c) Recipient understands that although each Contributor grants the
|
|
||||||
licenses to its Contributions set forth herein, no assurances are
|
|
||||||
provided by any Contributor that the Program does not infringe the
|
|
||||||
patent or other intellectual property rights of any other entity.
|
|
||||||
Each Contributor disclaims any liability to Recipient for claims
|
|
||||||
brought by any other entity based on infringement of intellectual
|
|
||||||
property rights or otherwise. As a condition to exercising the
|
|
||||||
rights and licenses granted hereunder, each Recipient hereby
|
|
||||||
assumes sole responsibility to secure any other intellectual
|
|
||||||
property rights needed, if any. For example, if a third party
|
|
||||||
patent license is required to allow Recipient to Distribute the
|
|
||||||
Program, it is Recipient's responsibility to acquire that license
|
|
||||||
before distributing the Program.
|
|
||||||
|
|
||||||
d) Each Contributor represents that to its knowledge it has
|
|
||||||
sufficient copyright rights in its Contribution, if any, to grant
|
|
||||||
the copyright license set forth in this Agreement.
|
|
||||||
|
|
||||||
e) Notwithstanding the terms of any Secondary License, no
|
|
||||||
Contributor makes additional grants to any Recipient (other than
|
|
||||||
those set forth in this Agreement) as a result of such Recipient's
|
|
||||||
receipt of the Program under the terms of a Secondary License
|
|
||||||
(if permitted under the terms of Section 3).
|
|
||||||
|
|
||||||
3. REQUIREMENTS
|
|
||||||
|
|
||||||
3.1 If a Contributor Distributes the Program in any form, then:
|
|
||||||
|
|
||||||
a) the Program must also be made available as Source Code, in
|
|
||||||
accordance with section 3.2, and the Contributor must accompany
|
|
||||||
the Program with a statement that the Source Code for the Program
|
|
||||||
is available under this Agreement, and informs Recipients how to
|
|
||||||
obtain it in a reasonable manner on or through a medium customarily
|
|
||||||
used for software exchange; and
|
|
||||||
|
|
||||||
b) the Contributor may Distribute the Program under a license
|
|
||||||
different than this Agreement, provided that such license:
|
|
||||||
i) effectively disclaims on behalf of all other Contributors all
|
|
||||||
warranties and conditions, express and implied, including
|
|
||||||
warranties or conditions of title and non-infringement, and
|
|
||||||
implied warranties or conditions of merchantability and fitness
|
|
||||||
for a particular purpose;
|
|
||||||
|
|
||||||
ii) effectively excludes on behalf of all other Contributors all
|
|
||||||
liability for damages, including direct, indirect, special,
|
|
||||||
incidental and consequential damages, such as lost profits;
|
|
||||||
|
|
||||||
iii) does not attempt to limit or alter the recipients' rights
|
|
||||||
in the Source Code under section 3.2; and
|
|
||||||
|
|
||||||
iv) requires any subsequent distribution of the Program by any
|
|
||||||
party to be under a license that satisfies the requirements
|
|
||||||
of this section 3.
|
|
||||||
|
|
||||||
3.2 When the Program is Distributed as Source Code:
|
|
||||||
|
|
||||||
a) it must be made available under this Agreement, or if the
|
|
||||||
Program (i) is combined with other material in a separate file or
|
|
||||||
files made available under a Secondary License, and (ii) the initial
|
|
||||||
Contributor attached to the Source Code the notice described in
|
|
||||||
Exhibit A of this Agreement, then the Program may be made available
|
|
||||||
under the terms of such Secondary Licenses, and
|
|
||||||
|
|
||||||
b) a copy of this Agreement must be included with each copy of
|
|
||||||
the Program.
|
|
||||||
|
|
||||||
3.3 Contributors may not remove or alter any copyright, patent,
|
|
||||||
trademark, attribution notices, disclaimers of warranty, or limitations
|
|
||||||
of liability ("notices") contained within the Program from any copy of
|
|
||||||
the Program which they Distribute, provided that Contributors may add
|
|
||||||
their own appropriate notices.
|
|
||||||
|
|
||||||
4. COMMERCIAL DISTRIBUTION
|
|
||||||
|
|
||||||
Commercial distributors of software may accept certain responsibilities
|
|
||||||
with respect to end users, business partners and the like. While this
|
|
||||||
license is intended to facilitate the commercial use of the Program,
|
|
||||||
the Contributor who includes the Program in a commercial product
|
|
||||||
offering should do so in a manner which does not create potential
|
|
||||||
liability for other Contributors. Therefore, if a Contributor includes
|
|
||||||
the Program in a commercial product offering, such Contributor
|
|
||||||
("Commercial Contributor") hereby agrees to defend and indemnify every
|
|
||||||
other Contributor ("Indemnified Contributor") against any losses,
|
|
||||||
damages and costs (collectively "Losses") arising from claims, lawsuits
|
|
||||||
and other legal actions brought by a third party against the Indemnified
|
|
||||||
Contributor to the extent caused by the acts or omissions of such
|
|
||||||
Commercial Contributor in connection with its distribution of the Program
|
|
||||||
in a commercial product offering. The obligations in this section do not
|
|
||||||
apply to any claims or Losses relating to any actual or alleged
|
|
||||||
intellectual property infringement. In order to qualify, an Indemnified
|
|
||||||
Contributor must: a) promptly notify the Commercial Contributor in
|
|
||||||
writing of such claim, and b) allow the Commercial Contributor to control,
|
|
||||||
and cooperate with the Commercial Contributor in, the defense and any
|
|
||||||
related settlement negotiations. The Indemnified Contributor may
|
|
||||||
participate in any such claim at its own expense.
|
|
||||||
|
|
||||||
For example, a Contributor might include the Program in a commercial
|
|
||||||
product offering, Product X. That Contributor is then a Commercial
|
|
||||||
Contributor. If that Commercial Contributor then makes performance
|
|
||||||
claims, or offers warranties related to Product X, those performance
|
|
||||||
claims and warranties are such Commercial Contributor's responsibility
|
|
||||||
alone. Under this section, the Commercial Contributor would have to
|
|
||||||
defend claims against the other Contributors related to those performance
|
|
||||||
claims and warranties, and if a court requires any other Contributor to
|
|
||||||
pay any damages as a result, the Commercial Contributor must pay
|
|
||||||
those damages.
|
|
||||||
|
|
||||||
5. NO WARRANTY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
|
||||||
PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
|
|
||||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
|
|
||||||
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
|
|
||||||
TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. Each Recipient is solely responsible for determining the
|
|
||||||
appropriateness of using and distributing the Program and assumes all
|
|
||||||
risks associated with its exercise of rights under this Agreement,
|
|
||||||
including but not limited to the risks and costs of program errors,
|
|
||||||
compliance with applicable laws, damage to or loss of data, programs
|
|
||||||
or equipment, and unavailability or interruption of operations.
|
|
||||||
|
|
||||||
6. DISCLAIMER OF LIABILITY
|
|
||||||
|
|
||||||
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
|
|
||||||
PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
|
|
||||||
SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
|
|
||||||
PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
|
|
||||||
EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
7. GENERAL
|
|
||||||
|
|
||||||
If any provision of this Agreement is invalid or unenforceable under
|
|
||||||
applicable law, it shall not affect the validity or enforceability of
|
|
||||||
the remainder of the terms of this Agreement, and without further
|
|
||||||
action by the parties hereto, such provision shall be reformed to the
|
|
||||||
minimum extent necessary to make such provision valid and enforceable.
|
|
||||||
|
|
||||||
If Recipient institutes patent litigation against any entity
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that the
|
|
||||||
Program itself (excluding combinations of the Program with other software
|
|
||||||
or hardware) infringes such Recipient's patent(s), then such Recipient's
|
|
||||||
rights granted under Section 2(b) shall terminate as of the date such
|
|
||||||
litigation is filed.
|
|
||||||
|
|
||||||
All Recipient's rights under this Agreement shall terminate if it
|
|
||||||
fails to comply with any of the material terms or conditions of this
|
|
||||||
Agreement and does not cure such failure in a reasonable period of
|
|
||||||
time after becoming aware of such noncompliance. If all Recipient's
|
|
||||||
rights under this Agreement terminate, Recipient agrees to cease use
|
|
||||||
and distribution of the Program as soon as reasonably practicable.
|
|
||||||
However, Recipient's obligations under this Agreement and any licenses
|
|
||||||
granted by Recipient relating to the Program shall continue and survive.
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute copies of this Agreement,
|
|
||||||
but in order to avoid inconsistency the Agreement is copyrighted and
|
|
||||||
may only be modified in the following manner. The Agreement Steward
|
|
||||||
reserves the right to publish new versions (including revisions) of
|
|
||||||
this Agreement from time to time. No one other than the Agreement
|
|
||||||
Steward has the right to modify this Agreement. The Eclipse Foundation
|
|
||||||
is the initial Agreement Steward. The Eclipse Foundation may assign the
|
|
||||||
responsibility to serve as the Agreement Steward to a suitable separate
|
|
||||||
entity. Each new version of the Agreement will be given a distinguishing
|
|
||||||
version number. The Program (including Contributions) may always be
|
|
||||||
Distributed subject to the version of the Agreement under which it was
|
|
||||||
received. In addition, after a new version of the Agreement is published,
|
|
||||||
Contributor may elect to Distribute the Program (including its
|
|
||||||
Contributions) under the new version.
|
|
||||||
|
|
||||||
Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
|
|
||||||
receives no rights or licenses to the intellectual property of any
|
|
||||||
Contributor under this Agreement, whether expressly, by implication,
|
|
||||||
estoppel or otherwise. All rights in the Program not expressly granted
|
|
||||||
under this Agreement are reserved. Nothing in this Agreement is intended
|
|
||||||
to be enforceable by any entity that is not a Contributor or Recipient.
|
|
||||||
No third-party beneficiary rights are created under this Agreement.
|
|
||||||
|
|
||||||
Exhibit A - Form of Secondary Licenses Notice
|
|
||||||
|
|
||||||
"This Source Code may also be made available under the following
|
|
||||||
Secondary Licenses when the conditions for such availability set forth
|
|
||||||
in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
|
|
||||||
version(s), and exceptions or additional permissions here}."
|
|
||||||
|
|
||||||
Simply including a copy of this Agreement, including this Exhibit A
|
|
||||||
is not sufficient to license the Source Code under Secondary Licenses.
|
|
||||||
|
|
||||||
If it is not possible or desirable to put the notice in a particular
|
|
||||||
file, then You may include the notice in a location (such as a LICENSE
|
|
||||||
file in a relevant directory) where a recipient would be likely to
|
|
||||||
look for such a notice.
|
|
||||||
|
|
||||||
You may add additional accurate notices of copyright ownership.
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
Copyright (C) 2009-2021 The Project Lombok Authors.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Licenses for included components:
|
|
||||||
|
|
||||||
org.ow2.asm:asm
|
|
||||||
org.ow2.asm:asm-analysis
|
|
||||||
org.ow2.asm:asm-commons
|
|
||||||
org.ow2.asm:asm-tree
|
|
||||||
org.ow2.asm:asm-util
|
|
||||||
ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
3. Neither the name of the copyright holders nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
rzwitserloot/com.zwitserloot.cmdreader
|
|
||||||
|
|
||||||
Copyright © 2010 Reinier Zwitserloot.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
projectlombok/lombok.patcher
|
|
||||||
|
|
||||||
Copyright (C) 2009-2021 The Project Lombok Authors.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Please read the license here: https://open-autonomous-connection.org/license.html
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
Copyright (C) 2009-2021 The Project Lombok Authors.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
Licenses for included components:
|
|
||||||
|
|
||||||
org.ow2.asm:asm
|
|
||||||
org.ow2.asm:asm-analysis
|
|
||||||
org.ow2.asm:asm-commons
|
|
||||||
org.ow2.asm:asm-tree
|
|
||||||
org.ow2.asm:asm-util
|
|
||||||
ASM: a very small and fast Java bytecode manipulation framework
|
|
||||||
Copyright (c) 2000-2011 INRIA, France Telecom
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
3. Neither the name of the copyright holders nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
||||||
THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
rzwitserloot/com.zwitserloot.cmdreader
|
|
||||||
|
|
||||||
Copyright © 2010 Reinier Zwitserloot.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
projectlombok/lombok.patcher
|
|
||||||
|
|
||||||
Copyright (C) 2009-2021 The Project Lombok Authors.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Please read the license here: https://open-autonomous-connection.org/license.html
|
|
||||||
Reference in New Issue
Block a user