getEncryptedPacketLength() — netty Function Reference
Architecture documentation for the getEncryptedPacketLength() function in SslUtils.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD b3dfbeee_ea43_2ac2_8456_df612fe27732["getEncryptedPacketLength()"] 8b8e2625_56a3_eef0_1cb3_fa21bb9b476e["SslUtils"] b3dfbeee_ea43_2ac2_8456_df612fe27732 -->|defined in| 8b8e2625_56a3_eef0_1cb3_fa21bb9b476e 24d300d4_d690_6d2a_fdb8_f77f905d267e["unsignedShortBE()"] b3dfbeee_ea43_2ac2_8456_df612fe27732 -->|calls| 24d300d4_d690_6d2a_fdb8_f77f905d267e 580d16b5_ef46_b549_e1a1_e390d8faf580["shortBE()"] b3dfbeee_ea43_2ac2_8456_df612fe27732 -->|calls| 580d16b5_ef46_b549_e1a1_e390d8faf580 6d92eb86_aead_1710_1208_7736eae1c878["unsignedByte()"] b3dfbeee_ea43_2ac2_8456_df612fe27732 -->|calls| 6d92eb86_aead_1710_1208_7736eae1c878 style b3dfbeee_ea43_2ac2_8456_df612fe27732 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
handler/src/main/java/io/netty/handler/ssl/SslUtils.java lines 353–419
static int getEncryptedPacketLength(ByteBuf buffer, int offset, boolean probeSSLv2) {
assert offset >= buffer.readerIndex();
int remaining = buffer.writerIndex() - offset;
if (remaining < SSL_RECORD_HEADER_LENGTH) {
return NOT_ENOUGH_DATA;
}
int packetLength = 0;
// SSLv3 or TLS - Check ContentType
boolean tls;
switch (buffer.getUnsignedByte(offset)) {
case SSL_CONTENT_TYPE_CHANGE_CIPHER_SPEC:
case SSL_CONTENT_TYPE_ALERT:
case SSL_CONTENT_TYPE_HANDSHAKE:
case SSL_CONTENT_TYPE_APPLICATION_DATA:
case SSL_CONTENT_TYPE_EXTENSION_HEARTBEAT:
tls = true;
break;
default:
// SSLv2 or bad data
if (!probeSSLv2) {
return NOT_ENCRYPTED;
}
tls = false;
}
if (tls) {
// SSLv3 or TLS or GMSSLv1.0 or GMSSLv1.1 - Check ProtocolVersion
int majorVersion = buffer.getUnsignedByte(offset + 1);
int version = buffer.getShort(offset + 1);
if (majorVersion == 3 || version == GMSSL_PROTOCOL_VERSION) {
// SSLv3 or TLS or GMSSLv1.0 or GMSSLv1.1
packetLength = unsignedShortBE(buffer, offset + 3) + SSL_RECORD_HEADER_LENGTH;
if (packetLength <= SSL_RECORD_HEADER_LENGTH) {
// Neither SSLv3 or TLSv1 (i.e. SSLv2 or bad data)
tls = false;
}
} else if (version == DTLS_1_0 || version == DTLS_1_2 || version == DTLS_1_3) {
if (remaining < DTLS_RECORD_HEADER_LENGTH) {
return NOT_ENOUGH_DATA;
}
// length is the last 2 bytes in the 13 byte header.
packetLength = unsignedShortBE(buffer, offset + DTLS_RECORD_HEADER_LENGTH - 2) +
DTLS_RECORD_HEADER_LENGTH;
} else {
// Neither SSLv3 or TLSv1 (i.e. SSLv2 or bad data)
tls = false;
}
}
if (!tls) {
// SSLv2 or bad data - Check the version
int headerLength = (buffer.getUnsignedByte(offset) & 0x80) != 0 ? 2 : 3;
int majorVersion = buffer.getUnsignedByte(offset + headerLength + 1);
if (majorVersion == 2 || majorVersion == 3) {
// SSLv2
packetLength = headerLength == 2 ?
(shortBE(buffer, offset) & 0x7FFF) + 2 : (shortBE(buffer, offset) & 0x3FFF) + 3;
if (packetLength <= headerLength) {
// If there's no data then consider this package as not encrypted.
return NOT_ENCRYPTED;
}
} else {
return NOT_ENCRYPTED;
}
}
return packetLength;
}
Domain
Subdomains
Source
Frequently Asked Questions
What does getEncryptedPacketLength() do?
getEncryptedPacketLength() is a function in the netty codebase, defined in handler/src/main/java/io/netty/handler/ssl/SslUtils.java.
Where is getEncryptedPacketLength() defined?
getEncryptedPacketLength() is defined in handler/src/main/java/io/netty/handler/ssl/SslUtils.java at line 353.
What does getEncryptedPacketLength() call?
getEncryptedPacketLength() calls 3 function(s): shortBE, unsignedByte, unsignedShortBE.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free