Class: PacketGen::Header::IKE::Payload
- Inherits:
-
Base
- Object
- Types::Fields
- Base
- PacketGen::Header::IKE::Payload
- Defined in:
- lib/packetgen/header/ike/payload.rb
Overview
Base class for IKE payloads. This class may also be used for unknown payloads.
This class handles generic IKE payload header:
1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Payload |C| RESERVED | Payload Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
to which a #content field is added to handle content of unknown payload types.
Instance Attribute Summary collapse
-
#content ⇒ String
Payload content.
-
#critical ⇒ Boolean
critical flag.
-
#flags ⇒ Integer
8-bit flags.
-
#hreserved ⇒ Integer
reserved part of #flags field.
-
#length ⇒ Integer
16-bit payload total length, including generic payload header.
-
#next ⇒ Integer
8-bit next payload.
Attributes inherited from Base
Instance Method Summary collapse
- #base_read ⇒ Object
-
#calc_length ⇒ Integer
Compute length and set #length field.
-
#initialize(options = {}) ⇒ Payload
constructor
A new instance of Payload.
-
#read(str) ⇒ self
Populate object from a string.
Methods inherited from Base
#added_to_packet, bind, bind_header, calculate_and_set_length, #header_id, inherited, #ip_header, known_headers, #ll_header, #method_name, #parse?, #protocol_name, protocol_name
Methods inherited from Types::Fields
#[], #[]=, #bits_on, #body=, define_bit_fields_on, define_field, define_field_after, define_field_before, delete_field, fields, #fields, #force_binary, inherited, #inspect, #is_optional?, #is_present?, #offset_of, #optional?, #optional_fields, #present?, remove_bit_fields_on, remove_field, #sz, #to_h, #to_s, update_field
Constructor Details
#initialize(options = {}) ⇒ Payload
Returns a new instance of Payload.
50 51 52 53 |
# File 'lib/packetgen/header/ike/payload.rb', line 50 def initialize(={}) super self[:length].value = sz unless [:length] end |
Instance Attribute Details
#content ⇒ String
Payload content. Depends on payload. Variable length.
37 |
# File 'lib/packetgen/header/ike/payload.rb', line 37 define_field :content, Types::String |
#critical ⇒ Boolean
critical flag
48 |
# File 'lib/packetgen/header/ike/payload.rb', line 48 define_bit_fields_on :flags, :critical, :hreserved, 7 |
#flags ⇒ Integer
8-bit flags
29 |
# File 'lib/packetgen/header/ike/payload.rb', line 29 define_field :flags, Types::Int8 |
#hreserved ⇒ Integer
reserved part of #flags field
48 |
# File 'lib/packetgen/header/ike/payload.rb', line 48 define_bit_fields_on :flags, :critical, :hreserved, 7 |
#length ⇒ Integer
16-bit payload total length, including generic payload header
33 |
# File 'lib/packetgen/header/ike/payload.rb', line 33 define_field :length, Types::Int16 |
#next ⇒ Integer
8-bit next payload
25 |
# File 'lib/packetgen/header/ike/payload.rb', line 25 define_field :next, Types::Int8 |
Instance Method Details
#base_read ⇒ Object
56 |
# File 'lib/packetgen/header/ike/payload.rb', line 56 alias base_read read |
#calc_length ⇒ Integer
Compute length and set #length field
75 76 77 78 79 |
# File 'lib/packetgen/header/ike/payload.rb', line 75 def calc_length # Here, #body is next payload, so body size should not be taken in # account (payload's real body is #content). self[:length].value = sz - body.sz end |
#read(str) ⇒ self
Populate object from a string
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/packetgen/header/ike/payload.rb', line 61 def read(str) base_read str unless self[:content].nil? content_length = length - self.class.new.sz if content_length >= 0 self[:body] = self[:content][content_length..-1] self[:content] = self[:content][0, content_length] end end self end |