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]

Reply via email to