Skip to content

Commit b57ad4f

Browse files
committed
feat: WIP Load in Protocol Registry V2
Signed-off-by: Colton Wolkins (Laptop) <[email protected]>
1 parent 4806fab commit b57ad4f

22 files changed

+609
-0
lines changed

acapy_agent/config/default_context.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from ..core.plugin_registry import PluginRegistry
99
from ..core.profile import ProfileManager, ProfileManagerProvider
1010
from ..core.protocol_registry import ProtocolRegistry
11+
from ..didcomm_v2.protocol_registry import V2ProtocolRegistry
1112
from ..protocols.actionmenu.v1_0.base_service import BaseMenuService
1213
from ..protocols.actionmenu.v1_0.driver_service import DriverMenuService
1314
from ..protocols.introduction.v0_1.base_service import BaseIntroductionService
@@ -45,6 +46,7 @@ async def build_context(self) -> InjectionContext:
4546

4647
# Global protocol registry
4748
context.injector.bind_instance(ProtocolRegistry, ProtocolRegistry())
49+
context.injector.bind_instance(V2ProtocolRegistry, V2ProtocolRegistry())
4850

4951
# Global goal code registry
5052
context.injector.bind_instance(GoalCodeRegistry, GoalCodeRegistry())
@@ -129,6 +131,7 @@ async def load_plugins(self, context: InjectionContext):
129131
# Register standard protocol plugins
130132
if not self.settings.get("transport.disabled"):
131133
plugin_registry.register_package("acapy_agent.protocols")
134+
plugin_registry.register_package("acapy_agent.protocols_v2")
132135

133136
# Currently providing admin routes only
134137
plugin_registry.register_plugin("acapy_agent.holder")

acapy_agent/core/plugin_registry.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from .error import ProtocolDefinitionValidationError
1212
from .goal_code_registry import GoalCodeRegistry
1313
from .protocol_registry import ProtocolRegistry
14+
from ..didcomm_v2.protocol_registry import V2ProtocolRegistry
1415

1516
LOGGER = logging.getLogger(__name__)
1617

@@ -218,8 +219,14 @@ async def load_protocol_version(
218219
version_definition: Optional[dict] = None,
219220
):
220221
"""Load a particular protocol version."""
222+
v2_protocol_registry = context.inject(V2ProtocolRegistry)
221223
protocol_registry = context.inject(ProtocolRegistry)
222224
goal_code_registry = context.inject(GoalCodeRegistry)
225+
if hasattr(mod, "HANDLERS"):
226+
for message_type, handler in mod.HANDLERS:
227+
v2_protocol_registry.register_handler(
228+
message_type, handler
229+
)
223230
if hasattr(mod, "MESSAGE_TYPES"):
224231
protocol_registry.register_message_types(
225232
mod.MESSAGE_TYPES, version_definition=version_definition

acapy_agent/protocols_v2/__init__.py

Whitespace-only changes.

acapy_agent/protocols_v2/trustping/__init__.py

Whitespace-only changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"""Version definitions for this protocol."""
2+
3+
versions = [
4+
{
5+
"major_version": 1,
6+
"minimum_minor_version": 0,
7+
"current_minor_version": 0,
8+
"path": "v1_0",
9+
}
10+
]

acapy_agent/protocols_v2/trustping/v1_0/__init__.py

Whitespace-only changes.

acapy_agent/protocols_v2/trustping/v1_0/handlers/__init__.py

Whitespace-only changes.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""Ping handler."""
2+
3+
from .....messaging.base_handler import BaseHandler, BaseResponder, RequestContext
4+
from ..messages.ping import Ping
5+
from ..messages.ping_response import PingResponse
6+
7+
8+
class PingHandler(BaseHandler):
9+
"""Ping handler class."""
10+
11+
async def handle(self, context: RequestContext, responder: BaseResponder):
12+
"""Handle ping message.
13+
14+
Args:
15+
context: Request context
16+
responder: Responder used to reply
17+
18+
"""
19+
self._logger.debug(f"PingHandler called with context {context}")
20+
assert isinstance(context.message, Ping)
21+
22+
self._logger.info(
23+
"Received trust ping from: %s", context.message_receipt.sender_did
24+
)
25+
26+
if not context.connection_ready:
27+
self._logger.info(
28+
"Connection not active, skipping ping response: %s",
29+
context.message_receipt.sender_did,
30+
)
31+
return
32+
33+
if context.message.response_requested:
34+
reply = PingResponse()
35+
reply.assign_thread_from(context.message)
36+
reply.assign_trace_from(context.message)
37+
await responder.send_reply(reply)
38+
39+
if context.settings.get("debug.monitor_ping"):
40+
await context.profile.notify(
41+
"acapy::ping::received",
42+
{
43+
"comment": context.message.comment,
44+
"connection_id": context.message_receipt.connection_id,
45+
"responded": context.message.response_requested,
46+
"state": "received",
47+
"thread_id": context.message._thread_id,
48+
},
49+
)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""Ping response handler."""
2+
3+
from .....messaging.base_handler import BaseHandler, BaseResponder, RequestContext
4+
from ..messages.ping_response import PingResponse
5+
6+
7+
class PingResponseHandler(BaseHandler):
8+
"""Ping response handler class."""
9+
10+
async def handle(self, context: RequestContext, responder: BaseResponder):
11+
"""Handle ping response message.
12+
13+
Args:
14+
context: Request context
15+
responder: Responder used to reply
16+
17+
"""
18+
19+
self._logger.debug("PingResponseHandler called with context: %s", context)
20+
assert isinstance(context.message, PingResponse)
21+
22+
self._logger.info(
23+
"Received trust ping response from: %s", context.message_receipt.sender_did
24+
)
25+
26+
if context.settings.get("debug.monitor_ping"):
27+
await context.profile.notify(
28+
"acapy::ping::response_received",
29+
{
30+
"comment": context.message.comment,
31+
"connection_id": context.message_receipt.connection_id,
32+
"state": "response_received",
33+
"thread_id": context.message._thread_id,
34+
},
35+
)
36+
37+
# Nothing to do, Connection should be automatically promoted to 'active'

acapy_agent/protocols_v2/trustping/v1_0/handlers/tests/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)