33#from ...didcomm_prefix import DIDCommPrefix
44import logging
55from ....messaging .v2_agent_message import V2AgentMessage
6+ from ....connections .models .connection_target import ConnectionTarget
7+ from didcomm_messaging import DIDCommMessaging , RoutingService
68
79SPEC_URI = (
810 "https://github.com/hyperledger/aries-rfcs/tree/"
@@ -22,16 +24,62 @@ async def __call__(self, *args, **kwargs):
2224 @staticmethod
2325 async def handle (context , responder , payload ):
2426 message = payload
27+ session = await context .profile .session ()
28+ ctx = session
29+ messaging = ctx .inject (DIDCommMessaging )
30+ routing_service = ctx .inject (RoutingService )
31+ frm = message .get ("from" )
32+ #destination = await routing_service._resolve_services(messaging.resolver, frm)
33+ services = await routing_service ._resolve_services (messaging .resolver , frm )
34+ chain = [
35+ {
36+ "did" : frm ,
37+ "service" : services ,
38+ }
39+ ]
40+
41+ # Loop through service DIDs until we run out of DIDs to forward to
42+ to_did = services [0 ].service_endpoint .uri
43+ found_forwardable_service = await routing_service .is_forwardable_service (
44+ messaging .resolver , services [0 ]
45+ )
46+ while found_forwardable_service :
47+ services = await routing_service ._resolve_services (messaging .resolver , to_did )
48+ if services :
49+ chain .append (
50+ {
51+ "did" : to_did ,
52+ "service" : services ,
53+ }
54+ )
55+ to_did = services [0 ].service_endpoint .uri
56+ found_forwardable_service = (
57+ await routing_service .is_forwardable_service (messaging .resolver , services [0 ])
58+ if services
59+ else False
60+ )
61+ destination = [
62+ ConnectionTarget (
63+ did = context .message_receipt .sender_verkey ,
64+ endpoint = service .service_endpoint .uri ,
65+ recipient_keys = [context .message_receipt .sender_verkey ],
66+ sender_key = context .message_receipt .recipient_verkey ,
67+ )
68+ for service in chain [- 1 ]["service" ]
69+ ]
2570 logger = logging .getLogger (__name__ )
2671 error_result = V2AgentMessage (
2772 message = {
2873 "type" : "https://didcomm.org/basicmessage/2.0/message" ,
2974 "body" : {
30- "message " : "Hello Frosty :3 " ,
75+ "content " : "Hello from acapy " ,
3176 },
77+ "to" : [context .message_receipt .sender_verkey .split ('#' )[0 ]],
78+ "from" : context .message_receipt .recipient_verkey .split ('#' )[0 ],
79+ "lang" : "en" ,
3280 }
3381 )
34- await responder .send_reply (error_result )
82+ await responder .send_reply (error_result , target_list = destination )
3583
3684HANDLERS = {
3785 DEBUG : f"{ PROTOCOL_PACKAGE } .message_types.test_func" ,
0 commit comments