packetgen 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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