From f36529fe53eb9c436186dda1a4ee76838a3066b7 Mon Sep 17 00:00:00 2001 From: structix Date: Sun, 17 Sep 2017 18:37:33 +0200 Subject: [PATCH] Signal handlers to deploy as an init.d service. Makefile install routine --- RestServer/main.c | 22 +++++++++++++++++++--- RestServer/makefile | 11 +++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/RestServer/main.c b/RestServer/main.c index f5a031c..6700dc8 100644 --- a/RestServer/main.c +++ b/RestServer/main.c @@ -6,6 +6,7 @@ #include #include +#include #include "sendmysql.h" #include "calculate.h" @@ -25,9 +26,13 @@ void exitFunction(void) { printf("Exiting HumidityServer.\n"); ulfius_stop_framework(&instance); ulfius_clean_instance(&instance); - exit(0); } +void sig_handler(int signo) { + if (signo == SIGINT || signo == SIGTERM || signo == SIGKILL) { + exit(0); //executes the exitFunction + } +} int callback_welcome (const struct _u_request * request, struct _u_response * response, void * user_data) { ulfius_set_string_body_response(response, 200, "Welcome to the HumidityPi rest service!"); @@ -114,6 +119,17 @@ int callback_absTempHum(const struct _u_request *request, struct _u_response *re int main(void) { atexit(exitFunction); + + if (signal(SIGINT, sig_handler) == SIG_ERR) { + printf("\ncan't catch SIGINT\n"); + } + if (signal(SIGTERM, sig_handler) == SIG_ERR) { + printf("\ncan't catch SIGTERM\n"); + } + if (signal(SIGKILL, sig_handler) == SIG_ERR) { + printf("\ncan't catch SIGTERM\n"); + } + // Initialize instance with the port number if (ulfius_init_instance(&instance, PORT, NULL, NULL) != U_OK) { fprintf(stderr, "Error ulfius_init_instance, abort\n"); @@ -128,8 +144,8 @@ int main(void) { if (ulfius_start_framework(&instance) == U_OK) { printf("Start framework on port %d\n", instance.port); - // Wait for the user to press on the console to quit the application - getchar(); + // Wait for a signal to stop the program. + pause(); } else { fprintf(stderr, "Error starting framework\n"); } diff --git a/RestServer/makefile b/RestServer/makefile index 0d89b0a..16bc654 100644 --- a/RestServer/makefile +++ b/RestServer/makefile @@ -9,7 +9,7 @@ LDFLAGS = `mysql_config --libs` -lm -lulfius -lyder -lorcania OBJ = main.o calculate.o sendmysql.o -dht22: $(OBJ) +humiditypiserver: $(OBJ) $(CC) $(CFLAGS) -o humidityserver $(OBJ) $(LDFLAGS) %.o: %.c @@ -20,10 +20,9 @@ clean: rm -r *.o install: - sudo cp humiditypi /usr/bin - if [ ! -d /etc/humiditypi ]; then sudo mkdir /etc/humiditypi; fi - sudo cp settings.cfg /etc/humiditypi + sudo cp humidityserver /usr/bin + #if [ ! -d /etc/humiditypi ]; then sudo mkdir /etc/humiditypi; fi + #sudo cp settings.cfg /etc/humiditypi uninstall: - sudo rm /usr/bin/humiditypi - rm -r /etc/humiditypi + sudo rm /usr/bin/humidityserver