Sha256: 4b0fad06e47887af1cccf24afe77634716aca7e5f6cf44ef3607ce67722a4b2d

Contents?: true

Size: 1.97 KB

Versions: 30

Compression:

Stored size: 1.97 KB

Contents

module RubySMB
  module SMB1
    module Packet
      # A SMB1 SMB_COM_READ_ANDX Response Packet as defined in
      # [2.2.4.42.2 Response](https://msdn.microsoft.com/en-us/library/ee441872.aspx)
      # [2.2.4.2.2 Server Response Extensions](https://msdn.microsoft.com/en-us/library/ff470017.aspx)
      class ReadAndxResponse < RubySMB::GenericPacket
        COMMAND = RubySMB::SMB1::Commands::SMB_COM_READ_ANDX

        # A SMB1 Parameter Block as defined by the {ReadAndxResponse}
        class ParameterBlock < RubySMB::SMB1::ParameterBlock
          endian :little
          and_x_block :andx_block
          uint16      :available,            label: 'Available'
          uint16      :data_compaction_mode, label: 'Data Compaction Mode', initial_value: 0x0000
          uint16      :reserved,             label: 'Reserved'
          uint16      :data_length,          label: 'Data Length'
          uint16      :data_offset,          label: 'Data Offset'
          uint16      :data_length_high,     label: 'Data Length High'
          uint64      :reserved2,            label: 'Reserved'
        end

        # Represents the specific layout of the DataBlock for a {ReadAndxResponse} Packet.
        class DataBlock < RubySMB::SMB1::DataBlock
          uint8  :pad,  label: 'Pad',  onlyif: :has_padding?
          string :data, label: 'Data', read_length: -> { parent.parameter_block.data_length }

          # This method checks if the optional pad field is present.
          def has_padding?
            bc = byte_count.clear? ? 0 : byte_count  # work around infinite recursion
            return false if bc == 0
            return true if bc - parent.parameter_block.data_length == 1
            false
          end
          private :has_padding?
        end

        smb_header        :smb_header
        parameter_block   :parameter_block
        data_block        :data_block

        def initialize_instance
          super
          smb_header.flags.reply = 1
        end
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

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