Return-Path: Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: (qmail 73448 invoked from network); 2 Oct 2008 13:34:14 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 2 Oct 2008 13:34:14 -0000 Received: (qmail 90461 invoked by uid 500); 2 Oct 2008 13:34:10 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 90189 invoked by uid 500); 2 Oct 2008 13:34:09 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 90178 invoked by uid 99); 2 Oct 2008 13:34:09 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 02 Oct 2008 06:34:09 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 02 Oct 2008 13:33:15 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 0E65F238899F; Thu, 2 Oct 2008 06:33:50 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r701126 - /tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Date: Thu, 02 Oct 2008 13:33:49 -0000 To: dev@tomcat.apache.org From: mturk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081002133350.0E65F238899F@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: mturk Date: Thu Oct 2 06:33:49 2008 New Revision: 701126 URL: http://svn.apache.org/viewvc?rev=701126&view=rev Log: Implement service extensions to the 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=701126&r1=701125&r2=701126&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 06:33:49 2008 @@ -79,6 +79,7 @@ #define URI_HEADER_NAME_BASE ("TOMCATURI") #define QUERY_HEADER_NAME_BASE ("TOMCATQUERY") #define WORKER_HEADER_NAME_BASE ("TOMCATWORKER") +#define WORKER_HEADER_INDEX_BASE ("TOMCATWORKERIDX") #define TOMCAT_TRANSLATE_HEADER_NAME_BASE ("TOMCATTRANSLATE") #define CONTENT_LENGTH ("CONTENT_LENGTH:") @@ -96,6 +97,7 @@ static char QUERY_HEADER_NAME[MAX_PATH]; static char WORKER_HEADER_NAME[MAX_PATH]; static char TOMCAT_TRANSLATE_HEADER_NAME[MAX_PATH]; +static char WORKER_HEADER_INDEX[MAX_PATH]; /* The variants of the special headers after IIS adds * "HTTP_" to the front of them @@ -103,6 +105,7 @@ static char HTTP_URI_HEADER_NAME[MAX_PATH]; static char HTTP_QUERY_HEADER_NAME[MAX_PATH]; static char HTTP_WORKER_HEADER_NAME[MAX_PATH]; +static char HTTP_WORKER_HEADER_INDEX[MAX_PATH]; #define REGISTRY_LOCATION ("Software\\Apache Software Foundation\\Jakarta Isapi Redirector\\1.0") #define W3SVC_REGISTRY_KEY ("SYSTEM\\CurrentControlSet\\Services\\W3SVC\\Parameters") @@ -210,7 +213,8 @@ huge_buf, \ huge_buf_sz)) { \ (place) = atoi(huge_buf); \ - if (0 == (place)) { \ + if (((place) == 0) && (errno == EINVAL || \ + errno == ERANGE)) { \ (place) = def; \ } \ } else { \ @@ -1512,6 +1516,7 @@ char Port[INTERNET_MAX_URL_LENGTH] = ""; char Translate[INTERNET_MAX_URL_LENGTH]; char squery[INTERNET_MAX_URL_LENGTH] = ""; + char swindex[MAX_INSTANCEID] = ""; BOOL(WINAPI * GetHeader) (struct _HTTP_FILTER_CONTEXT * pfc, LPSTR lpszName, LPVOID lpvBuffer, LPDWORD lpdwSize); @@ -1553,6 +1558,7 @@ SetHeader(pfc, URI_HEADER_NAME, NULL); SetHeader(pfc, QUERY_HEADER_NAME, NULL); SetHeader(pfc, WORKER_HEADER_NAME, NULL); + SetHeader(pfc, WORKER_HEADER_INDEX, NULL); SetHeader(pfc, TOMCAT_TRANSLATE_HEADER_NAME, NULL); if (!GetHeader(pfc, "url", (LPVOID) uri, (LPDWORD) & sz)) { @@ -1564,6 +1570,8 @@ if (strlen(uri)) { int rc; const char *worker = NULL; + rule_extension_t *extensions; + int worker_index = -1; query = strchr(uri, '?'); if (query) { *query++ = '\0'; @@ -1610,10 +1618,12 @@ } if (szHost > 0) { StringCbCat(snuri, INTERNET_MAX_URL_LENGTH, Host); - worker = map_uri_to_worker(uw_map, uri, snuri, logger); + worker = map_uri_to_worker_ext(uw_map, uri, snuri, + &extensions, &worker_index, logger); } else { - worker = map_uri_to_worker(uw_map, uri, NULL, logger); + worker = map_uri_to_worker_ext(uw_map, uri, NULL, + &extensions, &worker_index, logger); } /* * Check if somebody is feading us with his own TOMCAT data headers. @@ -1715,10 +1725,12 @@ rregex_rewrite(forwardURI); } + itoa(worker_index, swindex, 10); if (!AddHeader(pfc, URI_HEADER_NAME, forwardURI) || ((strlen(squery) > 0) ? !AddHeader(pfc, QUERY_HEADER_NAME, squery) : FALSE) || !AddHeader(pfc, WORKER_HEADER_NAME, (LPSTR)worker) || + !AddHeader(pfc, WORKER_HEADER_INDEX, swindex) || !SetHeader(pfc, "url", extension_uri)) { jk_log(logger, JK_LOG_ERROR, "error while adding request headers"); @@ -2004,12 +2016,14 @@ StringCbPrintf(URI_HEADER_NAME, MAX_PATH, HEADER_TEMPLATE, URI_HEADER_NAME_BASE, hInst); StringCbPrintf(QUERY_HEADER_NAME, MAX_PATH, HEADER_TEMPLATE, QUERY_HEADER_NAME_BASE, hInst); StringCbPrintf(WORKER_HEADER_NAME, MAX_PATH, HEADER_TEMPLATE, WORKER_HEADER_NAME_BASE, hInst); + StringCbPrintf(WORKER_HEADER_INDEX, MAX_PATH, HEADER_TEMPLATE, WORKER_HEADER_INDEX_BASE, hInst); StringCbPrintf(TOMCAT_TRANSLATE_HEADER_NAME, MAX_PATH, HEADER_TEMPLATE, TOMCAT_TRANSLATE_HEADER_NAME_BASE, hInst); /* Construct the HTTP_ headers that will be seen in ExtensionProc */ StringCbPrintf(HTTP_URI_HEADER_NAME, MAX_PATH, HTTP_HEADER_TEMPLATE, URI_HEADER_NAME_BASE, hInst); StringCbPrintf(HTTP_QUERY_HEADER_NAME, MAX_PATH, HTTP_HEADER_TEMPLATE, QUERY_HEADER_NAME_BASE, hInst); StringCbPrintf(HTTP_WORKER_HEADER_NAME, MAX_PATH, HTTP_HEADER_TEMPLATE, WORKER_HEADER_NAME_BASE, hInst); + StringCbPrintf(HTTP_WORKER_HEADER_INDEX, MAX_PATH, HTTP_HEADER_TEMPLATE, WORKER_HEADER_INDEX_BASE, hInst); break; case DLL_PROCESS_DETACH: @@ -2116,6 +2130,7 @@ 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); + jk_log(logger, JK_LOG_DEBUG, "Using worker index %s.", WORKER_HEADER_INDEX); jk_log(logger, JK_LOG_DEBUG, "Using translate header %s.", TOMCAT_TRANSLATE_HEADER_NAME); jk_log(logger, JK_LOG_DEBUG, "Using a default of %d connections per pool.", DEFAULT_WORKER_THREADS); @@ -2423,6 +2438,8 @@ jk_ws_service_t *s, char **worker_name) { char *huge_buf = NULL; /* should be enough for all */ + int worker_index = -1; + rule_extension_t *e; DWORD huge_buf_sz; @@ -2441,9 +2458,11 @@ GET_SERVER_VARIABLE_VALUE(HTTP_WORKER_HEADER_NAME, (*worker_name)); GET_SERVER_VARIABLE_VALUE(HTTP_URI_HEADER_NAME, s->req_uri); GET_SERVER_VARIABLE_VALUE(HTTP_QUERY_HEADER_NAME, s->query_string); + GET_SERVER_VARIABLE_VALUE_INT(HTTP_WORKER_HEADER_INDEX, worker_index, -1); if (JK_IS_DEBUG_LEVEL(logger)) { - jk_log(logger, JK_LOG_DEBUG, "Reading extension header %s: %s", HTTP_WORKER_HEADER_NAME, (*worker_name) ); + jk_log(logger, JK_LOG_DEBUG, "Reading extension header %s: %s", HTTP_WORKER_HEADER_NAME, (*worker_name)); + jk_log(logger, JK_LOG_DEBUG, "Reading extension header %s: %d", HTTP_WORKER_HEADER_INDEX, worker_index); jk_log(logger, JK_LOG_DEBUG, "Reading extension header %s: %s", HTTP_URI_HEADER_NAME, s->req_uri); jk_log(logger, JK_LOG_DEBUG, "Reading extension header %s: %s", HTTP_QUERY_HEADER_NAME, s->query_string); } @@ -2474,6 +2493,23 @@ s->method = private_data->lpEcb->lpszMethod; s->content_length = (jk_uint64_t)private_data->lpEcb->cbTotalBytes; + e = get_uri_to_worker_ext(uw_map, worker_index); + if (e) { + if (JK_IS_DEBUG_LEVEL(logger)) + jk_log(logger, JK_LOG_DEBUG, "Applying service extensions" ); + s->extension.reply_timeout = e->reply_timeout; + s->extension.use_server_error_pages = e->use_server_error_pages; + if (e->activation) { + s->extension.activation = jk_pool_alloc(s->pool, e->activation_size * sizeof(int)); + memcpy(s->extension.activation, e->activation, e->activation_size * sizeof(int)); + } + if (e->fail_on_status_size > 0) { + s->extension.fail_on_status_size = e->fail_on_status_size; + s->extension.fail_on_status = jk_pool_alloc(s->pool, e->fail_on_status_size * sizeof(int)); + memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int)); + } + } + s->uw_map = uw_map; /* * Add SSL IIS environment --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org