Skip to content

Commit 8e5c5b1

Browse files
committed
quic: cleanup QuicClientSession constructor
PR-URL: #34283 Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent fe4e7e4 commit 8e5c5b1

File tree

3 files changed

+56
-53
lines changed

3 files changed

+56
-53
lines changed

doc/api/errors.md

+27-3
Original file line numberDiff line numberDiff line change
@@ -1748,12 +1748,36 @@ Accessing `Object.prototype.__proto__` has been forbidden using
17481748
[`Object.setPrototypeOf`][] should be used to get and set the prototype of an
17491749
object.
17501750

1751-
<a id="ERR_QUICSESSION_VERSION_NEGOTIATION"></a>
1752-
### `ERR_QUICSESSION_VERSION_NEGOTIATION`
1751+
<a id="ERR_QUIC_FAILED_TO_CREATE_SESSION"></a>
1752+
### `ERR_QUIC_FAILED_TO_CREATE_SESSION`
17531753

17541754
> Stability: 1 - Experimental
17551755
1756-
TBD
1756+
An unspecified failure occured trying to initialize a new `QuicClientSession`.
1757+
1758+
<a id="ERR_QUIC_INVALID_REMOTE_TRANSPORT_PARAMS"></a>
1759+
### `ERR_QUIC_INVALID_REMOTE_TRANSPORT_PARAMS`
1760+
1761+
> Stability: 1 - Experimental
1762+
1763+
An attempt to resume a `QuicClientSession` using remembered remote transport
1764+
parameters failed because the transport parameters were invalid.
1765+
1766+
<a id="ERR_QUIC_INVALID_TLS_SESSION_TICKET"></a>
1767+
### `ERR_QUIC_INVALID_TLS_SESSION_TICKET`
1768+
1769+
> Stability: 1 - Experimental
1770+
1771+
An attempt resume a `QuicClientSession` using a remembered TLS session ticket
1772+
failed because the session ticket was invalid.
1773+
1774+
<a id="ERR_QUIC_VERSION_NEGOTIATION"></a>
1775+
### `ERR_QUIC_VERSION_NEGOTIATION`
1776+
1777+
> Stability: 1 - Experimental
1778+
1779+
A `QuicClientSession` received a version negotiation request from the
1780+
server and was shutdown accordingly.
17571781

17581782
<a id="ERR_REQUIRE_ESM"></a>
17591783
### `ERR_REQUIRE_ESM`

