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- 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
"%12s %12s: %s\n"
Class Method Summary collapse
-
.dashed_line(name, level = 1) ⇒ String
private
Create a dashed line with
objclass writing in it. -
.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
.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
23 24 25 26 |
# File 'lib/packetgen/inspect.rb', line 23 def self.dashed_line(name, level=1) str = '--' * level << " #{name} " str << '-' * (MAX_WIDTH - str.length) << "\n" 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_sis used to format attribute value.
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/packetgen/inspect.rb', line 78 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 "%-10s (0x%0#{hexsize}x)" % [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_sis used to format attribute value.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/packetgen/inspect.rb', line 50 def self.inspect_attribute(attr, value, level=1) str = shift_level(level) val = if value.is_a?(Types::Enum) "%-10s (0x%0#{value.sz * 2}x)" % [value.to_human, value.to_i] elsif value.is_a?(Types::Int) || value.is_a?(Integer) int_dec_hex(value, value.sz * 2) elsif value.is_a?(String) value.to_s.inspect elsif value.respond_to? :to_human value.to_human else value.to_s.inspect end str << FMT_ATTR % [value.class.to_s.sub(/.*::/, ''), attr, val] 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.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/packetgen/inspect.rb', line 96 def self.inspect_body(body, name='Body') return '' if body.nil? || body.empty? str = dashed_line(name, 2) str << (0..15).to_a.map { |v| ' %02d' % v }.join << "\n" str << '-' * MAX_WIDTH << "\n" unless body.empty? (body.size / 16 + 1).times do |i| octets = body.to_s[i * 16, 16].unpack('C*') o_str = octets.map { |v| ' %02x' % v }.join str << o_str str << ' ' * (3 * 16 - o_str.size) unless o_str.size >= 3 * 16 str << ' ' << octets.map { |v| v < 128 && v > 31 ? v.chr : '.' }.join str << "\n" end end str << '-' * MAX_WIDTH << "\n" 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.
36 37 38 |
# File 'lib/packetgen/inspect.rb', line 36 def self.int_dec_hex(value, hexsize) "%-10s (0x%0#{hexsize}x)" % [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.
29 30 31 |
# File 'lib/packetgen/inspect.rb', line 29 def self.shift_level(level=1) ' ' * (level + 1) end |