packetgen 2.8.4 → 2.8.5
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.
- checksums.yaml +4 -4
- data/lib/packetgen/deprecation.rb +6 -4
- data/lib/packetgen/header/dot11/data.rb +54 -0
- data/lib/packetgen/types/fields.rb +234 -221
- data/lib/packetgen/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6763c9433901ae848d2186d92ec47e3894b493b951c048d68e3a01bd52504563
|
4
|
+
data.tar.gz: 68ec7d1ea6a27fa2101d8c7b72800083cdebe80cf8eec93d52255d459fbc5f73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
15
|
-
|
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
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
field_defs
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
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
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
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
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
-
|
193
|
-
|
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
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
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
|
-
|
208
|
-
|
209
|
-
|
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
|
-
|
212
|
-
|
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
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
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
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
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
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
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
|
-
|
275
|
-
|
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
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
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
|
-
|
327
|
+
|
328
|
+
@bit_fields[attr] = {} if @bit_fields[attr].nil?
|
329
|
+
@bit_fields[attr][field] = size
|
318
330
|
end
|
319
331
|
|
320
|
-
|
321
|
-
|
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
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
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
|
-
|
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
|
data/lib/packetgen/version.rb
CHANGED
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
|
+
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-
|
11
|
+
date: 2018-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: interfacez
|