packetgen 2.8.4 → 2.8.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd941670ed94baa729f5ee91da53062195f6764b3e75d7e70cbbc09075adfdc2
4
- data.tar.gz: 4e5b3082f9ada7a234fc559baf53f8abb0ab374e76391c938505f82235a2a58a
3
+ metadata.gz: 6763c9433901ae848d2186d92ec47e3894b493b951c048d68e3a01bd52504563
4
+ data.tar.gz: 68ec7d1ea6a27fa2101d8c7b72800083cdebe80cf8eec93d52255d459fbc5f73
5
5
  SHA512:
6
- metadata.gz: ebe8bf700763779d708b96bc7731dec2e73b2aa9c23308b9b2f63743c785bc989dfeea01d1b04dba8210f031f6047791151f06a4671b0980bd429becc653403c
7
- data.tar.gz: 9243425668eba786664e28a55edb7458b0d51bb27e3ca09ac68573b9d41e0cb5f087fe677f93c5d05aef05ac55adc08220475c643e1da81958259ab07b34407c
6
+ metadata.gz: d8166a6b1fee9a6d8ed45af7f100368272576cc6242e367e1735b204362e75fe5b76839fb53b75046a42cb7e5e3518705142ee9ef2a4326f44ea080f9f70c35b
7
+ data.tar.gz: 7079595e88887e39e1bb5b2e6d24689710cc0edcf2399d67fcf20964fa160481654b3e0ce1375739844465d51428b7c3a67f55fa0e008c9e379cbddff8cf5847
@@ -4,15 +4,17 @@ module PacketGen
4
4
  # @author Sylvain Daubert
5
5
  # @api private
6
6
  module Deprecation
7
- def self.deprecated(klass, deprecated_method, new_method, klass_method: false, remove_version: '3.0.0')
7
+ def self.deprecated(klass, deprecated_method, new_method=nil, klass_method: false, remove_version: '3.0.0')
8
8
  separator = klass_method ? '.' : '#'
9
9
  base_name = klass.to_s + separator
10
10
  complete_deprecated_method_name = base_name + deprecated_method.to_s
11
- complete_new_method_name = base_name + new_method.to_s
11
+ complete_new_method_name = base_name + new_method.to_s unless new_method.nil?
12
12
 
13
13
  file, line = caller(2).first.split(':')[0, 2]
14
- warn "#{file}:#{line}: #{complete_deprecated_method_name} is deprecated in favor of #{complete_new_method_name}. " \
15
- "It will be remove in PacketGen #{remove_version}."
14
+ message = +"#{file}:#{line}: #{complete_deprecated_method_name} is deprecated"
15
+ message << "in favor of #{complete_new_method_name}" unless new_method.nil?
16
+ message << ". It will be remove in PacketGen #{remove_version}."
17
+ warn message
16
18
  end
17
19
  end
18
20
  end
@@ -64,6 +64,60 @@ module PacketGen
64
64
  self
65
65
  end
66
66
 
67
+ # Get destination MAC address
68
+ # @return [String]
69
+ def dst
70
+ ds = frame_ctrl & 3
71
+ case ds
72
+ when 0, 2
73
+ self.mac1
74
+ when 1, 3
75
+ self.mac3
76
+ end
77
+ end
78
+
79
+ # Set destination MAC address
80
+ # @param [String] mac MAC address to set
81
+ # @return [String]
82
+ def dst=(mac)
83
+ ds = frame_ctrl & 3
84
+ case ds
85
+ when 0, 2
86
+ self.mac1 = mac
87
+ when 1, 3
88
+ self.mac3 = mac
89
+ end
90
+ end
91
+
92
+ # Get source MAC address
93
+ # @return [String]
94
+ def src
95
+ ds = frame_ctrl & 3
96
+ case ds
97
+ when 0, 1
98
+ self.mac2
99
+ when 2
100
+ self.mac3
101
+ when 3
102
+ self.mac4
103
+ end
104
+ end
105
+
106
+ # Set source MAC address
107
+ # @param [String] mac MAC address to set
108
+ # @return [String]
109
+ def src=(mac)
110
+ ds = frame_ctrl & 3
111
+ case ds
112
+ when 0, 1
113
+ self.mac2 = mac
114
+ when 2
115
+ self.mac3 = mac
116
+ when 3
117
+ self.mac4 = mac
118
+ end
119
+ end
120
+
67
121
  private
