@@ -314,28 +314,17 @@ bool Set(
314314 return !target->Set (context, name, value).IsNothing ();
315315}
316316
317- MaybeLocal<Value> GetCipherValue (Environment* env,
318- const SSL_CIPHER* cipher,
319- const char * (*getstr)(const SSL_CIPHER* cipher)) {
317+ template <const char * (*getstr)(const SSL_CIPHER* cipher)>
318+ MaybeLocal<Value> GetCipherValue (Environment* env, const SSL_CIPHER* cipher) {
320319 if (cipher == nullptr )
321320 return Undefined (env->isolate ());
322321
323322 return OneByteString (env->isolate (), getstr (cipher));
324323}
325324
326- MaybeLocal<Value> GetCipherName (Environment* env, const SSL_CIPHER* cipher) {
327- return GetCipherValue (env, cipher, SSL_CIPHER_get_name);
328- }
329-
330- MaybeLocal<Value> GetCipherStandardName (
331- Environment* env,
332- const SSL_CIPHER* cipher) {
333- return GetCipherValue (env, cipher, SSL_CIPHER_standard_name);
334- }
335-
336- MaybeLocal<Value> GetCipherVersion (Environment* env, const SSL_CIPHER* cipher) {
337- return GetCipherValue (env, cipher, SSL_CIPHER_get_version);
338- }
325+ constexpr auto GetCipherName = GetCipherValue<SSL_CIPHER_get_name>;
326+ constexpr auto GetCipherStandardName = GetCipherValue<SSL_CIPHER_standard_name>;
327+ constexpr auto GetCipherVersion = GetCipherValue<SSL_CIPHER_get_version>;
339328
340329StackOfX509 CloneSSLCerts (X509Pointer&& cert,
341330 const STACK_OF (X509)* const ssl_certs) {
@@ -1052,18 +1041,10 @@ static MaybeLocal<Value> GetX509NameObject(Environment* env, X509* cert) {
10521041 return result;
10531042}
10541043
1055- MaybeLocal<Value> GetCipherName (Environment* env, const SSLPointer& ssl) {
1056- return GetCipherName (env, SSL_get_current_cipher (ssl.get ()));
1057- }
1058-
1059- MaybeLocal<Value> GetCipherStandardName (
1060- Environment* env,
1061- const SSLPointer& ssl) {
1062- return GetCipherStandardName (env, SSL_get_current_cipher (ssl.get ()));
1063- }
1064-
1065- MaybeLocal<Value> GetCipherVersion (Environment* env, const SSLPointer& ssl) {
1066- return GetCipherVersion (env, SSL_get_current_cipher (ssl.get ()));
1044+ template <MaybeLocal<Value> (*Get)(Environment* env, const SSL_CIPHER* cipher)>
1045+ MaybeLocal<Value> GetCurrentCipherValue (Environment* env,
1046+ const SSLPointer& ssl) {
1047+ return Get (env, SSL_get_current_cipher (ssl.get ()));
10671048}
10681049
10691050MaybeLocal<Array> GetClientHelloCiphers (
@@ -1109,15 +1090,15 @@ MaybeLocal<Object> GetCipherInfo(Environment* env, const SSLPointer& ssl) {
11091090 if (!Set<Value>(env->context (),
11101091 info,
11111092 env->name_string (),
1112- GetCipherName (env, ssl)) ||
1093+ GetCurrentCipherValue< GetCipherName> (env, ssl)) ||
11131094 !Set<Value>(env->context (),
11141095 info,
11151096 env->standard_name_string (),
1116- GetCipherStandardName (env, ssl)) ||
1097+ GetCurrentCipherValue< GetCipherStandardName> (env, ssl)) ||
11171098 !Set<Value>(env->context (),
11181099 info,
11191100 env->version_string (),
1120- GetCipherVersion (env, ssl))) {
1101+ GetCurrentCipherValue< GetCipherVersion> (env, ssl))) {
11211102 return MaybeLocal<Object>();
11221103 }
11231104
0 commit comments