def handle(self, connection_id, message_content):
        request = processor_pb2.TpRegisterRequest()
        request.ParseFromString(message_content)

        LOGGER.info(
            'registered transaction processor: connection_id=%s, family=%s, '
            'version=%s, encoding=%s, namespaces=%s', connection_id,
            request.family, request.version, request.encoding,
            request.namespaces)

        processor_type = processor_iterator.ProcessorType(
            request.family, request.version, request.encoding)

        processor = processor_iterator.Processor(connection_id,
                                                 request.namespaces)

        self._collection[processor_type] = processor

        ack = processor_pb2.TpRegisterResponse()
        ack.status = ack.OK

        return HandlerResult(
            status=HandlerStatus.RETURN,
            message_out=ack,
            message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)
    def handle(self, connection_id, message_content):
        request = processor_pb2.TpRegisterRequest()
        request.ParseFromString(message_content)

        # Reject the request if requested version cannot be handled,
        # validator does backward compatible support.
        if request.protocol_version > MAX_SDK_PROTOCOL_VERSION:
            ack = processor_pb2.TpRegisterResponse()
            ack.status = ack.ERROR
            ack.protocol_version = MAX_SDK_PROTOCOL_VERSION
            LOGGER.error(
                'Validator version %s does not support the features requested'
                ' by the %s version of transaction processor',
                str(MAX_SDK_PROTOCOL_VERSION), str(request.protocol_version))

            return HandlerResult(
                status=HandlerStatus.RETURN,
                message_out=ack,
                message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)

        ack = processor_pb2.TpRegisterResponse()
        ack.status = ack.OK
        # Echo back the requested protocol_version, so that the SDK can
        # cross verify that it can get all services requested
        ack.protocol_version = request.protocol_version

        return HandlerResult(
            status=HandlerStatus.RETURN_AND_PASS,
            message_out=ack,
            message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)
    def handle(self, connection_id, message_content):
        request = processor_pb2.TpRegisterRequest()
        request.ParseFromString(message_content)

        LOGGER.info(
            'registered transaction processor: connection_id=%s, family=%s, version=%s, namespaces=%s',
            connection_id[:8], request.family, request.version,
            list(request.namespaces))

        processor_type = processor_iterator.ProcessorType(
            request.family, request.version)

        processor = processor_iterator.Processor(connection_id,
                                                 request.namespaces)

        if processor_type in self._collection:
            LOGGER.debug(
                'Already registered transaction processor:family=%s, version=%s, namespaces=%s',
                request.family, request.version, list(request.namespaces))

        self._collection[processor_type] = processor
        LOGGER.debug('All registered transaction processors=%s',
                     self._collection)
        ack = processor_pb2.TpRegisterResponse()
        ack.status = ack.OK

        return HandlerResult(
            status=HandlerStatus.RETURN,
            message_out=ack,
            message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)
    def handle(self, connection_id, message_content):
        request = processor_pb2.TpRegisterRequest()
        request.ParseFromString(message_content)
        if request.max_occupancy == 0:
            max_occupancy = DEFAULT_MAX_OCCUPANCY
            LOGGER.warning(
                'Max occupancy was not provided by transaction processor: %s.'
                ' Using default max occupancy: %s', connection_id,
                DEFAULT_MAX_OCCUPANCY)
        else:
            max_occupancy = request.max_occupancy

        LOGGER.info(
            'registered transaction processor: connection_id=%s, family=%s, '
            'version=%s, namespaces=%s, max_occupancy=%s',
            connection_id, request.family, request.version,
            list(request.namespaces), max_occupancy)

        processor_type = processor_manager.ProcessorType(
            request.family, request.version)

        processor = processor_manager.Processor(connection_id,
                                                request.namespaces,
                                                max_occupancy)

        self._collection[processor_type] = processor

        ack = processor_pb2.TpRegisterResponse()
        ack.status = ack.OK

        return HandlerResult(
            status=HandlerStatus.RETURN,
            message_out=ack,
            message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)
    def handle(self, connection_id, message_content):
        request = processor_pb2.TpRegisterRequest()
        request.ParseFromString(message_content)
        if request.max_occupancy == 0:
            max_occupancy = DEFAULT_MAX_OCCUPANCY
            LOGGER.warning(
                'Max occupancy was not provided by transaction processor: %s.'
                ' Using default max occupancy: %s', connection_id,
                DEFAULT_MAX_OCCUPANCY)
        else:
            max_occupancy = request.max_occupancy

        # If the request_header_style parameter is not set in the request,
        # consider default behavior of sending EXPANDED (de-serialized) header.
        # This is for backward compatibility.
        if request.request_header_style == \
                processor_pb2.TpRegisterRequest.HEADER_STYLE_UNSET:
            header_style = processor_pb2.TpRegisterRequest.EXPANDED
        else:
            header_style = request.request_header_style

        processor_type = processor_manager.ProcessorType(
            request.family, request.version)

        processor = processor_manager.Processor(connection_id,
                                                request.namespaces,
                                                max_occupancy, header_style)

        self._collection[processor_type] = processor

        LOGGER.info(
            'registered transaction processor: connection_id=%s, family=%s, '
            'version=%s, namespaces=%s, max_occupancy=%s',
            connection_id, request.family, request.version,
            list(request.namespaces), max_occupancy)

        return HandlerResult(status=HandlerStatus.PASS)
    def handle(self, connection_id, message_content):
        request = processor_pb2.TpRegisterRequest()
        request.ParseFromString(message_content)
        if request.max_occupancy == 0:
            max_occupancy = DEFAULT_MAX_OCCUPANCY
            LOGGER.warning(
                'Max occupancy was not provided by transaction processor: %s.'
                ' Using default max occupancy: %s', connection_id,
                DEFAULT_MAX_OCCUPANCY)
        else:
            max_occupancy = request.max_occupancy

        # If the request_header_style parameter is not set in the request,
        # consider default behavior of sending EXPANDED (de-serialized) header.
        # This is for backward compatibility.
        if request.request_header_style == \
                processor_pb2.TpRegisterRequest.HEADER_STYLE_UNSET:
            header_style = processor_pb2.TpRegisterRequest.EXPANDED
        else:
            header_style = request.request_header_style

        # Reject the request if requested version cannot be handled,
        # validator does backward compatible support.
        if request.protocol_version > MAX_SDK_PROTOCOL_VERSION:
            ack = processor_pb2.TpRegisterResponse()
            ack.status = ack.ERROR
            # Send protocol_version of validator, so that the SDK can cross
            # verify if it can get all services requested for.
            ack.protocol_version = request.protocol_version
            LOGGER.error(
                'Validator version %s does not support the features requested'
                ' by the %s version of transaction processor',
                str(MAX_SDK_PROTOCOL_VERSION), str(request.protocol_version))

            return HandlerResult(
                status=HandlerStatus.RETURN,
                message_out=ack,
                message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)

        processor_type = processor_manager.ProcessorType(
            request.family, request.version)

        processor = processor_manager.Processor(connection_id,
                                                request.namespaces,
                                                max_occupancy, header_style)

        self._collection[processor_type] = processor

        ack = processor_pb2.TpRegisterResponse()
        ack.status = ack.OK
        # Echo back the requested protocol_version, so that the SDK can
        # cross verify that it can get all services requested
        ack.protocol_version = request.protocol_version

        LOGGER.info(
            'registered transaction processor: connection_id=%s, family=%s, '
            'version=%s, namespaces=%s, max_occupancy=%s',
            connection_id, request.family, request.version,
            list(request.namespaces), max_occupancy)

        return HandlerResult(
            status=HandlerStatus.RETURN,
            message_out=ack,
            message_type=validator_pb2.Message.TP_REGISTER_RESPONSE)