#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(array): %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; }