src: deduplicate SetALPN
implementations
Instead of accepting either a std::string or a mysterious Local<Value>, accept any std::string_view, which can trivially be constructed from both strings and ArrayBufferViews. This also removes the need to check IsArrayBufferView() inside of SetALPN, which was dead code anyway. PR-URL: https://github.com/nodejs/node/pull/43756 Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
This commit is contained in:
parent
cc7d4ab493
commit
859967afec
@ -26,7 +26,6 @@ namespace node {
|
|||||||
|
|
||||||
using v8::Array;
|
using v8::Array;
|
||||||
using v8::ArrayBuffer;
|
using v8::ArrayBuffer;
|
||||||
using v8::ArrayBufferView;
|
|
||||||
using v8::BackingStore;
|
using v8::BackingStore;
|
||||||
using v8::Context;
|
using v8::Context;
|
||||||
using v8::EscapableHandleScope;
|
using v8::EscapableHandleScope;
|
||||||
@ -87,18 +86,10 @@ void LogSecret(
|
|||||||
keylog_cb(ssl.get(), line.c_str());
|
keylog_cb(ssl.get(), line.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetALPN(const SSLPointer& ssl, const std::string& alpn) {
|
bool SetALPN(const SSLPointer& ssl, std::string_view alpn) {
|
||||||
return SSL_set_alpn_protos(
|
return SSL_set_alpn_protos(ssl.get(),
|
||||||
ssl.get(),
|
reinterpret_cast<const uint8_t*>(alpn.data()),
|
||||||
reinterpret_cast<const uint8_t*>(alpn.c_str()),
|
alpn.length()) == 0;
|
||||||
alpn.length()) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SetALPN(const SSLPointer& ssl, Local<Value> alpn) {
|
|
||||||
if (!alpn->IsArrayBufferView())
|
|
||||||
return false;
|
|
||||||
ArrayBufferViewContents<unsigned char> protos(alpn.As<ArrayBufferView>());
|
|
||||||
return SSL_set_alpn_protos(ssl.get(), protos.data(), protos.length()) == 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MaybeLocal<Value> GetSSLOCSPResponse(
|
MaybeLocal<Value> GetSSLOCSPResponse(
|
||||||
|
@ -33,9 +33,8 @@ void LogSecret(
|
|||||||
const unsigned char* secret,
|
const unsigned char* secret,
|
||||||
size_t secretlen);
|
size_t secretlen);
|
||||||
|
|
||||||
bool SetALPN(const SSLPointer& ssl, const std::string& alpn);
|
// TODO(tniessen): use std::u8string_view when we switch to C++20.
|
||||||
|
bool SetALPN(const SSLPointer& ssl, std::string_view alpn);
|
||||||
bool SetALPN(const SSLPointer& ssl, v8::Local<v8::Value> alpn);
|
|
||||||
|
|
||||||
v8::MaybeLocal<v8::Value> GetSSLOCSPResponse(
|
v8::MaybeLocal<v8::Value> GetSSLOCSPResponse(
|
||||||
Environment* env,
|
Environment* env,
|
||||||
|
@ -1530,7 +1530,8 @@ void TLSWrap::SetALPNProtocols(const FunctionCallbackInfo<Value>& args) {
|
|||||||
return env->ThrowTypeError("Must give a Buffer as first argument");
|
return env->ThrowTypeError("Must give a Buffer as first argument");
|
||||||
|
|
||||||
if (w->is_client()) {
|
if (w->is_client()) {
|
||||||
CHECK(SetALPN(w->ssl_, args[0]));
|
ArrayBufferViewContents<char> protos(args[0].As<ArrayBufferView>());
|
||||||
|
CHECK(SetALPN(w->ssl_, {protos.data(), protos.length()}));
|
||||||
} else {
|
} else {
|
||||||
CHECK(
|
CHECK(
|
||||||
w->object()->SetPrivate(
|
w->object()->SetPrivate(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user