Author: mturk Date: Thu Oct 2 07:06:48 2008 New Revision: 701131 URL: http://svn.apache.org/viewvc?rev=701131&view=rev Log: Implement use_server_error+pages extension for IIS
Modified: tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Modified: tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c?rev=701131&r1=701130&r2=701131&view=diff ============================================================================== --- tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c (original) +++ tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Thu Oct 2 07:06:48 2008 @@ -612,28 +612,42 @@ static void write_error_message(LPEXTENSION_CONTROL_BLOCK lpEcb, int err) { DWORD len; - if (err = 500) { - lpEcb->ServerSupportFunction(lpEcb->ConnID, - HSE_REQ_SEND_RESPONSE_HEADER, - "500 Internal Server Error", - 0, - (LPDWORD)CONTENT_TYPE); - len = (DWORD)(sizeof(HTML_ERROR_500) - 1); - lpEcb->WriteClient(lpEcb->ConnID, - HTML_ERROR_500, &len, HSE_IO_SYNC); + char status[MAX_PATH]; + + if (error_page) { + char error_page_url[INTERNET_MAX_URL_LENGTH] = ""; + int len_of_error_page; + StringCbPrintf(error_page_url, INTERNET_MAX_URL_LENGTH, + (LPCSTR)error_page, err); + len_of_error_page = (int)strlen(error_page_url); + if (!lpEcb->ServerSupportFunction(lpEcb->ConnID, + HSE_REQ_SEND_URL_REDIRECT_RESP, + error_page_url, + (LPDWORD)&len_of_error_page, + (LPDWORD)NULL)) { + lpEcb->dwHttpStatusCode = err; + } + else { + return; + } } - else if (err == 503) { - lpEcb->ServerSupportFunction(lpEcb->ConnID, - HSE_REQ_SEND_RESPONSE_HEADER, - "503 Service Unavailable", - 0, - (LPDWORD)CONTENT_TYPE); + lpEcb->dwHttpStatusCode = err; + + StringCbPrintf(status, MAX_PATH, "%s %s", err, status_reason(err)); + lpEcb->ServerSupportFunction(lpEcb->ConnID, + HSE_REQ_SEND_RESPONSE_HEADER, + status, + 0, + (LPDWORD)CONTENT_TYPE); + if (err == 503) { len = (DWORD)(sizeof(HTML_ERROR_503) - 1); lpEcb->WriteClient(lpEcb->ConnID, HTML_ERROR_503, &len, HSE_IO_SYNC); } else { - return; + len = (DWORD)(sizeof(HTML_ERROR_500) - 1); + lpEcb->WriteClient(lpEcb->ConnID, + HTML_ERROR_500, &len, HSE_IO_SYNC); } } @@ -1873,11 +1887,22 @@ int is_error = JK_HTTP_SERVER_ERROR; int result; if ((result = e->service(e, &s, logger, &is_error)) > 0) { - rc = HSE_STATUS_SUCCESS; - lpEcb->dwHttpStatusCode = HTTP_STATUS_OK; - if (JK_IS_DEBUG_LEVEL(logger)) - jk_log(logger, JK_LOG_DEBUG, - "service() returned OK"); + if (s.extension.use_server_error_pages && + s.http_response_status >= s.extension.use_server_error_pages) { + if (JK_IS_DEBUG_LEVEL(logger)) + jk_log(logger, JK_LOG_DEBUG, "Forwarding status=%d" + " for worker=%s", + s.http_response_status, worker_name); + lpEcb->dwHttpStatusCode = is_error; + write_error_message(lpEcb, is_error); + } + else { + rc = HSE_STATUS_SUCCESS; + lpEcb->dwHttpStatusCode = HTTP_STATUS_OK; + if (JK_IS_DEBUG_LEVEL(logger)) + jk_log(logger, JK_LOG_DEBUG, + "service() returned OK"); + } } else { if ((result == JK_CLIENT_ERROR) && (is_error == JK_HTTP_OK)) { @@ -1888,29 +1913,8 @@ jk_log(logger, JK_LOG_ERROR, "service() failed with http error %d", is_error); } - /** Try to redirect the client to a page explaining the ISAPI redirector is down */ - if (error_page) { - char error_page_url[INTERNET_MAX_URL_LENGTH] = ""; - int len_of_error_page; - StringCbPrintf(error_page_url, INTERNET_MAX_URL_LENGTH, - (LPCSTR)error_page, is_error); - len_of_error_page = (int)strlen(error_page_url); - if (!lpEcb->ServerSupportFunction(lpEcb->ConnID, - HSE_REQ_SEND_URL_REDIRECT_RESP, - error_page_url, - (LPDWORD)&len_of_error_page, - (LPDWORD)NULL)) { - jk_log(logger, JK_LOG_ERROR, - "HttpExtensionProc error, Error page '%s' redirect failed with %d (0x%08x)", - error_page_url, GetLastError(), GetLastError()); - lpEcb->dwHttpStatusCode = is_error; - write_error_message(lpEcb, is_error); - } - } - else { - lpEcb->dwHttpStatusCode = is_error; - write_error_message(lpEcb, is_error); - } + lpEcb->dwHttpStatusCode = is_error; + write_error_message(lpEcb, is_error); } e->done(&e, logger); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]