packetgen 3.1.3 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/lib/packetgen.rb +24 -2
  3. data/lib/packetgen/capture.rb +30 -24
  4. data/lib/packetgen/config.rb +2 -2
  5. data/lib/packetgen/deprecation.rb +33 -7
  6. data/lib/packetgen/header.rb +2 -9
  7. data/lib/packetgen/header/arp.rb +2 -2
  8. data/lib/packetgen/header/asn1_base.rb +2 -2
  9. data/lib/packetgen/header/base.rb +2 -4
  10. data/lib/packetgen/header/bootp.rb +3 -3
  11. data/lib/packetgen/header/dhcp.rb +2 -2
  12. data/lib/packetgen/header/dhcp/option.rb +2 -2
  13. data/lib/packetgen/header/dhcp/options.rb +2 -2
  14. data/lib/packetgen/header/dhcpv6.rb +12 -12
  15. data/lib/packetgen/header/dhcpv6/duid.rb +8 -4
  16. data/lib/packetgen/header/dhcpv6/option.rb +4 -4
  17. data/lib/packetgen/header/dhcpv6/options.rb +2 -2
  18. data/lib/packetgen/header/dhcpv6/relay.rb +2 -2
  19. data/lib/packetgen/header/dns.rb +9 -9
  20. data/lib/packetgen/header/dns/name.rb +2 -2
  21. data/lib/packetgen/header/dns/opt.rb +2 -2
  22. data/lib/packetgen/header/dns/option.rb +2 -2
  23. data/lib/packetgen/header/dns/qdsection.rb +2 -2
  24. data/lib/packetgen/header/dns/question.rb +35 -35
  25. data/lib/packetgen/header/dns/rr.rb +3 -3
  26. data/lib/packetgen/header/dns/rrsection.rb +2 -2
  27. data/lib/packetgen/header/dot11.rb +5 -13
  28. data/lib/packetgen/header/dot11/control.rb +5 -5
  29. data/lib/packetgen/header/dot11/data.rb +2 -2
  30. data/lib/packetgen/header/dot11/element.rb +16 -16
  31. data/lib/packetgen/header/dot11/management.rb +2 -2
  32. data/lib/packetgen/header/dot11/sub_mngt.rb +2 -12
  33. data/lib/packetgen/header/dot1q.rb +2 -2
  34. data/lib/packetgen/header/dot1x.rb +6 -6
  35. data/lib/packetgen/header/eap.rb +16 -16
  36. data/lib/packetgen/header/eap/fast.rb +2 -2
  37. data/lib/packetgen/header/eap/md5.rb +2 -2
  38. data/lib/packetgen/header/eap/tls.rb +2 -2
  39. data/lib/packetgen/header/eap/ttls.rb +2 -2
  40. data/lib/packetgen/header/eth.rb +8 -5
  41. data/lib/packetgen/header/gre.rb +2 -2
  42. data/lib/packetgen/header/http.rb +2 -0
  43. data/lib/packetgen/header/http/headers.rb +2 -2
  44. data/lib/packetgen/header/http/request.rb +5 -5
  45. data/lib/packetgen/header/http/response.rb +6 -6
  46. data/lib/packetgen/header/http/verbs.rb +2 -2
  47. data/lib/packetgen/header/icmp.rb +2 -2
  48. data/lib/packetgen/header/icmpv6.rb +2 -2
  49. data/lib/packetgen/header/igmp.rb +4 -4
  50. data/lib/packetgen/header/igmpv3.rb +3 -3
  51. data/lib/packetgen/header/igmpv3/group_record.rb +6 -6
  52. data/lib/packetgen/header/igmpv3/mq.rb +2 -2
  53. data/lib/packetgen/header/igmpv3/mr.rb +2 -2
  54. data/lib/packetgen/header/ip.rb +3 -5
  55. data/lib/packetgen/header/ip/addr.rb +7 -2
  56. data/lib/packetgen/header/ip/option.rb +4 -6
  57. data/lib/packetgen/header/ip/options.rb +3 -5
  58. data/lib/packetgen/header/ipv6.rb +2 -2
  59. data/lib/packetgen/header/ipv6/addr.rb +7 -2
  60. data/lib/packetgen/header/ipv6/extension.rb +2 -2
  61. data/lib/packetgen/header/ipv6/hop_by_hop.rb +3 -3
  62. data/lib/packetgen/header/llc.rb +2 -2
  63. data/lib/packetgen/header/mdns.rb +2 -2
  64. data/lib/packetgen/header/mld.rb +2 -2
  65. data/lib/packetgen/header/mldv2.rb +2 -2
  66. data/lib/packetgen/header/mldv2/mcast_address_record.rb +2 -2
  67. data/lib/packetgen/header/mldv2/mlq.rb +2 -2
  68. data/lib/packetgen/header/mldv2/mlr.rb +2 -2
  69. data/lib/packetgen/header/ospfv2.rb +9 -9
  70. data/lib/packetgen/header/ospfv2/db_description.rb +2 -2
  71. data/lib/packetgen/header/ospfv2/hello.rb +2 -2
  72. data/lib/packetgen/header/ospfv2/ls_ack.rb +2 -2
  73. data/lib/packetgen/header/ospfv2/ls_request.rb +2 -2
  74. data/lib/packetgen/header/ospfv2/ls_update.rb +2 -2
  75. data/lib/packetgen/header/ospfv2/lsa.rb +3 -5
  76. data/lib/packetgen/header/ospfv2/lsa_header.rb +6 -6
  77. data/lib/packetgen/header/ospfv3.rb +2 -2
  78. data/lib/packetgen/header/ospfv3/db_description.rb +2 -2
  79. data/lib/packetgen/header/ospfv3/hello.rb +2 -2
  80. data/lib/packetgen/header/ospfv3/ipv6_prefix.rb +2 -2
  81. data/lib/packetgen/header/ospfv3/ls_ack.rb +2 -2
  82. data/lib/packetgen/header/ospfv3/ls_request.rb +2 -2
  83. data/lib/packetgen/header/ospfv3/ls_update.rb +2 -2
  84. data/lib/packetgen/header/ospfv3/lsa.rb +3 -5
  85. data/lib/packetgen/header/ospfv3/lsa_header.rb +7 -7
  86. data/lib/packetgen/header/snmp.rb +31 -28
  87. data/lib/packetgen/header/tcp.rb +3 -3
  88. data/lib/packetgen/header/tcp/option.rb +3 -5
  89. data/lib/packetgen/header/tcp/options.rb +2 -2
  90. data/lib/packetgen/header/tftp.rb +6 -6
  91. data/lib/packetgen/header/udp.rb +3 -3
  92. data/lib/packetgen/headerable.rb +5 -4
  93. data/lib/packetgen/inject.rb +23 -0
  94. data/lib/packetgen/inspect.rb +24 -5
  95. data/lib/packetgen/packet.rb +76 -51
  96. data/lib/packetgen/pcap.rb +29 -0
  97. data/lib/packetgen/pcapng.rb +2 -2
  98. data/lib/packetgen/pcapng/block.rb +12 -12
  99. data/lib/packetgen/pcapng/epb.rb +3 -7
  100. data/lib/packetgen/pcapng/file.rb +134 -95
  101. data/lib/packetgen/pcapng/idb.rb +30 -30
  102. data/lib/packetgen/pcapng/shb.rb +25 -34
  103. data/lib/packetgen/pcapng/spb.rb +4 -8
  104. data/lib/packetgen/pcapng/unknown_block.rb +2 -2
  105. data/lib/packetgen/pcaprub_wrapper.rb +67 -0
  106. data/lib/packetgen/proto.rb +2 -2
  107. data/lib/packetgen/types.rb +2 -0
  108. data/lib/packetgen/types/abstract_tlv.rb +24 -6
  109. data/lib/packetgen/types/array.rb +5 -5
  110. data/lib/packetgen/types/cstring.rb +2 -2
  111. data/lib/packetgen/types/enum.rb +3 -2
  112. data/lib/packetgen/types/fields.rb +5 -7
  113. data/lib/packetgen/types/int.rb +3 -5
  114. data/lib/packetgen/types/int_string.rb +2 -2
  115. data/lib/packetgen/types/length_from.rb +3 -3
  116. data/lib/packetgen/types/oui.rb +2 -2
  117. data/lib/packetgen/types/string.rb +2 -2
  118. data/lib/packetgen/types/tlv.rb +2 -2
  119. data/lib/packetgen/utils.rb +2 -2
  120. data/lib/packetgen/utils/arp_spoofer.rb +2 -2
  121. data/lib/packetgen/version.rb +3 -3
  122. metadata +26 -50
  123. data/.gitignore +0 -13
  124. data/.rubocop.yml +0 -30
  125. data/.travis.yml +0 -19
  126. data/Gemfile +0 -4
  127. data/Rakefile +0 -21
  128. data/packetgen.gemspec +0 -36
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of PacketGen
2
4
  # See https://github.com/sdaubert/packetgen for more informations
