summaryrefslogtreecommitdiff
path: root/mulkcms-hunchentoot.lisp
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2011-12-23 12:51:56 +0100
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2011-12-23 12:51:56 +0100
commitb1393ddfe9b005021ece1e7df6f053861dcddc82 (patch)
tree12709f34dee8e490441fddff68c6044b0a52b58f /mulkcms-hunchentoot.lisp
parent32553bf7b1fc8c4af4e256705c95a3f66ca5f719 (diff)
Loosen the core's dependency on Hunchentoot.
Diffstat (limited to 'mulkcms-hunchentoot.lisp')
-rw-r--r--[-rwxr-xr-x]mulkcms-hunchentoot.lisp33
1 files changed, 28 insertions, 5 deletions
diff --git a/mulkcms-hunchentoot.lisp b/mulkcms-hunchentoot.lisp
index c5fa908..762d181 100755..100644
--- a/mulkcms-hunchentoot.lisp
+++ b/mulkcms-hunchentoot.lisp
@@ -17,11 +17,34 @@
(defun dispatch-mulkcms-request (request)
(let* ((relative-path (subseq (script-name request) 1))
(mulkcms::*use-ssl-p* (equal (header-in* :x-use-ssl)
- "true")))
- (mulkcms::find-request-handler relative-path
- (append (get-parameters*)
- (post-parameters*))
- (header-in* :accept-language))))
+ "true"))
+ (mulkcms::*real-remote-addr*
+ (hunchentoot:real-remote-addr))
+ (mulkcms::*user-agent*
+ (hunchentoot:user-agent))
+ (mulkcms::*request-method*
+ (hunchentoot:request-method*))
+ (mulkcms::*headers*
+ (hunchentoot::headers-in*)))
+ (let ((result (mulkcms::find-request-handler relative-path
+ (append (get-parameters*)
+ (post-parameters*))
+ (header-in* :accept-language))))
+ (typecase result
+ (cons
+ (when-let (content-type (getf result :content-type))
+ (setf (hunchentoot:content-type*) content-type))
+ (when-let (headers (getf result :headers))
+ (dolist (header headers)
+ (setf (hunchentoot:header-out (car header))
+ (cdr header))))
+ (when-let (return-code (getf result :return-code))
+ (setf (hunchentoot:return-code*) return-code)
+ ;;(hunchentoot:abort-request-handler)
+ )
+ (getf result :body))
+ (t
+ result)))))
(defun setup-handlers ()
(setq *dispatch-table*