Sha256: 4e5531325fa69784183424a639f9b9e238fe7a122554109b7b66e9aff8885471

Contents?: true

Size: 1.39 KB

Versions: 20

Compression:

Stored size: 1.39 KB

Contents

module RubySMB
  module SMB1
    # Represents the DataBlock portion of an SMB1 Packet. The DataBlock will
    # always contain a byte_count field that gives the size of the rest of
    # the data block in bytes.
    class DataBlock < BinData::Record
      endian :little

      uint16 :byte_count, label: 'Byte Count', initial_value: -> { calculate_byte_count }

      # Class method to stub byte count calculation during
      # lazy evaluation.
      #
      # @return [Integer] will always return 0
      def self.calculate_byte_count
        0
      end

      # Returns the name of all fields, other than byte_count, in
      # the DataBlock as symbols.
      #
      # @return [Array<Symbol>] the names of all other DataBlock fields
      def self.data_fields
        fields = self.fields.collect(&:name)
        fields.reject { |field| field == :byte_count }
      end

      # Calculates the size of the other fields in the DataBlock
      # in Bytes.
      #
      # @return [Integer] The size of the DataBlock in Words
      def calculate_byte_count
        total_count = 0
        self.class.data_fields.each do |field_name|
          next unless field_enabled?(field_name)
          field_value = send(field_name)
          total_count += field_value.do_num_bytes
        end
        total_count
      end

      def field_enabled?(field_name)
        send("#{field_name}?".to_sym)
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
ruby_smb-3.3.13 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.12 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.11 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.10 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.9 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.7 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.6 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.5 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.4 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.3 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.2 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.1 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.3.0 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.8 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.7 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.6 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.5 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.4 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.3 lib/ruby_smb/smb1/data_block.rb
ruby_smb-3.2.2 lib/ruby_smb/smb1/data_block.rb