diff --git a/syndicate/distributed/noise.rkt b/syndicate/distributed/noise.rkt index 3dcef9c..7f8efbb 100644 --- a/syndicate/distributed/noise.rkt +++ b/syndicate/distributed/noise.rkt @@ -49,17 +49,21 @@ (lambda (set-peer-session! handle-message) (at acceptor-ref (assert (Resolve (Step (NoiseStepType) service-selector) - (object #:name 'noise-initiator + (object #:name 'noise-observer [#:asserted (Resolved-accepted responder-session) + (at responder-session + (assert (Initiator + (object #:name 'noise-initiator + [#:message m + (handle-message m)])))) (set-peer-session! responder-session) #:retracted - (stop-current-facet)] - [#:message m (handle-message m)]))))))) + (stop-current-facet)]))))))) (define (noise-responder #:service-selector service-selector #:static-keypair static-keypair #:export initial-ref - #:initiator-session initiator-session + #:observer observer #:preshared-keys [psks #f] #:pattern [pattern #f]) (noise* #:role 'responder @@ -69,11 +73,15 @@ #:preshared-keys psks #:pattern pattern (lambda (set-peer-session! handle-message) - (set-peer-session! initiator-session) - (at initiator-session + (at observer (assert (Resolved-accepted - (object #:name (list 'noise-responder initial-ref initiator-session) - [#:message m (handle-message m)]))))))) + (object #:name (list 'noise-responder initial-ref observer) + [#:asserted (Initiator s) + (set-peer-session! s) + #:retracted + (stop-current-facet)] + [#:message m + (handle-message m)]))))))) (define (noise* #:role role #:service-selector service-selector @@ -127,6 +135,7 @@ (handshake-step)))))) (define (set-peer-session! session) + (when peer-session (error 'noise* "Double-setting of peer-session")) (set! peer-session session) (when (eq? role 'initiator) (handshake-step))) @@ -134,12 +143,15 @@ (module+ test (require libsodium) - (file-stream-buffer-mode (current-output-port) 'none) + + (when (file-stream-buffer-mode (current-output-port)) + ;; ^ Only try to set it if we get a non-#f answer when we ask for it + (file-stream-buffer-mode (current-output-port) 'none)) (standard-actor-system (ds) - (spawn #:name 'test-main - (define server-keys (make-crypto-box-keypair)) + (define server-keys (make-crypto-box-keypair)) + (spawn #:name 'test-responder (define service-object (object [a (printf "service+: ~v\n" a) @@ -149,12 +161,13 @@ (stop-current-facet)])) (at ds - (during (Resolve (Step (NoiseStepType) 'test-service) $initiator-session) + (during (Resolve (Step (NoiseStepType) 'test-service) $observer) (noise-responder #:service-selector 'test-service #:static-keypair server-keys - #:initiator-session initiator-session - #:export service-object))) + #:observer observer + #:export service-object)))) + (spawn #:name 'test-initiator (noise-initiator #:service-selector 'test-service #:remote-static-pk (crypto-box-keypair-pk server-keys) #:acceptor-ref ds