(client, socket)
| 7107 | HTTP2_HEADER_CONTENT_LENGTH, |
| 7108 | HTTP2_HEADER_EXPECT, |
| 7109 | HTTP2_HEADER_STATUS |
| 7110 | } |
| 7111 | } = http2; |
| 7112 | function parseH2Headers(headers) { |
| 7113 | const result = []; |
| 7114 | for (const [name, value] of Object.entries(headers)) { |
| 7115 | if (Array.isArray(value)) { |
| 7116 | for (const subvalue of value) { |
| 7117 | result.push(Buffer.from(name), Buffer.from(subvalue)); |
| 7118 | } |
| 7119 | } else { |
| 7120 | result.push(Buffer.from(name), Buffer.from(value)); |
| 7121 | } |
| 7122 | } |
| 7123 | return result; |
| 7124 | } |
| 7125 | function connectH2(client, socket) { |
| 7126 | return __async(this, null, function* () { |
| 7127 | client[kSocket] = socket; |
| 7128 | if (!h2ExperimentalWarned) { |
| 7129 | h2ExperimentalWarned = true; |
| 7130 | process.emitWarning("H2 support is experimental, expect them to change at any time.", { |
| 7131 | code: "UNDICI-H2" |
| 7132 | }); |
| 7133 | } |
| 7134 | const session = http2.connect(client[kUrl], { |
| 7135 | createConnection: () => socket, |
| 7136 | peerMaxConcurrentStreams: client[kMaxConcurrentStreams] |
| 7137 | }); |
| 7138 | session[kOpenStreams] = 0; |
| 7139 | session[kClient] = client; |
| 7140 | session[kSocket] = socket; |
| 7141 | util.addListener(session, "error", onHttp2SessionError); |
| 7142 | util.addListener(session, "frameError", onHttp2FrameError); |
| 7143 | util.addListener(session, "end", onHttp2SessionEnd); |
| 7144 | util.addListener(session, "goaway", onHTTP2GoAway); |
| 7145 | util.addListener(session, "close", function() { |
| 7146 | const { [kClient]: client2 } = this; |
| 7147 | const { [kSocket]: socket2 } = client2; |
| 7148 | const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); |
| 7149 | client2[kHTTP2Session] = null; |
| 7150 | if (client2.destroyed) { |
| 7151 | assert(client2[kPending] === 0); |
| 7152 | const requests = client2[kQueue].splice(client2[kRunningIdx]); |
| 7153 | for (let i = 0; i < requests.length; i++) { |
| 7154 | const request = requests[i]; |
| 7155 | util.errorRequest(client2, request, err); |
| 7156 | } |
| 7157 | } |
| 7158 | }); |
| 7159 | session.unref(); |
| 7160 | client[kHTTP2Session] = session; |
| 7161 | socket[kHTTP2Session] = session; |
| 7162 | util.addListener(socket, "error", function(err) { |
| 7163 | assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); |
| 7164 | this[kError] = err; |
| 7165 | this[kClient][kOnError](err); |
| 7166 | }); |
no test coverage detected