3
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
6
  # This program is published under MIT license.
5
7
 
6
- # frozen_string_literal: true
7
-
8
8
  module PacketGen
9
9
  module PcapNG
10
10
  # {SHB} represents a Section Header Block (SHB) of a pcapng file.
@@ -89,39 +89,20 @@ module PacketGen
89
89
  # @param [::String,IO] str_or_io
90
90
  # @return [self]
91
91
  def read(str_or_io)
92
- io = if str_or_io.respond_to? :read
93
- str_or_io
94
- else
95
- StringIO.new(force_binary(str_or_io.to_s))
96
- end
92
+ io = to_io(str_or_io)
97
93
  return self if io.eof?
98
94
 
99
- type_str = io.read(4)
100
- unless type_str == PcapNG::SHB_TYPE.to_s
101
- type = type_str.unpack('H*').join
102
- raise InvalidFileError, "Incorrect type (#{type})for Section Header Block"
103
- end
104
-
95
+ type_str = check_shb(io)
105
96
  block_len_str = io.read(4)
106
-
107
97
  magic_str = io.read(4)
108
- case @endian
109
- when :little
110
- case magic_str
111
- when MAGIC_LITTLE
112
- when MAGIC_BIG
113
- force_endianness :big
114
- else
115
- raise InvalidFileError, 'Incorrect magic for Section Header Block'
116
- end
117
- when :big
118
- case magic_str
119
- when MAGIC_BIG
120
- when MAGIC_LITTLE
121
- force_endianness :little
122
- else
123
- raise InvalidFileError, 'Incorrect magic for Section Header Block'
124
- end
98
+
99
+ case magic_str
100
+ when MAGIC_LITTLE
101
+ force_endianness :little if @endian == :big
102
+ when MAGIC_BIG
103
+ force_endianness :big if @endian == :little
104
+ else
105
+ raise InvalidFileError, 'Incorrect magic for Section Header Block'
125
106
  end
