2 * DEBUG: section 04 Error Generation
3 * AUTHOR: Duane Wessels
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
31 * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
34 #ifndef SQUID_ERRORPAGE_H
35 #define SQUID_ERRORPAGE_H
38 #include "auth/UserRequest.h"
40 #include "ip/Address.h"
43 \defgroup ErrorPageAPI Error Pages API
45 \section ErrorPageStringCodes Error Page % codes for text insertion.
49 B - URL with FTP %2f hack x
50 c - Squid error code x
51 d - seconds elapsed since request received x
54 f - FTP request line x
56 g - FTP server message x
58 H - server host name x
59 i - client IP address x
60 I - server IP address x
61 l - HREF link for CSS stylesheet inclusion x
62 L - HREF link for more info/contact x
64 m - Error message returned by auth helper x
65 o - Message returned external acl helper x
68 R - Full HTTP Request x
69 S - squid signature from ERR_SIGNATURE x
70 s - caching proxy software with version x
73 U - URL without password x
74 u - URL with password x
75 w - cachemgr email address x
76 W - error data (to be included in the mailto links)
77 z - dns server error message x
78 Z - Preformatted error message x
85 /// \ingroup ErrorPageAPI
90 * Allocates and initializes an error response
92 HttpReply
*BuildHttpReply(void);
96 * Locates error page template to be used for this error
97 * and constructs the HTML page content from it.
99 MemBuf
*BuildContent(void);
102 * Generates the Location: header value for a deny_info error page
103 * to be used for this error.
105 void DenyInfoLocation(const char *name
, HttpRequest
*request
, MemBuf
&result
);
108 * Map the Error page and deny_info template % codes into textual output.
110 * Several of the codes produce blocks of non-URL compatible results.
111 * When processing the deny_info location URL they will be skipped.
113 * \param token The token following % which need to be converted
114 * \param building_deny_info_url Perform special deny_info actions, such as URL-encoding and token skipping.
116 const char *Convert(char token
, bool building_deny_info_url
);
119 * CacheManager / Debug dump of the ErrorState object.
120 * Writes output into the given MemBuf.
121 \retval 0 successful completion.
123 int Dump(MemBuf
* mb
);
129 http_status httpStatus
;
130 AuthUserRequest::Pointer auth_user_request
;
131 HttpRequest
*request
;
135 String dnsError
; ///< DNS lookup error message
138 Ip::Address src_addr
;
144 unsigned int flag_cbdata
:1;
148 wordlist
*server_msg
;
156 char *err_msg
; /* Preformatted error message from the cache */
159 CBDATA_CLASS2(ErrorState
);
163 \ingroup ErrorPageAPI
165 * This function finds the error messages formats, and stores
166 * them in error_text[]
169 * error_text[] - is modified
171 SQUIDCEXTERN
void errorInitialize(void);
173 /// \ingroup ErrorPageAPI
174 SQUIDCEXTERN
void errorClean(void);
177 \ingroup ErrorPageAPI
179 * This function generates a error page from the info contained
180 * by err and then sends it to the client.
181 * The callback function errorSendComplete() is called after
182 * the page has been written to the client socket (fd).
183 * errorSendComplete() deallocates err. We need to add
184 * err to the cbdata because comm_write() requires it
185 * for all callback data pointers.
187 \note normally errorSend() should only be called from
188 * routines in ssl.c and pass.c, where we don't have any
189 * StoreEntry's. In client_side.c we must allocate a StoreEntry
190 * for errors and use errorAppendEntry() to account for
191 * persistent/pipeline connections.
193 \param fd socket where page object is to be written
194 \param err This object is destroyed after use in this function.
196 SQUIDCEXTERN
void errorSend(int fd
, ErrorState
*err
);
199 \ingroup ErrorPageAPI
201 * This function generates a error page from the info contained
202 * by err and then stores the text in the specified store
204 * This function should only be called by "server
205 * side routines" which need to communicate errors to the
206 * client side. It should also be called from client_side.c
207 * because we now support persistent connections, and
208 * cannot assume that we can immediately write to the socket
212 \param err This object is destroyed after use in this function.
214 SQUIDCEXTERN
void errorAppendEntry(StoreEntry
*entry
, ErrorState
*err
);
216 /// \ingroup ErrorPageAPI
217 SQUIDCEXTERN
void errorStateFree(ErrorState
* err
);
219 /// \ingroup ErrorPageAPI
220 SQUIDCEXTERN err_type
errorReservePageId(const char *page_name
);
223 \ingroup ErrorPageAPI
225 * This function creates a ErrorState object.
227 SQUIDCEXTERN ErrorState
*errorCon(err_type type
, http_status
, HttpRequest
* request
);
228 SQUIDCEXTERN
const char *errorPageName(int pageId
); ///< error ID to string
230 #endif /* SQUID_ERRORPAGE_H */