PageRenderTime 90ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/ruckus/ip.rb

http://github.com/tqbf/ruckus
Ruby | 38 lines | 27 code | 5 blank | 6 comment | 6 complexity | f8d0e2ab1a6d44c0076668f792ab8c3d MD5 | raw file
  1. # === IP addresses are integers with special assignment
  2. # You can use a Ruckus::Number as an IP address (or an IPv6
  3. # address, if you make it 128 bits wide), but Ruckus::IP
  4. # converts from dotted-quad strings (and, I guess if I wanted,
  5. # DNS hostnames)
  6. #
  7. module Ruckus
  8. class IP < Parsel
  9. def initialize(opts={})
  10. opts[:value] ||= 0
  11. super(opts)
  12. end
  13. def to_s(off=nil)
  14. @rendered_offset = off || 0
  15. val = resolve(@value)
  16. val = IPAddr.inet_addr(val) if val.kind_of? String
  17. r = [val].pack("I")
  18. r = r.reverse if self.class.endian? == :little
  19. if off
  20. return r, off + 4
  21. else
  22. return r
  23. end
  24. end
  25. def capture(str)
  26. cap = str.shift 4
  27. sel = self.class.endian? == :little ? :reverse : :to_s
  28. @value = cap.send(sel).unpack("I").first
  29. return str
  30. end
  31. def size; 4; end
  32. end
  33. end