frode@netfonds.no (Frode V. Fjeld) writes:
(I can/could of course specialize process-request for my acceptor class using an unqualified method, and thus set up the dynamic environment just how I want it. However I would then just have to copy the full body of the standard process-request to insert a line or two inside the body of the handler-bind. I believe it's the purpose of a processing protocol to avoid having to do such things.)
This didn't really work out in practice: cut'n'pasting the body of process-request into a different package made it clear that process-request can't really be replaced without breaking lots of stuff. Also, modifying my dispatchers or handlers proved to be impractical. So here's a diff detailing my suggestion in my previous posting. It's simple, and seems to work well.
Index: packages.lisp =================================================================== --- packages.lisp (revision 4474) +++ packages.lisp (working copy) @@ -168,6 +168,7 @@ "DELETE-AUX-REQUEST-VALUE" "DELETE-SESSION-VALUE" "DISPATCH-EASY-HANDLERS" + "DISPATCH-REQUEST" "ESCAPE-FOR-HTML" "EXECUTE-ACCEPTOR" "GET-PARAMETER" Index: request.lisp =================================================================== --- request.lisp (revision 4474) +++ request.lisp (working copy) @@ -210,6 +210,10 @@ ;; we assume it's not our fault... (setf (return-code*) +http-bad-request+)))))
+(defmethod dispatch-request (request) + (funcall (acceptor-request-dispatcher *acceptor*) + request)) + (defmethod process-request (request) "Standard implementation for processing a request. You should not change or replace this functionality unless you know what you're @@ -227,7 +231,7 @@ ;; skip dispatch if bad request (when (eql (return-code *reply*) +http-ok+) ;; now do the work - (funcall (acceptor-request-dispatcher *acceptor*) *request*))))) + (dispatch-request request))))) (when error (setf (return-code *reply*) +http-internal-server-error+))