126
107
 
127
108
  self[:type].read type_str
@@ -149,9 +130,8 @@ module PacketGen
149
130
  # @return [String]
150
131
  def to_s
151
132
  body = @interfaces.map(&:to_s).join
152
- unless self.section_len == SECTION_LEN_UNDEFINED
153
- self.section_len = body.size
154
- end
133
+ self.section_len = body.size unless self.section_len == SECTION_LEN_UNDEFINED
134
+
155
135
  pad_field :options
156
136
  recalc_block_len
157
137
  super + body
@@ -169,6 +149,17 @@ module PacketGen
169
149
  self[:section_len] = Types::Int64.new(self[:section_len].to_i, endian)
170
150
  self[:block_len2] = Types::Int32.new(self[:block_len2].to_i, endian)
171
151
  end
152
+
153
+ # Check io contains a SHB
154
+ # @param [IO] io
155
+ # @return [String] type string
156
+ def check_shb(io)
157
+ type_str = io.read(4)
158
+ return type_str if type_str == PcapNG::SHB_TYPE.to_s
159
+
160
+ type = type_str.unpack('H*').join
161
+ raise InvalidFileError, "Incorrect type (#{type})for Section Header Block"
162
+ end
172
163
  end
173
164
  end
174
165
  end
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of PacketGen
2
4
  # See https://github.com/sdaubert/packetgen for more informations
3
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
6
  # This program is published under MIT license.
5
7
 
6
- # frozen_string_literal: true
7
-
8
8
  module PacketGen
9
9
  module PcapNG
10
10
  # {SPB} represents a Section Simple Packet Block (SPB) of a pcapng file.
@@ -60,11 +60,7 @@ module PacketGen
60
60
  # @param [::String,IO] str_or_io
61
61
  # @return [self]
