Issue #6728 - QUIC and HTTP/3
- Renamed Panama/JDK to Foreign/Incubator. Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
parent
4b49dbb54f
commit
ec942f76bb
|
@ -23,7 +23,7 @@
|
|||
<jdk>[17,)</jdk>
|
||||
</activation>
|
||||
<modules>
|
||||
<module>quic-quiche-panama-jdk</module>
|
||||
<module>quic-quiche-foreign-incubator</module>
|
||||
</modules>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
|
|
@ -34,21 +34,21 @@ public abstract class QuicheConnection
|
|||
|
||||
static
|
||||
{
|
||||
LOG.info("found Quiche binding implementations: {}", TypeUtil.serviceStream(ServiceLoader.load(QuicheBinding.class)).sorted(Comparator.comparingInt(QuicheBinding::priority)).collect(Collectors.toList()));
|
||||
LOG.info("found quiche binding implementations: {}", TypeUtil.serviceStream(ServiceLoader.load(QuicheBinding.class)).sorted(Comparator.comparingInt(QuicheBinding::priority)).collect(Collectors.toList()));
|
||||
if (LOG.isDebugEnabled())
|
||||
{
|
||||
List<QuicheBinding> bindings = TypeUtil.serviceStream(ServiceLoader.load(QuicheBinding.class))
|
||||
.sorted(Comparator.comparingInt(QuicheBinding::priority))
|
||||
.collect(Collectors.toList());
|
||||
LOG.debug("found Quiche binding implementations: {}", bindings);
|
||||
LOG.debug("found quiche binding implementations: {}", bindings);
|
||||
}
|
||||
QUICHE_BINDING = TypeUtil.serviceStream(ServiceLoader.load(QuicheBinding.class))
|
||||
.filter(QuicheBinding::isUsable)
|
||||
.min(Comparator.comparingInt(QuicheBinding::priority))
|
||||
.orElseThrow(() -> new IllegalStateException("no Quiche binding implementation found"));
|
||||
.orElseThrow(() -> new IllegalStateException("no quiche binding implementation found"));
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("using Quiche binding implementation: {}", QUICHE_BINDING.getClass().getName());
|
||||
LOG.info("using Quiche binding implementation: {}", QUICHE_BINDING.getClass().getName());
|
||||
LOG.debug("using quiche binding implementation: {}", QUICHE_BINDING.getClass().getName());
|
||||
LOG.info("using quiche binding implementation: {}", QUICHE_BINDING.getClass().getName());
|
||||
}
|
||||
|
||||
public static QuicheConnection connect(QuicheConfig quicheConfig, InetSocketAddress peer) throws IOException
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>quic-quiche-panama-jdk</artifactId>
|
||||
<name>Jetty :: QUIC :: Quiche :: Panama Binding (jdk package)</name>
|
||||
<artifactId>quic-quiche-foreign-incubator</artifactId>
|
||||
<name>Jetty :: QUIC :: Quiche :: Foreign Binding (incubator)</name>
|
||||
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.quic-quiche-panama-jdk</bundle-symbolic-name>
|
||||
<bundle-symbolic-name>${project.groupId}.quic-quiche-foreign-incubator</bundle-symbolic-name>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
|
@ -39,7 +39,7 @@
|
|||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<argLine>
|
||||
@{argLine} ${jetty.surefire.argLine} --enable-native-access org.eclipse.jetty.quic.quiche.panama.jdk
|
||||
@{argLine} ${jetty.surefire.argLine} --enable-native-access org.eclipse.jetty.quic.quiche.foreign.incubator
|
||||
</argLine>
|
||||
</configuration>
|
||||
</plugin>
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
module org.eclipse.jetty.quic.quiche.panama.jdk
|
||||
module org.eclipse.jetty.quic.quiche.foreign.incubator
|
||||
{
|
||||
requires jdk.incubator.foreign;
|
||||
requires org.eclipse.jetty.quic.quiche;
|
||||
|
@ -19,5 +19,5 @@ module org.eclipse.jetty.quic.quiche.panama.jdk
|
|||
requires org.slf4j;
|
||||
|
||||
provides org.eclipse.jetty.quic.quiche.QuicheBinding with
|
||||
org.eclipse.jetty.quic.quiche.panama.jdk.PanamaJdkQuicheBinding;
|
||||
org.eclipse.jetty.quic.quiche.foreign.incubator.ForeignIncubatorQuicheBinding;
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
|
@ -24,9 +24,9 @@ import org.eclipse.jetty.quic.quiche.QuicheConnection;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class PanamaJdkQuicheBinding implements QuicheBinding
|
||||
public class ForeignIncubatorQuicheBinding implements QuicheBinding
|
||||
{
|
||||
private static final Logger LOG = LoggerFactory.getLogger(PanamaJdkQuicheBinding.class);
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ForeignIncubatorQuicheBinding.class);
|
||||
|
||||
@Override
|
||||
public boolean isUsable()
|
||||
|
@ -39,7 +39,7 @@ public class PanamaJdkQuicheBinding implements QuicheBinding
|
|||
}
|
||||
catch (Throwable x)
|
||||
{
|
||||
LOG.debug("Panama(jdk) quiche binding is not usable", x);
|
||||
LOG.debug("foreign incubator quiche binding is not usable", x);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -53,25 +53,25 @@ public class PanamaJdkQuicheBinding implements QuicheBinding
|
|||
@Override
|
||||
public byte[] fromPacket(ByteBuffer packet)
|
||||
{
|
||||
return PanamaJdkQuicheConnection.fromPacket(packet);
|
||||
return ForeignIncubatorQuicheConnection.fromPacket(packet);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuicheConnection connect(QuicheConfig quicheConfig, InetSocketAddress peer, int connectionIdLength) throws IOException
|
||||
{
|
||||
return PanamaJdkQuicheConnection.connect(quicheConfig, peer, connectionIdLength);
|
||||
return ForeignIncubatorQuicheConnection.connect(quicheConfig, peer, connectionIdLength);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean negotiate(QuicheConnection.TokenMinter tokenMinter, ByteBuffer packetRead, ByteBuffer packetToSend) throws IOException
|
||||
{
|
||||
return PanamaJdkQuicheConnection.negotiate(tokenMinter, packetRead, packetToSend);
|
||||
return ForeignIncubatorQuicheConnection.negotiate(tokenMinter, packetRead, packetToSend);
|
||||
}
|
||||
|
||||
@Override
|
||||
public QuicheConnection tryAccept(QuicheConfig quicheConfig, QuicheConnection.TokenValidator tokenValidator, ByteBuffer packetRead, SocketAddress peer) throws IOException
|
||||
{
|
||||
return PanamaJdkQuicheConnection.tryAccept(quicheConfig, tokenValidator, packetRead, peer);
|
||||
return ForeignIncubatorQuicheConnection.tryAccept(quicheConfig, tokenValidator, packetRead, peer);
|
||||
}
|
||||
|
||||
@Override
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
@ -35,12 +35,9 @@ import org.eclipse.jetty.util.thread.AutoLock;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import static org.eclipse.jetty.quic.quiche.panama.jdk.quiche_h.C_FALSE;
|
||||
import static org.eclipse.jetty.quic.quiche.panama.jdk.quiche_h.C_TRUE;
|
||||
|
||||
public class PanamaJdkQuicheConnection extends QuicheConnection
|
||||
public class ForeignIncubatorQuicheConnection extends QuicheConnection
|
||||
{
|
||||
private static final Logger LOG = LoggerFactory.getLogger(PanamaJdkQuicheConnection.class);
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ForeignIncubatorQuicheConnection.class);
|
||||
private static final SecureRandom SECURE_RANDOM = new SecureRandom();
|
||||
|
||||
// Quiche does not allow concurrent calls with the same connection.
|
||||
|
@ -52,7 +49,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
private MemorySegment recvInfo;
|
||||
private MemorySegment stats;
|
||||
|
||||
private PanamaJdkQuicheConnection(MemoryAddress quicheConn, MemoryAddress quicheConfig, ResourceScope scope)
|
||||
private ForeignIncubatorQuicheConnection(MemoryAddress quicheConn, MemoryAddress quicheConfig, ResourceScope scope)
|
||||
{
|
||||
this.quicheConn = quicheConn;
|
||||
this.quicheConfig = quicheConfig;
|
||||
|
@ -122,12 +119,12 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
}
|
||||
}
|
||||
|
||||
public static PanamaJdkQuicheConnection connect(QuicheConfig quicheConfig, InetSocketAddress peer) throws IOException
|
||||
public static ForeignIncubatorQuicheConnection connect(QuicheConfig quicheConfig, InetSocketAddress peer) throws IOException
|
||||
{
|
||||
return connect(quicheConfig, peer, quiche_h.QUICHE_MAX_CONN_ID_LEN);
|
||||
}
|
||||
|
||||
public static PanamaJdkQuicheConnection connect(QuicheConfig quicheConfig, InetSocketAddress peer, int connectionIdLength) throws IOException
|
||||
public static ForeignIncubatorQuicheConnection connect(QuicheConfig quicheConfig, InetSocketAddress peer, int connectionIdLength) throws IOException
|
||||
{
|
||||
if (connectionIdLength > quiche_h.QUICHE_MAX_CONN_ID_LEN)
|
||||
throw new IOException("Connection ID length is too large: " + connectionIdLength + " > " + quiche_h.QUICHE_MAX_CONN_ID_LEN);
|
||||
|
@ -140,7 +137,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
|
||||
MemorySegment s = sockaddr.convert(peer, scope);
|
||||
MemoryAddress quicheConn = quiche_h.quiche_connect(CLinker.toCString(peer.getHostName(), scope), scid, scid.byteSize(), s, s.byteSize(), libQuicheConfig);
|
||||
return new PanamaJdkQuicheConnection(quicheConn, libQuicheConfig, scope);
|
||||
return new ForeignIncubatorQuicheConnection(quicheConn, libQuicheConfig, scope);
|
||||
}
|
||||
|
||||
private static MemoryAddress buildConfig(QuicheConfig config, ResourceScope scope) throws IOException
|
||||
|
@ -151,7 +148,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
|
||||
Boolean verifyPeer = config.getVerifyPeer();
|
||||
if (verifyPeer != null)
|
||||
quiche_h.quiche_config_verify_peer(quicheConfig, verifyPeer ? C_TRUE : C_FALSE);
|
||||
quiche_h.quiche_config_verify_peer(quicheConfig, verifyPeer ? quiche_h.C_TRUE : quiche_h.C_FALSE);
|
||||
|
||||
String certChainPemPath = config.getCertChainPemPath();
|
||||
if (certChainPemPath != null)
|
||||
|
@ -211,7 +208,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
|
||||
Boolean disableActiveMigration = config.getDisableActiveMigration();
|
||||
if (disableActiveMigration != null)
|
||||
quiche_h.quiche_config_set_disable_active_migration(quicheConfig, disableActiveMigration ? C_TRUE : C_FALSE);
|
||||
quiche_h.quiche_config_set_disable_active_migration(quicheConfig, disableActiveMigration ? quiche_h.C_TRUE : quiche_h.C_FALSE);
|
||||
|
||||
return quicheConfig;
|
||||
}
|
||||
|
@ -268,7 +265,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
LOG.debug("dcid len: {}", dcid_len.asByteBuffer().order(ByteOrder.nativeOrder()).getLong());
|
||||
LOG.debug("token len: {}", token_len.asByteBuffer().order(ByteOrder.nativeOrder()).getLong());
|
||||
|
||||
if (quiche_h.quiche_version_is_supported(version.asByteBuffer().order(ByteOrder.nativeOrder()).getInt()) == C_FALSE)
|
||||
if (quiche_h.quiche_version_is_supported(version.asByteBuffer().order(ByteOrder.nativeOrder()).getInt()) == quiche_h.C_FALSE)
|
||||
{
|
||||
LOG.debug("version negotiation");
|
||||
|
||||
|
@ -340,7 +337,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
}
|
||||
}
|
||||
|
||||
public static PanamaJdkQuicheConnection tryAccept(QuicheConfig quicheConfig, TokenValidator tokenValidator, ByteBuffer packetRead, SocketAddress peer) throws IOException
|
||||
public static ForeignIncubatorQuicheConnection tryAccept(QuicheConfig quicheConfig, TokenValidator tokenValidator, ByteBuffer packetRead, SocketAddress peer) throws IOException
|
||||
{
|
||||
ResourceScope scope = ResourceScope.newSharedScope();
|
||||
|
||||
|
@ -402,7 +399,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
LOG.debug("dcid len: {}", dcid_len.asByteBuffer().order(ByteOrder.nativeOrder()).getLong());
|
||||
LOG.debug("token len: {}", token_len.asByteBuffer().order(ByteOrder.nativeOrder()).getLong());
|
||||
|
||||
if (quiche_h.quiche_version_is_supported(version.asByteBuffer().order(ByteOrder.nativeOrder()).getInt()) == C_FALSE)
|
||||
if (quiche_h.quiche_version_is_supported(version.asByteBuffer().order(ByteOrder.nativeOrder()).getInt()) == quiche_h.C_FALSE)
|
||||
{
|
||||
LOG.debug("need version negotiation");
|
||||
scope.close();
|
||||
|
@ -445,7 +442,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
}
|
||||
|
||||
LOG.debug("connection created");
|
||||
PanamaJdkQuicheConnection quicheConnection = new PanamaJdkQuicheConnection(quicheConn, libQuicheConfig, scope);
|
||||
ForeignIncubatorQuicheConnection quicheConnection = new ForeignIncubatorQuicheConnection(quicheConn, libQuicheConfig, scope);
|
||||
LOG.debug("accepted, immediately receiving the same packet - remaining in buffer: {}", packetRead.remaining());
|
||||
while (packetRead.hasRemaining())
|
||||
{
|
||||
|
@ -472,7 +469,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
try (ResourceScope scope = ResourceScope.newConfinedScope())
|
||||
{
|
||||
MemorySegment streamIdSegment = MemorySegment.allocateNative(CLinker.C_LONG, scope);
|
||||
while (quiche_h.quiche_stream_iter_next(quiche_stream_iter, streamIdSegment.address()) != C_FALSE)
|
||||
while (quiche_h.quiche_stream_iter_next(quiche_stream_iter, streamIdSegment.address()) != quiche_h.C_FALSE)
|
||||
{
|
||||
long streamId = streamIdSegment.asByteBuffer().order(ByteOrder.nativeOrder()).getLong();
|
||||
result.add(streamId);
|
||||
|
@ -563,7 +560,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
{
|
||||
if (quicheConn == null)
|
||||
throw new IllegalStateException("connection was released");
|
||||
return quiche_h.quiche_conn_is_closed(quicheConn) != C_FALSE;
|
||||
return quiche_h.quiche_conn_is_closed(quicheConn) != quiche_h.C_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -574,7 +571,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
{
|
||||
if (quicheConn == null)
|
||||
throw new IllegalStateException("connection was released");
|
||||
return quiche_h.quiche_conn_is_established(quicheConn) != C_FALSE;
|
||||
return quiche_h.quiche_conn_is_established(quicheConn) != quiche_h.C_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -639,7 +636,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
int rc;
|
||||
if (reason == null)
|
||||
{
|
||||
rc = quiche_h.quiche_conn_close(quicheConn, C_TRUE, error, MemoryAddress.NULL, 0);
|
||||
rc = quiche_h.quiche_conn_close(quicheConn, quiche_h.C_TRUE, error, MemoryAddress.NULL, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -650,7 +647,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
reasonSegment.asByteBuffer().order(ByteOrder.nativeOrder()).put(reasonBytes);
|
||||
int length = reasonBytes.length;
|
||||
MemoryAddress reasonAddress = reasonSegment.address();
|
||||
rc = quiche_h.quiche_conn_close(quicheConn, C_TRUE, error, reasonAddress, length);
|
||||
rc = quiche_h.quiche_conn_close(quicheConn, quiche_h.C_TRUE, error, reasonAddress, length);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -693,7 +690,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
{
|
||||
if (quicheConn == null)
|
||||
throw new IllegalStateException("connection was released");
|
||||
return quiche_h.quiche_conn_is_draining(quicheConn) != C_FALSE;
|
||||
return quiche_h.quiche_conn_is_draining(quicheConn) != quiche_h.C_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -766,7 +763,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
{
|
||||
// If the ByteBuffer is direct, it can be used without any copy.
|
||||
MemorySegment bufferSegment = MemorySegment.ofByteBuffer(buffer);
|
||||
written = quiche_h.quiche_conn_stream_send(quicheConn, streamId, bufferSegment.address(), buffer.remaining(), last ? C_TRUE : C_FALSE);
|
||||
written = quiche_h.quiche_conn_stream_send(quicheConn, streamId, bufferSegment.address(), buffer.remaining(), last ? quiche_h.C_TRUE : quiche_h.C_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -775,7 +772,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
{
|
||||
if (buffer.remaining() == 0)
|
||||
{
|
||||
written = quiche_h.quiche_conn_stream_send(quicheConn, streamId, MemoryAddress.NULL, 0, last ? C_TRUE : C_FALSE);
|
||||
written = quiche_h.quiche_conn_stream_send(quicheConn, streamId, MemoryAddress.NULL, 0, last ? quiche_h.C_TRUE : quiche_h.C_FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -783,7 +780,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
int prevPosition = buffer.position();
|
||||
bufferSegment.asByteBuffer().order(ByteOrder.nativeOrder()).put(buffer);
|
||||
buffer.position(prevPosition);
|
||||
written = quiche_h.quiche_conn_stream_send(quicheConn, streamId, bufferSegment.address(), buffer.remaining(), last ? C_TRUE : C_FALSE);
|
||||
written = quiche_h.quiche_conn_stream_send(quicheConn, streamId, bufferSegment.address(), buffer.remaining(), last ? quiche_h.C_TRUE : quiche_h.C_FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -845,7 +842,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
{
|
||||
if (quicheConn == null)
|
||||
throw new IllegalStateException("connection was released");
|
||||
return quiche_h.quiche_conn_stream_finished(quicheConn, streamId) != C_FALSE;
|
||||
return quiche_h.quiche_conn_stream_finished(quicheConn, streamId) != quiche_h.C_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -862,7 +859,7 @@ public class PanamaJdkQuicheConnection extends QuicheConnection
|
|||
MemorySegment error = MemorySegment.allocateNative(CLinker.C_LONG, scope);
|
||||
MemorySegment reason = MemorySegment.allocateNative(CLinker.C_POINTER, scope);
|
||||
MemorySegment reasonLength = MemorySegment.allocateNative(CLinker.C_LONG, scope);
|
||||
if (quiche_h.quiche_conn_peer_error(quicheConn, app.address(), error.address(), reason.address(), reasonLength.address()) != C_FALSE)
|
||||
if (quiche_h.quiche_conn_peer_error(quicheConn, app.address(), error.address(), reason.address(), reasonLength.address()) != quiche_h.C_FALSE)
|
||||
{
|
||||
long errorValue = error.asByteBuffer().order(ByteOrder.nativeOrder()).getLong();
|
||||
long reasonLengthValue = reasonLength.asByteBuffer().order(ByteOrder.nativeOrder()).getLong();
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk.linux;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator.linux;
|
||||
|
||||
import java.lang.invoke.VarHandle;
|
||||
import java.net.Inet4Address;
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk.macos;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator.macos;
|
||||
|
||||
import java.lang.invoke.VarHandle;
|
||||
import java.net.Inet4Address;
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.lang.invoke.MethodHandle;
|
||||
|
||||
|
@ -27,7 +27,7 @@ import static jdk.incubator.foreign.CLinker.C_CHAR;
|
|||
import static jdk.incubator.foreign.CLinker.C_INT;
|
||||
import static jdk.incubator.foreign.CLinker.C_LONG;
|
||||
import static jdk.incubator.foreign.CLinker.C_POINTER;
|
||||
import static org.eclipse.jetty.quic.quiche.panama.jdk.NativeHelper.downcallHandle;
|
||||
import static org.eclipse.jetty.quic.quiche.foreign.incubator.NativeHelper.downcallHandle;
|
||||
|
||||
public class quiche_h
|
||||
{
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.lang.invoke.VarHandle;
|
||||
import java.net.SocketAddress;
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import jdk.incubator.foreign.MemoryLayout;
|
||||
import jdk.incubator.foreign.MemorySegment;
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.lang.invoke.VarHandle;
|
||||
|
|
@ -11,29 +11,25 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.net.SocketAddress;
|
||||
|
||||
import jdk.incubator.foreign.MemorySegment;
|
||||
import jdk.incubator.foreign.ResourceScope;
|
||||
import org.eclipse.jetty.quic.quiche.panama.jdk.linux.sockaddr_linux;
|
||||
import org.eclipse.jetty.quic.quiche.panama.jdk.macos.sockaddr_macos;
|
||||
import org.eclipse.jetty.quic.quiche.panama.jdk.windows.sockaddr_windows;
|
||||
|
||||
import static org.eclipse.jetty.quic.quiche.panama.jdk.NativeHelper.isLinux;
|
||||
import static org.eclipse.jetty.quic.quiche.panama.jdk.NativeHelper.isMac;
|
||||
import static org.eclipse.jetty.quic.quiche.panama.jdk.NativeHelper.isWindows;
|
||||
import org.eclipse.jetty.quic.quiche.foreign.incubator.linux.sockaddr_linux;
|
||||
import org.eclipse.jetty.quic.quiche.foreign.incubator.macos.sockaddr_macos;
|
||||
import org.eclipse.jetty.quic.quiche.foreign.incubator.windows.sockaddr_windows;
|
||||
|
||||
public class sockaddr
|
||||
{
|
||||
public static MemorySegment convert(SocketAddress socketAddress, ResourceScope scope)
|
||||
{
|
||||
if (isLinux())
|
||||
if (NativeHelper.isLinux())
|
||||
return sockaddr_linux.convert(socketAddress, scope);
|
||||
if (isMac())
|
||||
if (NativeHelper.isMac())
|
||||
return sockaddr_macos.convert(socketAddress, scope);
|
||||
if (isWindows())
|
||||
if (NativeHelper.isWindows())
|
||||
return sockaddr_windows.convert(socketAddress, scope);
|
||||
throw new UnsupportedOperationException("Unsupported OS: " + System.getProperty("os.name"));
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk.windows;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator.windows;
|
||||
|
||||
import java.lang.invoke.VarHandle;
|
||||
import java.net.Inet4Address;
|
|
@ -0,0 +1 @@
|
|||
org.eclipse.jetty.quic.quiche.foreign.incubator.ForeignIncubatorQuicheBinding
|
|
@ -11,7 +11,7 @@
|
|||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.quic.quiche.panama.jdk;
|
||||
package org.eclipse.jetty.quic.quiche.foreign.incubator;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
@ -40,14 +40,14 @@ import static org.hamcrest.core.Is.is;
|
|||
|
||||
public class LowLevelQuicheTest
|
||||
{
|
||||
private final Collection<PanamaJdkQuicheConnection> connectionsToDisposeOf = new ArrayList<>();
|
||||
private final Collection<ForeignIncubatorQuicheConnection> connectionsToDisposeOf = new ArrayList<>();
|
||||
|
||||
private InetSocketAddress clientSocketAddress;
|
||||
private InetSocketAddress serverSocketAddress;
|
||||
private QuicheConfig clientQuicheConfig;
|
||||
private QuicheConfig serverQuicheConfig;
|
||||
private PanamaJdkQuicheConnection.TokenMinter tokenMinter;
|
||||
private PanamaJdkQuicheConnection.TokenValidator tokenValidator;
|
||||
private ForeignIncubatorQuicheConnection.TokenMinter tokenMinter;
|
||||
private ForeignIncubatorQuicheConnection.TokenValidator tokenValidator;
|
||||
|
||||
@BeforeEach
|
||||
protected void setUp() throws Exception
|
||||
|
@ -91,7 +91,7 @@ public class LowLevelQuicheTest
|
|||
@AfterEach
|
||||
protected void tearDown()
|
||||
{
|
||||
connectionsToDisposeOf.forEach(PanamaJdkQuicheConnection::dispose);
|
||||
connectionsToDisposeOf.forEach(ForeignIncubatorQuicheConnection::dispose);
|
||||
connectionsToDisposeOf.clear();
|
||||
}
|
||||
|
||||
|
@ -99,9 +99,9 @@ public class LowLevelQuicheTest
|
|||
public void testFinishedAsSoonAsFinIsFed() throws Exception
|
||||
{
|
||||
// establish connection
|
||||
Map.Entry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> entry = connectClientToServer();
|
||||
PanamaJdkQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
PanamaJdkQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
Map.Entry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> entry = connectClientToServer();
|
||||
ForeignIncubatorQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
ForeignIncubatorQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
|
||||
// client sends 16 bytes of payload over stream 0
|
||||
assertThat(clientQuicheConnection.feedClearBytesForStream(0, ByteBuffer.allocate(16)
|
||||
|
@ -139,9 +139,9 @@ public class LowLevelQuicheTest
|
|||
public void testNotFinishedAsLongAsStreamHasReadableBytes() throws Exception
|
||||
{
|
||||
// establish connection
|
||||
Map.Entry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> entry = connectClientToServer();
|
||||
PanamaJdkQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
PanamaJdkQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
Map.Entry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> entry = connectClientToServer();
|
||||
ForeignIncubatorQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
ForeignIncubatorQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
|
||||
// client sends 16 bytes of payload over stream 0 and finish it
|
||||
assertThat(clientQuicheConnection.feedClearBytesForStream(0, ByteBuffer.allocate(16)
|
||||
|
@ -175,18 +175,18 @@ public class LowLevelQuicheTest
|
|||
clientQuicheConfig.setApplicationProtos("€");
|
||||
|
||||
// establish connection
|
||||
Map.Entry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> entry = connectClientToServer();
|
||||
PanamaJdkQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
PanamaJdkQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
Map.Entry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> entry = connectClientToServer();
|
||||
ForeignIncubatorQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
ForeignIncubatorQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
|
||||
assertThat(clientQuicheConnection.getNegotiatedProtocol(), is("€"));
|
||||
assertThat(serverQuicheConnection.getNegotiatedProtocol(), is("€"));
|
||||
}
|
||||
|
||||
private void drainServerToFeedClient(Map.Entry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> entry, int expectedSize) throws IOException
|
||||
private void drainServerToFeedClient(Map.Entry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> entry, int expectedSize) throws IOException
|
||||
{
|
||||
PanamaJdkQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
PanamaJdkQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
ForeignIncubatorQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
ForeignIncubatorQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
ByteBuffer buffer = ByteBuffer.allocate(quiche_h.QUICHE_MIN_CLIENT_INITIAL_LEN);
|
||||
|
||||
int drained = serverQuicheConnection.drainCipherBytes(buffer);
|
||||
|
@ -196,10 +196,10 @@ public class LowLevelQuicheTest
|
|||
assertThat(fed, is(expectedSize));
|
||||
}
|
||||
|
||||
private void drainClientToFeedServer(Map.Entry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> entry, int expectedSize) throws IOException
|
||||
private void drainClientToFeedServer(Map.Entry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> entry, int expectedSize) throws IOException
|
||||
{
|
||||
PanamaJdkQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
PanamaJdkQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
ForeignIncubatorQuicheConnection clientQuicheConnection = entry.getKey();
|
||||
ForeignIncubatorQuicheConnection serverQuicheConnection = entry.getValue();
|
||||
ByteBuffer buffer = ByteBuffer.allocate(quiche_h.QUICHE_MIN_CLIENT_INITIAL_LEN);
|
||||
|
||||
int drained = clientQuicheConnection.drainCipherBytes(buffer);
|
||||
|
@ -209,21 +209,21 @@ public class LowLevelQuicheTest
|
|||
assertThat(fed, is(expectedSize));
|
||||
}
|
||||
|
||||
private Map.Entry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> connectClientToServer() throws IOException
|
||||
private Map.Entry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> connectClientToServer() throws IOException
|
||||
{
|
||||
ByteBuffer buffer = ByteBuffer.allocate(quiche_h.QUICHE_MIN_CLIENT_INITIAL_LEN);
|
||||
ByteBuffer buffer2 = ByteBuffer.allocate(quiche_h.QUICHE_MIN_CLIENT_INITIAL_LEN);
|
||||
|
||||
PanamaJdkQuicheConnection clientQuicheConnection = PanamaJdkQuicheConnection.connect(clientQuicheConfig, serverSocketAddress);
|
||||
ForeignIncubatorQuicheConnection clientQuicheConnection = ForeignIncubatorQuicheConnection.connect(clientQuicheConfig, serverSocketAddress);
|
||||
connectionsToDisposeOf.add(clientQuicheConnection);
|
||||
|
||||
int drained = clientQuicheConnection.drainCipherBytes(buffer);
|
||||
assertThat(drained, is(1200));
|
||||
buffer.flip();
|
||||
|
||||
PanamaJdkQuicheConnection serverQuicheConnection = PanamaJdkQuicheConnection.tryAccept(serverQuicheConfig, tokenValidator, buffer, clientSocketAddress);
|
||||
ForeignIncubatorQuicheConnection serverQuicheConnection = ForeignIncubatorQuicheConnection.tryAccept(serverQuicheConfig, tokenValidator, buffer, clientSocketAddress);
|
||||
assertThat(serverQuicheConnection, is(nullValue()));
|
||||
boolean negotiated = PanamaJdkQuicheConnection.negotiate(tokenMinter, buffer, buffer2);
|
||||
boolean negotiated = ForeignIncubatorQuicheConnection.negotiate(tokenMinter, buffer, buffer2);
|
||||
assertThat(negotiated, is(true));
|
||||
buffer2.flip();
|
||||
|
||||
|
@ -235,7 +235,7 @@ public class LowLevelQuicheTest
|
|||
assertThat(drained, is(1200));
|
||||
buffer.flip();
|
||||
|
||||
serverQuicheConnection = PanamaJdkQuicheConnection.tryAccept(serverQuicheConfig, tokenValidator, buffer, clientSocketAddress);
|
||||
serverQuicheConnection = ForeignIncubatorQuicheConnection.tryAccept(serverQuicheConfig, tokenValidator, buffer, clientSocketAddress);
|
||||
assertThat(serverQuicheConnection, is(not(nullValue())));
|
||||
connectionsToDisposeOf.add(serverQuicheConnection);
|
||||
|
||||
|
@ -250,7 +250,7 @@ public class LowLevelQuicheTest
|
|||
assertThat(serverQuicheConnection.isConnectionEstablished(), is(false));
|
||||
assertThat(clientQuicheConnection.isConnectionEstablished(), is(false));
|
||||
|
||||
AbstractMap.SimpleImmutableEntry<PanamaJdkQuicheConnection, PanamaJdkQuicheConnection> entry = new AbstractMap.SimpleImmutableEntry<>(clientQuicheConnection, serverQuicheConnection);
|
||||
AbstractMap.SimpleImmutableEntry<ForeignIncubatorQuicheConnection, ForeignIncubatorQuicheConnection> entry = new AbstractMap.SimpleImmutableEntry<>(clientQuicheConnection, serverQuicheConnection);
|
||||
|
||||
int protosLen = 0;
|
||||
for (String proto : clientQuicheConfig.getApplicationProtos())
|
|
@ -49,12 +49,12 @@ public interface LibQuiche extends Library
|
|||
{
|
||||
String quicheVersion = INSTANCE.quiche_version();
|
||||
if (!EXPECTED_QUICHE_VERSION.equals(quicheVersion))
|
||||
throw new IllegalStateException("Native Quiche library version [" + quicheVersion + "] does not match expected version [" + EXPECTED_QUICHE_VERSION + "]");
|
||||
throw new IllegalStateException("native quiche library version [" + quicheVersion + "] does not match expected version [" + EXPECTED_QUICHE_VERSION + "]");
|
||||
|
||||
if (LIB_QUICHE_LOG.isDebugEnabled() && LOGGING_ENABLED.compareAndSet(false, true))
|
||||
{
|
||||
INSTANCE.quiche_enable_debug_logging(LIB_QUICHE_LOGGING_CALLBACK, null);
|
||||
LIB_QUICHE_LOG.debug("Quiche version {}", quicheVersion);
|
||||
LIB_QUICHE_LOG.debug("quiche version {}", quicheVersion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
org.eclipse.jetty.quic.quiche.panama.jdk.PanamaJdkQuicheBinding
|
Loading…
Reference in New Issue