instaweb-servlet.ss
(module instaweb-servlet mzscheme
  
  (require (lib "url.ss" "net")
           (lib "servlet.ss" "web-server"))
  
  (require (file "base.ss")
           (file "delirium.ss")
           (file "instaweb-servlet-config.ss"))
 
  ; Start procedure ------------------------------
  
  ;; start : (request -> response)
  (define start
    (let ([test-url  "/test"]
          [test      (target-test)]
          [run-tests (test-runner)])
      (lambda (request)
        (if (string=? (url->string (request-uri request)) test-url)
            (run-delirium request test run-tests)
            (target-start request)))))
  
  ; Stuff from target-servlet --------------------
  
  ;; target-start : (request -> response)
  (define target-start
    (with-handlers ([exn:fail:contract? 
                     (lambda (exn)
                       (raise-exn exn:fail:delirium "Target module does not have a start procedure."))])
      (dynamic-require (target-require-form) 'start)))
  
  ;; interface-version : symbol
  (define interface-version
    (with-handlers ([exn:fail:contract? (lambda (exn) #f)])
      (dynamic-require (target-require-form) 'interface-version)))
  
  ;; initial-timeout : number
  (define initial-timeout
    (with-handlers ([exn:fail:contract? (lambda (exn) #f)])
      (dynamic-require (target-require-form) 'initial-timeout)))
  
  ;; manager : continuation-manager
  (define manager
    (with-handlers ([exn:fail:contract? (lambda (exn) #f)])
      (dynamic-require (target-require-form) 'manager)))
  
  ;; instance-expiration-handler : continuation-manager
  (define instance-expiration-handler
    (with-handlers ([exn:fail:contract? (lambda (exn) #f)])
      (dynamic-require (target-require-form) 'instance-expiration-handler)))
  
  ; Provide statements ---------------------------
  
  (provide start
           interface-version
           initial-timeout
           manager
           instance-expiration-handler)
  
  )