mrpin-rocketamf 1.0.2 → 1.0.3

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
  SHA1:
3
- metadata.gz: 1965a3a034f950dc7aed1f7fbba3fa1666cd37df
4
- data.tar.gz: 8f1219aa31b872caa196fc0933a1da5a1dbf4c84
3
+ metadata.gz: 4e8a83878828c26ef9906a0b891828dcf688dff8
4
+ data.tar.gz: 8b58e2eb9a56aa6686f4e37358536eea50d111d6
5
5
  SHA512:
6
- metadata.gz: f996de739792fc2b11cc721497a1744988b14d380be1d48f4b49ecae20cf406c0406f2a44787c25441bc61f2a4b9ec1b7a3cfaafbe92cfedc1293c7a51301ba1
7
- data.tar.gz: 24570900deb8ed752aaee960d85d331bf068aeaaf34dcf95c2c9a6117712eaeb978c5d35efa305b5449b29d8d4a00954f29a3eb6ed4029f3560d7b71c20fa3c0
6
+ metadata.gz: 4e12c5efe65968313ab9251f589421e7967507d1d9c892f3ddf76c73da9df996b3157ce458c7c5e56f0d0868e4b2198ffd9085718533e039daed179ed7f938ed
7
+ data.tar.gz: 755b54807d0f1f0fbb20ec1b95f3fb4f09cd62d5a820e8d021b5bab951e9c380aea99952fb713ec492d9d7d02be1b6000c3997996874c8642a4295f7bb1e0906
@@ -9,7 +9,7 @@ module RocketAMF
9
9
  # Pass in the class mapper instance to use when deserializing. This
10
10
  # enables better caching behavior in the class mapper and allows
11
11
  # one to change mappings between deserialization attempts.
12
- def initialize class_mapper
12
+ def initialize(class_mapper)
13
13
  @class_mapper = class_mapper
14
14
  end
15
15
 
@@ -17,93 +17,99 @@ module RocketAMF
17
17
  # be a string or StringIO object. If you pass a StringIO object,
18
18
  # it will have its position updated to the end of the deserialized
19
19
  # data.
20
- def deserialize version, source
21
- raise ArgumentError, "unsupported version #{version}" unless [0,3].include?(version)
20
+ def deserialize(version, source)
21
+ result = []
22
+
22
23
  @version = version
23
24
 
24
- if StringIO === source
25
+ if source.is_a?(StringIO)
25
26
  @source = source
26
27
  elsif source
27
28
  @source = StringIO.new(source)
28
29
  elsif @source.nil?
29
- raise AMFError, "no source to deserialize"
30
+ raise AMFError, 'no source to deserialize'
30
31
  end
31
32
 
32
- if @version == 0
33
- @ref_cache = []
34
- return amf0_deserialize
35
- else
36
- @string_cache = []
37
- @object_cache = []
38
- @trait_cache = []
39
- return amf3_deserialize
33
+ case @version
34
+ when 0
35
+ until @source.eof?
36
+ @ref_cache = []
37
+ result << amf0_deserialize
38
+ end
39
+ when 3
40
+ until @source.eof?
41
+ @string_cache = []
42
+ @object_cache = []
43
+ @trait_cache = []
44
+ result << amf3_deserialize
45
+ end
46
+ else
47
+ raise ArgumentError, "unsupported version #{version}"
40
48
  end
49
+
50
+ result
41
51
  end
42
52
 
43
53
  # Reads an object from the deserializer's stream and returns it.
44
54
  def read_object
45
- if @version == 0
46
- return amf0_deserialize
47
- else
48
- return amf3_deserialize
49
- end
55
+ @version == 0 ? amf0_deserialize : amf3_deserialize
50
56
  end
51
57
 
52
58
  private
53
59
  include RocketAMF::Pure::ReadIOHelpers
54
60
 
55
- def amf0_deserialize type=nil
61
+ def amf0_deserialize(type = nil)
56
62
  type = read_int8 @source unless type
