Author: rjung Date: Sun Sep 28 03:00:30 2008 New Revision: 699794 URL: http://svn.apache.org/viewvc?rev=699794&view=rev Log: Add configurable error page redirect.
Disabled by default, you need to define CONFIGURABLE_ERROR_PAGE and then set the redirect URL via error_page. Modified: tomcat/connectors/branches/other/jk_isapi_plugin_chunked/jk/native/iis/jk_isapi_plugin.c Modified: tomcat/connectors/branches/other/jk_isapi_plugin_chunked/jk/native/iis/jk_isapi_plugin.c URL: http://svn.apache.org/viewvc/tomcat/connectors/branches/other/jk_isapi_plugin_chunked/jk/native/iis/jk_isapi_plugin.c?rev=699794&r1=699793&r2=699794&view=diff ============================================================================== --- tomcat/connectors/branches/other/jk_isapi_plugin_chunked/jk/native/iis/jk_isapi_plugin.c (original) +++ tomcat/connectors/branches/other/jk_isapi_plugin_chunked/jk/native/iis/jk_isapi_plugin.c Sun Sep 28 03:00:30 2008 @@ -56,12 +56,20 @@ #else #define HAS_CHUNKING "-NO_CHUNKING" #endif + #ifdef AUTOMATIC_POOL_SIZE #define HAS_AUTO_POOL "-AUTO_POOL" #else #define HAS_AUTO_POOL "-NO_AUTO_POOL" #endif -#define VERSION_STRING "Jakarta/ISAPI/" JK_EXPOSED_VERSION HAS_CHUNKING HAS_AUTO_POOL + +#ifdef CONFIGURABLE_ERROR_PAGE +#define HAS_ERROR_PAGE "-ERROR_PAGE" +#else +#define HAS_ERROR_PAGE "-NO_ERROR_PAGE" +#endif + +#define VERSION_STRING "Jakarta/ISAPI/" JK_EXPOSED_VERSION HAS_CHUNKING HAS_AUTO_POOL HAS_ERROR_PAGE #define SHM_DEF_NAME "JKISAPISHMEM" #define DEFAULT_WORKER_NAME ("ajp13") @@ -129,6 +137,10 @@ #define REJECT_UNSAFE_TAG ("reject_unsafe") #define WATCHDOG_INTERVAL_TAG ("watchdog_interval") #define ENABLE_CHUNKED_ENCODING_TAG ("enable_chunked_encoding") +#ifdef CONFIGURABLE_ERROR_PAGE +#define ERROR_PAGE_TAG ("error_page") +#endif + /* HTTP standard headers */ #define TRANSFER_ENCODING_CHUNKED_HEADER_COMPLETE ("Transfer-Encoding: chunked") #define TRANSFER_ENCODING_CHUNKED_HEADER_COMPLETE_LEN (26) @@ -254,6 +266,10 @@ static int reject_unsafe = 0; static int watchdog_interval = 0; static HANDLE watchdog_handle = NULL; +#ifdef CONFIGURABLE_ERROR_PAGE +static char error_page_buf[INTERNET_MAX_URL_LENGTH] = {0}; +static char *error_page = NULL; +#endif #define URI_SELECT_OPT_PARSED 0 #define URI_SELECT_OPT_UNPARSED 1 @@ -1893,8 +1909,28 @@ jk_log(logger, JK_LOG_ERROR, "service() failed with http error %d", is_error); } - lpEcb->dwHttpStatusCode = is_error; - write_error_message(lpEcb, is_error); +#ifdef CONFIGURABLE_ERROR_PAGE + /** Try to redirect the client to a page explaining the ISAPI redirector is down */ + if (error_page) { + int len_of_error_page = (int)strlen(error_page); + if (!lpEcb->ServerSupportFunction(lpEcb->ConnID, + HSE_REQ_SEND_URL_REDIRECT_RESP, + error_page, + (LPDWORD)&len_of_error_page, + (LPDWORD)NULL)) { + jk_log(logger, JK_LOG_ERROR, + "HttpExtensionProc error, Error page redirect failed with %d (0x%08x)", + GetLastError(), GetLastError()); + lpEcb->dwHttpStatusCode = is_error; + } + } + else { +#endif + lpEcb->dwHttpStatusCode = is_error; + write_error_message(lpEcb, is_error); +#ifdef CONFIGURABLE_ERROR_PAGE + } +#endif } e->done(&e, logger); } @@ -2220,6 +2256,11 @@ "SF_NOTIFY_PREPROC_HEADERS" : "UNKNOWN"), iis_info.filter_notify_event); +#ifdef CONFIGURABLE_ERROR_PAGE + if (error_page) { + jk_log(logger, JK_LOG_DEBUG, "Using error page '%s'.", error_page); + } +#endif jk_log(logger, JK_LOG_DEBUG, "Using uri header %s.", URI_HEADER_NAME); jk_log(logger, JK_LOG_DEBUG, "Using query header %s.", QUERY_HEADER_NAME); jk_log(logger, JK_LOG_DEBUG, "Using worker header %s.", WORKER_HEADER_NAME); @@ -2427,6 +2468,11 @@ #ifdef ALLOW_CHUNKING chunked_encoding_enabled = get_config_bool(src, ENABLE_CHUNKED_ENCODING_TAG, JK_FALSE); #endif +#ifdef CONFIGURABLE_ERROR_PAGE + if (get_config_parameter(src, ERROR_PAGE_TAG, error_page_buf, sizeof(error_page_buf))) { + error_page = error_page_buf; + } +#endif if (using_ini_file) { jk_map_free(&map); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]