Skip to content

Commit 414dd97

Browse files
committed
quic: some fixes after rebase
1 parent 16728ac commit 414dd97

6 files changed

Lines changed: 39 additions & 36 deletions

File tree

‎lib/internal/quic/quic.js‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const {
5252
sendHeaders,
5353
setCallbacks,
5454
setHeadersInterest,
55-
setSessionIdInterest,
55+
setWebtransportInterest,
5656
makeWebtransportStream,
5757
closeWebtransportSessionStream,
5858

@@ -1380,9 +1380,10 @@ function updateHeaderInterest(handle, inner) {
13801380

13811381
function updateWebtransportInterest(handle, inner) {
13821382
if (handle === undefined) return;
1383-
setSessionIdInterest(
1383+
setWebtransportInterest(
13841384
handle,
1385-
inner.onsessionid !== undefined || inner.onwtsessionclose !== undefined,
1385+
inner.onsessionid !== undefined,
1386+
inner.onwtsessionclose !== undefined,
13861387
);
13871388
}
13881389

@@ -3730,7 +3731,7 @@ class QuicSession {
37303731
webtransport = false,
37313732
webtransportSession = undefined,
37323733
headers,
3733-
waitUntilAvailable = false,
3734+
waitUntilAvailable = true,
37343735
onheaders,
37353736
onsessionid,
37363737
onwtsessionclose,

‎src/quic/bindingdata.cc‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ void BindingData::InitPerContext(Realm* realm, Local<Object> target) {
298298
target,
299299
"setWebtransportInterest",
300300
SetWebtransportInterest);
301+
SetMethod(realm->context(),
302+
target,
303+
"closeWebtransportSessionStream",
304+
CloseWebtransportSessionStream);
301305
SetMethod(realm->context(),
302306
target,
303307
"makeWebtransportStream",

‎src/quic/http3.cc‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,6 @@ class Http3ApplicationImpl final : public Session::Application {
982982
uint32_t wt_error_code,
983983
const uint8_t* msg,
984984
size_t msglen) {
985-
auto* state = GetStreamState(stream);
986985
if (!env()->can_call_into_js()) return;
987986
CallbackScope<Stream> cb_scope(&stream);
988987
auto& binding = BindingData::Get(env());

‎src/quic/session.cc‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,8 +1174,7 @@ struct Session::Impl final : public MemoryRetainer {
11741174
if (!args[1].As<v8::Boolean>()->Value()) { // This is waitUntilAvailable
11751175
if (!session->CanImmediatelyOpenStream(direction)) {
11761176
return THROW_ERR_INVALID_STATE(env,
1177-
"No new stream available within flow control"
1178-
);
1177+
"No new stream available within flow control");
11791178
}
11801179
}
11811180

@@ -1725,7 +1724,6 @@ struct Session::Impl final : public MemoryRetainer {
17251724
nullptr,
17261725
#ifdef NGTCP2_CALLBACKS_V6
17271726
on_extend_max_data,
1728-
#endif
17291727
#endif // NGTCP2_CALLBACKS_V5
17301728
#endif // NGTCP2_CALLBACKS_V4
17311729
};
@@ -1781,7 +1779,6 @@ struct Session::Impl final : public MemoryRetainer {
17811779
nullptr,
17821780
#ifdef NGTCP2_CALLBACKS_V6
17831781
on_extend_max_data,
1784-
#endif
17851782
#endif // NGTCP2_CALLBACKS_V5
17861783
#endif // NGTCP2_CALLBACKS_V4
17871784
};

‎test/parallel/test-quic-internal-setcallbacks.mjs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ const callbacks = {
3232
onStreamClose() {},
3333
onStreamDrain() {},
3434
onStreamReset() {},
35+
onStreamSessionId() {},
3536
onStreamStopSending() {},
3637
onStreamHeaders() {},
3738
onStreamTrailers() {},
39+
onStreamWTSessionClose() {},
3840
};
3941
// Fail if any callback is missing
4042
for (const fn of Object.keys(callbacks)) {

‎test/parallel/test-quic-stream-limits-pending.mjs‎

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@ let serverStreamCount = 0;
2525
// Server allows only 1 bidi stream at a time.
2626
const serverEndpoint = await listen(mustCall((serverSession) => {
2727
serverSession.onstream = mustCall(async (stream) => {
28-
const streambytes = await bytes(stream);
28+
console.log("server mark 1")
29+
await bytes(stream);
30+
console.log("server mark 2")
2931
stream.writer.endSync();
32+
console.log("server mark 3")
3033
await stream.closed;
3134
++serverStreamCount;
35+
console.log('serverStreamCount', serverStreamCount)
3236
if (serverStreamCount === 2) {
3337
twoDone.resolve();
3438
}
@@ -38,7 +42,7 @@ const serverEndpoint = await listen(mustCall((serverSession) => {
3842
if (serverStreamCount === 4) {
3943
serverSession.close();
4044
}
41-
}, 4);
45+
}, 3);
4246
}), {
4347
transportParams: { initialMaxStreamsBidi: 1 },
4448
});
@@ -51,38 +55,36 @@ let opened = 0;
5155
// First stream opens immediately (within the limit).
5256
const s1 = await clientSession.createBidirectionalStream({
5357
body: encoder.encode('stream 1'),
54-
waitUntilAvailable: true
5558
});
5659

5760
// eslint-disable-next-line node-core/must-call-assert
5861
s1.opened.then(() => {
5962
opened++;
6063
});
6164

62-
try {
63-
// Second stream should not open, but throw.
64-
const s2 = await clientSession.createBidirectionalStream({
65-
body: encoder.encode('stream 2'),
66-
waitUntilAvailable: false
67-
});
68-
} catch (error) {
69-
assert.strictEqual(error.code, 'ERR_INVALID_STATE');
70-
}
71-
72-
// eslint-disable-next-line node-core/must-call-assert
73-
s2.opened.then(() => {
74-
opened++;
75-
});
76-
65+
await assert.rejects(
66+
async () => {
67+
// Second stream should not open, but throw.
68+
await clientSession.createBidirectionalStream({
69+
body: encoder.encode('stream 2'),
70+
waitUntilAvailable: false,
71+
});
72+
// eslint-disable-next-line node-core/must-call-assert
73+
s2.opened.then(() => {
74+
opened++;
75+
});
76+
},
77+
{
78+
name: 'Error',
79+
message: 'No new stream available within flow control',
80+
},
81+
);
7782
// Third stream is created but queued as pending because the
7883
// server only allows 1 concurrent bidi stream.
7984
const s3 = await clientSession.createBidirectionalStream({
8085
body: encoder.encode('stream 3'),
81-
waitUntilAvailable: true
8286
});
83-
84-
85-
// s3 should be pending until s1 closes and the server grants
87+
// Note, s3 should be pending until s1 closes and the server grants
8688
// more stream credits.
8789
assert.strictEqual(s3.pending, true);
8890
assert.strictEqual(opened, 1);
@@ -96,7 +98,6 @@ s3.destroy(err);
9698

9799
await Promise.all([assert.rejects(s3.opened, err), assert.rejects(s3.closed, err)]);
98100

99-
100101
// After s1 closes, the server sends MAX_STREAMS which opens s2.
101102
// Wait for the server to receive both streams.
102103
await twoDone.promise;
@@ -105,14 +106,13 @@ assert.strictEqual(opened, 2);
105106
for await (const _ of s3) { /* drain */ } // eslint-disable-line no-unused-vars
106107
await s3.closed;
107108

108-
await sleep(10); // we wait a bit, as we do not have a callback exposed to js
109+
await sleep(10); // We wait a bit, as we do not have a callback exposed to js
109110
// fourth stream should open immediately and not throw
110111
const s4 = await clientSession.createBidirectionalStream({
111112
body: encoder.encode('stream 4'),
112113
waitUntilAvailable: false
113114
});
114-
await s4.closed;
115-
await allDone.promise;
115+
await Promise.all([s4.closed, allDone.promise]);
116116

117117
await clientSession.close();
118-
await serverEndpoint.close();
118+
await serverEndpoint.close();

0 commit comments

Comments
 (0)