57
63
  case type
58
- when AMF0_NUMBER_MARKER
59
- amf0_read_number
60
- when AMF0_BOOLEAN_MARKER
61
- amf0_read_boolean
62
- when AMF0_STRING_MARKER
63
- amf0_read_string
64
- when AMF0_OBJECT_MARKER
65
- amf0_read_object
66
- when AMF0_NULL_MARKER
67
- nil
68
- when AMF0_UNDEFINED_MARKER
69
- nil
70
- when AMF0_REFERENCE_MARKER
71
- amf0_read_reference
72
- when AMF0_HASH_MARKER
73
- amf0_read_hash
74
- when AMF0_STRICT_ARRAY_MARKER
75
- amf0_read_array
76
- when AMF0_DATE_MARKER
77
- amf0_read_date
78
- when AMF0_LONG_STRING_MARKER
79
- amf0_read_string true
80
- when AMF0_UNSUPPORTED_MARKER
81
- nil
82
- when AMF0_XML_MARKER
83
- amf0_read_string true
84
- when AMF0_TYPED_OBJECT_MARKER
85
- amf0_read_typed_object
86
- when AMF0_AMF3_MARKER
87
- deserialize(3, nil)
88
- else
89
- raise AMFError, "Invalid type: #{type}"
64
+ when AMF0_NUMBER_MARKER
65
+ amf0_read_number
66
+ when AMF0_BOOLEAN_MARKER
67
+ amf0_read_boolean
68
+ when AMF0_STRING_MARKER
69
+ amf0_read_string
70
+ when AMF0_OBJECT_MARKER
71
+ amf0_read_object
72
+ when AMF0_NULL_MARKER
73
+ nil
74
+ when AMF0_UNDEFINED_MARKER
75
+ nil
76
+ when AMF0_REFERENCE_MARKER
77
+ amf0_read_reference
78
+ when AMF0_HASH_MARKER
79
+ amf0_read_hash
80
+ when AMF0_STRICT_ARRAY_MARKER
81
+ amf0_read_array
82
+ when AMF0_DATE_MARKER
83
+ amf0_read_date
84
+ when AMF0_LONG_STRING_MARKER
85
+ amf0_read_string true
86
+ when AMF0_UNSUPPORTED_MARKER
87
+ nil
88
+ when AMF0_XML_MARKER
89
+ amf0_read_string true
90
+ when AMF0_TYPED_OBJECT_MARKER
91
+ amf0_read_typed_object
92
+ when AMF0_AMF3_MARKER
93
+ deserialize(3, nil)
94
+ else
95
+ raise AMFError, "Invalid type: #{type}"
90
96
  end
91
97
  end
92
98
 
93
99
  def amf0_read_number
94
- res = read_double @source
95
- (res.is_a?(Float) && res.nan?) ? nil : res # check for NaN and convert them to nil
100
+ result = read_double @source
101
+ (result.is_a?(Float) && result.nan?) ? nil : result # check for NaN and convert them to nil
96
102
  end
97
103
 
98
104
  def amf0_read_boolean
99
105
  read_int8(@source) != 0
100
106
  end
101
107
 
102
- def amf0_read_string long=false
103
- len = long ? read_word32_network(@source) : read_word16_network(@source)
104
- str = @source.read(len)
105
- str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
106
- str
108
+ def amf0_read_string(long=false)
109
+ len = long ? read_word32_network(@source) : read_word16_network(@source)
110
+ result = @source.read(len)
111
+ result.force_encoding('UTF-8') if result.respond_to?(:force_encoding)
112
+ result
107
113
  end
108
114
 
109
115
  def amf0_read_reference
@@ -112,26 +118,26 @@ module RocketAMF
112
118
  end
113
119
 
114
120
  def amf0_read_array
115
- len = read_word32_network(@source)
116
- array = []
117
- @ref_cache << array
121
+ len = read_word32_network(@source)
122
+ result = []
123
+ @ref_cache << result
118
124
 