62
62
  def read(str_or_io)
63
- io = if str_or_io.respond_to? :read
64
- str_or_io
65
- else
66
- StringIO.new(force_binary(str_or_io.to_s))
67
- end
63
+ io = to_io(str_or_io)
68
64
  return self if io.eof?
69
65
 
70
66
  self[:type].read io.read(4)
@@ -72,7 +68,7 @@ module PacketGen
72
68
  self[:orig_len].read io.read(4)
73
69
  # Take care of IDB snaplen
74
70
  # CAUTION: snaplen == 0 -> no capture limit
75
- data_len = if interface && (interface.snaplen.to_i > 0)
71
+ data_len = if interface && interface.snaplen.to_i.positive?
76
72
  [self[:orig_len].to_i, interface.snaplen.to_i].min
77
73
  else
78
74
  self[:orig_len].to_i
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of PacketGen
2
4
  # See https://github.com/sdaubert/packetgen for more informations
3
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
6
  # This program is published under MIT license.
5
7
 
6
- # frozen_string_literal: true
7
-
8
8
  module PacketGen
9
9
  module PcapNG
10
10
  # {UnknownBlock} is used to handle unsupported blocks of a pcapng file.
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is part of PacketGen
4
+ # See https://github.com/sdaubert/packetgen for more informations
5
+ # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
6
+ # This program is published under MIT license.
7
+ require 'pcaprub'
8
+
9
+ module PacketGen
10
+ # Wrapper around PCAPRUB
11
+ # @author Sylvain Daubert
12
+ # @api private
13
+ # @since 3.1.4
14
+ module PCAPRUBWrapper
15
+ # timeout for PCAPRUB
16
+ TIMEOUT = 1
17
+ # Default snaplen to use
18
+ DEFAULT_SNAPLEN = 0xffff
19
+ # Default promisc value to use
20
+ DEFAULT_PROMISC = false
21
+
22
+ # Open an interface for capturing
23
+ # @param [String] iface interface name
24
+ # @param [Integer] snaplen
25
+ # @param [Boolean] promisc
26
+ # @return [PCAPRUB::Pcap]
27
+ def self.open_iface(iface:, snaplen: DEFAULT_SNAPLEN, promisc: DEFAULT_PROMISC)
28
+ PCAPRUB::Pcap.open_live(iface, snaplen, promisc, TIMEOUT)
29
+ end
30
+
31
+ # Capture packets from a network interface
32
+ # @param [String] iface interface name
33
+ # @param [Integer] snaplen
34
+ # @param [Boolean] promisc
35
+ # @param [String] filter BPF filter
36
+ # @yieldparam [String] packet_data binary packet data
37
+ # @return [void]
38
+ def self.capture(iface:, snaplen: DEFAULT_SNAPLEN, promisc: DEFAULT_PROMISC, filter: nil)
39
+ pcap = self.open_iface(iface: iface, snaplen: snaplen, promisc: promisc)
40
+ pcap.setfilter filter unless filter.nil?
41
+ pcap.each do |packet_data|
42
+ yield packet_data
43
+ end
44
+ end
45
+
46
+ # Inject given data onto wire
47
+ # @param [String] iface interface name
48
+ # @param [String] data to inject
49
+ # @return [void]
50
+ def self.inject(iface:, data:)
51
+ pcap = self.open_iface(iface: iface)
52
+ pcap.inject(data)
53
+ pcap.close
54
+ end
55
+
56
+ # Read a PCAP file
57
+ # @param [String] filename
58
+ # @yieldparam [String] data binary packet data
59
+ # @return [void]
60
+ # @author Kent Gruber
61
+ def self.read_pcap(filename:)
62
+ PCAPRUB::Pcap.open_offline(filename).each_packet do |packet|
63
+ yield packet
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  # This file is part of PacketGen
3
5
  # See https://github.com/sdaubert/packetgen for more informations
4
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
7
  # This program is published under MIT license.
6
8
 
7
- # frozen_string_literal: true
8
-
9
9
  require 'socket'
10
10
 
11
11
  module PacketGen
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of PacketGen
2
4
  # See https://github.com/sdaubert/packetgen for more informations
3
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
@@ -1,16 +1,16 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  # This file is part of PacketGen
3
5
  # See https://github.com/sdaubert/packetgen for more informations
