src: micro-optimize ALPN negotiation
99 out of a 100 times (conservative estimate!) the negotiated protocol will be either "h2" or "http/1.1" so reuse an existing JS string for those instead of creating a new one every time. PR-URL: https://github.com/nodejs/node/pull/26836 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
3f41fcbe83
commit
b4f58c2caf
@ -193,11 +193,13 @@ constexpr size_t kFsStatsBufferLength = kFsStatsFieldsNumber * 2;
|
||||
V(get_data_clone_error_string, "_getDataCloneError") \
|
||||
V(get_shared_array_buffer_id_string, "_getSharedArrayBufferId") \
|
||||
V(gid_string, "gid") \
|
||||
V(h2_string, "h2") \
|
||||
V(handle_string, "handle") \
|
||||
V(help_text_string, "helpText") \
|
||||
V(homedir_string, "homedir") \
|
||||
V(host_string, "host") \
|
||||
V(hostmaster_string, "hostmaster") \
|
||||
V(http_1_1_string, "http/1.1") \
|
||||
V(ignore_string, "ignore") \
|
||||
V(infoaccess_string, "infoAccess") \
|
||||
V(inherit_string, "inherit") \
|
||||
|
@ -65,6 +65,7 @@ using v8::DontDelete;
|
||||
using v8::EscapableHandleScope;
|
||||
using v8::Exception;
|
||||
using v8::External;
|
||||
using v8::False;
|
||||
using v8::Function;
|
||||
using v8::FunctionCallback;
|
||||
using v8::FunctionCallbackInfo;
|
||||
@ -2503,11 +2504,20 @@ void SSLWrap<Base>::GetALPNNegotiatedProto(
|
||||
|
||||
SSL_get0_alpn_selected(w->ssl_.get(), &alpn_proto, &alpn_proto_len);
|
||||
|
||||
if (!alpn_proto)
|
||||
return args.GetReturnValue().Set(false);
|
||||
Local<Value> result;
|
||||
if (alpn_proto_len == 0) {
|
||||
result = False(args.GetIsolate());
|
||||
} else if (alpn_proto_len == sizeof("h2") - 1 &&
|
||||
0 == memcmp(alpn_proto, "h2", sizeof("h2") - 1)) {
|
||||
result = w->env()->h2_string();
|
||||
} else if (alpn_proto_len == sizeof("http/1.1") - 1 &&
|
||||
0 == memcmp(alpn_proto, "http/1.1", sizeof("http/1.1") - 1)) {
|
||||
result = w->env()->http_1_1_string();
|
||||
} else {
|
||||
result = OneByteString(args.GetIsolate(), alpn_proto, alpn_proto_len);
|
||||
}
|
||||
|
||||
args.GetReturnValue().Set(
|
||||
OneByteString(args.GetIsolate(), alpn_proto, alpn_proto_len));
|
||||
args.GetReturnValue().Set(result);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user