27 lines
786 B
Scheme
27 lines
786 B
Scheme
#lang scheme/base
|
|
(require mzlib/contract
|
|
mzlib/plt-match
|
|
net/url
|
|
"../private/request-structs.ss"
|
|
"../private/util.ss"
|
|
"dispatch.ss")
|
|
(provide/contract
|
|
[interface-version dispatcher-interface-version?]
|
|
[make ((symbol? . -> . dispatcher?) . -> . dispatcher?)])
|
|
|
|
(define interface-version 'v1)
|
|
(define ((make lookup-dispatcher) conn req)
|
|
(define host (get-host (request-uri req) (request-headers/raw req)))
|
|
((lookup-dispatcher host) conn req))
|
|
|
|
;; get-host : Url (listof (cons Symbol String)) -> Symbol
|
|
(define (get-host uri headers)
|
|
(cond
|
|
[(url-host uri)
|
|
=> lowercase-symbol!]
|
|
[(headers-assq* #"Host" headers)
|
|
=> (match-lambda
|
|
[(struct header (_ v))
|
|
(lowercase-symbol! v)])]
|
|
[else 'none]))
|