Home / Class/ DefaultOpenSslSession Class — netty Architecture

DefaultOpenSslSession Class — netty Architecture

Architecture documentation for the DefaultOpenSslSession class in ReferenceCountedOpenSslEngine.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  70581b12_79ee_1937_703d_e9d4631c418e["DefaultOpenSslSession"]
  e8cf4c21_519c_af0d_e66f_ef135c52b428["ReferenceCountedOpenSslEngine.java"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|defined in| e8cf4c21_519c_af0d_e66f_ef135c52b428
  7db95b56_7d68_6c82_5d8a_8cc4d6d4156c["DefaultOpenSslSession()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 7db95b56_7d68_6c82_5d8a_8cc4d6d4156c
  3322025e_579f_b5b5_be14_bd49d0b70335["SSLSessionBindingEvent()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 3322025e_579f_b5b5_be14_bd49d0b70335
  0df93b1e_6ec5_8163_ec8f_ad4169ec0aa3["prepareHandshake()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 0df93b1e_6ec5_8163_ec8f_ad4169ec0aa3
  6ea33493_29cb_2a78_e5c3_fba44fe98971["setSessionDetails()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 6ea33493_29cb_2a78_e5c3_fba44fe98971
  612fc544_b101_5d3a_c33c_f07f573f44a5["keyValueStorage()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 612fc544_b101_5d3a_c33c_f07f573f44a5
  23ebb116_ac2d_3518_355f_85beec7211e7["OpenSslSessionId()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 23ebb116_ac2d_3518_355f_85beec7211e7
  5bfd738f_3448_e7c6_b382_edb87a3c5321["setLocalCertificate()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 5bfd738f_3448_e7c6_b382_edb87a3c5321
  28ba8623_d0ad_96c5_f334_c219f5c0fbe1["getId()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 28ba8623_d0ad_96c5_f334_c219f5c0fbe1
  0d38468c_1095_f167_fa10_00d01b230a70["OpenSslSessionContext()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 0d38468c_1095_f167_fa10_00d01b230a70
  5a7dc011_6418_7fa6_d06f_e0ac3d90a7cb["getCreationTime()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 5a7dc011_6418_7fa6_d06f_e0ac3d90a7cb
  9ebb643a_3027_6df4_0739_674082920624["setLastAccessedTime()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 9ebb643a_3027_6df4_0739_674082920624
  278eee38_3ab3_bcb1_038d_a2a77b0a731e["getLastAccessedTime()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 278eee38_3ab3_bcb1_038d_a2a77b0a731e
  6d96ea60_b093_00e4_d25c_ef64ba482b35["invalidate()"]
  70581b12_79ee_1937_703d_e9d4631c418e -->|method| 6d96ea60_b093_00e4_d25c_ef64ba482b35

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslEngine.java lines 2373–2760

    private final class DefaultOpenSslSession implements OpenSslInternalSession {
        private final OpenSslSessionContext sessionContext;

        // These are guarded by synchronized(OpenSslEngine.this) as handshakeFinished() may be triggered by any
        // thread.
        private X509Certificate[] x509PeerCerts;
        private Certificate[] peerCerts;

        private boolean valid = true;
        private String protocol;
        private String cipher;
        private OpenSslSessionId id = OpenSslSessionId.NULL_ID;
        private long creationTime;

        // Updated once a new handshake is started and so the SSLSession reused.
        private long lastAccessed = -1;

        private volatile int applicationBufferSize = MAX_PLAINTEXT_LENGTH;
        private volatile Certificate[] localCertificateChain;
        private volatile Map<String, Object> keyValueStorage = new ConcurrentHashMap<String, Object>();

        DefaultOpenSslSession(OpenSslSessionContext sessionContext) {
            this.sessionContext = sessionContext;
        }

        private SSLSessionBindingEvent newSSLSessionBindingEvent(String name) {
            return new SSLSessionBindingEvent(session, name);
        }

        @Override
        public void prepareHandshake() {
            keyValueStorage.clear();
        }

        @Override
        public void setSessionDetails(
                long creationTime, long lastAccessedTime, OpenSslSessionId sessionId,
                Map<String, Object> keyValueStorage) {
            synchronized (ReferenceCountedOpenSslEngine.this) {
                if (id == OpenSslSessionId.NULL_ID) {
                    id = sessionId;
                    this.creationTime = creationTime;
                    lastAccessed = lastAccessedTime;

                    // Update the key value storage. It's fine to just drop the previous stored values on the floor
                    // as the JDK does the same in the sense that it will use a new SSLSessionImpl instance once the
                    // handshake was done
                    this.keyValueStorage = keyValueStorage;
                }
            }
        }

        @Override
        public Map<String, Object> keyValueStorage() {
            return keyValueStorage;
        }

        @Override
        public OpenSslSessionId sessionId() {
            synchronized (ReferenceCountedOpenSslEngine.this) {
                if (this.id == OpenSslSessionId.NULL_ID && !destroyed) {
                    byte[] sessionId = SSL.getSessionId(ssl);
                    if (sessionId != null) {
                        id = new OpenSslSessionId(sessionId);
                    }
                }

                return id;
            }
        }

        @Override
        public void setLocalCertificate(Certificate[] localCertificate) {
            localCertificateChain = localCertificate;
        }

        @Override
        public byte[] getId() {
            return sessionId().cloneBytes();
        }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free