packetgen 2.3.0 → 2.4.0

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.
@@ -148,6 +148,24 @@ module PacketGen
148
148
  self
149
149
  end
150
150
 
151
+ # Insert a header in packet
152
+ # @param [Header] prev header after which insert new one
153
+ # @param [String] protocol protocol to insert
154
+ # @param [Hash] options protocol specific options
155
+ # @return [self]
156
+ # @raise [ArgumentError] unknown protocol
157
+ def insert(prev, protocol, options={})
158
+ klass = check_protocol(protocol)
159
+
160
+ nxt = prev.body
161
+ header = klass.new(options)
162
+ add_header header, previous_header: prev
163
+ idx = @headers.index(prev) + 1
164
+ @headers[idx, 0] = header
165
+ header[:body] = nxt
166
+ self
167
+ end
168
+
151
169
  # Check if a protocol header is embedded in packet
152
170
  # @return [Boolean]
153
171
  # @raise [ArgumentError] unknown protocol
@@ -46,6 +46,7 @@ module PacketGen
46
46
  obj = klass.new.read(str)
47
47
  self.push obj
48
48
  str.slice!(0, obj.sz)
49
+ break if @counter and self.size == @counter.to_i
49
50
  end
50
51
  self
51
52
  end
@@ -26,19 +26,20 @@ module PacketGen
26
26
  # @return [String] self
27
27
  def read(str)
28
28
  s = str.to_s
29
- s = case @length_from
30
- when Types::Int
31
- s[0, @length_from.to_i]
32
- when Proc
33
- s[0, @length_from.call]
34
- else
35
- if @static_length.is_a? Integer
36
- s[0, @static_length]
37
- else
38
- s
39
- end
40
- end
41
- self.replace s
29
+ str_end = case @length_from
30
+ when Types::Int
31
+ str_end = @length_from.to_i
32
+ when Proc
33
+ str_end = @length_from.call
34
+ else
35
+ if @static_length.is_a? Integer
36
+ str_end = @static_length
37
+ else
38
+ str_end = s.size
39
+ end
40
+ end
41
+ str_end = 0 if str_end < 0
42
+ self.replace(s[0, str_end])
42
43
  self
43
44
  end
44
45
 
@@ -8,5 +8,5 @@
8
8
  # @author Sylvain Daubert
9
9
  module PacketGen
10
10
  # PacketGen version
11
- VERSION = '2.3.0'
11
+ VERSION = '2.4.0'
12
12
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packetgen
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Daubert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-17 00:00:00.000000000 Z
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pcaprub
@@ -185,6 +185,11 @@ files:
185
185
  - lib/packetgen/header/http/response.rb
186
186
  - lib/packetgen/header/icmp.rb
187
187
  - lib/packetgen/header/icmpv6.rb
188
+ - lib/packetgen/header/igmp.rb
189
+ - lib/packetgen/header/igmpv3.rb
190
+ - lib/packetgen/header/igmpv3/group_record.rb
191
+ - lib/packetgen/header/igmpv3/mq.rb
192
+ - lib/packetgen/header/igmpv3/mr.rb
188
193
  - lib/packetgen/header/ike.rb
189
194
  - lib/packetgen/header/ike/auth.rb
190
195
  - lib/packetgen/header/ike/cert.rb
@@ -199,8 +204,19 @@ files:
199
204
  - lib/packetgen/header/ike/ts.rb
200
205
  - lib/packetgen/header/ike/vendor_id.rb
201
206
  - lib/packetgen/header/ip.rb
207
+ - lib/packetgen/header/ip/addr.rb
208
+ - lib/packetgen/header/ip/option.rb
209
+ - lib/packetgen/header/ip/options.rb
202
210
  - lib/packetgen/header/ipv6.rb
211
+ - lib/packetgen/header/ipv6/addr.rb
212
+ - lib/packetgen/header/ipv6/extension.rb
213
+ - lib/packetgen/header/ipv6/hop_by_hop.rb
203
214
  - lib/packetgen/header/llc.rb
215
+ - lib/packetgen/header/mld.rb
216
+ - lib/packetgen/header/mldv2.rb
217
+ - lib/packetgen/header/mldv2/mcast_address_record.rb
218
+ - lib/packetgen/header/mldv2/mlq.rb
219
+ - lib/packetgen/header/mldv2/mlr.rb
204
220
  - lib/packetgen/header/snmp.rb
205
221
  - lib/packetgen/header/tcp.rb
206
222
  - lib/packetgen/header/tcp/option.rb