Sha256: 152c73f25231008341bcbdcbd39055568306a4d0ff4f44da830915ca78288852

Contents?: true

Size: 1.82 KB

Versions: 30

Compression:

Stored size: 1.82 KB

Contents

module RubySMB
  module SMB1
    module Packet
      module Trans2
        # Extends the {RubySMB::SMB1::DataBlock} to include padding methods
        # that all Trans2 DataBlocks will need to handle proper byte alignment.
        class DataBlock < RubySMB::SMB1::DataBlock
          # Controls whether the padding fields will be used
          # @!attribute [rw] enable_padding
          #   @return [Boolean]
          attr_accessor :enable_padding

          def initialize_instance
            super
            @enable_padding = true
          end

          private

          # Determines the correct length for the padding in front of
          # #trans2_parameters. It should always force a 4-byte alignment.
          def pad1_length
            if enable_padding
              offset = if respond_to?(:name)
                         (name.abs_offset + 1) % 4
                       else
                         (byte_count.abs_offset + 2) % 4
                       end
              (4 - offset) % 4
            else
              0
            end
          end

          # Determines the correct length for the padding in front of
          # #trans2_data. It should always force a 4-byte alignment.
          def pad2_length
            if enable_padding && (trans2_data.num_bytes > 0 || (!byte_count.clear? && offset_of(pad2) - byte_count.num_bytes < byte_count))
              offset = (trans2_parameters.abs_offset + trans2_parameters.length) % 4
              (4 - offset) % 4
            else
              0
            end
          end

          # Some structures use an opaque buffer in trans2_data. Calculate its
          # size here.
          def buffer_read_length
            return 0 if byte_count.clear?

            byte_count + byte_count.num_bytes - offset_of(trans2_data)
          end
        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/trans2/data_block.rb
ruby_smb-3.3.12 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.11 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.10 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.9 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.7 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.6 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.5 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.4 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.3 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.2 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.1 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.3.0 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.8 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.7 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.6 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.5 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.4 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.3 lib/ruby_smb/smb1/packet/trans2/data_block.rb
ruby_smb-3.2.2 lib/ruby_smb/smb1/packet/trans2/data_block.rb