class Rex::Proto::NTLM::Base::FieldSet

base class of data structure

Public Class Methods

define(&block) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 161
def define(&block)
  klass = Class.new(self) do
    def self.inherited(subclass)
      proto = @proto

      subclass.instance_eval do
        @proto = proto
      end
    end
  end

  klass.module_eval(&block)

  klass
end
inherited(subclass) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 163
def self.inherited(subclass)
  proto = @proto

  subclass.instance_eval do
    @proto = proto
  end
end
int16LE(name, opts) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 181
def int16LE(name, opts)
  add_field(name, Int16LE, opts)
end
int32LE(name, opts) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 185
def int32LE(name, opts)
  add_field(name, Int32LE, opts)
end
int64LE(name, opts) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 189
def int64LE(name, opts)
  add_field(name, Int64LE, opts)
end
names() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 201
def names
  @proto.map{|n, t, o| n}
end
new() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 233
def initialize
  @alist = self.class.prototypes.map{ |n, t, o| [n, t.new(o)] }
end
opts() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 209
def opts
  @proto.map{|n, t, o| o}
end
prototypes() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 197
def prototypes
  @proto
end
security_buffer(name, opts) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 193
def security_buffer(name, opts)
  add_field(name, SecurityBuffer, opts)
end
string(name, opts) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 177
def string(name, opts)
  add_field(name, String, opts)
end
types() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 205
def types
  @proto.map{|n, t, o| t}
end

Private Class Methods

add_field(name, type, opts) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 215
def add_field(name, type, opts)
  (@proto ||= []).push [name, type, opts]
  define_accessor name
end
define_accessor(name) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 220
    def define_accessor(name)
      module_eval(<<-End, __FILE__, __LINE__ + 1)
      def #{name}
        self['#{name}'].value
      end

      def #{name}=(val)
        self['#{name}'].value = val
      end
      End
    end

Public Instance Methods

[](name) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 249
def [](name)
  a = @alist.assoc(name.to_s.intern)
  raise ArgumentError, "no such field: #{name}" unless a
  a[1]
end
[]=(name, val) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 255
def []=(name, val)
  a = @alist.assoc(name.to_s.intern)
  raise ArgumentError, "no such field: #{name}" unless a
  a[1] = val
end
disable(name) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 265
def disable(name)
  self[name].active = false
end
enable(name) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 261
def enable(name)
  self[name].active = true
end
parse(str, offset=0) click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 241
def parse(str, offset=0)
  @alist.inject(offset){|cur, a|  cur += a[1].parse(str, cur)}
end
serialize() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 237
def serialize
  @alist.map{|n, f| f.serialize }.join
end
size() click to toggle source
# File lib/rex/proto/ntlm/base.rb, line 245
def size
  @alist.inject(0){|sum, a| sum += a[1].size}
end