68
122
 
69
123
  def define_applicable_fields
@@ -94,249 +94,258 @@ module PacketGen
94
94
  # offset subfield from +frag+ field.
95
95
  # @author Sylvain Daubert
96
96
  class Fields
97
- # @private
97
+ # @private field names, ordered as they were declared
98
98
  @ordered_fields = []
99
- # @private
99
+ # @private field definitions
100
100
  @field_defs = {}
101
- # @private
101
+ # @private bit field definitions
102
102
  @bit_fields = {}
103
103
 
104
- # On inheritage, create +@field_defs+ class variable
105
- # @param [Class] klass
106
- # @return [void]
107
- def self.inherited(klass)
108
- field_defs = {}
109
- @field_defs.each do |k, v|
110
- field_defs[k] = v.clone
111
- end
112
- ordered = @ordered_fields.clone
113
- bf = @bit_fields.clone
114
- klass.class_eval do
115
- @ordered_fields = ordered
116
- @field_defs = field_defs
117
- @bit_fields = bf
104
+ class <<self
105
+ # On inheritage, create +@field_defs+ class variable
106
+ # @param [Class] klass
107
+ # @return [void]
108
+ def inherited(klass)
109
+ field_defs = {}
110
+ @field_defs.each do |k, v|
111
+ field_defs[k] = v.clone
112
+ end
113
+ ordered = @ordered_fields.clone
114
+ bf = @bit_fields.clone
115
+ klass.class_eval do
116
+ @ordered_fields = ordered
117
+ @field_defs = field_defs
118
+ @bit_fields = bf
119
+ end
118
120
  end
119
- end
120
121
 
121
- # Define a field in class
122
- # class BinaryStruct < PacketGen::Types::Fields
123
- # # 8-bit value
124
- # define_field :value1, Types::Int8
125
- # # 16-bit value
126
- # define_field :value2, Types::Int16
127
- # # specific class, may use a specific constructor
128
- # define_field :value3, MyClass, builder: ->(obj, type) { type.new(obj) }
129
- # end
130
- #
131
- # bs = BinaryStruct.new
132
- # bs[value1] # => Types::Int8
133
- # bs.value1 # => Integer
134
- # @param [Symbol] name field name
135
- # @param [Object] type class or instance
136
- # @param [Hash] options Unrecognized options are passed to object builder if
137
- # +:builder+ option is not set.
138
- # @option options [Object] :default default value. May be a proc. This lambda
139
- # take one argument: the caller object.
140
- # @option options [Lambda] :builder lambda to construct this field.
141
- # Parameters to this lambda is the caller object and the field type class.
142
- # @option options [Lambda] :optional define this field as optional. Given lambda
143
- # is used to known if this field is present or not. Parameter to this lambda is
144
- # the being defined Field object.
145
- # @option options [Hash] :enum mandatory option for an {Enum} type.
146
- # Define enumeration: hash's keys are +String+, and values are +Integer+.
147
- # @return [void]
148
- def self.define_field(name, type, options={})
149
- define = []
150
- if type < Types::Enum
151
- define << "def #{name}; self[:#{name}].to_i; end"
152
- define << "def #{name}=(val) self[:#{name}].value = val; end"
153
- elsif type < Types::Int
154
- define << "def #{name}; self[:#{name}].to_i; end"
155
- define << "def #{name}=(val) self[:#{name}].read val; end"
156
- elsif type.instance_methods.include?(:to_human) &&
157
- type.instance_methods.include?(:from_human)
158
- define << "def #{name}; self[:#{name}].to_human; end"
159
- define << "def #{name}=(val) self[:#{name}].from_human val; end"
160
- else
161
- define << "def #{name}; self[:#{name}]; end\n"
162
- define << "def #{name}=(val) self[:#{name}].read val; end"
122
+ # Get field names
123
+ # @return [Array<Symbol>]
124
+ def fields
125
+ @ordered_fields
163
126
  end
164
127
 
