lib/packetgen/header/ipv6/hop_by_hop.rb in packetgen-2.6.0 vs lib/packetgen/header/ipv6/hop_by_hop.rb in packetgen-2.7.0

- old
+ new

@@ -13,11 +13,11 @@ class Option < Types::TLV # Known option types TYPES = { 1 => 'padn', 5 => 'router_alert' - } + }.freeze # @return [String] def to_human case type when 1 @@ -25,11 +25,11 @@ else "#{human_type}(#{value.to_s.inspect})" end end end - + # Special option pad1, for {HopByHop} IPv6 extension header # @author Sylvain Daubert class Pad1 < Types::Fields # @!attribute pad # @return [Integer] @@ -38,11 +38,11 @@ # @return [String] def to_human 'pad1' end end - + # Array of {Option}, for {HopByHop} IPv6 extension header # @author Sylvain Daubert class Options < Types::Array set_of Option @@ -52,35 +52,35 @@ def read(str) clear return self if str.nil? force_binary str klass = self.class.class_eval { @klass } - while str.length > 0 + until str.empty? obj = klass.new.read(str) - if obj.type == 0 - obj = Pad1.new.read(str) - end + 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 % 8 + case (str.size + 2) % 8 when 0 return str when 7 # only on byte needed: use pad1 option + self << Pad1.new str << [0].pack('C') else # use padn option - len = 8 - (str.size % 8) - 4 + len = 8 - 2 - (str.size % 8) - 2 padn = Option.new(type: 'padn', value: "\x00" * len) + self << padn str << padn.to_s end str end end @@ -125,10 +125,10 @@ self[:body].read str[real_length..-1] self end end end - + self.add_class IPv6::HopByHop - IPv6.bind_header IPv6::HopByHop, next: 0 + IPv6.bind IPv6::HopByHop, next: 0 end end