#include <time.h>
#include "debug.h"
+#include "file.h"
#include "http.h"
return add_entity (buffer, (unsigned char *)response, strlen (response), "text/html", "iso-8859-1");
}
+/* error 404 */
+
+int error_404 (char **buffer, char *uri)
+{
+ add_status_line (buffer, c404);
+ add_general_header (buffer);
+ add_response_header (buffer, uri);
+
+ char *response = "<html><head><title>Error 404</title></head><body><p>File not found</p></body></html>";
+ return add_entity (buffer, (unsigned char *)response, strlen (response), "text/html", "iso-8859-1");
+}
+
/* response html */
int response_html (char **buffer, char *location, char *response)
/* main HTTP processing */
-int processing (char *data, int len, char **pdata)
+int processing (char *data, int len, char *root, char **pdata)
{
char *saved_data = data;
VERBOSE (DEBUG, PRINT ("Start processing\n"));
}
VERBOSE (INFO, PRINT ("%s %s (%s)\n", (type == get_e) ? "Get" : (type == head_e) ? "Head" : "Post", uri, version));
+ /* analyse uri */
+ char *filename = calloc (strlen (root) + strlen (uri) + 2, 1);
+ //sprintf (filename, "%s%s%s", root, ((root[strlen (root) - 1] != '/') && (uri[0] != '/')) ? "/" : "", uri);
+ sprintf (filename, "%s/%s", root, uri);
+
/* check header */
header_t header = {0};
while (strcmp (line = find_sequence (data, len, "\r\n", &data), "") != 0) {
VERBOSE (DEBUG, PRINT ("Processing data: %s\n", data));
}
- /* cleaning */
- free (saved_data);
-
/* response */
+ char *buffer = NULL;
switch (type) {
case get_e:
- len = response_html (pdata, "http://localhost/", "<html><head><title>Test</title></head><body><p>This a test</p></body></html>");
+ len = readfile ((unsigned char **)&buffer, filename);
+ if (len == 0) {
+ len = error_404 (pdata, "http://localhost/");
+ } else {
+ len = response_html (pdata, "http://localhost/", buffer);
+ free (buffer);
+ }
break;
case head_e:
break;
break;
}
+ /* cleaning */
+ free (saved_data);
+ free (filename);
+
return len;
}