From 137e46a274f693d041ed4cd83acb055014599a85 Mon Sep 17 00:00:00 2001 From: "Begerad, Stefan" Date: Fri, 6 Jan 2023 11:11:40 +0100 Subject: [PATCH] feat: add hello-world --- hello-world/main.c | 109 ++++++++++++++++++++++++++++++++++++++++++ hello-world/makefile | 24 ++++++++++ hello-world/readme.md | 11 +++++ 3 files changed, 144 insertions(+) create mode 100644 hello-world/main.c create mode 100644 hello-world/makefile create mode 100644 hello-world/readme.md diff --git a/hello-world/main.c b/hello-world/main.c new file mode 100644 index 0000000..f64e920 --- /dev/null +++ b/hello-world/main.c @@ -0,0 +1,109 @@ +#include +#include +#include + +#ifndef _WIN32 + #include + #include + #include +#endif + +#include +//TODO Required? #include + +#define PREFIX "/hello" + +/** + * callback functions declaration + */ +int callback_get_hello (const struct _u_request * request, struct _u_response * response, void * user_data); + +int callback_default (const struct _u_request * request, struct _u_response * response, void * user_data); + +int main(int argc, char *argv[]) { + /*declaration*/ + struct _u_instance instance; + unsigned int port; + int ret; + + printf("main() Started...\n"); + if (argc != 2) { + fprintf(stderr, "Usage: ./main \n"); + exit(1); + } + + printf("main() argv[1]: %s\n", argv[1]); + + /*store command line argument in int variable*/ + /*validate user input*/ + /*omit injection*/ + /*stream:argv*/ + ret = sscanf(argv[1], "%d", &port); + + /*valid user input:1 successfully filled item*/ + if (ret != 1) { + fprintf(stderr, "The argument must be an integer\n"); + exit(1); + } + + if (port < 0) { + fprintf(stderr, "Error passing a negative port\n"); + exit(1); + } + printf("main() port: %d\n", port); + + if (ulfius_init_instance(&instance, port, NULL, NULL) != U_OK) { + printf("main() Error ulfius_init_instance, abort"); + return(1); + } + + //TODO Why? + u_map_put(instance.default_headers, "Access-Control-Allow-Origin", "*"); + + // Maximum body size sent by the client is 1 Kb + instance.max_post_body_size = 1024; + + // Endpoint list declaration + ulfius_add_endpoint_by_val(&instance, "GET", PREFIX, NULL, 0, &callback_get_hello, NULL); + + // default_endpoint declaration + ulfius_set_default_endpoint(&instance, &callback_default, NULL); + + // Start the framework + // Open an http connection + ret = ulfius_start_framework(&instance); + + if (ret == U_OK) { + printf("main() Start framework on port %d", instance.port); + + // Wait for the user to press on the console to quit the application + getchar(); + } else { + printf("main() Error starting framework\n"); + } + + printf("main() End framework\n"); + + ulfius_stop_framework(&instance); + ulfius_clean_instance(&instance); + + printf("main() Done.\n"); + + return 0; +} + +/** + * Callback function that put a "Hello World!" string in the response + */ +int callback_get_hello (const struct _u_request * request, struct _u_response * response, void * user_data) { + ulfius_set_string_body_response(response, 200, "Hello World!"); + return U_CALLBACK_CONTINUE; +} + +/** + * Default callback function called if no endpoint has a match + */ +int callback_default (const struct _u_request * request, struct _u_response * response, void * user_data) { + ulfius_set_string_body_response(response, 404, "Page not found, do what you want"); + return U_CALLBACK_CONTINUE; +} diff --git a/hello-world/makefile b/hello-world/makefile new file mode 100644 index 0000000..06166b4 --- /dev/null +++ b/hello-world/makefile @@ -0,0 +1,24 @@ +# Docu +# +#$@ is the name of the file to be made +#$? is the names of the changed dependents +#$< the name of the related file that caused the action +#$* the prefix shared by target and dependent files +# +# Others +RM = /bin/rm -f +# +# Source, Executable, Includes, Library Defines +EXE = main +# +# Compiler, Linker Defines +CC = /usr/bin/gcc +# +all: main.o + $(CC) main.c -L/usr/lib/x86_64-linux-gnu -lulfius -Wall -o $(EXE) +# +main.o: + $(CC) -c main.c +# Clean Up Objects, Exectuables, Dumps out of source directory +clean: + $(RM) *.o $(EXE) *~ diff --git a/hello-world/readme.md b/hello-world/readme.md new file mode 100644 index 0000000..fa95da0 --- /dev/null +++ b/hello-world/readme.md @@ -0,0 +1,11 @@ +* build + +``` +make +``` + +* run + +``` +tbd +```