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
Calls
Source
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