Home / Function/ newSourceConnectionIds() — netty Function Reference

newSourceConnectionIds() — netty Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  12fa3b68_95c9_8824_9520_27f880d81ef1["newSourceConnectionIds()"]
  3c534d05_bb5b_c991_5e03_7ec94e739cf7["QuicheQuicChannel"]
  12fa3b68_95c9_8824_9520_27f880d81ef1 -->|defined in| 3c534d05_bb5b_c991_5e03_7ec94e739cf7
  de1c520b_12fb_3e4b_dbc1_4bb0714a7696["connectionSendAndFlush()"]
  12fa3b68_95c9_8824_9520_27f880d81ef1 -->|calls| de1c520b_12fb_3e4b_dbc1_4bb0714a7696
  style 12fa3b68_95c9_8824_9520_27f880d81ef1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java lines 1004–1054

    List<ByteBuffer> newSourceConnectionIds() {
        if (connectionIdAddressGenerator != null && resetTokenGenerator != null) {
            QuicheQuicConnection connection = this.connection;
            if (connection == null || connection.isFreed()) {
                return Collections.emptyList();
            }
            long connAddr = connection.address();
            // Generate all extra source ids that we can provide. This will cause frames that need to be sent. Which
            // is the reason why we might need to call connectionSendAndFlush().
            int left = Quiche.quiche_conn_scids_left(connAddr);
            if (left > 0) {
                QuicConnectionAddress sourceAddr = connection.sourceId();
                if (sourceAddr == null) {
                    return Collections.emptyList();
                }
                List<ByteBuffer> generatedIds = new ArrayList<>(left);
                boolean sendAndFlush = false;
                ByteBuffer key = sourceAddr.id();
                ByteBuf connIdBuffer = alloc().directBuffer(key.remaining());

                byte[] resetTokenArray = new byte[Quic.RESET_TOKEN_LEN];
                try {
                    do {
                        ByteBuffer srcId = connectionIdAddressGenerator.newId(key.duplicate(), key.remaining())
                                .asReadOnlyBuffer();
                        connIdBuffer.clear();
                        connIdBuffer.writeBytes(srcId.duplicate());
                        ByteBuffer resetToken = resetTokenGenerator.newResetToken(srcId.duplicate());
                        resetToken.get(resetTokenArray);
                        long result = Quiche.quiche_conn_new_scid(
                                connAddr, Quiche.memoryAddress(connIdBuffer, 0, connIdBuffer.readableBytes()),
                                connIdBuffer.readableBytes(), resetTokenArray, false, -1);
                        if (result < 0) {
                            break;
                        }
                        sendAndFlush = true;
                        generatedIds.add(srcId.duplicate());
                        sourceConnectionIds.add(srcId);
                    } while (--left > 0);
                } finally {
                    connIdBuffer.release();
                }

                if (sendAndFlush) {
                    connectionSendAndFlush();
                }
                return generatedIds;
            }
        }
        return Collections.emptyList();
    }

Domain

Subdomains

Frequently Asked Questions

What does newSourceConnectionIds() do?
newSourceConnectionIds() is a function in the netty codebase, defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java.
Where is newSourceConnectionIds() defined?
newSourceConnectionIds() is defined in codec-classes-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java at line 1004.
What does newSourceConnectionIds() call?
newSourceConnectionIds() calls 1 function(s): connectionSendAndFlush.

Analyze Your Own Codebase

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

Try Supermodel Free