def do_data( channel, data )
if @parsed_data
@parsed_data[:content].append data
return if @parsed_data[:length] > @parsed_data[:content].length
type = @parsed_data[:type]
content = @parsed_data[:content]
@parsed_data = nil
else
reader = @buffers.reader( data )
length = reader.read_long-1
type = reader.read_byte
content = reader.remainder_as_buffer
if length > content.length
@parsed_data = { :length => length,
:type => type,
:content => content }
return
end
end
if type == FXP_VERSION
do_version content
else
assert_state :open
@dispatcher.dispatch channel, type, content
end
end