Source code for aries_cloudagent.protocols.routing.v1_0.handlers.route_update_response_handler

"""Handler for incoming route-update-response messages."""

from .....connections.models.conn_record import ConnRecord
from .....messaging.base_handler import (
    BaseHandler,
    BaseResponder,
    HandlerException,
    RequestContext,
)
from .....protocols.connections.v1_0.manager import ConnectionManager

from ..messages.route_update_response import RouteUpdateResponse
from ..models.route_update import RouteUpdate
from ..models.route_updated import RouteUpdated


[docs]class RouteUpdateResponseHandler(BaseHandler): """Handler for incoming route-update-response messages."""
[docs] async def handle(self, context: RequestContext, responder: BaseResponder): """Message handler implementation.""" self._logger.debug( "%s called with context %s", self.__class__.__name__, context ) assert isinstance(context.message, RouteUpdateResponse) if not context.connection_ready: raise HandlerException("Cannot handle updated routes: no active connection") session = await context.session() conn_mgr = ConnectionManager(session) router_id = context.connection_record.connection_id for update in context.message.updated: if update.action == RouteUpdate.ACTION_CREATE: if update.result in ( RouteUpdated.RESULT_NO_CHANGE, RouteUpdated.RESULT_SUCCESS, ): routing_state = ConnRecord.ROUTING_STATE_ACTIVE else: routing_state = ConnRecord.ROUTING_STATE_ERROR self._logger.warning( f"Unexpected result from inbound route update ({update.action})" ) await conn_mgr.update_inbound( router_id, update.recipient_key, routing_state ) elif update.action == RouteUpdate.ACTION_DELETE: self._logger.info( "Inbound route deletion status: {}, {}".format( update.recipient_key, update.result ) ) else: self._logger.error(f"Unsupported inbound route action: {update.action}")