lib/internal/errors.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -1301,7 +1301,12 @@ E('ERR_PACKAGE_PATH_NOT_EXPORTED', (pkgPath, subpath, base = undefined) => {
13011301
return `Package subpath '${subpath}' is not defined by "exports" in ${
13021302
pkgPath}package.json${base ? ` imported from ${base}` : ''}`;
13031303
}, Error);
1304-
E('ERR_QUICSESSION_VERSION_NEGOTIATION',
1304+
E('ERR_QUIC_FAILED_TO_CREATE_SESSION', 'Failed to create QuicSession', Error);
1305+
E('ERR_QUIC_INVALID_REMOTE_TRANSPORT_PARAMS',
1306+
'Invalid remote transport params', Error);
1307+
E('ERR_QUIC_INVALID_TLS_SESSION_TICKET',
1308+
'Invalid TLS session ticket', Error);
1309+
E('ERR_QUIC_VERSION_NEGOTIATION',
13051310
(version, requestedVersions, supportedVersions) => {
13061311
return 'QUIC session received version negotiation from server. ' +
13071312
`Version: ${version}. Requested: ${requestedVersions.join(', ')} ` +

lib/internal/quic/core.js

+23-49
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,10 @@ const {
101101
ERR_INVALID_CALLBACK,
102102
ERR_INVALID_STATE,
103103
ERR_OPERATION_FAILED,
104-
ERR_QUICSESSION_VERSION_NEGOTIATION,
104+
ERR_QUIC_FAILED_TO_CREATE_SESSION,
105+
ERR_QUIC_INVALID_REMOTE_TRANSPORT_PARAMS,
106+
ERR_QUIC_INVALID_TLS_SESSION_TICKET,
107+
ERR_QUIC_VERSION_NEGOTIATION,
105108
ERR_TLS_DH_PARAM_SIZE,
106109
},
107110
hideStackFrames,
@@ -1753,7 +1756,7 @@ class QuicSession extends EventEmitter {
17531756
// QuicSessions.
17541757
[kVersionNegotiation](version, requestedVersions, supportedVersions) {
17551758
const err =
1756-
new ERR_QUICSESSION_VERSION_NEGOTIATION(
1759+
new ERR_QUIC_VERSION_NEGOTIATION(
17571760
version,
17581761
requestedVersions,
17591762
supportedVersions);
@@ -2347,19 +2350,9 @@ class QuicServerSession extends QuicSession {
23472350
class QuicClientSession extends QuicSession {
23482351
[kInternalClientState] = {
23492352
allowEarlyData: false,
2350-
autoStart: true,
2351-
dcid: undefined,
23522353
handshakeStarted: false,
23532354
minDHSize: undefined,
2354-
port: undefined,
2355-
remoteTransportParams: undefined,
2356-
requestOCSP: undefined,
23572355
secureContext: undefined,
2358-
sessionTicket: undefined,
2359-
transportParams: undefined,
2360-
preferredAddressPolicy: undefined,
2361-
verifyHostnameIdentity: true,
2362-
qlogEnabled: false,
23632356
};
23642357

23652358
constructor(socket, options, type, ip) {
@@ -2396,74 +2389,55 @@ class QuicClientSession extends QuicSession {
23962389

23972390
super(socket, { servername, alpn, highWaterMark, defaultEncoding });
23982391
const state = this[kInternalClientState];
2399-
state.autoStart = autoStart;
24002392
state.handshakeStarted = autoStart;
2401-
state.dcid = dcid;
24022393
state.minDHSize = minDHSize;
2403-
state.port = port || 0;
2404-
state.preferredAddressPolicy = preferredAddressPolicy;
2405-
state.requestOCSP = requestOCSP;
2394+
24062395
state.secureContext =
24072396
createSecureContext(
24082397
sc_options,
24092398
initSecureContextClient);
2410-
state.transportParams = validateTransportParams(options);
2411-
state.verifyHostnameIdentity = verifyHostnameIdentity;
2412-
state.qlogEnabled = qlog;
2413-
2414-
// If provided, indicates that the client is attempting to
2415-
// resume a prior session. Early data would be enabled.
2416-
state.remoteTransportParams = remoteTransportParams;
2417-
state.sessionTicket = sessionTicket;
2399+
2400+
const transportParams = validateTransportParams(options);
2401+
24182402
state.allowEarlyData =
24192403
remoteTransportParams !== undefined &&
24202404
sessionTicket !== undefined;
24212405

2422-
setTransportParams(state.transportParams);
2406+
setTransportParams(transportParams);
24232407

24242408
const handle =
24252409
_createClientSession(
24262410
this.socket[kHandle],
24272411
type,
24282412
ip,
2429-
state.port,
2413+
port,
24302414
state.secureContext.context,
24312415
this.servername || ip,
2432-
state.remoteTransportParams,
2433-
state.sessionTicket,
2434-
state.dcid,
2435-
state.preferredAddressPolicy,
2416+
remoteTransportParams,
2417+
sessionTicket,
2418+
dcid,
2419+
preferredAddressPolicy,
24362420
this.alpnProtocol,
2437-
(state.verifyHostnameIdentity ?
2421+
(verifyHostnameIdentity ?
24382422
QUICCLIENTSESSION_OPTION_VERIFY_HOSTNAME_IDENTITY : 0) |
2439-
(state.requestOCSP ?
2423+
(requestOCSP ?
24402424
QUICCLIENTSESSION_OPTION_REQUEST_OCSP : 0),
2441-
state.qlogEnabled,
2442-
state.autoStart);
2443-
2444-
// We no longer need these, unset them so
2445-
// memory can be garbage collected.
2446-
state.remoteTransportParams = undefined;
2447-
state.sessionTicket = undefined;
2448-
state.dcid = undefined;
2425+
qlog,
2426+
autoStart);
24492427

24502428
// If handle is a number, creating the session failed.
24512429
if (typeof handle === 'number') {
24522430
let reason;
24532431
switch (handle) {
24542432
case ERR_FAILED_TO_CREATE_SESSION:
2455-
reason = 'QuicSession bootstrap failed';
2456-
break;
2433+
throw new ERR_QUIC_FAILED_TO_CREATE_SESSION();
24572434
case ERR_INVALID_REMOTE_TRANSPORT_PARAMS:
2458-
reason = 'Invalid Remote Transport Params';
2459-
break;
2435+
throw new ERR_QUIC_INVALID_REMOTE_TRANSPORT_PARAMS();
24602436
case ERR_INVALID_TLS_SESSION_TICKET:
2461-
reason = 'Invalid TLS Session Ticket';
2462-
break;
2437+
throw new ERR_QUIC_INVALID_TLS_SESSION_TICKET();
24632438
default:
2464-
reason = `${handle}`;
2439+
throw new ERR_OPERATION_FAILED(`Unspecified reason [${reason}]`);
24652440
}
2466-
throw new ERR_OPERATION_FAILED(reason);
24672441
}
24682442

24692443
this[kSetHandle](handle);

0 commit comments

Comments
 (0)