#lang syndicate ;;; SPDX-License-Identifier: LGPL-3.0-or-later ;;; SPDX-FileCopyrightText: Copyright © 2021 Tony Garnock-Jones (require (only-in sha bytes->hex-string)) (require (only-in racket/list append-map)) (require syndicate/relay) (require syndicate/rewrite) (require syndicate/sturdy) (require syndicate/schemas/gen/gatekeeper) (require syndicate/sturdy) (require syndicate/drivers/tcp) (module+ main (standard-actor-system (ds) (define ds-oid "syndicate") (define ds-key (make-bytes KEY_LENGTH)) (at ds (assert (Bind ds-oid ds-key ds))) (define root-cap (mint ds-oid ds-key)) (write-preserve/text (->preserve root-cap) #:indent 4 #:commas? #f) (newline) (displayln (bytes->hex-string (sturdy-encode (->preserve root-cap)))) (define spec (TcpLocal "0.0.0.0" 5999)) (at ds (stop-on (asserted (TcpListenError spec _))) (during/spawn (StreamConnection $source $sink spec) #:name (list 'tcp-server source) (run-relay #:packet-writer (lambda (bs) (send-data sink bs)) #:setup-inputs (lambda (tr) (handle-connection source sink #:on-data (lambda (d _m) (accept-bytes tr d)))) #:initial-ref (object #:name 'gatekeeper [(Resolve unvalidated-sturdyref observer) (at ds (during (Bind (SturdyRef-oid unvalidated-sturdyref) $key $target) (define sturdyref (validate unvalidated-sturdyref key)) (define attenuation (append-map Attenuation-value (reverse (SturdyRef-caveatChain sturdyref)))) (define attenuated-target (apply attenuate-entity-ref target attenuation)) (at observer (assert (embedded attenuated-target)))))]))))))