浏览代码

convert_uri_to_file_name does much more than that -> rename it

bel 10 年之前
父节点
当前提交
28dd732a52
共有 1 个文件被更改,包括 17 次插入13 次删除
  1. 17 13
      src/civetweb.c

+ 17 - 13
src/civetweb.c

@@ -2665,10 +2665,14 @@ static int is_put_or_delete_method(const struct mg_connection *conn)
                          !strcmp(s, "MKCOL"));
 }
 
-static void convert_uri_to_file_name(struct mg_connection *conn, char *buf,
-                                     size_t buf_len, struct file *filep,
-                                     int * is_script_ressource, int * is_websocket_request,
-                                     int * is_put_or_delete_request)
+static void interpret_uri(struct mg_connection *conn,    /* in: request */
+                          char *filename,                /* out: filename */
+                          size_t filename_buf_len,       /* in: size of filename buffer */
+                          struct file *filep,            /* out: file structure */
+                          int * is_script_ressource,     /* out: handled by a script? */
+                          int * is_websocket_request,    /* out: websocket connetion? */
+                          int * is_put_or_delete_request /* out: put/delete a file? */
+                          )
 {
     struct vec a, b;
     const char *rewrite, *uri = conn->request_info.uri,
@@ -2693,20 +2697,20 @@ static void convert_uri_to_file_name(struct mg_connection *conn, char *buf,
     /* Using buf_len - 1 because memmove() for PATH_INFO may shift part
        of the path one byte on the right.
        If document_root is NULL, leave the file empty. */
-    mg_snprintf(conn, buf, buf_len - 1, "%s%s",
+    mg_snprintf(conn, filename, filename_buf_len - 1, "%s%s",
                 root == NULL ? "" : root,
                 root == NULL ? "" : uri);
 
     rewrite = conn->ctx->config[REWRITE];
     while ((rewrite = next_option(rewrite, &a, &b)) != NULL) {
         if ((match_len = match_prefix(a.ptr, (int) a.len, uri)) > 0) {
-            mg_snprintf(conn, buf, buf_len - 1, "%.*s%s", (int) b.len, b.ptr,
+            mg_snprintf(conn, filename, filename_buf_len - 1, "%.*s%s", (int) b.len, b.ptr,
                         uri + match_len);
             break;
         }
     }
 
-    if (mg_stat(conn, buf, filep)) return;
+    if (mg_stat(conn, filename, filep)) return;
 
     /* if we can't find the actual file, look for the file
        with the same name but a .gz extension. If we find it,
@@ -2716,7 +2720,7 @@ static void convert_uri_to_file_name(struct mg_connection *conn, char *buf,
        we can only do this if the browser declares support */
     if ((accept_encoding = mg_get_header(conn, "Accept-Encoding")) != NULL) {
         if (strstr(accept_encoding,"gzip") != NULL) {
-            snprintf(gz_path, sizeof(gz_path), "%s.gz", buf);
+            snprintf(gz_path, sizeof(gz_path), "%s.gz", filename);
             if (mg_stat(conn, gz_path, filep)) {
                 filep->gzipped = 1;
                 return;
@@ -2725,17 +2729,17 @@ static void convert_uri_to_file_name(struct mg_connection *conn, char *buf,
     }
 
     /* Support PATH_INFO for CGI scripts. */
-    for (p = buf + strlen(buf); p > buf + 1; p--) {
+    for (p = filename + strlen(filename); p > filename + 1; p--) {
         if (*p == '/') {
             *p = '\0';
             if ((match_prefix(conn->ctx->config[CGI_EXTENSIONS],
-                              (int)strlen(conn->ctx->config[CGI_EXTENSIONS]), buf) > 0
+                              (int)strlen(conn->ctx->config[CGI_EXTENSIONS]), filename) > 0
 #ifdef USE_LUA
                  ||
                  match_prefix(conn->ctx->config[LUA_SCRIPT_EXTENSIONS],
-                              (int)strlen(conn->ctx->config[LUA_SCRIPT_EXTENSIONS]), buf) > 0
+                              (int)strlen(conn->ctx->config[LUA_SCRIPT_EXTENSIONS]), filename) > 0
 #endif
-                ) && mg_stat(conn, buf, filep)) {
+                ) && mg_stat(conn, filename, filep)) {
                 /* Shift PATH_INFO block one character right, e.g.
                     "/x.cgi/foo/bar\x00" => "/x.cgi\x00/foo/bar\x00"
                    conn->path_info is pointing to the local variable "path"
@@ -5744,7 +5748,7 @@ static void handle_request(struct mg_connection *conn)
     }
     remove_double_dots_and_double_slashes((char *) ri->uri);
     path[0] = '\0';
-    convert_uri_to_file_name(conn, path, sizeof(path), &file, &is_script_resource, &is_websocket_request, &is_put_or_delete_request);
+    interpret_uri(conn, path, sizeof(path), &file, &is_script_resource, &is_websocket_request, &is_put_or_delete_request);
     conn->throttle = set_throttle(conn->ctx->config[THROTTLE],
                                   get_remote_ip(conn), ri->uri);