SmtpRequestEncoder Class — netty Architecture
Architecture documentation for the SmtpRequestEncoder class in SmtpRequestEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 640fb209_7291_2bea_5631_bccb325c0ab8["SmtpRequestEncoder"] 6262636a_d4ee_3ab0_23c4_7bc4bd0f1493["SmtpRequestEncoder.java"] 640fb209_7291_2bea_5631_bccb325c0ab8 -->|defined in| 6262636a_d4ee_3ab0_23c4_7bc4bd0f1493 b6903b5a_f036_cd9e_d8c5_b0cf8674fcc9["SmtpRequestEncoder()"] 640fb209_7291_2bea_5631_bccb325c0ab8 -->|method| b6903b5a_f036_cd9e_d8c5_b0cf8674fcc9 ef91d52f_e8c2_be61_749b_216cafc2d24e["acceptOutboundMessage()"] 640fb209_7291_2bea_5631_bccb325c0ab8 -->|method| ef91d52f_e8c2_be61_749b_216cafc2d24e bdebf017_c4ec_ab04_d0f6_c9c4ebdfc609["encode()"] 640fb209_7291_2bea_5631_bccb325c0ab8 -->|method| bdebf017_c4ec_ab04_d0f6_c9c4ebdfc609 d5329265_57f0_6eb0_ac33_6964c34ac0bc["writeParameters()"] 640fb209_7291_2bea_5631_bccb325c0ab8 -->|method| d5329265_57f0_6eb0_ac33_6964c34ac0bc
Relationship Graph
Source Code
codec-smtp/src/main/java/io/netty/handler/codec/smtp/SmtpRequestEncoder.java lines 33–121
@UnstableApi
public final class SmtpRequestEncoder extends MessageToMessageEncoder<Object> {
private static final int CRLF_SHORT = ('\r' << 8) | '\n';
private static final byte SP = ' ';
private static final ByteBuf DOT_CRLF_BUFFER = LeakPresenceDetector.staticInitializer(() ->
Unpooled.unreleasableBuffer(Unpooled.directBuffer(3)
.writeByte('.').writeByte('\r').writeByte('\n')).asReadOnly());
private boolean contentExpected;
public SmtpRequestEncoder() {
super(Object.class);
}
@Override
public boolean acceptOutboundMessage(Object msg) throws Exception {
return msg instanceof SmtpRequest || msg instanceof SmtpContent;
}
@Override
protected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
if (msg instanceof SmtpRequest) {
final SmtpRequest req = (SmtpRequest) msg;
if (contentExpected) {
if (req.command().equals(SmtpCommand.RSET)) {
contentExpected = false;
} else {
throw new IllegalStateException("SmtpContent expected");
}
}
boolean release = true;
final ByteBuf buffer = ctx.alloc().buffer();
try {
req.command().encode(buffer);
boolean notEmpty = req.command() != SmtpCommand.EMPTY;
writeParameters(req.parameters(), buffer, notEmpty);
ByteBufUtil.writeShortBE(buffer, CRLF_SHORT);
out.add(buffer);
release = false;
if (req.command().isContentExpected()) {
contentExpected = true;
}
} finally {
if (release) {
buffer.release();
}
}
}
if (msg instanceof SmtpContent) {
if (!contentExpected) {
throw new IllegalStateException("No SmtpContent expected");
}
final ByteBuf content = ((SmtpContent) msg).content();
out.add(content.retain());
if (msg instanceof LastSmtpContent) {
out.add(DOT_CRLF_BUFFER.retainedDuplicate());
contentExpected = false;
}
}
}
private static void writeParameters(List<CharSequence> parameters, ByteBuf out, boolean commandNotEmpty) {
if (parameters.isEmpty()) {
return;
}
if (commandNotEmpty) {
out.writeByte(SP);
}
if (parameters instanceof RandomAccess) {
final int sizeMinusOne = parameters.size() - 1;
for (int i = 0; i < sizeMinusOne; i++) {
ByteBufUtil.writeAscii(out, parameters.get(i));
out.writeByte(SP);
}
ByteBufUtil.writeAscii(out, parameters.get(sizeMinusOne));
} else {
final Iterator<CharSequence> params = parameters.iterator();
for (;;) {
ByteBufUtil.writeAscii(out, params.next());
if (params.hasNext()) {
Source
Frequently Asked Questions
What is the SmtpRequestEncoder class?
SmtpRequestEncoder is a class in the netty codebase, defined in codec-smtp/src/main/java/io/netty/handler/codec/smtp/SmtpRequestEncoder.java.
Where is SmtpRequestEncoder defined?
SmtpRequestEncoder is defined in codec-smtp/src/main/java/io/netty/handler/codec/smtp/SmtpRequestEncoder.java at line 33.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free