119
125
  0.upto(len - 1) do
120
- array << amf0_deserialize
126
+ result << amf0_deserialize
121
127
  end
122
- array
128
+ result
123
129
  end
124
130
 
125
131
  def amf0_read_date
126
132
  seconds = read_double(@source).to_f/1000
127
- time = Time.at(seconds)
128
- tz = read_word16_network(@source) # Unused
133
+ time = Time.at(seconds)
134
+ tz = read_word16_network(@source) # Unused
129
135
  time
130
136
  end
131
137
 
132
- def amf0_read_props obj={}
138
+ def amf0_read_props(obj = {})
133
139
  while true
134
- key = amf0_read_string
140
+ key = amf0_read_string
135
141
  type = read_int8 @source
136
142
  break if type == AMF0_OBJECT_END_MARKER
137
143
  obj[key] = amf0_deserialize(type)
@@ -160,7 +166,7 @@ module RocketAMF
160
166
  def amf0_read_typed_object
161
167
  # Create object to add to ref cache
162
168
  class_name = amf0_read_string
163
- obj = @class_mapper.get_ruby_obj class_name
169
+ obj = @class_mapper.get_ruby_obj class_name
164
170
  @ref_cache << obj
165
171
 
166
172
  # Populate object
@@ -172,52 +178,52 @@ module RocketAMF
172
178
  def amf3_deserialize
173
179
  type = read_int8 @source
174
180
  case type
175
- when AMF3_UNDEFINED_MARKER
176
- nil
177
- when AMF3_NULL_MARKER
178
- nil
179
- when AMF3_FALSE_MARKER
180
- false
181
- when AMF3_TRUE_MARKER
182
- true
183
- when AMF3_INTEGER_MARKER
184
- amf3_read_integer
185
- when AMF3_DOUBLE_MARKER
186
- amf3_read_number
187
- when AMF3_STRING_MARKER
188
- amf3_read_string
189
- when AMF3_XML_DOC_MARKER, AMF3_XML_MARKER
190
- amf3_read_xml
191
- when AMF3_DATE_MARKER
192
- amf3_read_date
193
- when AMF3_ARRAY_MARKER
194
- amf3_read_array
195
- when AMF3_OBJECT_MARKER
196
- amf3_read_object
197
- when AMF3_BYTE_ARRAY_MARKER
198
- amf3_read_byte_array
199
- when AMF3_VECTOR_INT_MARKER, AMF3_VECTOR_UINT_MARKER, AMF3_VECTOR_DOUBLE_MARKER, AMF3_VECTOR_OBJECT_MARKER
200
- amf3_read_vector type
201
- when AMF3_DICT_MARKER
202
- amf3_read_dict
203
- else
204
- raise AMFError, "Invalid type: #{type}"
181
+ when AMF3_UNDEFINED_MARKER
182
+ nil
183
+ when AMF3_NULL_MARKER
184
+ nil
185
+ when AMF3_FALSE_MARKER
186
+ false
187
+ when AMF3_TRUE_MARKER
188
+ true
189
+ when AMF3_INTEGER_MARKER
190
+ amf3_read_integer
191
+ when AMF3_DOUBLE_MARKER
192
+ amf3_read_number
193
+ when AMF3_STRING_MARKER
194
+ amf3_read_string
195
+ when AMF3_XML_DOC_MARKER, AMF3_XML_MARKER
196
+ amf3_read_xml
197
+ when AMF3_DATE_MARKER
198
+ amf3_read_date
199
+ when AMF3_ARRAY_MARKER
200
+ amf3_read_array
201
+ when AMF3_OBJECT_MARKER
202
+ amf3_read_object
203
+ when AMF3_BYTE_ARRAY_MARKER
204
+ amf3_read_byte_array
205
+ when AMF3_VECTOR_INT_MARKER, AMF3_VECTOR_UINT_MARKER, AMF3_VECTOR_DOUBLE_MARKER, AMF3_VECTOR_OBJECT_MARKER
206
+ amf3_read_vector type
207
+ when AMF3_DICT_MARKER
208
+ amf3_read_dict
209
+ else
210
+ raise AMFError, "Invalid type: #{type}"
205
211
  end
