Files
CLASH/src/main/conditions.cl
Pierre R. Mai 0408a74b18 Added new condition for non-URL related parsing errors, used in
parsing.cl.  This needs further reworking, so that URL-related syntax
errors are subtypes of this new condition.
2000-10-09 22:08:40 +00:00

58 lines
1.9 KiB
Common Lisp

;;;; CLASH --- The Common Lisp Adaptable Simple HTTP server
;;;; This is copyrighted software. See documentation for terms.
;;;;
;;;; conditions.cl --- CLASH- and HTTP-specific conditions
;;;;
;;;; Checkout Tag: $Name$
;;;; $Id$
(in-package :CLASH)
;;;; %File Description:
;;;;
;;;; This file defines a number of CLASH- and/or HTTP-specific
;;;; conditions, which are used in the rest of CLASH for error
;;;; signalling and handling.
;;;;
(defun report-clash-error
(condition stream &optional (fmt "Unspecified error.") args)
(format stream
"CLASH error: ~?~& Possible HTTP status code: ~D (~A)."
fmt args
(clash-error-code condition)
(HTTP-code-description (clash-error-code condition))))
(define-condition clash-error (error)
((code :initarg :code :initform +HTTP-Code-Internal-Server-Error+
:type fixnum
:reader clash-error-code
#+NIL
:documentation
#+NIL
"HTTP status code that might be returned to the client, if
this makes sense.")
(response-initargs :initarg :response-initargs :initform nil
:reader clash-error-response-initargs)
(entity-initargs :initarg :entity-initargs :initform nil
:reader clash-error-entity-initargs))
(:report report-clash-error))
(define-condition simple-clash-error (simple-condition clash-error)
()
(:report (lambda (condition stream)
(report-clash-error condition stream
(simple-condition-format-control condition)
(simple-condition-format-arguments condition)))))
(define-condition clash-syntax-error (clash-error)
((fragment :initarg :fragment :reader clash-syntax-error-fragment)
(reason :initarg :reason :reader clash-syntax-error-reason))
(:default-initargs :code +HTTP-Code-Bad-Request+)
(:report (lambda (condition stream)
(report-clash-error
condition stream
"Syntax error while parsing ~S: ~A"
(list (clash-syntax-error-fragment condition)
(clash-syntax-error-reason condition))))))