lib/riak/util/decode.rb in riakpb-0.1.5 vs lib/riak/util/decode.rb in riakpb-0.1.6
- old
+ new
@@ -7,31 +7,44 @@
PLEN = (0..3)
PBMC = PLEN.count
POFF = (PBMC+1)
def decode_message(message)
+
pb_len = 0
pb_mc = ''
pb_msg = ''
+ remain = ''
until message.empty?
pb_len = message[PLEN].unpack('N')[0] # message[0..3]unpack('N')[0]
pb_mc = pb_mc + message[PBMC] # prior message codes + message[4]
prange = POFF..(pb_len+3) # range for the start->finish of the pb message
mrange = (pb_len+4)..(message.size-1) # range for any remaining portions of message
- if(prange.count != message[prange].size)
- raise FailedExchange.new(prange.count, message[prange].size, message[prange], "decode_error")
- end
+ break if(prange.count > message[prange].size)
pb_msg = pb_msg + message[prange]
message = message[mrange] # message[(5+pb_len)..(message.size)]
end
- [pb_msg, pb_mc.unpack("c" * pb_mc.size)]
+ [pb_msg, pb_mc.unpack("c" * pb_mc.size), message]
end
+ def message_remaining?(message)
+ pb_len = message[PLEN].unpack('N')[0]
+ msg_len = message.size - PBMC
+
+ puts "pb_len:#{pb_len}"
+ puts "msg_len:#{msg_len}"
+ puts "message:#{message.inspect}"
+
+ return false if pb_len == msg_len
+ return true if pb_len > msg_len
+
+ return message_remaining?(message[(pb_len+4)..(msg_len-1)])
+ end
end # module Decode
end
end