class Mu::Pcap::SCTP::Chunk

Attributes

flags[RW]
size[RW]
type[RW]

Public Class Methods

dummy_chunk(type, flags, size, bytes) click to toggle source
# File lib/woolen_common/pcap/mu/pcap/sctp/chunk.rb, line 102
def self.dummy_chunk type, flags, size, bytes
    # Create new dummy chunk
    chunk = Chunk.new
    chunk.type = type
    chunk.flags = flags
    chunk.size = size

    # Save the payload
    chunk.payload_raw = chunk.payload = bytes[4..chunk.padded_size]

    # Return the result
    return chunk
end
from_bytes(bytes) click to toggle source
# File lib/woolen_common/pcap/mu/pcap/sctp/chunk.rb, line 20
def self.from_bytes bytes
    # Basic validation
    Pcap.assert(bytes.length >= 4,
                "Truncated chunk header: 4 > #{bytes.length}")

    # Read chunk header
    type, flags, size = bytes.unpack('CCn')

    # Validate chunk size
    Pcap.assert(bytes.length >= size,
                "Truncated chunk: #{size} set, #{bytes.length} available")

    # Create chunk based on type
    case type
        when CHUNK_DATA
            chunk = Data.from_bytes(flags, size, bytes[4..-1])
        when CHUNK_INIT
            chunk = Init.from_bytes(flags, size, bytes[4..-1])
        when CHUNK_INIT_ACK
            chunk = InitAck.from_bytes(flags, size, bytes[4..-1])
        when CHUNK_SACK
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_HEARTBEAT
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_HEARTBEAT_ACK
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_ABORT
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_SHUTDOWN
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_SHUTDOWN_ACK
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_ERROR
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_COOKIE_ECHO
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_COOKIE_ACK
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_ECNE
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_CWR
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_SHUTDOWN_COMPLETE
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_AUTH
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_ASCONF_ACK
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_PADDING
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_FORWARD_TSN
            chunk = dummy_chunk(type, flags, size, bytes)
        when CHUNK_ASCONF
            chunk = dummy_chunk(type, flags, size, bytes)
        else
            chunk = dummy_chunk(type, flags, size, bytes)
    end

    # Return the result
    return chunk
end
new() click to toggle source
Calls superclass method Mu::Pcap::Packet::new
# File lib/woolen_common/pcap/mu/pcap/sctp/chunk.rb, line 12
def initialize
    super

    @type = 0
    @flags = 0
    @size = 0
end

Public Instance Methods

padded_size() click to toggle source
# File lib/woolen_common/pcap/mu/pcap/sctp/chunk.rb, line 90
def padded_size
    if 0 == @size % 4
        return @size
    else
        return (@size + 4 - (@size % 4))
    end
end
to_s() click to toggle source
# File lib/woolen_common/pcap/mu/pcap/sctp/chunk.rb, line 98
def to_s
    return "chunk(%d, %d, %d)" % [@type, @flags, @size]
end
write(io, ip) click to toggle source
# File lib/woolen_common/pcap/mu/pcap/sctp/chunk.rb, line 82
def write io, ip
    header = [@type, @flags, @size].pack('CCn')

    # Write Chunk header followed by the payload
    io.write(header)
    io.write(@payload_raw)
end