diff --git a/home/cgi-bin/test.sh b/home/cgi-bin/test.sh
new file mode 100755
index 0000000..c9a624d
--- /dev/null
+++ b/home/cgi-bin/test.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+echo Status: 200 OK
+echo Content-Type: text/plain
+echo
+
+echo Hallo Welt
diff --git a/home/index.html b/home/index.html
new file mode 100644
index 0000000..ba6a4ed
--- /dev/null
+++ b/home/index.html
@@ -0,0 +1,9 @@
+
+
+
+ Test-Page
+
+
+ Test Page
+
+
diff --git a/src/main.c b/src/main.c
index 743a234..b356c5a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,39 +1,57 @@
#include
#include
#include
+#include
#include "networking.h"
#include "logging.h"
#include "headers.h"
#include "files.h"
+#include "cgi.h"
struct handlerSettings {
struct fileSettings fileSettings;
+ struct cgiSettings cgiSettings;
+ const char* cgiBin;
};
struct handler handlerGetter(struct metaData metaData, const char* host, struct bind* bind) {
struct handlerSettings* settings = (struct handlerSettings*) bind->settings.ptr;
union userData data;
- data.ptr = &(settings->fileSettings);
- return (struct handler) {
- .handler = &fileHandler,
- .data = data
- };
+ if (strncmp(metaData.path, settings->cgiBin, strlen(settings->cgiBin)) == 0) {
+ data.ptr = &(settings->cgiSettings);
+
+ return (struct handler) {
+ .handler = &cgiHandler,
+ .data = data
+ };
+ } else {
+ data.ptr = &(settings->fileSettings);
+
+ return (struct handler) {
+ .handler = &fileHandler,
+ .data = data
+ };
+ }
}
int main(int argc, char** argv) {
setLogging(stderr, DEBUG, true);
setCriticalHandler(NULL);
- char* documentRoot = realpath(".", NULL);
+ char* documentRoot = realpath("./home/", NULL);
struct handlerSettings handlerSettings = {
.fileSettings = {
.documentRoot = documentRoot,
.index = true
- }
+ },
+ .cgiSettings = {
+ .documentRoot = documentRoot
+ },
+ .cgiBin = "/cgi-bin/"
};
union userData settingsData;
settingsData.ptr = &handlerSettings;