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.

Author:

  • Sylvain Daubert

Since:

  • 3.0.2

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

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.

Parameters:

  • klass (Class)

Since:

  • 3.0.2


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 abstract.

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.

Parameters:

  • packet (Packet)

    packet to which self is added

Since:

  • 3.0.2


80
# File 'lib/packetgen/headerable.rb', line 80

def added_to_packet(packet) end

#method_nameString

return header method name

Returns:

  • (String)

Since:

  • 3.0.2


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

#packetPacket?

Reference on packet which owns this header

Returns:

Since:

  • 3.0.2


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

Parameters:

Returns:

Since:

  • 3.0.2


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

This method is abstract.

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

Returns:

  • (Boolean)

Since:

  • 3.0.2


56
57
58
# File 'lib/packetgen/headerable.rb', line 56

def parse?
  true
end

#protocol_nameString

Return header protocol name

Returns:

  • (String)

Since:

  • 3.0.2


40
41
42
# File 'lib/packetgen/headerable.rb', line 40

def protocol_name
  self.class.protocol_name
end

#read(str) ⇒ self

This method is abstract.

This method MUST be redefined by subclasses.

Populate headerable object from a binary string.

Parameters:

  • str (String)

Returns:

  • (self)

Raises:

  • (NotImplementedError)

Since:

  • 3.0.2


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