From 2276d1a81eb6c96a62c2dc030e5a9447a8cf9c2e Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 8 Jun 2021 16:35:07 +0200 Subject: [PATCH] Allow deferred production of initial-ref --- syndicate/distributed/tcp-server.rkt | 27 ++++++++++++++------------- syndicate/relay.rkt | 7 ++++++- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/syndicate/distributed/tcp-server.rkt b/syndicate/distributed/tcp-server.rkt index c9339d2..18728b0 100644 --- a/syndicate/distributed/tcp-server.rkt +++ b/syndicate/distributed/tcp-server.rkt @@ -55,19 +55,20 @@ (accept-bytes tr bs) (loop)))))) #:initial-ref - (ref (during* #:name (cons 'gatekeeper name-base) - (action (assertion) - (match (parse-Resolve assertion) - [(? eof-object?) (void)] - [(Resolve unvalidated-sturdyref observer) - (at ds - (during (Bind (SturdyRef-oid unvalidated-sturdyref) $key $target) - (define sturdyref (validate unvalidated-sturdyref key)) - (define attenuation - (append-map values (reverse (SturdyRef-caveatChain sturdyref)))) - (define attenuated-target - (apply attenuate-entity-ref target attenuation)) - (at observer (assert (embedded attenuated-target)))))]))))))) + (action () + (ref (during* #:name (cons 'gatekeeper name-base) + (action (assertion) + (match (parse-Resolve assertion) + [(? eof-object?) (void)] + [(Resolve unvalidated-sturdyref observer) + (at ds + (during (Bind (SturdyRef-oid unvalidated-sturdyref) $key $target) + (define sturdyref (validate unvalidated-sturdyref key)) + (define attenuation + (append-map values (reverse (SturdyRef-caveatChain sturdyref)))) + (define attenuated-target + (apply attenuate-entity-ref target attenuation)) + (at observer (assert (embedded attenuated-target)))))])))))))) (spawn #:name 'tcp-server diff --git a/syndicate/relay.rkt b/syndicate/relay.rkt index 85a5b79..b420cff 100644 --- a/syndicate/relay.rkt +++ b/syndicate/relay.rkt @@ -283,7 +283,12 @@ (define tr (make-tunnel-relay this-turn name packet-writer)) (setup-inputs this-turn tr) (when initial-ref - (rewrite-ref-out tr initial-ref #f (lambda (_ws) (void)))) + (rewrite-ref-out tr + (if (procedure? initial-ref) + (initial-ref this-turn) + initial-ref) + #f + (lambda (_ws) (void)))) (when then (turn-assert! this-turn then