module 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
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 7 def set_endianness(e=nil) unless [:little, :big].include? e raise ArgumentError, "Unknown endianness for #{self.class}" end @int64 = e == :little ? Int64le : Int64be @int32 = e == :little ? Int32le : Int32be @int16 = e == :little ? Int16le : Int16be return e end
sz()
click to toggle source
Instead of returning the “size” of the object, which is usually the number of elements of the Struct
, returns the size of the object after a to_s. Essentially, a short version of self.to_size.size
# File lib/packetfu/pcap.rb, line 20 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