Home / Function/ connectNow() — netty Function Reference

connectNow() — netty Function Reference

Architecture documentation for the connectNow() function in QuicheQuicChannel.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4["connectNow()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7["QuicheQuicChannel"]
  4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4 -->|defined in| 3c534d05_bb5b_c991_5e03_7ec94e739cf7
  7e530031_1fc0_9db2_5da3_39f49817a6b6["failConnectPromiseAndThrow()"]
  4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4 -->|calls| 7e530031_1fc0_9db2_5da3_39f49817a6b6
  f6e857b5_5d30_f085_30c4_531d4e875782["attachQuicheConnection()"]
  4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4 -->|calls| f6e857b5_5d30_f085_30c4_531d4e875782
  style 4a98ac7e_20ab_0b82_c3e4_c1bf190a70c4 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java lines 330–390

    void connectNow(Function<QuicChannel, ? extends QuicSslEngine> engineProvider, Executor sslTaskExecutor,
                    Consumer<QuicheQuicChannel> freeTask, long configAddr, int localConnIdLength,
                    boolean supportsDatagram, ByteBuffer fromSockaddrMemory, ByteBuffer toSockaddrMemory)
            throws Exception {
        assert this.connection == null;
        assert this.traceId == null;
        assert this.sourceConnectionIds.isEmpty();

        this.sslTaskExecutor = sslTaskExecutor;
        this.freeTask = freeTask;

        QuicConnectionAddress address = this.connectAddress;

        if (address == QuicConnectionAddress.EPHEMERAL) {
            address = QuicConnectionAddress.random(localConnIdLength);
        }
        ByteBuffer connectId = address.id();
        if (connectId.remaining() != localConnIdLength) {
            failConnectPromiseAndThrow(new IllegalArgumentException("connectionAddress has length "
                    + connectId.remaining()
                    + " instead of " + localConnIdLength));
        }
        QuicSslEngine engine = engineProvider.apply(this);
        if (!(engine instanceof QuicheQuicSslEngine)) {
            failConnectPromiseAndThrow(new IllegalArgumentException("QuicSslEngine is not of type "
                    + QuicheQuicSslEngine.class.getSimpleName()));
            return;
        }
        if (!engine.getUseClientMode()) {
            failConnectPromiseAndThrow(new IllegalArgumentException("QuicSslEngine is not create in client mode"));
        }
        QuicheQuicSslEngine quicheEngine = (QuicheQuicSslEngine) engine;
        ByteBuf idBuffer = alloc().directBuffer(connectId.remaining()).writeBytes(connectId.duplicate());
        try {
            int fromSockaddrLen = SockaddrIn.setAddress(fromSockaddrMemory, local);
            int toSockaddrLen = SockaddrIn.setAddress(toSockaddrMemory, remote);
            QuicheQuicConnection connection = quicheEngine.createConnection(ssl ->
                    Quiche.quiche_conn_new_with_tls(Quiche.readerMemoryAddress(idBuffer),
                            idBuffer.readableBytes(), -1, -1,
                            Quiche.memoryAddressWithPosition(fromSockaddrMemory), fromSockaddrLen,
                            Quiche.memoryAddressWithPosition(toSockaddrMemory), toSockaddrLen,
                            configAddr, ssl, false));
            if (connection == null) {
                failConnectPromiseAndThrow(new ConnectException());
                return;
            }
            attachQuicheConnection(connection);
            QuicClientSessionCache sessionCache = quicheEngine.ctx.getSessionCache();
            if (sessionCache != null) {
                byte[] sessionBytes = sessionCache
                        .getSession(quicheEngine.getSession().getPeerHost(), quicheEngine.getSession().getPeerPort());
                if (sessionBytes != null) {
                    Quiche.quiche_conn_set_session(connection.address(), sessionBytes);
                }
            }
            this.supportsDatagram = supportsDatagram;
            sourceConnectionIds.add(connectId);
        } finally {
            idBuffer.release();
        }
    }

Domain

Subdomains

Frequently Asked Questions

What does connectNow() do?
connectNow() is a function in the netty codebase, defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java.
Where is connectNow() defined?
connectNow() is defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java at line 330.
What does connectNow() call?
connectNow() calls 2 function(s): attachQuicheConnection, failConnectPromiseAndThrow.

Analyze Your Own Codebase

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

Try Supermodel Free