'The format of a call response is:
* response metadata, a map with values of type bytes
* a one-byte error flag boolean, followed by either:
o if the error flag is false,
the message response, serialized per the message\'s response schema.
o if the error flag is true,
the error, serialized per the message\'s error union schema.'

def read_call_response(self, message_name, decoder):

    response_metadata = META_READER.read(decoder)
    remote_message_schema = self.remote_protocol.messages.get(message_name)
    if (remote_message_schema is None):
        raise schema.AvroException(('Unknown    remote    message:    %s' % message_name))
    local_message_schema = self.local_protocol.messages.get(message_name)
    if (local_message_schema is None):
        raise schema.AvroException(('Unknown    local    message:    %s' % message_name))
    if (not decoder.read_boolean()):
        writers_schema = remote_message_schema.response
        readers_schema = local_message_schema.response
        return self.read_response(writers_schema, readers_schema, decoder)
    else:
        writers_schema = remote_message_schema.errors
        readers_schema = local_message_schema.errors
        raise self.read_error(writers_schema, readers_schema, decoder)
