From 7b5952144fb8125193a47a119ca9a432207e0f32 Mon Sep 17 00:00:00 2001 From: Collin Miller Date: Thu, 27 May 2010 13:59:02 -0400 Subject: [PATCH] 1.8.7/1.9 string encoding capabilities --- lib/rocketamf/pure/io_helpers.rb | 8 ++++++-- lib/rocketamf/pure/remoting.rb | 18 +++++++++++++----- lib/rocketamf/pure/serializer.rb | 14 ++++++-------- spec/amf/do_not_publish_fp_amf_requests.rb | 10 ++++++++++ spec/fixtures/request/challengeRules | Bin 0 -> 7209 bytes 5 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 spec/amf/do_not_publish_fp_amf_requests.rb create mode 100755 spec/fixtures/request/challengeRules diff --git a/lib/rocketamf/pure/io_helpers.rb b/lib/rocketamf/pure/io_helpers.rb index 9b1f354..ea3e82e 100644 --- a/lib/rocketamf/pure/io_helpers.rb +++ b/lib/rocketamf/pure/io_helpers.rb @@ -86,11 +86,15 @@ def pack_integer(integer) [integer & 0xff].pack('c') end - packed.force_encoding("UTF-8") + + packed.force_encoding("UTF-8") if packed.respond_to?(:force_encoding) + packed end def pack_double(double) - [double].pack('G').force_encoding("UTF-8") + packed = [double].pack('G') + packed.force_encoding("UTF-8") if packed.respond_to?(:force_encoding) + packed end def pack_int8(val) diff --git a/lib/rocketamf/pure/remoting.rb b/lib/rocketamf/pure/remoting.rb index 30a68e9..0306803 100644 --- a/lib/rocketamf/pure/remoting.rb +++ b/lib/rocketamf/pure/remoting.rb @@ -50,7 +50,8 @@ def populate_from_stream stream # RocketAMF::Response for deserializing the given stream. module Response def serialize - stream = "".encode("UTF-8") + stream = "" + stream.encode("UTF-8") if stream.respond_to?(:encode) # Write version stream << pack_int16_network(@amf_version) @@ -69,15 +70,22 @@ def serialize stream << pack_int16_network(@messages.length) # Message count @messages.each do |m| # # Rails.logger.info("Packing message") - stream << pack_int16_network(m.target_uri.length).force_encoding("UTF-8") + packed_target_uri = pack_int16_network(m.target_uri.length) + packed_target_uri.force_encoding("UTF-8") if packed_target_uri.respond_to?(:force_encoding) + + stream << packed_target_uri stream << m.target_uri - stream << pack_int16_network(m.response_uri.length) + response_uri_length = pack_int16_network(m.response_uri.length) + response_uri_length.force_encoding("UTF-8") if packed_target_uri.respond_to?(:force_encoding) + stream << response_uri_length stream << m.response_uri - stream << pack_word32_network(-1).force_encoding("UTF-8") + packed_neg_one = pack_word32_network(-1) + packed_neg_one.force_encoding("UTF-8") if packed_neg_one.respond_to?(:force_encoding) + stream << packed_neg_one stream << AMF0_AMF3_MARKER if @amf_version == 3 - stream.encode("UTF-8") + stream.encode("UTF-8") if stream.respond_to?(:encode) # # Rails.logger.info("stream #{stream.encoding} serialized #{RocketAMF.serialize(m.data, @amf_version).encoding}") stream << RocketAMF.serialize(m.data, @amf_version) # # Rails.logger.info("Packed message #{m}") diff --git a/lib/rocketamf/pure/serializer.rb b/lib/rocketamf/pure/serializer.rb index d7477cd..8469cf6 100644 --- a/lib/rocketamf/pure/serializer.rb +++ b/lib/rocketamf/pure/serializer.rb @@ -3,12 +3,9 @@ module RocketAMF module Pure class EncodedStream < String - def << str - # # Rails.logger.info("stream #{encoding}") - # # Rails.logger.info(">> write_utf8_vr #{str.to_s} #{str.to_s.encoding}") - super(str) - # # Rails.logger.info("stream #{encoding}") - # # Rails.logger.info("---------------------------------------") + def initialize(*) + super + encode("UTF-8") if respond_to?(:encode) end end # AMF0 implementation of serializer @@ -149,7 +146,7 @@ def version 3 end - def serialize obj, stream = EncodedStream.new.encode("UTF-8") + def serialize obj, stream = EncodedStream.new if obj.respond_to?(:to_amf) stream << obj.to_amf(self) elsif obj.is_a?(NilClass) @@ -313,7 +310,8 @@ def write_utf8_vr str, stream # "can't force encoding of frozen object" # Hence the dup. But we still don't know why str is frozen # TODO: Determine why str is frozen. - stream << str.dup.force_encoding("UTF-8") + str = str.dup.force_encoding("UTF-8") if str.respond_to?("force_encoding") + stream << str end end end diff --git a/spec/amf/do_not_publish_fp_amf_requests.rb b/spec/amf/do_not_publish_fp_amf_requests.rb new file mode 100644 index 0000000..acf166c --- /dev/null +++ b/spec/amf/do_not_publish_fp_amf_requests.rb @@ -0,0 +1,10 @@ +require File.dirname(__FILE__) + '/../spec_helper.rb' + +describe RocketAMF::Request do + it "should handle a set of challeng rules (contains dict)" do + req = create_request("challengeRules") + message = req.messages[0].data + require 'pp' + raise message.body.pretty_inspect + end +end diff --git a/spec/fixtures/request/challengeRules b/spec/fixtures/request/challengeRules new file mode 100755 index 0000000000000000000000000000000000000000..8233a76d4c742fb7842fac4d3f7eacecd9606d40 GIT binary patch literal 7209 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 literal 0 HcmV?d00001