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
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
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
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
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
Generated with the Darkfish Rdoc Generator 2.