Class/Module Index [+]

Quicksearch

StructFu

StructFu, a nifty way to leverage Ruby's built in Struct class to create meaningful binary data.

Public Instance Methods

body=(i) click to toggle source

Used like typecast(), but specifically for casting Strings to StructFu::Strings.

# File lib/packetfu/structfu.rb, line 24
def body=(i)
        if i.kind_of? ::String
                typecast(i)
        elsif i.kind_of? StructFu
                self[:body] = i
        elsif i.nil?
                self[:body] = StructFu::String.new.read("")
        else
                raise ArgumentError, "Can't cram a #{i.class} into a StructFu :body"
        end
end
clone() click to toggle source

Handle deep copies correctly. Marshal in 1.9, re-read myself on 1.8

# File lib/packetfu/structfu.rb, line 37
def clone
        begin
                Marshal.load(Marshal.dump(self))
        rescue
                self.class.new.read(self.to_s)
        end
end
len() click to toggle source
Alias for: sz
set_endianness(e=nil) click to toggle source

Set the endianness for the various Int classes. Takes either :little or :big.

# File lib/packetfu/pcap.rb, line 6
def set_endianness(e=nil)
        unless [:little, :big].include? e
                raise ArgumentError, "Unknown endianness for #{self.class}" 
        end
        @int32 = e == :little ? Int32le : Int32be
        @int16 = e == :little ? Int16le : Int16be
        return e
end
sz() click to toggle source

Normally, self.size and self.length will refer to the Struct size as an array. It's a hassle to redefine, so this introduces some shorthand to get at the size of the resultant string.

# File lib/packetfu/structfu.rb, line 9
def sz
        self.to_s.size
end
Also aliased as: len
typecast(i) click to toggle source

Typecast is used mostly by packet header classes, such as IPHeader, TCPHeader, and the like. It takes an argument, and casts it to the expected type for that element.

# File lib/packetfu/structfu.rb, line 18
def typecast(i)
        c = caller[0].match(/.*`([^']+)='/)[1]
        self[c.intern].read i
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.