module RubySol

require ‘ruby_sol/values/typed_hash’ require ‘ruby_sol/values/messages’

Constants

AMF0_AMF3_MARKER
AMF0_BOOLEAN_MARKER
AMF0_DATE_MARKER
AMF0_HASH_MARKER
AMF0_LONG_STRING_MARKER
AMF0_MOVIE_CLIP_MARKER
AMF0_NULL_MARKER
AMF0_NUMBER_MARKER

AMF0 Type Markers

AMF0_OBJECT_END_MARKER
AMF0_OBJECT_MARKER
AMF0_RECORDSET_MARKER
AMF0_REFERENCE_MARKER
AMF0_STRICT_ARRAY_MARKER
AMF0_STRING_MARKER
AMF0_TYPED_OBJECT_MARKER
AMF0_UNDEFINED_MARKER
AMF0_UNSUPPORTED_MARKER
AMF0_XML_MARKER
AMF3_ARRAY_MARKER
AMF3_BYTE_ARRAY_MARKER
AMF3_CLOSE_DYNAMIC_ARRAY
AMF3_CLOSE_DYNAMIC_OBJECT
AMF3_DATE_MARKER
AMF3_DICT_MARKER
AMF3_DOUBLE_MARKER
AMF3_EMPTY_STRING

Other AMF3 Markers

AMF3_FALSE_MARKER
AMF3_INTEGER_MARKER
AMF3_NULL_MARKER
AMF3_OBJECT_MARKER
AMF3_STRING_MARKER
AMF3_TRUE_MARKER
AMF3_UNDEFINED_MARKER

AMF3 Type Markers

AMF3_VECTOR_DOUBLE_MARKER
AMF3_VECTOR_INT_MARKER
AMF3_VECTOR_OBJECT_MARKER
AMF3_VECTOR_UINT_MARKER
AMF3_XML_DOC_MARKER
AMF3_XML_MARKER
Deserializer
MAX_INTEGER

Other Constants

MIN_INTEGER
Serializer

Public Class Methods

create_sol(content) click to toggle source
   # File lib/ruby_sol.rb
60 def self.create_sol(content)
61   name = content['__ruby_sol__sol_name'] || 'unknown'
62   version = content['__ruby_sol__amf_version'] || 0
63 
64   ser = RubySol::Serializer.new(RubySol::ClassMapper.new)
65 
66   ser.stream << SOL_SIGNATURE
67   ser.amf0_write_string_wo_marker(name)
68   ser.stream << SOL_PADDING * 3
69   ser.stream << [version].pack('c')
70 
71   content.each_key { |key|
72     if key !~ /^__ruby_sol__/
73       if version == 0
74         ser.amf0_write_string_wo_marker(key)
75         ser.amf0_serialize(content[key])
76         ser.stream << SOL_PADDING
77       elsif version == 3
78         ser.amf3_write_utf8_vr(key)
79         ser.amf3_serialize(content[key])
80         ser.stream << SOL_PADDING
81       end
82     end
83   }
84   res = ser.stream
85   return SOL_HEADER.force_encoding("ASCII-8BIT") + [res.bytesize].pack('N').force_encoding("ASCII-8BIT") + res.force_encoding("ASCII-8BIT")
86 end
deserialize(source, amf_version = 0) click to toggle source

to have RocketAMF specs compatibility

    # File lib/ruby_sol.rb
 99 def self.deserialize source, amf_version = 0
100   des = RubySol::Deserializer.new(RubySol::ClassMapper.new)
101   des.deserialize(amf_version, source)
102 end
read_sol(source) click to toggle source

usage RubySol::read_sol(File.new(filename, ‘r:ASCII-8BIT’).read)

   # File lib/ruby_sol.rb
22 def self.read_sol(source)
23 
24   if StringIO === source
25     f = source
26   elsif source
27     f = StringIO.new(source)
28   elsif f.nil?
29     raise AMFError, "no source to deserialize"
30   end
31 
32   header = f.read(2)
33   len=f.read(4).unpack('N').first
34   throw SOLError, 'bad size' unless (len + 6 == f.size)
35   signature = f.read(10)
36   throw SOLError, 'bad signature' unless (signature == SOL_SIGNATURE)
37 
38   des = RubySol::Deserializer.new(RubySol::ClassMapper.new)
39   des.source = f
40   sol_name=des.amf0_read_string()
41 
42   zeros=f.read(3)
43   throw SOLError, 'bad signature' unless (zeros == SOL_PADDING * 3)
44 
45   amf_version = f.read(1).unpack('C').first
46   values = {'__ruby_sol__amf_version' => amf_version,
47             '__ruby_sol__sol_name' => sol_name }
48 
49   des.source = f
50 
51   while !f.eof?
52     str = amf_version == 3? des.amf3_read_string() : des.amf0_read_string();
53     obj = amf_version == 3? des.amf3_deserialize() : des.amf0_deserialize();
54     values[str] = obj
55     padding = f.read(1);
56   end
57   return values
58 end
serialize(obj, amf_version = 0) click to toggle source
    # File lib/ruby_sol.rb
103 def self.serialize obj, amf_version = 0
104   ser = RubySol::Serializer.new(RubySol::ClassMapper.new)
105   ser.serialize(amf_version, obj)
106 end