206
212
  end
207
213
 
208
214
  def amf3_read_integer
209
- n = 0
210
- b = read_word8(@source) || 0
215
+ n = 0
216
+ b = read_word8(@source) || 0
211
217
  result = 0
212
218
 
213
219
  while ((b & 0x80) != 0 && n < 3)
214
220
  result = result << 7
215
221
  result = result | (b & 0x7f)
216
- b = read_word8(@source) || 0
217
- n = n + 1
222
+ b = read_word8(@source) || 0
223
+ n = n + 1
218
224
  end
219
225
 
220
- if (n < 3)
226
+ if n < 3
221
227
  result = result << 7
222
228
  result = result | b
223
229
  else
@@ -226,7 +232,7 @@ module RocketAMF
226
232
  result = result | b
227
233
 
228
234
  #Check if the integer should be negative
229
- if (result > MAX_INTEGER)
235
+ if result > MAX_INTEGER
230
236
  result -= (1 << 29)
231
237
  end
232
238
  end
@@ -239,7 +245,7 @@ module RocketAMF
239
245
  end
240
246
 
241
247
  def amf3_read_string
242
- type = amf3_read_integer
248
+ type = amf3_read_integer
243
249
  is_reference = (type & 0x01) == 0
244
250
 
245
251
  if is_reference
@@ -247,10 +253,10 @@ module RocketAMF
247
253
  return @string_cache[reference]
248
254
  else
249
255
  length = type >> 1
250
- str = ""
256
+ str = ''
251
257
  if length > 0
252
258
  str = @source.read(length)
253
- str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
259
+ str.force_encoding('UTF-8') if str.respond_to?(:force_encoding)
254
260
  @string_cache << str
255
261
  end
256
262
  return str
@@ -258,26 +264,30 @@ module RocketAMF
258
264
  end
259
265
 
260
266
  def amf3_read_xml
261
- type = amf3_read_integer
267
+ result = nil
268
+
269
+ type = amf3_read_integer
262
270
  is_reference = (type & 0x01) == 0
263
271
 
264
272
  if is_reference
265
273
  reference = type >> 1
266
- return @object_cache[reference]
274
+ result = @object_cache[reference]
267
275
  else
268
276
  length = type >> 1
269
- str = ""
277
+ str = ""
270
278
  if length > 0
271
279
  str = @source.read(length)
272
280
  str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
273
281
  @object_cache << str
274
282
  end
275
- return str
283
+ result = str
276
284
  end
285
+
286
+ result
277
287
  end
278
288
 
279
289
  def amf3_read_byte_array
280
- type = amf3_read_integer
290
+ type = amf3_read_integer
281
291
  is_reference = (type & 0x01) == 0
282
292
 
283
293
  if is_reference
@@ -285,65 +295,66 @@ module RocketAMF
285
295
  return @object_cache[reference]
286
296
  else
287
297
  length = type >> 1
288
- obj = StringIO.new @source.read(length)
298
+ obj = StringIO.new @source.read(length)
289
299
  @object_cache << obj
290
300
  obj
291
301
  end
292
302
  end
293
303
 
294
304
  def amf3_read_array
295
- type = amf3_read_integer
305
+ type = amf3_read_integer
296
306
  is_reference = (type & 0x01) == 0
297
307
 
298
308
  if is_reference
299
309
  reference = type >> 1
300
310
  return @object_cache[reference]
301
311
  else
302
- length = type >> 1
312
+ length = type >> 1
303
313
  property_name = amf3_read_string
304
- array = property_name.length > 0 ? {} : []
314
+ array = property_name.length > 0 ? {} : []
305
315
  @object_cache << array
