From 5c0053e13230af017b129985e66d9462efc58690 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Sat, 27 Aug 2022 11:04:08 -0700 Subject: [PATCH] fixup! fixup! fixup! src: implement native quic layer --- lib/internal/quic/quic.js | 81 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/lib/internal/quic/quic.js b/lib/internal/quic/quic.js index b3ef5aba03e1bc..2a151808013677 100644 --- a/lib/internal/quic/quic.js +++ b/lib/internal/quic/quic.js @@ -342,18 +342,21 @@ const kDatagramStatus = Symbol('kDatagramStatus'); const StreamPriority = ObjectCreate(null, { /** @type {number} */ DEFAULT: { + __proto__: null, value: QUIC_STREAM_PRIORITY_DEFAULT, enumerable: true, configurable: false, }, /** @type {number} */ LOW: { + __proto__: null, value: QUIC_STREAM_PRIORITY_LOW, enumerable: true, configurable: false, }, /** @type {number} */ HIGH: { + __proto__: null, value: QUIC_STREAM_PRIORITY_HIGH, enumerable: true, configurable: false, @@ -363,12 +366,14 @@ const StreamPriority = ObjectCreate(null, { const StreamPriorityFlags = ObjectCreate(null, { /** @type {number} */ NONE: { + __proto__: null, value: QUIC_STREAM_PRIORITY_FLAGS_NONE, enumerable: true, configurable: false, }, /** @type {number} */ NON_INCREMENTAL: { + __proto__: null, value: QUIC_STREAM_PRIORITY_FLAGS_NON_INCREMENTAL, enumerable: true, configurable: false, @@ -382,12 +387,14 @@ const StreamPriorityFlags = ObjectCreate(null, { const Direction = ObjectCreate(null, { /** @type {string} */ BIDI: { + __proto__: null, value: 'bidi', enumerable: true, configurable: false, }, /** @type {string} */ UNI: { + __proto__: null, value: 'uni', enumerable: true, configurable: false, @@ -401,12 +408,14 @@ const Direction = ObjectCreate(null, { const Side = ObjectCreate(null, { /** @type {string} */ CLIENT: { + __proto__: null, value: 'client', enumerable: true, configurable: false, }, /** @type {string} */ SERVER: { + __proto__: null, value: 'server', enumerable: true, configurable: false, @@ -420,22 +429,26 @@ const Side = ObjectCreate(null, { const CongestionControlAlgorithm = ObjectCreate(null, { /** @type {number} */ CUBIC: { + __proto__: null, value: QUIC_CC_ALGO_CUBIC, enumerable: true, configurable: false, }, /** @type {number} */ RENO: { + __proto__: null, value: QUIC_CC_ALGO_RENO, enumerable: true, configurable: false, }, BBR: { + __proto__: null, value: QUIC_CC_ALGO_BBR, enumerable: true, configurable: false, }, BBR2: { + __proto__: null, value: QUIC_CC_ALGO_BBR2, enumerable: true, configurable: false, @@ -449,12 +462,14 @@ const CongestionControlAlgorithm = ObjectCreate(null, { const PreferredAddressStrategy = ObjectCreate(null, { /** @type {number} */ IGNORE: { + __proto__: null, value: QUIC_PREFERRED_ADDRESS_IGNORE, enumerable: true, configurable: false, }, /** @type {number} */ USE: { + __proto__: null, value: QUIC_PREFERRED_ADDRESS_USE, enumerable: true, configurable: false, @@ -468,114 +483,133 @@ const PreferredAddressStrategy = ObjectCreate(null, { const TransportErrors = ObjectCreate(null, { /** @type {number} */ NO_ERROR: { + __proto__: null, value: QUIC_ERR_NO_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ INTERNAL_ERROR: { + __proto__: null, value: QUIC_ERR_INTERNAL_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ CONNECTION_REFUSED: { + __proto__: null, value: QUIC_ERR_CONNECTION_REFUSED, enumerable: true, configurable: false, }, /** @type {number} */ FLOW_CONTROL_ERROR: { + __proto__: null, value: QUIC_ERR_FLOW_CONTROL_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ STREAM_LIMIT_ERROR: { + __proto__: null, value: QUIC_ERR_STREAM_LIMIT_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ STREAM_STATE_ERROR: { + __proto__: null, value: QUIC_ERR_STREAM_STATE_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ FINAL_SIZE_ERROR: { + __proto__: null, value: QUIC_ERR_FINAL_SIZE_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ FRAME_ENCODING_ERROR: { + __proto__: null, value: QUIC_ERR_FRAME_ENCODING_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ TRANSPORT_PARAMETER_ERROR: { + __proto__: null, value: QUIC_ERR_TRANSPORT_PARAMETER_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ CONNECTION_ID_LIMIT_ERROR: { + __proto__: null, value: QUIC_ERR_CONNECTION_ID_LIMIT_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ PROTOCOL_VIOLATION: { + __proto__: null, value: QUIC_ERR_PROTOCOL_VIOLATION, enumerable: true, configurable: false, }, /** @type {number} */ INVALID_TOKEN: { + __proto__: null, value: QUIC_ERR_INVALID_TOKEN, enumerable: true, configurable: false, }, /** @type {number} */ APPLICATION_ERROR: { + __proto__: null, value: QUIC_ERR_APPLICATION_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ CRYPTO_BUFFER_EXCEEDED: { + __proto__: null, value: QUIC_ERR_CRYPTO_BUFFER_EXCEEDED, enumerable: true, configurable: false, }, /** @type {number} */ KEY_UPDATE_ERROR: { + __proto__: null, value: QUIC_ERR_KEY_UPDATE_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ AEAD_LIMIT_REACHED: { + __proto__: null, value: QUIC_ERR_AEAD_LIMIT_REACHED, enumerable: true, configurable: false, }, /** @type {number} */ NO_VIABLE_PATH: { + __proto__: null, value: QUIC_ERR_NO_VIABLE_PATH, enumerable: true, configurable: false, }, /** @type {number} */ CRYPTO_ERROR: { + __proto__: null, value: QUIC_ERR_CRYPTO_ERROR, enumerable: true, configurable: false, }, /** @type {number} */ VERSION_NEGOTIATION_ERROR_DRAFT: { + __proto__: null, value: QUIC_ERR_VERSION_NEGOTIATION_ERROR_DRAFT, enumerable: true, configurable: false, @@ -588,96 +622,115 @@ const TransportErrors = ObjectCreate(null, { */ const Http3Errors = ObjectCreate(null, { H3_GENERAL_PROTOCOL_ERROR: { + __proto__: null, value: QUIC_ERR_H3_GENERAL_PROTOCOL_ERROR, enumerable: true, configurable: false, }, H3_INTERNAL_ERROR: { + __proto__: null, value: QUIC_ERR_H3_INTERNAL_ERROR, enumerable: true, configurable: false, }, H3_STREAM_CREATION_ERROR: { + __proto__: null, value: QUIC_ERR_H3_STREAM_CREATION_ERROR, enumerable: true, configurable: false, }, H3_CLOSED_CRITICAL_STREAM: { + __proto__: null, value: QUIC_ERR_H3_CLOSED_CRITICAL_STREAM, enumerable: true, configurable: false, }, H3_FRAME_UNEXPECTED: { + __proto__: null, value: QUIC_ERR_H3_FRAME_UNEXPECTED, enumerable: true, configurable: false, }, H3_FRAME_ERROR: { + __proto__: null, value: QUIC_ERR_H3_FRAME_ERROR, enumerable: true, configurable: false, }, H3_EXCESSIVE_LOAD: { + __proto__: null, value: QUIC_ERR_H3_EXCESSIVE_LOAD, enumerable: true, configurable: false, }, H3_ID_ERROR: { + __proto__: null, value: QUIC_ERR_H3_ID_ERROR, enumerable: true, configurable: false, }, H3_SETTINGS_ERROR: { + __proto__: null, value: QUIC_ERR_H3_SETTINGS_ERROR, enumerable: true, configurable: false, }, H3_MISSING_SETTINGS: { + __proto__: null, value: QUIC_ERR_H3_MISSING_SETTINGS, enumerable: true, configurable: false, }, H3_REQUEST_REJECTED: { + __proto__: null, value: QUIC_ERR_H3_REQUEST_REJECTED, enumerable: true, configurable: false, }, H3_REQUEST_CANCELLED: { + __proto__: null, value: QUIC_ERR_H3_REQUEST_CANCELLED, enumerable: true, configurable: false, }, H3_REQUEST_INCOMPLETE: { + __proto__: null, value: QUIC_ERR_H3_REQUEST_INCOMPLETE, enumerable: true, configurable: false, }, H3_MESSAGE_ERROR: { + __proto__: null, value: QUIC_ERR_H3_MESSAGE_ERROR, enumerable: true, configurable: false, }, H3_CONNECT_ERROR: { + __proto__: null, value: QUIC_ERR_H3_CONNECT_ERROR, enumerable: true, configurable: false, }, H3_VERSION_FALLBACK: { + __proto__: null, value: QUIC_ERR_H3_VERSION_FALLBACK, enumerable: true, configurable: false, }, QPACK_DECOMPRESSION_FAILED: { + __proto__: null, value: QUIC_ERR_QPACK_DECOMPRESSION_FAILED, enumerable: true, configurable: false, }, QPACK_ENCODER_STREAM_ERROR: { + __proto__: null, value: QUIC_ERR_QPACK_ENCODER_STREAM_ERROR, enumerable: true, configurable: false, }, QPACK_DECODER_STREAM_ERROR: { + __proto__: null, value: QUIC_ERR_QPACK_DECODER_STREAM_ERROR, enumerable: true, configurable: false, @@ -687,112 +740,132 @@ const Http3Errors = ObjectCreate(null, { const constants = ObjectCreate(null, { /** @type {string} */ HTTP3_ALPN: { + __proto__: null, value: HTTP3_ALPN, enumerable: true, configurable: false, }, /** @type {number} */ MAX_CID: { + __proto__: null, value: QUIC_MAX_CIDLEN, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_RETRYTOKEN_EXPIRATION: { + __proto__: null, value: DEFAULT_RETRYTOKEN_EXPIRATION, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_TOKEN_EXPIRATION: { + __proto__: null, value: DEFAULT_TOKEN_EXPIRATION, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_MAX_CONNECTIONS_PER_HOST: { + __proto__: null, value: DEFAULT_MAX_CONNECTIONS_PER_HOST, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_MAX_CONNECTIONS: { + __proto__: null, value: DEFAULT_MAX_CONNECTIONS, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_MAX_STATELESS_RESETS: { + __proto__: null, value: DEFAULT_MAX_STATELESS_RESETS, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_MAX_SOCKETADDRESS_LRU_SIZE: { + __proto__: null, value: DEFAULT_MAX_SOCKETADDRESS_LRU_SIZE, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_MAX_RETRY_LIMIT: { + __proto__: null, value: DEFAULT_MAX_RETRY_LIMIT, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_UNACKNOWLEDGED_PACKET_THRESHOLD: { + __proto__: null, value: DEFAULT_UNACKNOWLEDGED_PACKET_THRESHOLD, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_CIPHERS: { + __proto__: null, value: DEFAULT_CIPHERS, enumerable: true, configurable: false, }, /** @type {number} */ DEFAULT_GROUPS: { + __proto__: null, value: DEFAULT_GROUPS, enumerable: true, configurable: false, }, CongestionControlAlgorithm: { + __proto__: null, value: CongestionControlAlgorithm, enumerable: true, configurable: false, }, TransportErrors: { + __proto__: null, value: TransportErrors, enumerable: true, configurable: false, }, Http3Errors: { + __proto__: null, value: Http3Errors, enumerable: true, configurable: false, }, PreferredAddressStrategy: { + __proto__: null, value: PreferredAddressStrategy, enumerable: true, configurable: false, }, Direction: { + __proto__: null, value: Direction, enumerable: true, configurable: false, }, Side: { + __proto__: null, value: Side, enumerable: true, configurable: false, }, StreamPriority: { + __proto__: null, value: StreamPriority, enumerable: true, configurable: false, }, StreamPriorityFlags: { + __proto__: null, value: StreamPriorityFlags, enumerable: true, configurable: false, @@ -3604,41 +3677,49 @@ defineEventHandler(Endpoint.prototype, 'session'); // Exports module.exports = ObjectCreate(null, { constants: { + __proto__: null, value: constants, enumerable: true, configurable: false, }, EndpointOptions: { + __proto__: null, value: EndpointOptions, enumerable: true, configurable: false, }, SessionOptions: { + __proto__: null, value: SessionOptions, enumerable: true, configurable: false, }, Endpoint: { + __proto__: null, value: Endpoint, enumerable: true, configurable: false, }, ArrayBufferViewSource: { + __proto__: null, value: ArrayBufferViewSource, enumerable: true, configurable: false, }, StreamSource: { + __proto__: null, value: StreamSource, enumerable: true, configurable: false, }, StreamBaseSource: { + __proto__: null, value: StreamBaseSource, enumerable: true, configurable: false, }, BlobSource: { + __proto__: null, value: BlobSource, enumerable: true, configurable: false,