Class: PacketViaDMEM
- Inherits:
-
Object
- Object
- PacketViaDMEM
- Defined in:
- lib/packet_via_dmem.rb,
lib/packet_via_dmem/cli.rb,
lib/packet_via_dmem/sent.rb,
lib/packet_via_dmem/packet.rb,
lib/packet_via_dmem/packets.rb,
lib/packet_via_dmem/received.rb,
lib/packet_via_dmem/header/sent.rb,
lib/packet_via_dmem/header/received.rb
Defined Under Namespace
Classes: CLI, Error, Header, Packet, Packets, Received, Sent
Constant Summary collapse
- PACKET =
/^(Received|Sent) \d+ byte parcel:.*\n/
- FAKE =
{ :dmac => %w( 22 22 22 22 22 22 ), :smac => %w( 66 66 66 66 66 66 ), :etype_mpls => %w( 88 47 ), :etype_ipv4 => %w( 08 00 ), :ipv4 => %w( 45 ), }
- HEADER_SIZE =
{ :received => 6, :sent => 13, }
Instance Method Summary collapse
-
#initialize(opts = {}) ⇒ PacketViaDMEM
constructor
A new instance of PacketViaDMEM.
- #parse(str) ⇒ Object
- #stream(io) ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ PacketViaDMEM
Returns a new instance of PacketViaDMEM.
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/packet_via_dmem.rb', line 19 def initialize opts={} @received = opts.delete :received @sent = opts.delete :sent @log = opts.delete :log if not @log @log = Logger.new STDERR @log.level = Logger::FATAL end @received ||= HEADER_SIZE[:received] @sc = StringScanner.new '' end |
Instance Method Details
#parse(str) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/packet_via_dmem.rb', line 45 def parse str packets = Packets.new @log @sc.string = str while @sc.scan_until PACKET match = @sc.matched.split(/\s+/) type = match.first.downcase.to_sym @sc.scan_until(/\n/) if type == :received pkt = '' while @sc.match?(/^0x/) pkt << @sc.scan_until(/\n/).strip end pkt = parse_packet pkt packets.add pkt, type end @sc.string = '' packets end |
#stream(io) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/packet_via_dmem.rb', line 31 def stream io packet = '' while not io.eof? line = io.readline if line.match PACKET packet = parse(packet).first yield packet if packet packet = line else packet << line end end end |