static

in src/main/java/org/apache/commons/crypto/jna/OpenSslNativeJna.java [54:96]


    static {
        OpenSslJna.debug("OpenSslNativeJna static init start");
        final String libraryName = System.getProperty(Crypto.CONF_PREFIX + OpenSslNativeJna.class.getSimpleName(), "crypto");
        OpenSslJna.debug("OpenSslNativeJna NativeLibrary.getInstance('%s')", libraryName);
        @SuppressWarnings("resource") // NativeLibrary.getInstance returns a singleton
        final NativeLibrary crypto = NativeLibrary.getInstance(libraryName);
        OpenSslJna.debug("OpenSslNativeJna NativeLibrary.getInstance('%s') -> %s", libraryName, crypto);
        Function versionFunction = null;
        try {
            versionFunction = crypto.getFunction("SSLeay");
        } catch (final UnsatisfiedLinkError e) {
            versionFunction = crypto.getFunction("OpenSSL_version_num");
        }
        // Must find one of the above two functions; else give up

        VERSION = versionFunction.invokeLong(new Object[]{});
        OpenSslJna.debug(String.format("OpenSslNativeJna detected version 0x%x", VERSION));

        VERSION_X_Y = VERSION & 0xffff0000; // keep only major.minor
        if (VERSION_X_Y == VERSION_1_0_X) {
            OpenSslJna.debug("Creating OpenSsl10XNativeJna");
            JnaImplementation = new OpenSsl10XNativeJna();
        } else if (VERSION_X_Y == VERSION_1_1_X) {
            OpenSslJna.debug("Creating OpenSsl11XNativeJna");
            JnaImplementation = new OpenSsl11XNativeJna();
        } else if (VERSION_X_Y == VERSION_2_0_X) {
            OpenSslJna.debug("Creating OpenSsl20XNativeJna");
            JnaImplementation = new OpenSsl20XNativeJna();
//        } else if (VERSION_X_Y == VERSION_3_0_X) {
//            OpenSslJna.debug("Creating OpenSsl30XNativeJna");
//            JnaImplementation = new OpenSsl30XNativeJna();
        } else {
            // TODO: Throw error?
            OpenSslJna.debug("Creating OpenSsl10XNativeJna");
            JnaImplementation = new OpenSsl10XNativeJna();
        }

        INIT_OK = JnaImplementation._INIT_OK();

        INIT_ERROR = INIT_OK ? null : JnaImplementation._INIT_ERROR();
        OpenSslJna.debug("OpenSslNativeJna INIT_OK = %s, INIT_ERROR = '%s', JnaImplementation = %s", INIT_OK, INIT_ERROR, JnaImplementation.getClass());
        OpenSslJna.debug("OpenSslNativeJna static init end");
    }