4
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
7
  # This program is published under MIT license.
6
8
 
7
- # frozen_string_literal: true
8
-
9
9
  module PacketGen
10
10
  module Types
11
11
  # This class is an abstract class to define type-length-value data.
12
12
  #
13
- # This class supersede {TLV} class, which is not well defined on some corner
13
+ # This class supersedes {TLV} class, which is not well defined on some corner
14
14
  # cases.
15
15
  #
16
16
  # ===Usage
@@ -33,7 +33,7 @@ module PacketGen
33
33
  # tlv.value #=> "abcd"
34
34
  #
35
35
  # ===Advanced usage
36
- # Each field's type may be change at generating TLV class:
36
+ # Each field's type may be changed at generating TLV class:
37
37
  # MyTLV = PacketGen::Types::AbstractTLV.create(type_class: PacketGen::Types::Int16,
38
38
  # length_class: PacketGen::Types::Int16,
39
39
  # value_class: PacketGen::Header::IP::Addr)
@@ -61,6 +61,7 @@ module PacketGen
61
61
  class <<self
62
62
  # @return [Hash]
63
63
  attr_accessor :aliases
64
+ attr_accessor :header_in_length
64
65
  end
65
66
  self.aliases = {}
66
67
 
@@ -68,12 +69,17 @@ module PacketGen
68
69
  # @param [Class] type_class Class to use for +type+
69
70
  # @param [Class] length_class Class to use for +length+
70
71
  # @param [Class] value_class Class to use for +value+
72
+ # @param [Boolean] header_in_length if +true +, +type+ and +length+ fields are
73
+ # included in length
71
74
  # @return [Class]
72
- def self.create(type_class: Int8Enum, length_class: Int8, value_class: String, aliases: {})
75
+ # @since 3.1.4 Add +header_in_length+ parameter
76
+ def self.create(type_class: Int8Enum, length_class: Int8, value_class: String,
77
+ aliases: {}, header_in_length: false)
73
78
  raise Error, '.create cannot be called on a subclass of PacketGen::Types::AbstractTLV' unless self.equal? AbstractTLV
74
79
 
75
80
  klass = Class.new(self)
76
81
  klass.aliases = aliases
82
+ klass.header_in_length = header_in_length
77
83
 
78
84
  if type_class < Enum
79
85
  klass.define_field :type, type_class, enum: {}
@@ -117,6 +123,7 @@ module PacketGen
117
123
  # @option options [Integer] :length
118
124
  # @option options [Object] :value
119
125
  def initialize(options={})
126
+ @header_in_length = self.class.header_in_length
120
127
  self.class.aliases.each do |al, orig|
121
128
  options[orig] = options[al] if options.key?(al)
122
129
  end
@@ -136,7 +143,7 @@ module PacketGen
136
143
  idx += self[:type].sz
137
144
  self[:length].read str[idx, self[:length].sz]
138
145
  idx += self[:length].sz
139
- self[:value].read str[idx, self.length]
146
+ self[:value].read str[idx, real_length]
140
147
  self
141
148
  end
142
149
 
@@ -147,6 +154,7 @@ module PacketGen
147
154
  def value=(val)
148
155
  self[:value].from_human val
149
156
  self.length = self[:value].sz
157
+ self.length += self[:type].sz + self[:length].sz if @header_in_length
150
158
  val
151
159
  end
152
160
 
@@ -163,6 +171,16 @@ module PacketGen
163
171
  my_value = self[:value].is_a?(String) ? self[:value].inspect : self[:value].to_human
164
172
  "type:%s,length:%u,value:#{my_value}" % [human_type, length]
165
173
  end
174
+
175
+ private
176
+
177
+ def real_length
178
+ if @header_in_length
179
+ self.length - self[:type].sz - self[:length].sz
180
+ else
181
+ self.length
182
+ end
183
+ end
166
184
  end
167
185
  end
168
186
  end
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of PacketGen
2
4
  # See https://github.com/sdaubert/packetgen for more informations
3
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
6
  # This program is published under MIT license.
5
7
 
6
- # frozen_string_literal: true
7
-
8
8
  require 'forwardable'
9
9
 
10
10
  module PacketGen
@@ -106,7 +106,7 @@ module PacketGen
106
106
  # @return [void]
