Sha256: f59bd8c59e1fa656f58c6d0e76dd6e95e88095c10416cebd3721ff5577464297

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

module PacketGen
  module Header

    # Mixin for various headers
    # @author Sylvain Daubert
    module HeaderMethods

      # @api private
      # Set reference of packet which owns this header
      # @param [Packet] packet
      # @return [void]
      def packet=(packet)
        @packet = packet
      end

      # @api private
      # Get rference on packet which owns this header
      # @return [Packet]
      def packet
        @packet
      end

      # @api private
      # Get +header+ id in packet headers array
      # @param [Header] header
      # @return [Integer]
      # @raise FormatError +header+ not in a packet
      def header_id(header)
        raise FormatError, "header of type #{header.class} not in a packet" if packet.nil?
        id = packet.headers.index(header)
        if id.nil?
          raise FormatError, "header of type #{header.class} not in packet #{packet}"
        end
        id
      end

      # @api private
      # Get IP or IPv6 previous header from +header+
      # @param [Header] header
      # @return [Header]
      # @raise FormatError no IP or IPv6 header previous +header+ in packet
      # @raise FormatError +header+ not in a packet
      def ip_header(header)
        hid = header_id(header)
        iph = packet.headers[0...hid].reverse.find { |h| h.is_a? IP or h.is_a? IPv6 }
        raise FormatError, 'no IP or IPv6 header in packet' if iph.nil?
        iph
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
packetgen-0.3.0 lib/packetgen/header/header_methods.rb
packetgen-0.2.0 lib/packetgen/header/header_methods.rb