lib/packetgen/header/tcp.rb in packetgen-3.1.4 vs lib/packetgen/header/tcp.rb in packetgen-3.1.5
- old
+ new
@@ -119,11 +119,11 @@
# @return [Integer]
define_field :urg_pointer, Types::Int16
# @!attribute options
# TCP options
# @return [Options]
- define_field :options, TCP::Options
+ define_field :options, TCP::Options, builder: ->(h, t) { t.new(length_from: -> { h.data_offset > 5 ? (h.data_offset - 5) * 4 : 0 }) }
# @!attribute body
# @return [Types::String,Header::Base]
define_field :body, Types::String
alias source_port sport
@@ -187,28 +187,9 @@
# @return [Boolean] 1-bit SYN flag
# @!attribute flag_fin
# @return [Boolean] 1-bit FIN flag
define_bit_fields_on :u16, :_, 7, :flag_ns, :flag_cwr, :flag_ece, :flag_urg,
:flag_ack, :flag_psh, :flag_rst, :flag_syn, :flag_fin
- # Read a TCP header from a string
- # @param [String] str binary string
- # @return [self]
- def read(str)
- return self if str.nil?
-
- force_binary str
- self[:sport].read str[0, 2]
- self[:dport].read str[2, 2]
- self[:seqnum].read str[4, 4]
- self[:acknum].read str[8, 4]
- self[:u16].read str[12, 2]
- self[:window].read str[14, 2]
- self[:checksum].read str[16, 2]
- self[:urg_pointer].read str[18, 2]
- self[:options].read str[20, (self.data_offset - 5) * 4] if self.data_offset > 5
- self[:body].read str[self.data_offset * 4..-1]
- self
- end
# Compute checksum and set +checksum+ field
# @return [Integer]
def calc_checksum
sum = ip_header(self).pseudo_header_checksum