165
- define.delete(1) if type.instance_methods.include? "#{name}=".to_sym
166
- define.delete(0) if type.instance_methods.include? name
167
- class_eval define.join("\n")
168
- @field_defs[name] = [type, options.delete(:default),
169
- options.delete(:builder),
170
- options.delete(:optional),
171
- options.delete(:enum),
172
- options]
173
- @ordered_fields << name
174
- end
175
-
176
- # Define a field, before another one
177
- # @param [Symbol,nil] other field name to create a new one before. If +nil+,
178
- # new field is appended.
179
- # @param [Symbol] name field name to create
180
- # @param [Object] type class or instance
181
- # @param [Hash] options See {.define_field}.
182
- # @return [void]
183
- # @see .define_field
184
- def self.define_field_before(other, name, type, options={})
185
- define_field name, type, options
186
- return if other.nil?
187
-
188
- @ordered_fields.delete name
189
- idx = @ordered_fields.index(other)
190
- raise ArgumentError, "unknown #{other} field" if idx.nil?
128
+ # Define a field in class
129
+ # class BinaryStruct < PacketGen::Types::Fields
130
+ # # 8-bit value
131
+ # define_field :value1, Types::Int8
132
+ # # 16-bit value
133
+ # define_field :value2, Types::Int16
134
+ # # specific class, may use a specific constructor
135
+ # define_field :value3, MyClass, builder: ->(obj, type) { type.new(obj) }
136
+ # end
137
+ #
138
+ # bs = BinaryStruct.new
139
+ # bs[value1] # => Types::Int8
140
+ # bs.value1 # => Integer
141
+ # @param [Symbol] name field name
142
+ # @param [Object] type class or instance
143
+ # @param [Hash] options Unrecognized options are passed to object builder if
144
+ # +:builder+ option is not set.
145
+ # @option options [Object] :default default value. May be a proc. This lambda
146
+ # take one argument: the caller object.
147
+ # @option options [Lambda] :builder lambda to construct this field.
148
+ # Parameters to this lambda is the caller object and the field type class.
149
+ # @option options [Lambda] :optional define this field as optional. Given lambda
150
+ # is used to known if this field is present or not. Parameter to this lambda is
151
+ # the being defined Field object.
152
+ # @option options [Hash] :enum mandatory option for an {Enum} type.
153
+ # Define enumeration: hash's keys are +String+, and values are +Integer+.
154
+ # @return [void]
155
+ def define_field(name, type, options={})
156
+ define = []
157
+ if type < Types::Enum
158
+ define << "def #{name}; self[:#{name}].to_i; end"
159
+ define << "def #{name}=(val) self[:#{name}].value = val; end"
160
+ elsif type < Types::Int
161
+ define << "def #{name}; self[:#{name}].to_i; end"
162
+ define << "def #{name}=(val) self[:#{name}].read val; end"
163
+ elsif type.instance_methods.include?(:to_human) &&
164
+ type.instance_methods.include?(:from_human)
165
+ define << "def #{name}; self[:#{name}].to_human; end"
166
+ define << "def #{name}=(val) self[:#{name}].from_human val; end"
167
+ else
168
+ define << "def #{name}; self[:#{name}]; end\n"
169
+ define << "def #{name}=(val) self[:#{name}].read val; end"
170
+ end
191
171
 
192
- @ordered_fields[idx, 0] = name
193
- end
172
+ define.delete(1) if type.instance_methods.include? "#{name}=".to_sym
173
+ define.delete(0) if type.instance_methods.include? name
174
+ class_eval define.join("\n")
175
+ @field_defs[name] = [type, options.delete(:default),
176
+ options.delete(:builder),
177
+ options.delete(:optional),
178
+ options.delete(:enum),
179
+ options]
180
+ fields << name
181
+ end
194
182
 
195
- # Define a field, after another one
196
- # @param [Symbol,nil] other field name to create a new one after. If +nil+,
197
- # new field is appended.
198
- # @param [Symbol] name field name to create
199
- # @param [Object] type class or instance
200
- # @param [Hash] options See {.define_field}.
201
- # @return [void]
202
- # @see .define_field
203
- def self.define_field_after(other, name, type, options={})
204
- define_field name, type, options
205
- return if other.nil?
183
+ # Define a field, before another one
184
+ # @param [Symbol,nil] other field name to create a new one before. If +nil+,
185
+ # new field is appended.
186
+ # @param [Symbol] name field name to create
187
+ # @param [Object] type class or instance
188
+ # @param [Hash] options See {.define_field}.
189
+ # @return [void]
190
+ # @see .define_field
191
+ def define_field_before(other, name, type, options={})
192
+ define_field name, type, options
193
+ return if other.nil?
194
+
195
+ fields.delete name
196
+ idx = fields.index(other)
197
+ raise ArgumentError, "unknown #{other} field" if idx.nil?
198
+
199
+ fields[idx, 0] = name
200
+ end
206
201
 
