Home / Class/ ReferenceCountedOpenSslEngine Class — netty Architecture

ReferenceCountedOpenSslEngine Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  df1ad81e_e5bf_85e6_4418_db301b4c3e66["ReferenceCountedOpenSslEngine"]
  e8cf4c21_519c_af0d_e66f_ef135c52b428["ReferenceCountedOpenSslEngine.java"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|defined in| e8cf4c21_519c_af0d_e66f_ef135c52b428
  597187e9_65f2_df9a_22e3_c3e7eb0f231a["ReferenceCountedOpenSslEngine()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 597187e9_65f2_df9a_22e3_c3e7eb0f231a
  bede7e4a_f60a_d5d6_dac7_80303af46c2c["isValidHostNameForSNI()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| bede7e4a_f60a_d5d6_dac7_80303af46c2c
  268ef7d5_9b7e_7de1_a4eb_d2f586b62055["authMethods()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 268ef7d5_9b7e_7de1_a4eb_d2f586b62055
  21872382_ca9c_9448_747f_139440aa6a06["setKeyMaterial()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 21872382_ca9c_9448_747f_139440aa6a06
  cb3f6eb3_0abf_7682_784c_b61d6436f51e["SecretKeySpec()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| cb3f6eb3_0abf_7682_784c_b61d6436f51e
  6adbdd0d_6373_a49b_5e3b_d39045895f70["isSessionReused()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 6adbdd0d_6373_a49b_5e3b_d39045895f70
  e9c980d1_1882_12af_8d3a_c718bd042740["setOcspResponse()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| e9c980d1_1882_12af_8d3a_c718bd042740
  4fd95670_5e98_9499_df09_140619cd138d["getOcspResponse()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 4fd95670_5e98_9499_df09_140619cd138d
  670b28f9_b49a_8e5f_0f53_3413e19d40f0["refCnt()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 670b28f9_b49a_8e5f_0f53_3413e19d40f0
  eb93f139_2d49_748b_2cb1_202cd5ff3948["ReferenceCounted()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| eb93f139_2d49_748b_2cb1_202cd5ff3948
  62c22963_254e_558e_59f0_10304b0c83d2["release()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 62c22963_254e_558e_59f0_10304b0c83d2
  cd0a05c8_b216_ef8c_2253_a5a3425998d7["String()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| cd0a05c8_b216_ef8c_2253_a5a3425998d7
  50a4b923_0639_a209_0e86_6fa11968efb1["SSLSession()"]
  df1ad81e_e5bf_85e6_4418_db301b4c3e66 -->|method| 50a4b923_0639_a209_0e86_6fa11968efb1

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/ssl/ReferenceCountedOpenSslEngine.java lines 96–2793

public class ReferenceCountedOpenSslEngine extends SSLEngine implements ReferenceCounted, ApplicationProtocolAccessor {

    private static final InternalLogger logger = InternalLoggerFactory.getInstance(ReferenceCountedOpenSslEngine.class);

    private static final ResourceLeakDetector<ReferenceCountedOpenSslEngine> leakDetector =
            ResourceLeakDetectorFactory.instance().newResourceLeakDetector(ReferenceCountedOpenSslEngine.class);
    private static final int OPENSSL_OP_NO_PROTOCOL_INDEX_SSLV2 = 0;
    private static final int OPENSSL_OP_NO_PROTOCOL_INDEX_SSLV3 = 1;
    private static final int OPENSSL_OP_NO_PROTOCOL_INDEX_TLSv1 = 2;
    private static final int OPENSSL_OP_NO_PROTOCOL_INDEX_TLSv1_1 = 3;
    private static final int OPENSSL_OP_NO_PROTOCOL_INDEX_TLSv1_2 = 4;
    private static final int OPENSSL_OP_NO_PROTOCOL_INDEX_TLSv1_3 = 5;
    private static final int[] OPENSSL_OP_NO_PROTOCOLS = {
            SSL.SSL_OP_NO_SSLv2,
            SSL.SSL_OP_NO_SSLv3,
            SSL.SSL_OP_NO_TLSv1,
            SSL.SSL_OP_NO_TLSv1_1,
            SSL.SSL_OP_NO_TLSv1_2,
            SSL.SSL_OP_NO_TLSv1_3
    };

    /**
     * Depends upon tcnative ... only use if tcnative is available!
     */
    static final int MAX_PLAINTEXT_LENGTH = SSL.SSL_MAX_PLAINTEXT_LENGTH;
    /**
     * Depends upon tcnative ... only use if tcnative is available!
     */
    static final int MAX_RECORD_SIZE = SSL.SSL_MAX_RECORD_LENGTH;

    private static final SSLEngineResult NEED_UNWRAP_OK = new SSLEngineResult(OK, NEED_UNWRAP, 0, 0);
    private static final SSLEngineResult NEED_UNWRAP_CLOSED = new SSLEngineResult(CLOSED, NEED_UNWRAP, 0, 0);
    private static final SSLEngineResult NEED_WRAP_OK = new SSLEngineResult(OK, NEED_WRAP, 0, 0);
    private static final SSLEngineResult NEED_WRAP_CLOSED = new SSLEngineResult(CLOSED, NEED_WRAP, 0, 0);
    private static final SSLEngineResult CLOSED_NOT_HANDSHAKING = new SSLEngineResult(CLOSED, NOT_HANDSHAKING, 0, 0);

    // OpenSSL state
    private long ssl;
    private long networkBIO;

    private enum HandshakeState {
        /**
         * Not started yet.
         */
        NOT_STARTED,
        /**
         * Started via unwrap/wrap.
         */
        STARTED_IMPLICITLY,
        /**
         * Started via {@link #beginHandshake()}.
         */
        STARTED_EXPLICITLY,
        /**
         * Handshake is finished.
         */
        FINISHED
    }

    private HandshakeState handshakeState = HandshakeState.NOT_STARTED;
    private boolean receivedShutdown;
    private volatile boolean destroyed;
    private volatile String applicationProtocol;
    private volatile boolean needTask;
    private boolean hasTLSv13Cipher;
    private boolean sessionSet;

    // Reference Counting
    private final ResourceLeakTracker<ReferenceCountedOpenSslEngine> leak;
    private final AbstractReferenceCounted refCnt = new AbstractReferenceCounted() {
        @Override
        public ReferenceCounted touch(Object hint) {
            if (leak != null) {
                leak.record(hint);
            }

            return ReferenceCountedOpenSslEngine.this;
        }

        @Override
        protected void deallocate() {

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free