Author: mturk
Date: Wed Jun 21 10:53:44 2006
New Revision: 416052
URL: http://svn.apache.org/viewvc?rev=416052&view=rev
Log:
Added simple rewrite capability for IIS.
Although simple, it will fulfill most needs.
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=416052&r1=416051&r2=416052&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Wed Jun 21 10:53:44
2006
@@ -78,6 +78,7 @@
#define URI_SELECT_PARSED_VERB ("parsed")
#define URI_SELECT_UNPARSED_VERB ("unparsed")
#define URI_SELECT_ESCAPED_VERB ("escaped")
+#define URI_REWRITE_VERB ("rewrite_rule_file")
#define TRANSLATE_HEADER ("Translate:")
#define TRANSLATE_HEADER_NAME ("Translate")
@@ -137,6 +138,8 @@
static jk_uri_worker_map_t *uw_map = NULL;
static jk_map_t *workers_map = NULL;
+static jk_map_t *rewrite_map = NULL;
+
static jk_logger_t *logger = NULL;
static char *SERVER_NAME = "SERVER_NAME";
static char *SERVER_SOFTWARE = "SERVER_SOFTWARE";
@@ -148,6 +151,7 @@
static int log_level = JK_LOG_EMERG_LEVEL;
static char worker_file[MAX_PATH * 2];
static char worker_mount_file[MAX_PATH * 2] = {0};
+static char rewrite_rule_file[MAX_PATH * 2] = {0};
#define URI_SELECT_OPT_PARSED 0
#define URI_SELECT_OPT_UNPARSED 1
@@ -681,6 +685,22 @@
return TRUE;
}
+static void simple_rewrite(char *uri)
+{
+ if (rewrite_map) {
+ int i;
+ char buf[INTERNET_MAX_URL_LENGTH];
+ for (i = 0; i < jk_map_size(rewrite_map); i++) {
+ const char *src = jk_map_name_at(rewrite_map, i);
+ if (strncmp(uri, src, strlen(src)) == 0) {
+ strcpy(buf, jk_map_value_at(rewrite_map, i));
+ strcat(buf, uri + strlen(src));
+ strcpy(uri, buf);
+ }
+ }
+ }
+}
+
DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc,
DWORD dwNotificationType, LPVOID pvNotification)
{
@@ -895,6 +915,17 @@
else {
forwardURI = uri;
}
+ /* Do a simple rewrite .
+ * Note that URI can be escaped, so thus the rule has
+ * to be in that case.
+ *
+ * TODO: Add more advanced regexp rewrite.
+ */
+ simple_rewrite(forwardURI);
+ if (JK_IS_DEBUG_LEVEL(logger))
+ jk_log(logger, JK_LOG_DEBUG,
+ "rewriten URI [%s]",
+ forwardURI);
if (!AddHeader(pfc, URI_HEADER_NAME, forwardURI) ||
((query != NULL && strlen(query) > 0)
@@ -1172,8 +1203,24 @@
jk_log(logger, JK_LOG_DEBUG, "Using worker file %s.", worker_file);
jk_log(logger, JK_LOG_DEBUG, "Using worker mount file %s.",
worker_mount_file);
+ jk_log(logger, JK_LOG_DEBUG, "Using rewrite rule file %s.",
+ rewrite_rule_file);
jk_log(logger, JK_LOG_DEBUG, "Using uri select %d.",
uri_select_option);
}
+
+ if (rewrite_rule_file[0] && jk_map_alloc(&rewrite_map)) {
+ if (jk_map_read_properties(rewrite_map, rewrite_rule_file, NULL)) {
+ if (JK_IS_DEBUG_LEVEL(logger)) {
+ jk_log(logger, JK_LOG_DEBUG, "Loaded rewrite rule file %s.",
+ rewrite_rule_file);
+
+ }
+ else {
+ jk_map_free(&rewrite_map);
+ }
+ }
+ }
+
if (uri_worker_map_alloc(&uw_map, NULL, logger)) {
rc = JK_FALSE;
uw_map->fname = worker_mount_file;
@@ -1283,6 +1330,13 @@
else {
ok = JK_FALSE;
}
+ tmp = jk_map_get_string(map, URI_REWRITE_VERB, NULL);
+ if (tmp) {
+ strcpy(rewrite_rule_file, tmp);
+ }
+ else {
+ ok = JK_FALSE;
+ }
tmp = jk_map_get_string(map, URI_SELECT_TAG, NULL);
if (tmp) {
int opt = parse_uri_select(tmp);
@@ -1343,6 +1397,16 @@
tmpbuf,
sizeof(worker_mount_file))) {
strcpy(worker_mount_file, tmpbuf);
+ }
+ else {
+ ok = JK_FALSE;
+ }
+
+ if (get_registry_config_parameter(hkey,
+ URI_REWRITE_VERB,
+ tmpbuf,
+ sizeof(rewrite_rule_file))) {
+ strcpy(rewrite_rule_file, tmpbuf);
}
else {
ok = JK_FALSE;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]