207
- @ordered_fields.delete name
208
- idx = @ordered_fields.index(other)
209
- raise ArgumentError, "unknown #{other} field" if idx.nil?
202
+ # Define a field, after another one
203
+ # @param [Symbol,nil] other field name to create a new one after. If +nil+,
204
+ # new field is appended.
205
+ # @param [Symbol] name field name to create
206
+ # @param [Object] type class or instance
207
+ # @param [Hash] options See {.define_field}.
208
+ # @return [void]
209
+ # @see .define_field
210
+ def define_field_after(other, name, type, options={})
211
+ define_field name, type, options
212
+ return if other.nil?
213
+
214
+ fields.delete name
215
+ idx = fields.index(other)
216
+ raise ArgumentError, "unknown #{other} field" if idx.nil?
217
+
218
+ fields[idx + 1, 0] = name
219
+ end
210
220
 
211
- @ordered_fields[idx + 1, 0] = name
212
- end
221
+ # Remove a previously defined field
222
+ # @param [Symbol] name
223
+ # @return [void]
224
+ # @since 2.8.4
225
+ def remove_field(name)
226
+ fields.delete name
227
+ @field_defs.delete name
228
+ undef_method name
229
+ undef_method "#{name}="
230
+ end
213
231
 
214
- # Remove a previously defined field
215
- # @param [Symbol] name
216
- # @return [void]
217
- # @since 2.8.4
218
- def self.remove_field(name)
219
- @ordered_fields.delete name
220
- @field_defs.delete name
221
- undef_method name
222
- undef_method "#{name}="
223
- end
232
+ # Delete a previously defined field
233
+ # @param [Symbol] name
234
+ # @return [void]
235
+ # @deprecated Use {.remove_field} instead.
236
+ # @since 2.8.4 deprecated
237
+ def delete_field(name)
238
+ Deprecation.deprecated(self, __method__, 'remove_field', klass_method: true)
239
+ remove_field name
240
+ end
224
241
 
225
- # Delete a previously defined field
226
- # @param [Symbol] name
227
- # @return [void]
228
- # @deprecated Use {.remove_field} instead.
229
- # @since 2.8.4 deprecated
230
- def self.delete_field(name)
231
- Deprecation.deprecated(self, __method__, 'remove_field', klass_method: true)
232
- remove_field name
233
- end
234
- # Update a previously defined field
235
- # @param [Symbol] field field name to create
236
- # @param [Hash] options See {.define_field}.
237
- # @return [void]
238
- # @see .define_field
239
- # @raise [ArgumentError] unknown +field+
240
- # @since 2.8.4
241
- def self.update_field(field, options)
242
- raise ArgumentError, "unkown #{field} field for #{self}" unless @field_defs.key?(field)
243
-
244
- @field_defs[field][1] = options.delete(:default) if options.key?(:default)
245
- @field_defs[field][2] = options.delete(:builder) if options.key?(:builder)
246
- @field_defs[field][3] = options.delete(:optional) if options.key?(:optional)
247
- @field_defs[field][4] = options.delete(:enum) if options.key?(:enum)
248
- @field_defs[field][5].merge!(options)
249
- end
242
+ # Update a previously defined field
243
+ # @param [Symbol] field field name to create
244
+ # @param [Hash] options See {.define_field}.
245
+ # @return [void]
246
+ # @see .define_field
247
+ # @raise [ArgumentError] unknown +field+
248
+ # @since 2.8.4
249
+ def update_field(field, options)
250
+ raise ArgumentError, "unkown #{field} field for #{self}" unless @field_defs.key?(field)
251
+
252
+ @field_defs[field][1] = options.delete(:default) if options.key?(:default)
253
+ @field_defs[field][2] = options.delete(:builder) if options.key?(:builder)
254
+ @field_defs[field][3] = options.delete(:optional) if options.key?(:optional)
255
+ @field_defs[field][4] = options.delete(:enum) if options.key?(:enum)
256
+ @field_defs[field][5].merge!(options)
257
+ end
250
258
 