306
316
 
307
317
  while property_name.length > 0
308
- value = amf3_deserialize
318
+ value = amf3_deserialize
309
319
  array[property_name] = value
310
- property_name = amf3_read_string
320
+ property_name = amf3_read_string
311
321
  end
312
- 0.upto(length - 1) {|i| array[i] = amf3_deserialize }
322
+ 0.upto(length - 1) { |i| array[i] = amf3_deserialize }
313
323
 
314
324
  array
315
325
  end
316
326
  end
317
327
 
318
328
  def amf3_read_object
319
- type = amf3_read_integer
329
+ type = amf3_read_integer
320
330
  is_reference = (type & 0x01) == 0
321
331
 
322
332
  if is_reference
323
333
  reference = type >> 1
324
334
  return @object_cache[reference]
325
335
  else
326
- class_type = type >> 1
336
+ class_type = type >> 1
327
337
  class_is_reference = (class_type & 0x01) == 0
328
338
 
329
339
  if class_is_reference
330
340
  reference = class_type >> 1
331
- traits = @trait_cache[reference]
341
+ traits = @trait_cache[reference]
332
342
  else
333
- externalizable = (class_type & 0x02) != 0
334
- dynamic = (class_type & 0x04) != 0
343
+ externalizable = (class_type & 0x02) != 0
344
+ dynamic = (class_type & 0x04) != 0
335
345
  attribute_count = class_type >> 3
336
- class_name = amf3_read_string
346
+ class_name = amf3_read_string
337
347
 
338
348
  class_attributes = []
339
- attribute_count.times{class_attributes << amf3_read_string} # Read class members
340
-
341
- traits = {
342
- :class_name => class_name,
343
- :members => class_attributes,
344
- :externalizable => externalizable,
345
- :dynamic => dynamic
346
- }
349
+ attribute_count.times { class_attributes << amf3_read_string } # Read class members
350
+
351
+ traits =
352
+ {
353
+ class_name: class_name,
354
+ members: class_attributes,
355
+ externalizable: externalizable,
356
+ dynamic: dynamic
357
+ }
347
358
  @trait_cache << traits
348
359
  end
349
360
 
@@ -362,15 +373,15 @@ module RocketAMF
362
373
  else
363
374
  props = {}
364
375
  traits[:members].each do |key|
365
- value = amf3_deserialize
376
+ value = amf3_deserialize
366
377
  props[key] = value
367
378
  end
368
379
 
369
380
  dynamic_props = nil
370
381
  if traits[:dynamic]
371
382
  dynamic_props = {}
372
- while (key = amf3_read_string) && key.length != 0 do # read next key
373
- value = amf3_deserialize
383
+ while (key = amf3_read_string) && key.length != 0 do # read next key
384
+ value = amf3_deserialize
374
385
  dynamic_props[key] = value
375
386
  end
376
387
  end
@@ -382,21 +393,21 @@ module RocketAMF
382
393
  end
383
394
 
384
395
  def amf3_read_date
385
- type = amf3_read_integer
396
+ type = amf3_read_integer
386
397
  is_reference = (type & 0x01) == 0
387
398
  if is_reference
388
399
  reference = type >> 1
389
400
  return @object_cache[reference]
390
401
  else
391
402
  seconds = read_double(@source).to_f/1000
392
- time = Time.at(seconds)
403
+ time = Time.at(seconds)
393
404
  @object_cache << time
394
405
  time
395
406
  end
396
407
  end
397
408
 
398
409
  def amf3_read_dict
399
- type = amf3_read_integer
410
+ type = amf3_read_integer
400
411
  is_reference = (type & 0x01) == 0
401
412
  if is_reference
402
413
  reference = type >> 1
@@ -404,7 +415,7 @@ module RocketAMF
404
415
  else
405
416
  dict = {}
406
417
  @object_cache << dict
