#lang scheme (require net/url-structs (only-in net/url string->url url->string)) (define (ws-url? v) (and (url? v) (member (url-scheme v) '("ws" "wss")) (url-path-absolute? v) (not (url-fragment v)))) (provide (all-from-out net/url-structs net/url) ws-url?) (define (ws-url-secure? url) (equal? (url-scheme url) "wss")) (define (ws-url-default-port url) (if (ws-url-secure? url) 443 80)) (define (ws-url-port url) (or (url-port url) (ws-url-default-port url))) (define (ws-url-resource url) (url->string (make-url #f #f #f #f #t (url-path url) (url-query url) #f))) (provide/contract [ws-url-secure? (-> ws-url? any)] [ws-url-default-port (-> ws-url? natural-number/c)] [ws-url-port (-> ws-url? natural-number/c)] [ws-url-resource (-> ws-url? string?)])