251
- # Define a bitfield on given attribute
252
- # class MyHeader < PacketGen::Types::Fields
253
- # define_field :flags, Types::Int16
254
- # # define a bit field on :flag attribute:
255
- # # flag1, flag2 and flag3 are 1-bit fields
256
- # # type and stype are 3-bit fields. reserved is a 6-bit field
257
- # define_bit_fields_on :flags, :flag1, :flag2, :flag3, :type, 3, :stype, 3, :reserved, 7
258
- # end
259
- # A bitfield of size 1 bit defines 2 methods:
260
- # * +#field?+ which returns a Boolean,
261
- # * +#field=+ which takes and returns a Boolean.
262
- # A bitfield of more bits defines 2 methods:
263
- # * +#field+ which returns an Integer,
264
- # * +#field=+ which takes and returns an Integer.
265
- # @param [Symbol] attr attribute name (attribute should be a {Types::Int}
266
- # subclass)
267
- # @param [Array] args list of bitfield names. Name may be followed
268
- # by bitfield size. If no size is given, 1 bit is assumed.
269
- # @return [void]
270
- def self.define_bit_fields_on(attr, *args)
271
- attr_def = @field_defs[attr]
272
- raise ArgumentError, "unknown #{attr} field" if attr_def.nil?
259
+ # Define a bitfield on given attribute
260
+ # class MyHeader < PacketGen::Types::Fields
261
+ # define_field :flags, Types::Int16
262
+ # # define a bit field on :flag attribute:
263
+ # # flag1, flag2 and flag3 are 1-bit fields
264
+ # # type and stype are 3-bit fields. reserved is a 6-bit field
265
+ # define_bit_fields_on :flags, :flag1, :flag2, :flag3, :type, 3, :stype, 3, :reserved, 7
266
+ # end
267
+ # A bitfield of size 1 bit defines 2 methods:
268
+ # * +#field?+ which returns a Boolean,
269
+ # * +#field=+ which takes and returns a Boolean.
270
+ # A bitfield of more bits defines 2 methods:
271
+ # * +#field+ which returns an Integer,
272
+ # * +#field=+ which takes and returns an Integer.
273
+ # @param [Symbol] attr attribute name (attribute should be a {Types::Int}
274
+ # subclass)
275
+ # @param [Array] args list of bitfield names. Name may be followed
276
+ # by bitfield size. If no size is given, 1 bit is assumed.
277
+ # @return [void]
278
+ def define_bit_fields_on(attr, *args)
279
+ attr_def = @field_defs[attr]
280
+ raise ArgumentError, "unknown #{attr} field" if attr_def.nil?
281
+
282
+ type = attr_def.first
283
+ unless type < Types::Int
284
+ raise TypeError, "#{attr} is not a PacketGen::Types::Int"
285
+ end
273
286
 
274
- type = attr_def.first
275
- unless type < Types::Int
276
- raise TypeError, "#{attr} is not a PacketGen::Types::Int"
277
- end
287
+ total_size = type.new.width * 8
288
+ idx = total_size - 1
278
289
 
