mrpin-rocketamf 1.0.2 → 1.0.3
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/rocketamf/pure/deserializer.rb +174 -163
- data/lib/rocketamf/pure/serializer.rb +3 -3
- data/mrpin-rocketamf.gemspec +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 4e8a83878828c26ef9906a0b891828dcf688dff8
         | 
| 4 | 
            +
              data.tar.gz: 8b58e2eb9a56aa6686f4e37358536eea50d111d6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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 | 
| 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 | 
| 21 | 
            -
                     | 
| 20 | 
            +
                  def deserialize(version, source)
         | 
| 21 | 
            +
                    result = []
         | 
| 22 | 
            +
             | 
| 22 23 | 
             
                    @version = version
         | 
| 23 24 |  | 
| 24 | 
            -
                    if StringIO | 
| 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,  | 
| 30 | 
            +
                      raise AMFError, 'no source to deserialize'
         | 
| 30 31 | 
             
                    end
         | 
| 31 32 |  | 
| 32 | 
            -
                     | 
| 33 | 
            -
                       | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
                       | 
| 39 | 
            -
             | 
| 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 | 
            -
                     | 
| 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  | 
| 61 | 
            +
                  def amf0_deserialize(type = nil)
         | 
| 56 62 | 
             
                    type = read_int8 @source unless type
         | 
| 57 63 | 
             
                    case type
         | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 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 | 
            -
                     | 
| 95 | 
            -
                    ( | 
| 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 | 
| 103 | 
            -
                    len | 
| 104 | 
            -
                     | 
| 105 | 
            -
                     | 
| 106 | 
            -
                     | 
| 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 | 
| 116 | 
            -
                     | 
| 117 | 
            -
                    @ref_cache <<  | 
| 121 | 
            +
                    len    = read_word32_network(@source)
         | 
| 122 | 
            +
                    result = []
         | 
| 123 | 
            +
                    @ref_cache << result
         | 
| 118 124 |  | 
| 119 125 | 
             
                    0.upto(len - 1) do
         | 
| 120 | 
            -
                       | 
| 126 | 
            +
                      result << amf0_deserialize
         | 
| 121 127 | 
             
                    end
         | 
| 122 | 
            -
                     | 
| 128 | 
            +
                    result
         | 
| 123 129 | 
             
                  end
         | 
| 124 130 |  | 
| 125 131 | 
             
                  def amf0_read_date
         | 
| 126 132 | 
             
                    seconds = read_double(@source).to_f/1000
         | 
| 127 | 
            -
                    time | 
| 128 | 
            -
                    tz | 
| 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  | 
| 138 | 
            +
                  def amf0_read_props(obj = {})
         | 
| 133 139 | 
             
                    while true
         | 
| 134 | 
            -
                      key | 
| 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 | 
| 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 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 195 | 
            -
             | 
| 196 | 
            -
             | 
| 197 | 
            -
             | 
| 198 | 
            -
             | 
| 199 | 
            -
             | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 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 | 
| 210 | 
            -
                    b | 
| 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 | 
| 217 | 
            -
                      n | 
| 222 | 
            +
                      b      = read_word8(@source) || 0
         | 
| 223 | 
            +
                      n      = n + 1
         | 
| 218 224 | 
             
                    end
         | 
| 219 225 |  | 
| 220 | 
            -
                    if  | 
| 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  | 
| 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 | 
| 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( | 
| 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 | 
            -
                     | 
| 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 | 
            -
                       | 
| 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 | 
            -
                       | 
| 283 | 
            +
                      result = str
         | 
| 276 284 | 
             
                    end
         | 
| 285 | 
            +
             | 
| 286 | 
            +
                    result
         | 
| 277 287 | 
             
                  end
         | 
| 278 288 |  | 
| 279 289 | 
             
                  def amf3_read_byte_array
         | 
| 280 | 
            -
                    type | 
| 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 | 
| 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 | 
| 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 | 
| 312 | 
            +
                      length        = type >> 1
         | 
| 303 313 | 
             
                      property_name = amf3_read_string
         | 
| 304 | 
            -
                      array | 
| 314 | 
            +
                      array         = property_name.length > 0 ? {} : []
         | 
| 305 315 | 
             
                      @object_cache << array
         | 
| 306 316 |  | 
| 307 317 | 
             
                      while property_name.length > 0
         | 
| 308 | 
            -
                        value | 
| 318 | 
            +
                        value                = amf3_deserialize
         | 
| 309 319 | 
             
                        array[property_name] = value
         | 
| 310 | 
            -
                        property_name | 
| 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 | 
| 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 | 
| 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 | 
| 341 | 
            +
                        traits    = @trait_cache[reference]
         | 
| 332 342 | 
             
                      else
         | 
| 333 | 
            -
                        externalizable | 
| 334 | 
            -
                        dynamic | 
| 343 | 
            +
                        externalizable  = (class_type & 0x02) != 0
         | 
| 344 | 
            +
                        dynamic         = (class_type & 0x04) != 0
         | 
| 335 345 | 
             
                        attribute_count = class_type >> 3
         | 
| 336 | 
            -
                        class_name | 
| 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 | 
            -
             | 
| 343 | 
            -
             | 
| 344 | 
            -
             | 
| 345 | 
            -
             | 
| 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 | 
| 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 | 
| 373 | 
            -
                            value | 
| 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 | 
| 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 | 
| 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 | 
| 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 | 
| 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 | 
| 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 | 
| 436 | 
            +
                      length       = type >> 1
         | 
| 426 437 | 
             
                      fixed_vector = read_int8 @source # Ignore
         | 
| 427 438 | 
             
                      case vector_type
         | 
| 428 | 
            -
             | 
| 429 | 
            -
             | 
| 430 | 
            -
             | 
| 431 | 
            -
             | 
| 432 | 
            -
             | 
| 433 | 
            -
             | 
| 434 | 
            -
             | 
| 435 | 
            -
             | 
| 436 | 
            -
             | 
| 437 | 
            -
             | 
| 438 | 
            -
             | 
| 439 | 
            -
             | 
| 440 | 
            -
             | 
| 441 | 
            -
             | 
| 442 | 
            -
             | 
| 443 | 
            -
             | 
| 444 | 
            -
             | 
| 445 | 
            -
             | 
| 446 | 
            -
             | 
| 447 | 
            -
             | 
| 448 | 
            -
             | 
| 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  | 
| 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 ==  | 
| 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
         | 
    
        data/mrpin-rocketamf.gemspec
    CHANGED
    
    
    
        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. | 
| 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- | 
| 13 | 
            +
            date: 2014-08-23 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: rake-compiler
         |