Module: PacketGen::Inspect Private
- Defined in:
- lib/packetgen/inspect.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Inspect module provides methods to help writing inspect
Constant Summary collapse
- MAX_WIDTH =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Maximum number of characters on a line for INSPECT
70
- SEPARATOR =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
('-' * MAX_WIDTH << "\n").freeze
- FMT_ATTR =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Format to inspect attribute
"%14s %16s: %s\n"
Class Method Summary collapse
- .convert_body_slice(bslice) ⇒ Object private
-
.dashed_line(name, level = 1) ⇒ String
private
Create a dashed line with
obj
class writing in it. - .enum_human_hex(str, int, hexsize) ⇒ String private
-
.format(type, attr, value, level = 1) ⇒ String
private
Simple formatter to inspect an attribute.
-
.inspect_asn1_attribute(name, attr, level = 1) ⇒ String
private
Format a ASN.1 attribute for
#inspect
. -
.inspect_attribute(attr, value, level = 1) ⇒ String
private
Format an attribute for
#inspect
. - .inspect_body(body, name = 'Body') ⇒ String private
- .int_dec_hex(value, hexsize) ⇒ String private
- .shift_level(level = 1) ⇒ String private
Class Method Details
.convert_body_slice(bslice) ⇒ Object
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.
124 125 126 127 128 129 130 |
# File 'lib/packetgen/inspect.rb', line 124 def self.convert_body_slice(bslice) octets = bslice.unpack('C*') str = octets.map { |v| ' %02x' % v }.join str << ' ' * (48 - str.size) unless str.size >= 48 str << ' ' << octets.map { |v| (32..127).cover?(v) ? v.chr : '.' }.join str << "\n" end |
.dashed_line(name, level = 1) ⇒ String
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.
Create a dashed line with obj
class writing in it
25 26 27 28 |
# File 'lib/packetgen/inspect.rb', line 25 def self.dashed_line(name, level=1) str = '--' * level << " #{name} " str << '-' * (MAX_WIDTH - str.length) << "\n" end |
.enum_human_hex(str, int, hexsize) ⇒ String
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.
47 48 49 50 |
# File 'lib/packetgen/inspect.rb', line 47 def self.enum_human_hex(str, int, hexsize) fmt = "%-16s (0x%0#{hexsize}x)" fmt % [str, int] end |
.format(type, attr, value, level = 1) ⇒ String
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.
Simple formatter to inspect an attribute
58 59 60 61 |
# File 'lib/packetgen/inspect.rb', line 58 def self.format(type, attr, value, level=1) str = Inspect.shift_level(level) str << Inspect::FMT_ATTR % [type, attr, value] end |
.inspect_asn1_attribute(name, attr, level = 1) ⇒ String
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.
Format a ASN.1 attribute for #inspect
. 4 cases are handled:
-
attribute value is a =RANS1::Types::Enumerated+: show named value and its integer value as hexdecimal format,
-
attribute value is a
RASN1::Types::Integer
: show value as integer and in hexdecimal format, -
attribute value is a
RASN1::Model
: only show its root type, -
else,
#to_s
is used to format attribute value.
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/packetgen/inspect.rb', line 90 def self.inspect_asn1_attribute(name, attr, level=1) str = shift_level(level) val = case attr when RASN1::Types::Enumerated hexsize = attr.value_size * 2 fmt = "%-16s (0x%0#{hexsize}x)" fmt % [attr.value, attr.to_i] when RASN1::Types::Integer int_dec_hex(attr.value, attr.value_size * 2) when RASN1::Model attr.root.type else attr.value.to_s.inspect end str << FMT_ATTR % [attr.type, name, val] end |
.inspect_attribute(attr, value, level = 1) ⇒ String
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.
Format an attribute for #inspect
. 3 cases are handled:
-
attribute value is a Types::Int: show value as integer and in hexdecimal format,
-
attribute value responds to
#to_human
: call it, -
else,
#to_s
is used to format attribute value.
73 74 75 76 |
# File 'lib/packetgen/inspect.rb', line 73 def self.inspect_attribute(attr, value, level=1) type = value.class.to_s.sub(/.*::/, '') self.format(type, attr, value.format_inspect, level) end |
.inspect_body(body, name = 'Body') ⇒ String
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.
109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/packetgen/inspect.rb', line 109 def self.inspect_body(body, name='Body') return '' if body.nil? || body.empty? str = dashed_line(name, 2) 0.upto(15) { |v| str << ' %02d' % v } str << "\n" << SEPARATOR unless body.empty? (body.size / 16 + 1).times do |i| str << self.convert_body_slice(body.to_s[i * 16, 16]) end end str << SEPARATOR end |
.int_dec_hex(value, hexsize) ⇒ String
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.
38 39 40 41 |
# File 'lib/packetgen/inspect.rb', line 38 def self.int_dec_hex(value, hexsize) fmt = "%-16s (0x%0#{hexsize}x)" fmt % [value.to_i, value.to_i] end |
.shift_level(level = 1) ⇒ String
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.
31 32 33 |
# File 'lib/packetgen/inspect.rb', line 31 def self.shift_level(level=1) ' ' * (level + 1) end |