implement head method
[webserver.git] / http.c
diff --git a/http.c b/http.c
index c17781fc76b3d24e8e6f9dc73b642e1284a8adc0..f0e53afe908f511a7724546750fb5fbef265d5c7 100644 (file)
--- a/http.c
+++ b/http.c
@@ -349,46 +349,29 @@ int processing (char *data, int len, conf_t *conf, char **pdata)
         }
         
         VERBOSE (DEBUG, PRINT ("Analyse field\n"));
-        if (strcmp (field, "Allow") == 0) {
-            header.allow = value;
-        } else if (strcmp (field, "Authorization") == 0) {
-            header.authorization = value;
-        } else if (strcmp (field, "Content-Encoding") == 0) {
-            header.content_encoding = value;
-        } else if (strcmp (field, "Content-Length") == 0) {
-            header.content_length = value;
-        } else if (strcmp (field, "Content-Type") == 0) {
-            header.content_type = value;
-        } else if (strcmp (field, "Date") == 0) {
-            header.date = value;
-        } else if (strcmp (field, "Expires") == 0) {
-            header.expires = value;
-        } else if (strcmp (field, "From") == 0) {
-            header.from = value;
-        } else if (strcmp (field, "If-Modified-Since") == 0) {
-            header.if_modified_since = value;
-        } else if (strcmp (field, "Last-Modified") == 0) {
-            header.last_modified = value;
-        } else if (strcmp (field, "Location") == 0) {
-            header.location = value;
-        } else if (strcmp (field, "Pragma") == 0) {
-            header.pragma = value;
-        } else if (strcmp (field, "Referer") == 0) {
-            header.referer = value;
-        } else if (strcmp (field, "Server") == 0) {
-            header.server = value;
-        } else if (strcmp (field, "User-Agent") == 0) {
-            header.user_agent = value;
-        } else if (strcmp (field, "WWW-Authenticate") == 0) {
-            header.www_authenticate = value;
-        } else {
-            VERBOSE (WARNING, PRINT ("Unknown header field: '%s'\n", field));
-        }
+        if (strcmp (field, "Allow") == 0) { header.allow = value; }
+        else if (strcmp (field, "Authorization") == 0) { header.authorization = value; }
+        else if (strcmp (field, "Content-Encoding") == 0) { header.content_encoding = value; }
+        else if (strcmp (field, "Content-Length") == 0) { header.content_length = value; }
+        else if (strcmp (field, "Content-Type") == 0) { header.content_type = value; }
+        else if (strcmp (field, "Date") == 0) { header.date = value; }
+        else if (strcmp (field, "Expires") == 0) { header.expires = value; }
+        else if (strcmp (field, "From") == 0) { header.from = value; }
+        else if (strcmp (field, "If-Modified-Since") == 0) { header.if_modified_since = value; }
+        else if (strcmp (field, "Last-Modified") == 0) { header.last_modified = value; }
+        else if (strcmp (field, "Location") == 0) { header.location = value; }
+        else if (strcmp (field, "Pragma") == 0) { header.pragma = value; }
+        else if (strcmp (field, "Referer") == 0) { header.referer = value; }
+        else if (strcmp (field, "Server") == 0) { header.server = value; }
+        else if (strcmp (field, "User-Agent") == 0) { header.user_agent = value; }
+        else if (strcmp (field, "WWW-Authenticate") == 0) { header.www_authenticate = value; }
+        else { VERBOSE (WARNING, PRINT ("Unknown header field: '%s'\n", field)); }
     }
     VERBOSE (DEBUG, print_header_values (&header));
 
     /* response */
     char *buffer = NULL;
+    FILE *fid = NULL;
     switch (type) {
     case get_e:
         VERBOSE (DEBUG, PRINT ("Read file %s\n", filename));
@@ -403,6 +386,16 @@ int processing (char *data, int len, conf_t *conf, char **pdata)
         }
         break;
     case head_e:
+        VERBOSE (DEBUG, PRINT ("Read file %s\n", filename));
+        fid = fopen (filename, "rb");
+        if (fid == NULL) {
+            sprintf (location, "http://%s/", conf->servername);
+            len = error_404 (pdata, location);
+        } else {
+            fclose (fid);
+            sprintf (location, "http://%s%s", conf->servername, filename);
+            len = generic_response (pdata, location, NULL, 0);
+        }
         break;
     case post_e:
         VERBOSE (DEBUG, PRINT ("Write file %s\n", filename));