web-server.ss
#lang scheme/base
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SESSION.plt - a session store built on top of bzlib/dbi
;;
;; Bonzai Lab, LLC.  All rights reserved.
;;
;; Licensed under LGPL.
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; web-server.ss - wrappers over the web-server servlet continuation calls
;; yc 11/15/2009 - first version

(require "depend.ss" "main.ss")

;; integration with send/suspend etc so the session code will work correctly...
(require (prefix-in ws: web-server/servlet/web)
         (prefix-in ws: web-server/http/redirect)) 

(define (make-send/*-helper send/*)
  (lambda (resp)
    (dynamic-wind (lambda () 
                    (save-session! (current-session)))
                  (lambda () 
                    (begin0 (send/* resp)
                            (refresh-session! (current-session))))
                  void)))

(define send/back (make-send/*-helper ws:send/back))

(define send/finish (make-send/*-helper ws:send/finish))

(define send/suspend (make-send/*-helper ws:send/suspend))

(define send/suspend/url (make-send/*-helper ws:send/suspend/url)) 

(define send/forward (make-send/*-helper ws:send/forward))

(define send/suspend/dispatch (make-send/*-helper ws:send/suspend/dispatch))

(define (make-redirect/get send/*)
  (lambda () 
    (send/* (lambda (k-url) (ws:redirect-to k-url ws:temporarily)))))

(define redirect/get (make-redirect/get send/suspend))

(define redirect/get/forget (make-redirect/get send/forward))

(provide (all-from-out "main.ss"))

(provide send/back
         send/finish
         send/suspend
         send/suspend/url
         send/forward
         send/suspend/dispatch
         redirect/get
         redirect/get/forget
         )