279
- total_size = type.new.width * 8
280
- idx = total_size - 1
281
-
282
- field = args.shift
283
- while field
284
- next unless field.is_a? Symbol
285
-
286
- size = if args.first.is_a? Integer
287
- args.shift
288
- else
289
- 1
290
- end
291
- unless field == :_
292
- shift = idx - (size - 1)
293
- field_mask = (2**size - 1) << shift
294
- clear_mask = (2**total_size - 1) & (~field_mask & (2**total_size - 1))
295
-
296
- if size == 1
297
- class_eval <<-METHODS
298
- def #{field}?
299
- val = (self[:#{attr}].to_i & #{field_mask}) >> #{shift}
300
- val != 0
301
- end
302
- def #{field}=(v)
303
- val = v ? 1 : 0
304
- self[:#{attr}].value = self[:#{attr}].to_i & #{clear_mask}
305
- self[:#{attr}].value |= val << #{shift}
306
- end
307
- METHODS
308
- else
309
- class_eval <<-METHODS
310
- def #{field}
311
- (self[:#{attr}].to_i & #{field_mask}) >> #{shift}
312
- end
313
- def #{field}=(v)
314
- self[:#{attr}].value = self[:#{attr}].to_i & #{clear_mask}
315
- self[:#{attr}].value |= (v & #{2**size - 1}) << #{shift}
290
+ field = args.shift
291
+ while field
292
+ next unless field.is_a? Symbol
293
+
294
+ size = if args.first.is_a? Integer
295
+ args.shift
296
+ else
297
+ 1
298
+ end
299
+ unless field == :_
300
+ shift = idx - (size - 1)
301
+ field_mask = (2**size - 1) << shift
302
+ clear_mask = (2**total_size - 1) & (~field_mask & (2**total_size - 1))
303
+
304
+ if size == 1
305
+ class_eval <<-METHODS
306
+ def #{field}?
307
+ val = (self[:#{attr}].to_i & #{field_mask}) >> #{shift}
308
+ val != 0
309
+ end
310
+ def #{field}=(v)
311
+ val = v ? 1 : 0
312
+ self[:#{attr}].value = self[:#{attr}].to_i & #{clear_mask}
313
+ self[:#{attr}].value |= val << #{shift}
314
+ end
315
+ METHODS
316
+ else
317
+ class_eval <<-METHODS
318
+ def #{field}
319
+ (self[:#{attr}].to_i & #{field_mask}) >> #{shift}
320
+ end
321
+ def #{field}=(v)
322
+ self[:#{attr}].value = self[:#{attr}].to_i & #{clear_mask}
323
+ self[:#{attr}].value |= (v & #{2**size - 1}) << #{shift}
324
+ end
325
+ METHODS
316
326
  end
317
- METHODS
327
+
328
+ @bit_fields[attr] = {} if @bit_fields[attr].nil?
329
+ @bit_fields[attr][field] = size
318
330
  end
319
331
 
320
- @bit_fields[attr] = {} if @bit_fields[attr].nil?
321
- @bit_fields[attr][field] = size
332
+ idx -= size
333
+ field = args.shift
322
334
  end
323
-
324
- idx -= size
325
- field = args.shift
326
335
  end
327
- end
328
336
 
329
- # Remove all bit fields defined on +attr+
330
- # @param [Symbol] attr attribute defining bit fields
331
- # @return [void]
332
- # @since 2.8.4
333
- def self.remove_bit_fields_on(attr)
334
- fields = @bit_fields.delete(attr)
335
- return if fields.nil?
336
-
337
- fields.each do |field, size|
338
- undef_method "#{field}="
339
- undef_method(size == 1 ? "#{field}?" : "#{field}")
337
+ # Remove all bit fields defined on +attr+
338
+ # @param [Symbol] attr attribute defining bit fields
339
+ # @return [void]
340
+ # @since 2.8.4
341
+ def remove_bit_fields_on(attr)
342
+ fields = @bit_fields.delete(attr)
343
+ return if fields.nil?
344
+
345
+ fields.each do |field, size|
346
+ undef_method "#{field}="
347
+ undef_method(size == 1 ? "#{field}?" : "#{field}")
348
+ end
340
349
  end
341
350
  end
342
351
 
@@ -405,7 +414,7 @@ module PacketGen
405
414
  # Get all field names
406
415
  # @return [Array<Symbol>]
407
416
  def fields
408
- @ordered_fields ||= self.class.class_eval { @ordered_fields }
417
+ self.class.fields
409
418
  end
410
419
 
411
420
  # Get all optional field name
@@ -435,6 +444,7 @@ module PacketGen
435
444
 
436
445
  # Say if an optional field is present
437
446
  # @return [Boolean]
447
+ # @deprecated Use {#present?} instead.
438
448
  def is_present?(field)
439
449
  Deprecation.deprecated(self.class, __method__, 'present?', klass_method: true)
440
450
  present? field
@@ -507,7 +517,9 @@ module PacketGen
507
517
  # @return [void]
508
518
  # @raise [BodyError] no body on given object
509
519
  # @raise [ArgumentError] cannot cram +body+ in +:body+ field
520
+ # @deprecated
510
521
  def body=(value)
522
+ Deprecation.deprecated(self.class, __method__)
511
523
  raise BodyError, 'no body field' unless @fields.key? :body
512
524
 
513
525
  case body
@@ -525,6 +537,7 @@ module PacketGen
525
537
  # Force str to binary encoding
526
538
  # @param [String] str
527
539
  # @return [String]
540
+ # @deprecated Will be a private method
528
541
  def force_binary(str)
529
542
  PacketGen.force_binary(str)
530
543
  end
@@ -10,5 +10,5 @@
10
10
  # @author Sylvain Daubert
11
11
  module PacketGen
12
12
  # PacketGen version
13
- VERSION = '2.8.4'
13
+ VERSION = '2.8.5'
14
14
  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.8.4
4
+ version: 2.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Daubert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-02 00:00:00.000000000 Z
11
+ date: 2018-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: interfacez