All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.pkts.packet.sctp.impl.SctpDataChunkImpl Maven / Gradle / Ivy

package io.pkts.packet.sctp.impl;

import io.pkts.buffer.Buffer;
import io.pkts.buffer.Buffers;
import io.pkts.packet.sctp.SctpDataChunk;

import static io.pkts.packet.PreConditions.assertNotNull;

public class SctpDataChunkImpl extends DelegatingSctpChunk implements SctpDataChunk {

    public static final SctpDataChunk of(final DefaultSctpChunk chunk) {
        assertNotNull(chunk, "The chunk we are wrapping cannot be null");
        return new SctpDataChunkImpl(chunk);
    }

    private final Buffer dataHeader;
    private final Buffer payload;

    private SctpDataChunkImpl(final DefaultSctpChunk chunk) {
        super(chunk);
        final Buffer header = chunk.getHeader();
        final Buffer value = chunk.getValue();
        final Buffer remainingDataHeader = value.slice(12);
        payload = value.slice(12, value.capacity());
        dataHeader = Buffers.wrap(header, remainingDataHeader);
    }

    @Override
    public Buffer getHeader() {
        return dataHeader;
    }

    @Override
    public boolean isUnordered() {
        return dataHeader.getBit2(1);
    }

    @Override
    public boolean isBeginningFragment() {
        return dataHeader.getBit1(1);
    }

    @Override
    public boolean isEndingFragment() {
        return dataHeader.getBit0(1);
    }

    @Override
    public boolean isImmediate() {
        return dataHeader.getBit3(1);
    }

    @Override
    public long getTransmissionSequenceNumber() {
        return dataHeader.getUnsignedInt(4);
    }

    @Override
    public int getStreamIdentifier() {
        return dataHeader.getUnsignedShort(8);
    }

    @Override
    public int getStreamSequenceNumber() {
        return dataHeader.getUnsignedShort(10);
    }

    @Override
    public long getPayloadProtocolIdentifier() {
        return dataHeader.getUnsignedInt(12);
    }

    @Override
    public Buffer getUserData() {
        return payload;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy