lib/packetgen/header/ipv6/hop_by_hop.rb in packetgen-2.8.7 vs lib/packetgen/header/ipv6/hop_by_hop.rb in packetgen-3.0.0

- old
+ new

@@ -44,27 +44,10 @@ # Array of {Option}, for {HopByHop} IPv6 extension header # @author Sylvain Daubert class Options < Types::Array set_of Option - # Populate object from a binary string - # @param [String] str - # @return [self] - def read(str) - clear - return self if str.nil? - force_binary str - klass = self.class.class_eval { @klass } - until str.empty? - obj = klass.new.read(str) - obj = Pad1.new.read(str) if obj.type.zero? - self.push obj - str.slice!(0, obj.sz) - end - self - end - # Get options as a binary string. Add padding if needed. # @return [String] def to_s str = super case (str.size + 2) % 8 @@ -81,10 +64,16 @@ self << padn str << padn.to_s end str end + + private + + def real_type(opt) + opt.type.zero? ? Pad1 : opt.class + end end # Hop-by-hop IPv6 extension # # 0 1 2 3 @@ -109,23 +98,10 @@ # redefine options field remove_field :options # @!attribute options # Specific options of extension header # @return [Options] - define_field_before :body, :options, Options - - # Populate object from a binary string - # @param [String] str - # @return [self] - def read(str) - return self if str.nil? - force_binary str - self[:next].read str[0, 1] - self[:length].read str[1, 1] - self[:options].read str[2, real_length - 2] - self[:body].read str[real_length..-1] - self - end + define_field_before :body, :options, Options, builder: ->(h, t) { t.new(length_from: -> { h.real_length - 2} ) } end end self.add_class IPv6::HopByHop IPv6.bind IPv6::HopByHop, next: 0