diff --git a/hello-world/main.c b/hello-world/main.c index 590f841..2e217a6 100644 --- a/hello-world/main.c +++ b/hello-world/main.c @@ -23,7 +23,7 @@ int main(int argc, char *argv[]) { printf("main() Started...\n"); if (argc != 2) { - fprintf(stderr, "Usage: ./main \n"); + fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); } diff --git a/libjansson/main.c b/libjansson/main.c new file mode 100644 index 0000000..8c24c1c --- /dev/null +++ b/libjansson/main.c @@ -0,0 +1,132 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define ROUTE_HELLO "/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: %s \n", argv[0]); + 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", ROUTE_HELLO, 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\n", 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) { + + /*declaration*/ + json_t *array, *integer1, *integer2; + json_int_t * json_nb; + int number; + size_t size; + + /*pg int*/ + number = 42; + json_nb = (void *)&number; + printf("address of number: %p\n", &number); + printf("address of json_nb: %p\n", json_nb); + printf("value of number: %d\n", number); + printf("value of json_nb: %lld\n", *json_nb); + + /*pg array*/ + array = json_array(); + integer1 = json_integer(42); + integer2 = json_integer(23); + json_array_append(array, integer1); + json_array_append(array, integer2); + json_decref(integer1); + json_decref(integer2); + size = json_array_size(array); + fprintf(stdout,"main() size: %ld\n", size); + + ulfius_set_json_body_response(response, 200, array); + json_decref(array); + 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/libjansson/makefile b/libjansson/makefile new file mode 100644 index 0000000..6ffc946 --- /dev/null +++ b/libjansson/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 -ljansson -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/libjansson/readme.md b/libjansson/readme.md new file mode 100644 index 0000000..7d6447b --- /dev/null +++ b/libjansson/readme.md @@ -0,0 +1,11 @@ +* build + +``` +make +``` + +* run + +``` +./main +```