// 
// Decompiled by Procyon v0.6.0
// 

package io.netty.handler.ssl;

import io.netty.util.internal.PlatformDependent;
import java.security.AccessController;
import javax.net.ssl.SSLParameters;
import java.lang.invoke.MethodType;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandle;

final class OpenSslParametersUtil
{
    private static final MethodHandle GET_NAMED_GROUPS;
    private static final MethodHandle SET_NAMED_GROUPS;
    
    private static MethodHandle obtainHandle(final MethodHandles.Lookup lookup, final String methodName, final MethodType type) {
        return AccessController.doPrivileged(() -> {
            try {
                return lookup.findVirtual(SSLParameters.class, methodName, type);
            }
            catch (final UnsupportedOperationException | SecurityException | NoSuchMethodException | IllegalAccessException e) {
                return null;
            }
        });
    }
    
    static String[] getNamesGroups(final SSLParameters parameters) {
        if (OpenSslParametersUtil.GET_NAMED_GROUPS == null) {
            return null;
        }
        try {
            return OpenSslParametersUtil.GET_NAMED_GROUPS.invoke(parameters);
        }
        catch (final Throwable t) {
            return null;
        }
    }
    
    static void setNamesGroups(final SSLParameters parameters, final String[] names) {
        if (OpenSslParametersUtil.SET_NAMED_GROUPS == null) {
            return;
        }
        try {
            OpenSslParametersUtil.SET_NAMED_GROUPS.invoke(parameters, names);
        }
        catch (final Throwable t) {}
    }
    
    private OpenSslParametersUtil() {
    }
    
    static {
        MethodHandle getNamedGroups = null;
        MethodHandle setNamedGroups = null;
        if (PlatformDependent.javaVersion() >= 20) {
            final MethodHandles.Lookup lookup = MethodHandles.lookup();
            getNamedGroups = obtainHandle(lookup, "getNamedGroups", MethodType.methodType(String[].class));
            setNamedGroups = obtainHandle(lookup, "setNamedGroups", MethodType.methodType(Void.TYPE, String[].class));
        }
        GET_NAMED_GROUPS = getNamedGroups;
        SET_NAMED_GROUPS = setNamedGroups;
    }
}
