diff --git a/goblins/ocapn/captp-test.rkt b/goblins/ocapn/captp-test.rkt index 517abdf..d347ae0 100644 --- a/goblins/ocapn/captp-test.rkt +++ b/goblins/ocapn/captp-test.rkt @@ -177,7 +177,7 @@ (define m2-location (string->ocapn-machine "ocapn://m2.fake")) (define m3-location - (string->ocapn-machine "ocapn://.m3.fake")) + (string->ocapn-machine "ocapn://m3.fake")) (define m1-fakenet (m1-run (spawn ^fake-netlayer "m1" network m1-incoming))) diff --git a/goblins/ocapn/structs-urls.rkt b/goblins/ocapn/structs-urls.rkt index 91aef03..55776cc 100644 --- a/goblins/ocapn/structs-urls.rkt +++ b/goblins/ocapn/structs-urls.rkt @@ -18,6 +18,7 @@ "../utils/url-base64.rkt" "define-recordable-struct.rkt" racket/string + racket/list racket/match racket/contract syrup) @@ -171,28 +172,17 @@ (define (error-not-an-ocapn-url something-else) (error 'not-an-ocapn-url "Not an OCapN URL: ~a" something-else)) -(define (string-rsplit-once str find-char) - (define (list-rsplit-once lst elem-to-find match-func) - (for/fold ([left-side '()] - [right-side '()]) - ([elem lst]) - (if (match-func elem elem-to-find) - (values (append left-side - (if (null? left-side) '() (list elem)) - right-side) - '()) - (values left-side (append right-side (list elem)))))) - - (let*-values ([(chars) (string->list str)] - [(left-side right-side) (list-rsplit-once chars find-char char=?)]) - (values (list->string left-side) - (list->string right-side)))) +(define (url-host->transport-parts url-host) + (let* ((url-host-length (string-length url-host)) + (transport-str (last (string-split url-host "."))) + (address (substring url-host 0 (- url-host-length (string-length transport-str) 1)))) + (values (string->symbol transport-str) address))) (define/contract (url->ocapn-machine ocapn-url) (-> url? ocapn-machine?) (let*-values ([(host) (url-host ocapn-url)] - [(address transport) (string-rsplit-once host #\.)]) - (ocapn-machine (string->symbol transport) address #f))) + [(transport address) (url-host->transport-parts host)]) + (ocapn-machine transport address #f))) (define (url->ocapn-struct ocapn-url) (unless (and (string? (url-scheme ocapn-url))