Skip to content

Commit dd211ef

Browse files
authored
Update quiche version to a specific commit (java-native-access#143)
Motivation: To allow us to move faster we should just not depend on a specific release of quiche but pin to a specific commit. This will allow us to have everything ready once they cut a new release. Modifications: - Update to the current head of quiche and adjust code to make use of the new changes - Remove workaround for bug that was fixed by quiche Result: Use recent quiche development version
1 parent aa8b943 commit dd211ef

7 files changed

Lines changed: 59 additions & 27 deletions

File tree

pom.xml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@
7676
<jniUtilIncludeDir>${project.build.directory}/netty-jni-util/</jniUtilIncludeDir>
7777
<quicheCheckoutDir>${project.build.directory}/quiche</quicheCheckoutDir>
7878
<quicheBuildDir>${quicheCheckoutDir}/target/release</quicheBuildDir>
79-
<quiche.version>0.6.0</quiche.version>
79+
<quicheBranch>master</quicheBranch>
80+
<quicheCommitSha>5403e54c40caf70f096a2a08c50c9d71c149da6f</quicheCommitSha>
8081
<generatedSourcesDir>${project.build.directory}/generated-sources</generatedSourcesDir>
8182
<cflags>-Werror -fno-omit-frame-pointer -fvisibility=hidden -Wunused -Wno-unused-value -O3 -I${quicheCheckoutDir}/include</cflags>
8283
<ldflags>-L${quicheBuildDir} -lquiche</ldflags>
@@ -218,11 +219,17 @@
218219
<exec executable="git" failonerror="true" dir="${project.build.directory}" resolveexecutable="true">
219220
<arg value="clone" />
220221
<arg value="--branch" />
221-
<arg value="${quiche.version}" />
222+
<arg value="${quicheBranch}" />
222223
<arg value="--recursive" />
223224
<arg value="https://github.com/cloudflare/quiche" />
224225
<arg value="${quicheCheckoutDir}" />
225226
</exec>
227+
228+
<!-- Use the known SHA of the commit -->
229+
<exec executable="git" failonerror="true" dir="${quicheCheckoutDir}" resolveexecutable="true">
230+
<arg value="checkout" />
231+
<arg value="${quicheCommitSha}" />
232+
</exec>
226233
</else>
227234
</if>
228235
<if>
@@ -238,6 +245,8 @@
238245
<then>
239246
<exec executable="cargo" failonerror="true" dir="${quicheCheckoutDir}" resolveexecutable="true">
240247
<arg value="build" />
248+
<arg value="--features" />
249+
<arg value="ffi" />
241250
<arg value="--release" />
242251
<env key="MACOSX_DEPLOYMENT_TARGET" value="${macosxDeploymentTarget}" />
243252
<env key="CFLAGS" value="-O3 -fno-omit-frame-pointer -DOPENSSL_C11_ATOMIC" />

src/main/c/netty_quic_quiche.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,12 @@ static void netty_quiche_config_set_max_idle_timeout(JNIEnv* env, jclass clazz,
369369
quiche_config_set_max_idle_timeout((quiche_config*) config, (uint64_t) value);
370370
}
371371

372-
static void netty_quiche_config_set_max_udp_payload_size(JNIEnv* env, jclass clazz, jlong config, jlong value) {
373-
quiche_config_set_max_udp_payload_size((quiche_config*) config, (uint64_t) value);
372+
static void netty_quiche_config_set_max_recv_udp_payload_size(JNIEnv* env, jclass clazz, jlong config, jlong value) {
373+
quiche_config_set_max_recv_udp_payload_size((quiche_config*) config, (uint64_t) value);
374+
}
375+
376+
static void netty_quiche_config_set_max_send_udp_payload_size(JNIEnv* env, jclass clazz, jlong config, jlong value) {
377+
quiche_config_set_max_send_udp_payload_size((quiche_config*) config, (uint64_t) value);
374378
}
375379

376380
static void netty_quiche_config_set_initial_max_data(JNIEnv* env, jclass clazz, jlong config, jlong value) {
@@ -520,7 +524,8 @@ static const JNINativeMethod fixed_method_table[] = {
520524
{ "quiche_config_enable_early_data", "(J)V", (void *) netty_quiche_config_enable_early_data },
521525
{ "quiche_config_set_application_protos", "(J[B)I", (void *) netty_quiche_config_set_application_protos },
522526
{ "quiche_config_set_max_idle_timeout", "(JJ)V", (void *) netty_quiche_config_set_max_idle_timeout },
523-
{ "quiche_config_set_max_udp_payload_size", "(JJ)V", (void *) netty_quiche_config_set_max_udp_payload_size },
527+
{ "quiche_config_set_max_recv_udp_payload_size", "(JJ)V", (void *) netty_quiche_config_set_max_recv_udp_payload_size },
528+
{ "quiche_config_set_max_send_udp_payload_size", "(JJ)V", (void *) netty_quiche_config_set_max_send_udp_payload_size },
524529
{ "quiche_config_set_initial_max_data", "(JJ)V", (void *) netty_quiche_config_set_initial_max_data },
525530
{ "quiche_config_set_initial_max_stream_data_bidi_local", "(JJ)V", (void *) netty_quiche_config_set_initial_max_stream_data_bidi_local },
526531
{ "quiche_config_set_initial_max_stream_data_bidi_remote", "(JJ)V", (void *) netty_quiche_config_set_initial_max_stream_data_bidi_remote },

src/main/java/io/netty/incubator/codec/quic/QuicCodecBuilder.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public abstract class QuicCodecBuilder<B extends QuicCodecBuilder<B>> {
4242
private boolean earlyData;
4343
private byte[] protos;
4444
private Long maxIdleTimeout;
45-
private Long maxUdpPayloadSize;
45+
private Long maxRecvUdpPayloadSize;
46+
private Long maxSendUdpPayloadSize;
4647
private Long initialMaxData;
4748
private Long initialMaxStreamDataBidiLocal;
4849
private Long initialMaxStreamDataBidiRemote;
@@ -195,16 +196,30 @@ public final B maxIdleTimeout(long amount, TimeUnit unit) {
195196
}
196197

197198
/**
198-
* See <a href="https://docs.rs/quiche/0.6.0/quiche/struct.Config.html#method.set_max_udp_payload_size">
199-
* set_max_udp_payload_size</a>.
199+
* See <a href="https://github.com/cloudflare/quiche/blob/35e38d987c1e53ef2bd5f23b754c50162b5adac8/src/lib.rs#L669">
200+
* set_max_send_udp_payload_size</a>.
201+
*
202+
* The default and minimum value is 1200.
203+
*
204+
* @param size the maximum payload size that is advertised to the remote peer.
205+
* @return the instance itself.
206+
*/
207+
public final B maxSendUdpPayloadSize(long size) {
208+
this.maxSendUdpPayloadSize = checkPositiveOrZero(size, "value");
209+
return self();
210+
}
211+
212+
/**
213+
* See <a href="https://github.com/cloudflare/quiche/blob/35e38d987c1e53ef2bd5f23b754c50162b5adac8/src/lib.rs#L662">
214+
* set_max_recv_udp_payload_size</a>.
200215
*
201216
* The default value is 65527.
202217
*
203218
* @param size the maximum payload size that is advertised to the remote peer.
204219
* @return the instance itself.
205220
*/
206-
public final B maxUdpPayloadSize(long size) {
207-
this.maxUdpPayloadSize = checkPositiveOrZero(size, "value");
221+
public final B maxRecvUdpPayloadSize(long size) {
222+
this.maxRecvUdpPayloadSize = checkPositiveOrZero(size, "value");
208223
return self();
209224
}
210225

@@ -392,7 +407,7 @@ public final B datagram(int recvQueueLen, int sendQueueLen) {
392407

393408
private QuicheConfig createConfig() {
394409
return new QuicheConfig(certPath, keyPath, verifyPeer, grease, earlyData,
395-
protos, maxIdleTimeout, maxUdpPayloadSize, initialMaxData,
410+
protos, maxIdleTimeout, maxSendUdpPayloadSize, maxRecvUdpPayloadSize, initialMaxData,
396411
initialMaxStreamDataBidiLocal, initialMaxStreamDataBidiRemote,
397412
initialMaxStreamDataUni, initialMaxStreamsBidi, initialMaxStreamsUni,
398413
ackDelayExponent, maxAckDelay, disableActiveMigration, enableHystart,

src/main/java/io/netty/incubator/codec/quic/Quiche.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,19 @@ static native int quiche_retry(long scidAddr, int scidLen, long dcidAddr, int dc
415415

416416
/**
417417
* See
418-
* <a href="https://github.com/cloudflare/quiche/blob/0.6.0/include/quiche.h#146">
419-
* quiche_config_set_max_udp_payload_size</a>.
418+
* <a href="https://github.com/cloudflare/quiche/blob/
419+
* 35e38d987c1e53ef2bd5f23b754c50162b5adac8/include/quiche.h#L150">
420+
* quiche_config_set_max_recv_udp_payload_size</a>.
420421
*/
421-
static native void quiche_config_set_max_udp_payload_size(long configAddr, long value);
422+
static native void quiche_config_set_max_recv_udp_payload_size(long configAddr, long value);
423+
424+
/**
425+
* See
426+
* <a href="https://github.com/cloudflare/quiche/blob/
427+
* 35e38d987c1e53ef2bd5f23b754c50162b5adac8/include/quiche.h#L153">
428+
* quiche_config_set_max_recv_udp_payload_size</a>.
429+
*/
430+
static native void quiche_config_set_max_send_udp_payload_size(long configAddr, long value);
422431

423432
/**
424433
* See

src/main/java/io/netty/incubator/codec/quic/QuicheConfig.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ final class QuicheConfig {
2020
private final long config;
2121

2222
QuicheConfig(String certPath, String keyPath, Boolean verifyPeer, Boolean grease, boolean earlyData,
23-
byte[] protos, Long maxIdleTimeout, Long maxUdpPayloadSize, Long initialMaxData,
24-
Long initialMaxStreamDataBidiLocal, Long initialMaxStreamDataBidiRemote,
23+
byte[] protos, Long maxIdleTimeout, Long maxSendUdpPayloadSize, Long maxRecvUdpPayloadSize,
24+
Long initialMaxData, Long initialMaxStreamDataBidiLocal, Long initialMaxStreamDataBidiRemote,
2525
Long initialMaxStreamDataUni, Long initialMaxStreamsBidi, Long initialMaxStreamsUni,
2626
Long ackDelayExponent, Long maxAckDelay, Boolean disableActiveMigration, Boolean enableHystart,
2727
QuicCongestionControlAlgorithm congestionControlAlgorithm,
@@ -50,8 +50,11 @@ final class QuicheConfig {
5050
if (maxIdleTimeout != null) {
5151
Quiche.quiche_config_set_max_idle_timeout(config, maxIdleTimeout);
5252
}
53-
if (maxUdpPayloadSize != null) {
54-
Quiche.quiche_config_set_max_udp_payload_size(config, maxUdpPayloadSize);
53+
if (maxSendUdpPayloadSize != null) {
54+
Quiche.quiche_config_set_max_send_udp_payload_size(config, maxSendUdpPayloadSize);
55+
}
56+
if (maxRecvUdpPayloadSize != null) {
57+
Quiche.quiche_config_set_max_recv_udp_payload_size(config, maxRecvUdpPayloadSize);
5558
}
5659
if (initialMaxData != null) {
5760
Quiche.quiche_config_set_initial_max_data(config, initialMaxData);

src/main/java/io/netty/incubator/codec/quic/QuicheQuicChannel.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -767,13 +767,6 @@ StreamRecvResult streamRecv(long streamId, ByteBuf buffer) throws Exception {
767767
long memoryAddress = Quiche.memoryAddress(buffer);
768768
int recvLen = Quiche.quiche_conn_stream_recv(connectionAddressChecked(), streamId,
769769
memoryAddress + writerIndex, buffer.writableBytes(), Quiche.memoryAddress(finBuffer));
770-
if (recvLen == Quiche.QUICHE_ERR_INVALID_STREAM_STATE) {
771-
// Remove this workaround as soon there is a quiche release that pulled in:
772-
// https://github.com/cloudflare/quiche/pull/742
773-
assert isStreamFinished(streamId);
774-
return StreamRecvResult.FIN;
775-
}
776-
777770
if (Quiche.throwIfError(recvLen)) {
778771
return StreamRecvResult.DONE;
779772
} else {

src/test/java/io/netty/incubator/codec/quic/QuicTestUtils.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ static QuicClientCodecBuilder newQuicClientBuilder() {
6565
.privateKey("./src/test/resources/cert.key")
6666
.applicationProtocols(PROTOS)
6767
.maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
68-
.maxUdpPayloadSize(Quic.MAX_DATAGRAM_SIZE)
6968
.initialMaxData(10000000)
7069
.initialMaxStreamDataBidirectionalLocal(1000000)
7170
.initialMaxStreamDataBidirectionalRemote(1000000)
@@ -82,7 +81,6 @@ static QuicServerCodecBuilder newQuicServerBuilder() {
8281
.privateKey("./src/test/resources/cert.key")
8382
.applicationProtocols(PROTOS)
8483
.maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
85-
.maxUdpPayloadSize(Quic.MAX_DATAGRAM_SIZE)
8684
.initialMaxData(10000000)
8785
.initialMaxStreamDataBidirectionalLocal(1000000)
8886
.initialMaxStreamDataBidirectionalRemote(1000000)

0 commit comments

Comments
 (0)