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