Home / Class/ SctpMessageCompletionHandler Class — netty Architecture

SctpMessageCompletionHandler Class — netty Architecture

Architecture documentation for the SctpMessageCompletionHandler class in SctpMessageCompletionHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  28215e1f_7aab_a28b_0e47_cb1b781b34f0["SctpMessageCompletionHandler"]
  f83d3bc9_b5fc_7268_b415_0688176961e1["SctpMessageCompletionHandler.java"]
  28215e1f_7aab_a28b_0e47_cb1b781b34f0 -->|defined in| f83d3bc9_b5fc_7268_b415_0688176961e1
  eb0876e6_7b3a_99cc_928f_84f9cb0df8e4["SctpMessageCompletionHandler()"]
  28215e1f_7aab_a28b_0e47_cb1b781b34f0 -->|method| eb0876e6_7b3a_99cc_928f_84f9cb0df8e4
  369c6f86_6367_a22a_3265_e670f55943da["decode()"]
  28215e1f_7aab_a28b_0e47_cb1b781b34f0 -->|method| 369c6f86_6367_a22a_3265_e670f55943da
  6abdbd83_3798_c30e_0247_9c56b30fecf0["handlerRemoved()"]
  28215e1f_7aab_a28b_0e47_cb1b781b34f0 -->|method| 6abdbd83_3798_c30e_0247_9c56b30fecf0

Relationship Graph

Source Code

transport-sctp/src/main/java/io/netty/handler/codec/sctp/SctpMessageCompletionHandler.java lines 35–84

public class SctpMessageCompletionHandler extends MessageToMessageDecoder<SctpMessage> {
    private final IntObjectMap<ByteBuf> fragments = new IntObjectHashMap<ByteBuf>();

    public SctpMessageCompletionHandler() {
        super(SctpMessage.class);
    }

    @Override
    protected void decode(ChannelHandlerContext ctx, SctpMessage msg, List<Object> out) throws Exception {
        final ByteBuf byteBuf = msg.content();
        final int protocolIdentifier = msg.protocolIdentifier();
        final int streamIdentifier = msg.streamIdentifier();
        final boolean isComplete = msg.isComplete();
        final boolean isUnordered = msg.isUnordered();

        ByteBuf frag = fragments.remove(streamIdentifier);
        if (frag == null) {
            frag = Unpooled.EMPTY_BUFFER;
        }

        if (isComplete && !frag.isReadable()) {
            //data chunk is not fragmented
            out.add(msg);
        } else if (!isComplete && frag.isReadable()) {
            //more message to complete
            fragments.put(streamIdentifier, Unpooled.wrappedBuffer(frag, byteBuf));
        } else if (isComplete && frag.isReadable()) {
            //last message to complete
            SctpMessage assembledMsg = new SctpMessage(
                    protocolIdentifier,
                    streamIdentifier,
                    isUnordered,
                    Unpooled.wrappedBuffer(frag, byteBuf));
            out.add(assembledMsg);
        } else {
            //first incomplete message
            fragments.put(streamIdentifier, byteBuf);
        }
        byteBuf.retain();
    }

    @Override
    public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
        for (ByteBuf buffer: fragments.values()) {
            buffer.release();
        }
        fragments.clear();
        super.handlerRemoved(ctx);
    }
}

Frequently Asked Questions

What is the SctpMessageCompletionHandler class?
SctpMessageCompletionHandler is a class in the netty codebase, defined in transport-sctp/src/main/java/io/netty/handler/codec/sctp/SctpMessageCompletionHandler.java.
Where is SctpMessageCompletionHandler defined?
SctpMessageCompletionHandler is defined in transport-sctp/src/main/java/io/netty/handler/codec/sctp/SctpMessageCompletionHandler.java at line 35.

Analyze Your Own Codebase

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

Try Supermodel Free