[hunchentoot-devel] Specializing process-request

Hans Hübner hans.huebner at gmail.com
Wed Nov 25 11:05:35 UTC 2009


Frode,

the patch looks good.  Can you please provide a patch with a docstring
and a documentation update?

Thanks,
Hans

On Wed, Nov 25, 2009 at 11:23, Frode V. Fjeld <frode at netfonds.no> wrote:
> frode at 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+))
>
>
>
> --
> Frode V. Fjeld
> Netfonds Bank ASA
>
>
> _______________________________________________
> tbnl-devel site list
> tbnl-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/tbnl-devel
>




More information about the Tbnl-devel mailing list