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_data_clone_error_string, "_getDataCloneError") \
|
||||||
V(get_shared_array_buffer_id_string, "_getSharedArrayBufferId") \
|
V(get_shared_array_buffer_id_string, "_getSharedArrayBufferId") \
|
||||||
V(gid_string, "gid") \
|
V(gid_string, "gid") \
|
||||||
|
V(h2_string, "h2") \
|
||||||
V(handle_string, "handle") \
|
V(handle_string, "handle") \
|
||||||
V(help_text_string, "helpText") \
|
V(help_text_string, "helpText") \
|
||||||
V(homedir_string, "homedir") \
|
V(homedir_string, "homedir") \
|
||||||
V(host_string, "host") \
|
V(host_string, "host") \
|
||||||
V(hostmaster_string, "hostmaster") \
|
V(hostmaster_string, "hostmaster") \
|
||||||
|
V(http_1_1_string, "http/1.1") \
|
||||||
V(ignore_string, "ignore") \
|
V(ignore_string, "ignore") \
|
||||||
V(infoaccess_string, "infoAccess") \
|
V(infoaccess_string, "infoAccess") \
|
||||||
V(inherit_string, "inherit") \
|
V(inherit_string, "inherit") \
|
||||||
|
@ -65,6 +65,7 @@ using v8::DontDelete;
|
|||||||
using v8::EscapableHandleScope;
|
using v8::EscapableHandleScope;
|
||||||
using v8::Exception;
|
using v8::Exception;
|
||||||
using v8::External;
|
using v8::External;
|
||||||
|
using v8::False;
|
||||||
using v8::Function;
|
using v8::Function;
|
||||||
using v8::FunctionCallback;
|
using v8::FunctionCallback;
|
||||||
using v8::FunctionCallbackInfo;
|
using v8::FunctionCallbackInfo;
|
||||||
@ -2503,11 +2504,20 @@ void SSLWrap<Base>::GetALPNNegotiatedProto(
|
|||||||
|
|
||||||
SSL_get0_alpn_selected(w->ssl_.get(), &alpn_proto, &alpn_proto_len);
|
SSL_get0_alpn_selected(w->ssl_.get(), &alpn_proto, &alpn_proto_len);
|
||||||
|
|
||||||
if (!alpn_proto)
|
Local<Value> result;
|
||||||
return args.GetReturnValue().Set(false);
|
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(
|
args.GetReturnValue().Set(result);
|
||||||
OneByteString(args.GetIsolate(), alpn_proto, alpn_proto_len));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user