107
107
  def clear!
108
108
  @array.clear
109
- @counter.read(0) if @counter
109
+ @counter&.read(0)
110
110
  end
111
111
 
112
112
  # Delete an object from this array. Update associated counter if any
@@ -150,7 +150,7 @@ module PacketGen
150
150
  # @return [Array] self
151
151
  def <<(obj)
152
152
  push obj
153
- @counter.read(@counter.to_i + 1) if @counter
153
+ @counter&.read(@counter.to_i + 1)
154
154
  self
155
155
  end
156
156
 
@@ -160,7 +160,7 @@ module PacketGen
160
160
  def read(str)
161
161
  clear
162
162
  return self if str.nil?
163
- return self if @counter && @counter.to_i.zero?
163
+ return self if @counter&.to_i&.zero?
164
164
 
165
165
  str = read_with_length_from(str)
166
166
  klass = self.class.set_of_klass
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  # This file is part of PacketGen
3
5
  # See https://github.com/sdaubert/packetgen for more informations
4
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
7
  # This program is published under MIT license.
6
8
 
7
- # frozen_string_literal: true
8
-
9
9
  module PacketGen
10
10
  module Types
11
11
  # This class handles null-terminated strings (aka C strings).
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  # This file is part of PacketGen
3
5
  # See https://github.com/sdaubert/packetgen for more informations
4
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
7
  # This program is published under MIT license.
6
8
 
7
- # frozen_string_literal: true
8
-
9
9
  module PacketGen
10
10
  module Types
11
11
  # @abstract Base enum class to handle binary integers with limited
@@ -55,6 +55,7 @@ module PacketGen
55
55
  nil
56
56
  when ::String
57
57
  raise ArgumentError, "#{value.inspect} not in enumeration" unless @enum.key? value
58
+
58
59
  @enum[value]
59
60
  else
60
61
  value.to_i
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file is part of PacketGen
2
4
  # See https://github.com/sdaubert/packetgen for more informations
3
5
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
4
6
  # This program is published under MIT license.
5
7
 
6
- # frozen_string_literal: true
7
-
8
8
  module PacketGen
9
9
  module Types
10
10
  # @abstract Set of fields
@@ -183,14 +183,14 @@ module PacketGen
183
183
  " else\n" \
184
184
  " self[:#{name}]\n" \
185
185
  " end\n" \
186
- "end"
186
+ 'end'
187
187
  define << "def #{name}=(val)\n" \
188
188
  " if self[:#{name}].respond_to?(:to_human) && self[:#{name}].respond_to?(:from_human)\n" \
189
189
  " self[:#{name}].from_human val\n" \
190
190
  " else\n" \
191
191
  " self[:#{name}].read val\n" \
192
192
  " end\n" \
193
- "end"
193
+ 'end'
194
194
  end
195
195
 
196
196
  define.delete_at(1) if instance_methods.include? "#{name}=".to_sym
@@ -295,9 +295,7 @@ module PacketGen
295
295
  raise ArgumentError, "unknown #{attr} field" if attr_def.nil?
296
296
 
297
297
  type = attr_def.type
298
- unless type < Types::Int
299
- raise TypeError, "#{attr} is not a PacketGen::Types::Int"
300
- end
298
+ raise TypeError, "#{attr} is not a PacketGen::Types::Int" unless type < Types::Int
301
299
 
302
300
  total_size = type.new.width * 8
303
301
  idx = total_size - 1
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  # This file is part of PacketGen
3
5
  # See https://github.com/sdaubert/packetgen for more informations
4
6
  # Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
5
7
  # This program is published under MIT license.
6
8
 
7
- # frozen_string_literal: true
8
-
9
9
  module PacketGen
10
10
  module Types
11
11
  # Base integer class to handle binary integers
@@ -56,9 +56,7 @@ module PacketGen
56
56
  # @return [::String]
57
57
  # @raise [ParseError] This is an abstrat method and must be redefined
58
58
  def to_s
59
- unless defined? @packstr
60
- raise ParseError, 'PacketGen::Types::Int#to_s is an abstract method'
61
- end
59
+ raise ParseError, 'PacketGen::Types::Int#to_s is an abstract method' unless defined? @packstr
62
60
 
63
61
  [to_i].pack(@packstr[@endian])
64
62
  end