407
- length = type >> 1
418
+ length = type >> 1
408
419
  weak_keys = read_int8 @source # Ignore: Not supported in ruby
409
420
  0.upto(length - 1) do |i|
410
421
  dict[amf3_deserialize] = amf3_deserialize
@@ -414,7 +425,7 @@ module RocketAMF
414
425
  end
415
426
 
416
427
  def amf3_read_vector vector_type
417
- type = amf3_read_integer
428
+ type = amf3_read_integer
418
429
  is_reference = (type & 0x01) == 0
419
430
  if is_reference
420
431
  reference = type >> 1
@@ -422,30 +433,30 @@ module RocketAMF
422
433
  else
423
434
  vec = []
424
435
  @object_cache << vec
425
- length = type >> 1
436
+ length = type >> 1
426
437
  fixed_vector = read_int8 @source # Ignore
427
438
  case vector_type
428
- when AMF3_VECTOR_INT_MARKER
429
- 0.upto(length - 1) do |i|
430
- int = read_word32_network(@source)
431
- int = int - 2**32 if int > MAX_INTEGER
432
- vec << int
433
- end
434
- when AMF3_VECTOR_UINT_MARKER
435
- 0.upto(length - 1) do |i|
436
- vec << read_word32_network(@source)
437
- puts vec[i].to_s(2)
438
- end
439
- when AMF3_VECTOR_DOUBLE_MARKER
440
- 0.upto(length - 1) do |i|
441
- vec << amf3_read_number
442
- end
443
- when AMF3_VECTOR_OBJECT_MARKER
444
- vector_class = amf3_read_string # Ignore
445
- puts vector_class
446
- 0.upto(length - 1) do |i|
447
- vec << amf3_deserialize
448
- end
439
+ when AMF3_VECTOR_INT_MARKER
440
+ 0.upto(length - 1) do |i|
441
+ int = read_word32_network(@source)
442
+ int = int - 2**32 if int > MAX_INTEGER
443
+ vec << int
444
+ end
445
+ when AMF3_VECTOR_UINT_MARKER
446
+ 0.upto(length - 1) do |i|
447
+ vec << read_word32_network(@source)
448
+ puts vec[i].to_s(2)
449
+ end
450
+ when AMF3_VECTOR_DOUBLE_MARKER
451
+ 0.upto(length - 1) do |i|
452
+ vec << amf3_read_number
453
+ end
454
+ when AMF3_VECTOR_OBJECT_MARKER
455
+ vector_class = amf3_read_string # Ignore
456
+ puts vector_class
457
+ 0.upto(length - 1) do |i|
458
+ vec << amf3_deserialize
459
+ end
449
460
  end
450
461
  vec
451
462
  end
@@ -357,7 +357,7 @@ module RocketAMF
357
357
  class_name = is_default ? "__default__" : traits[:class_name]
358
358
 
359
359
  # Write out traits
360
- if (class_name && @trait_cache[class_name] != nil)
360
+ if class_name && @trait_cache[class_name] != nil
361
361
  @stream << pack_integer(@trait_cache[class_name] << 2 | 0x01)
362
362
  else
363
363
  @trait_cache.add_obj class_name if class_name
@@ -370,8 +370,8 @@ module RocketAMF
370
370
  @stream << pack_integer(header)
371
371
 
372
372
  # Write out class name
373
- if class_name == "__default__"
374
- amf3_write_utf8_vr("")
373
+ if class_name == '__default__'
374
+ amf3_write_utf8_vr('')
375
375
  else
376
376
  amf3_write_utf8_vr(class_name.to_s)
377
377
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'mrpin-rocketamf'
5
- s.version = '1.0.2'
5
+ s.version = '1.0.3'
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ['Jacob Henry', 'Stephen Augenstein', "Joc O'Connor"]
8
8
  s.email = ['perl.programmer@gmail.com']
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mrpin-rocketamf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Henry
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-08-22 00:00:00.000000000 Z
13
+ date: 2014-08-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake-compiler