Home / Class/ OpenSslCachingKeyMaterialProvider Class — netty Architecture

OpenSslCachingKeyMaterialProvider Class — netty Architecture

Architecture documentation for the OpenSslCachingKeyMaterialProvider class in OpenSslCachingKeyMaterialProvider.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  027fa0d4_ee53_49e1_2f43_14281c068aba["OpenSslCachingKeyMaterialProvider"]
  1d7d42cf_90b5_ed83_955d_121858a9a5ff["OpenSslCachingKeyMaterialProvider.java"]
  027fa0d4_ee53_49e1_2f43_14281c068aba -->|defined in| 1d7d42cf_90b5_ed83_955d_121858a9a5ff
  db781f07_f1c5_7ce3_36ad_68779d448dad["OpenSslCachingKeyMaterialProvider()"]
  027fa0d4_ee53_49e1_2f43_14281c068aba -->|method| db781f07_f1c5_7ce3_36ad_68779d448dad
  39a52764_8b0c_f8e7_cb47_93303efaebc2["OpenSslKeyMaterial()"]
  027fa0d4_ee53_49e1_2f43_14281c068aba -->|method| 39a52764_8b0c_f8e7_cb47_93303efaebc2
  05bd6cca_0bf1_2ac2_47a4_3c35a0508639["destroy()"]
  027fa0d4_ee53_49e1_2f43_14281c068aba -->|method| 05bd6cca_0bf1_2ac2_47a4_3c35a0508639

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/OpenSslCachingKeyMaterialProvider.java lines 29–79

final class OpenSslCachingKeyMaterialProvider extends OpenSslKeyMaterialProvider {

    private final int maxCachedEntries;
    private volatile boolean full;
    private final ConcurrentMap<String, OpenSslKeyMaterial> cache = new ConcurrentHashMap<String, OpenSslKeyMaterial>();

    OpenSslCachingKeyMaterialProvider(X509KeyManager keyManager, String password, int maxCachedEntries) {
        super(keyManager, password);
        this.maxCachedEntries = maxCachedEntries;
    }

    @Override
    OpenSslKeyMaterial chooseKeyMaterial(ByteBufAllocator allocator, String alias) throws Exception {
        OpenSslKeyMaterial material = cache.get(alias);
        if (material == null) {
            material = super.chooseKeyMaterial(allocator, alias);
            if (material == null) {
                // No keymaterial should be used.
                return null;
            }

            if (full) {
                return material;
            }
            if (cache.size() > maxCachedEntries) {
                full = true;
                // Do not cache...
                return material;
            }
            OpenSslKeyMaterial old = cache.putIfAbsent(alias, material);
            if (old != null) {
                material.release();
                material = old;
            }
        }
        // We need to call retain() as we want to always have at least a refCnt() of 1 before destroy() was called.
        return material.retain();
    }

    @Override
    void destroy() {
        // Remove and release all entries.
        do  {
            Iterator<OpenSslKeyMaterial> iterator = cache.values().iterator();
            while (iterator.hasNext()) {
                iterator.next().release();
                iterator.remove();
            }
        } while (!cache.isEmpty());
    }
}

Frequently Asked Questions

What is the OpenSslCachingKeyMaterialProvider class?
OpenSslCachingKeyMaterialProvider is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/OpenSslCachingKeyMaterialProvider.java.
Where is OpenSslCachingKeyMaterialProvider defined?
OpenSslCachingKeyMaterialProvider is defined in handler/src/main/java/io/netty/handler/ssl/OpenSslCachingKeyMaterialProvider.java at line 29.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free