Module: PacketGen::Headerable
- Included in:
- PacketGen::Header::ASN1Base, PacketGen::Header::Base
- Defined in:
- lib/packetgen/headerable.rb
Overview
This mixin module defines minimal API for a class to act as a header in Packet.
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
-
.included(klass) ⇒ void
private
Extend
klass
with ClassMethods.
Instance Method Summary collapse
- #added_to_packet(packet) ⇒ void abstract
-
#method_name ⇒ String
return header method name.
-
#packet ⇒ Packet?
Reference on packet which owns this header.
-
#packet=(packet) ⇒ Packet
private
Set packet to which this header belongs.
-
#parse? ⇒ Boolean
abstract
Called by Packet#parse when guessing first header to check if header is correct.
-
#protocol_name ⇒ String
Return header protocol name.
-
#read(str) ⇒ self
abstract
Populate headerable object from a binary string.
Class Method Details
.included(klass) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Extend klass
with ClassMethods.
34 35 36 |
# File 'lib/packetgen/headerable.rb', line 34 def self.included(klass) klass.extend ClassMethods end |
Instance Method Details
#added_to_packet(packet) ⇒ void
This method is called when a header is added to a packet. This base method does nothing but may be overriden by subclasses.
This method returns an undefined value.
80 |
# File 'lib/packetgen/headerable.rb', line 80 def added_to_packet(packet) end |
#method_name ⇒ String
return header method name
46 47 48 49 50 |
# File 'lib/packetgen/headerable.rb', line 46 def method_name return @method_name if defined? @method_name @method_name = protocol_name.downcase.gsub('::', '_') end |
#packet ⇒ Packet?
Reference on packet which owns this header
62 63 64 |
# File 'lib/packetgen/headerable.rb', line 62 def packet @packet ||= nil end |
#packet=(packet) ⇒ Packet
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Set packet to which this header belongs
70 71 72 73 74 |
# File 'lib/packetgen/headerable.rb', line 70 def packet=(packet) @packet = packet added_to_packet(packet) @packet end |
#parse? ⇒ Boolean
Should be redefined by subclasses. This method should check invariant fields from header.
Called by Packet#parse when guessing first header to check if header is correct
56 57 58 |
# File 'lib/packetgen/headerable.rb', line 56 def parse? true end |
#protocol_name ⇒ String
Return header protocol name
40 41 42 |
# File 'lib/packetgen/headerable.rb', line 40 def protocol_name self.class.protocol_name end |
#read(str) ⇒ self
This method MUST be redefined by subclasses.
Populate headerable object from a binary string.
87 88 89 90 91 92 |
# File 'lib/packetgen/headerable.rb', line 87 def read(str) # Do not call super and rescue NoMethodError: too slow raise NotImplementedError, "#{self.class} should implement #read" if method(:read).super_method.nil? super end |