From 8753e7e8fc892b55c6b5e26f0c8c83cfc9e21e24 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 21 Feb 2023 17:01:56 +0100 Subject: [PATCH 01/45] added entry/finished logs for all onion handler callbacks --- server/src/handler_admin.c | 31 ++++-- server/src/handler_controller.c | 53 ++++++--- server/src/handler_driver.c | 187 +++++++++++++++++++++----------- server/src/handler_monitor.c | 56 +++++++--- server/src/handler_upload.c | 99 ++++++++++------- 5 files changed, 277 insertions(+), 149 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 1e3081d1..64be28f7 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -113,7 +113,7 @@ static bool start_bidib(void) { void stop_bidib(void) { session_id = 0; - syslog_server(LOG_NOTICE, "Request: Stop"); + syslog_server(LOG_NOTICE, "Stop bidib"); release_all_grabbed_trains(); release_all_interlockers(); running = false; @@ -140,6 +140,7 @@ onion_connection_status handler_startup(void *_, onion_request *req, if (start_bidib()) { retval = OCS_PROCESSED; } + syslog_server(LOG_NOTICE, "Request: Start, session id: %ld finished", session_id); } else { syslog_server(LOG_ERR, "Request: Start - BiDiB system is already running"); } @@ -156,7 +157,9 @@ onion_connection_status handler_shutdown(void *_, onion_request *req, pthread_mutex_lock(&start_stop_mutex); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_NOTICE, "Request: Stop"); stop_bidib(); + // Can't log here since bidib closes the syslog when stopping retval = OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Stop - BiDiB system is not running"); @@ -182,6 +185,7 @@ onion_connection_status handler_set_track_output(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x", state); bidib_set_track_output_state_all(state); bidib_flush(); + syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x - finished", state); return OCS_PROCESSED; } } else { @@ -202,6 +206,7 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, data_train); return OCS_NOT_IMPLEMENTED; } + syslog_server(LOG_NOTICE, "Request: Admin release train - train: %s", data_train); // Ensure that the train has stopped moving pthread_mutex_lock(&grabbed_trains_mutex); @@ -217,10 +222,12 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, bidib_free_train_state_query(train_state_query); if (!release_train(grab_id)) { - syslog_server(LOG_ERR, "Request: Admin release train - invalid grab id"); + syslog_server(LOG_ERR, "Request: Admin release train - train: %s - invalid grab id", + data_train); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Admin release train"); + syslog_server(LOG_NOTICE, "Request: Admin release train - train: %s - finished", + data_train); return OCS_PROCESSED; } } else { @@ -238,21 +245,25 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request const char *data_track_output = onion_request_get_post(req, "track-output"); int speed = params_check_speed(data_speed); if (speed == 999) { - syslog_server(LOG_ERR, "Request: Admin set train speed - bad speed"); + syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " + "bad speed", data_train, speed); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Admin set train speed - bad track output"); + syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " + "bad track output", data_train, speed); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %s", + data_train, data_speed); pthread_mutex_lock(&grabbed_trains_mutex); if (bidib_set_train_speed(data_train, speed, - data_track_output)) { - syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s: bad parameter values", - data_train); + data_track_output)) { + syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " + "bad parameter values", data_train, speed); } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %d", - data_train, speed); + syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %d - " + " finished", data_train, speed); } pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 1ce3f750..ac8a051d 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -370,8 +370,9 @@ onion_connection_status handler_release_route(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Release route - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - release_route(route_id); syslog_server(LOG_NOTICE, "Request: Release route - route: %s", route_id); + release_route(route_id); + syslog_server(LOG_NOTICE, "Request: Release route - route: %s - finished", route_id); return OCS_PROCESSED; } } else { @@ -390,14 +391,17 @@ onion_connection_status handler_set_point(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set point - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Set point - point: %s state: %s", + data_point, data_state); if (bidib_switch_point(data_point, data_state)) { - syslog_server(LOG_ERR, "Request: Set point - invalid parameters"); bidib_flush(); + syslog_server(LOG_ERR, "Request: Set point - point: %s state: %s - " + "invalid parameters", data_point, data_state); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set point - point: %s state: %s", - data_point, data_state); bidib_flush(); + syslog_server(LOG_NOTICE, "Request: Set point - point: %s state: %s - finished", + data_point, data_state); return OCS_PROCESSED; } } @@ -417,13 +421,15 @@ onion_connection_status handler_set_signal(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set signal - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Set signal - signal: %s state: %s", + data_signal, data_state); if (bidib_set_signal(data_signal, data_state)) { syslog_server(LOG_ERR, "Request: Set signal - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set signal - signal: %s state: %s", - data_signal, data_state); bidib_flush(); + syslog_server(LOG_NOTICE, "Request: Set signal - signal: %s state: %s - finished", + data_signal, data_state); return OCS_PROCESSED; } } @@ -443,13 +449,16 @@ onion_connection_status handler_set_peripheral(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set peripheral - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Set peripheral - peripheral: %s state: %s", + data_peripheral, data_state); if (bidib_set_peripheral(data_peripheral, data_state)) { - syslog_server(LOG_ERR, "Request: Set peripheral - invalid parameters"); + syslog_server(LOG_ERR, "Request: Set peripheral - peripheral: %s state: %s - " + "invalid parameters", data_peripheral, data_state); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set peripheral - peripheral: %s state: %s", - data_peripheral, data_state); bidib_flush(); + syslog_server(LOG_NOTICE, "Request: Set peripheral - peripheral: %s state: %s - " + "finished", data_peripheral, data_state); return OCS_PROCESSED; } } @@ -463,11 +472,13 @@ onion_connection_status handler_get_interlocker(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_NOTICE, "Request: Get interlocker"); if (selected_interlocker_instance != -1) { onion_response_printf(res, "%s", selected_interlocker_name->str); + syslog_server(LOG_NOTICE, "Request: Get interlocker finished"); return OCS_PROCESSED; } else { - syslog_server(LOG_NOTICE, "Request: Get interlocker - none selected"); + syslog_server(LOG_WARNING, "Request: Get interlocker - none selected"); return OCS_NOT_IMPLEMENTED; } } else { @@ -485,19 +496,23 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set interlocker - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Set interlocker - interlocker: %s", + selected_interlocker_name->str); if (selected_interlocker_instance != -1) { - syslog_server(LOG_ERR, "Request: Set interlocker - another interlocker instance already set"); + syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - another " + "interlocker instance is already set", data_interlocker); return OCS_NOT_IMPLEMENTED; } set_interlocker(data_interlocker); if (selected_interlocker_instance == -1) { - syslog_server(LOG_ERR, "Request: Set interlocker - invalid parameters or " - "no more interlocker instances can be loaded"); + syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - invalid " + "parameters or no more interlocker instances can be loaded", + data_interlocker); return OCS_NOT_IMPLEMENTED; } else { onion_response_printf(res, "%s", selected_interlocker_name->str); - syslog_server(LOG_NOTICE, "Request: Set interlocker - %s", + syslog_server(LOG_NOTICE, "Request: Set interlocker - interlocker: %s - finished", selected_interlocker_name->str); return OCS_PROCESSED; } @@ -517,17 +532,21 @@ onion_connection_status handler_unset_interlocker(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Unset interlocker - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Unset interlocker - interlocker: %s", + data_interlocker); if (selected_interlocker_instance == -1) { - syslog_server(LOG_ERR, "Request: Unset interlocker - no interlocker instance to unset"); + syslog_server(LOG_ERR, "Request: Unset interlocker - interlocker: %s - " + "no interlocker instance to unset", data_interlocker); return OCS_NOT_IMPLEMENTED; } unset_interlocker(data_interlocker); if (selected_interlocker_instance != -1) { - syslog_server(LOG_ERR, "Request: Unset interlocker - invalid parameters"); + syslog_server(LOG_ERR, "Request: Unset interlocker - interlocker: %s - " + "invalid parameters", data_interlocker); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Unset interlocker - %s", + syslog_server(LOG_NOTICE, "Request: Unset interlocker - interlocker: %s - finished", data_interlocker); return OCS_PROCESSED; } diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index c9f76674..c0fc9592 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -125,7 +125,7 @@ static const bool is_forward_driving(const t_interlocking_route *route, if (block_id == NULL) { syslog_server(LOG_ERR, "Driving is forwards: %s - current block of train: %s is unknown", - is_forwards ? "yes" : "no", train_id); + is_forwards ? "yes" : "no", train_id); return is_forwards; } @@ -155,7 +155,7 @@ static const bool is_forward_driving(const t_interlocking_route *route, ? !is_forwards : is_forwards; syslog_server(LOG_NOTICE, "Driving is forwards: %s", - requested_forwards ? "yes" : "no"); + requested_forwards ? "yes" : "no"); return requested_forwards; } @@ -222,7 +222,8 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } // Driving starts: Driving direction is computed from the route orientation - syslog_server(LOG_NOTICE, "Drive route: Driving starts"); + syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - Driving starts", + route->id, train_id); pthread_mutex_lock(&grabbed_trains_mutex); const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; const char requested_forwards = is_forward_driving(route, train_id); @@ -245,7 +246,9 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } // Driving stops - syslog_server(LOG_NOTICE, "Drive route: Driving stops"); + syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - Driving stops", + route->id, train_id); + // Should this also be done if is_automatic == false? dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, requested_forwards); // Release the route @@ -299,7 +302,8 @@ bool release_train(int grab_id) { if (grabbed_trains[grab_id].is_valid) { grabbed_trains[grab_id].is_valid = false; dyn_containers_free_train_engine_instance(grabbed_trains[grab_id].dyn_containers_engine_instance); - syslog_server(LOG_NOTICE, "Train %s released", grabbed_trains[grab_id].name->str); + syslog_server(LOG_NOTICE, "Train %s released (grab id %d)", + grabbed_trains[grab_id].name->str, grab_id); g_string_free(grabbed_trains[grab_id].name, TRUE); grabbed_trains[grab_id].name = NULL; success = true; @@ -324,21 +328,24 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Grab train - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - t_bidib_train_state_query train_state_query = - bidib_get_train_state(data_train); + syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s", + data_train, data_engine); + t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); if (!train_state_query.known) { bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Grab train - train not known"); + syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - " + "train not known", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } else { bidib_free_train_state_query(train_state_query); int grab_id = grab_train(data_train, data_engine); if (grab_id == -1) { - //TODO more precise error message if all slots are taken - syslog_server(LOG_ERR, "Request: Grab train - train already grabbed or engine not found"); + syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - train " + "already grabbed or engine not found", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Grab train - train: %s", data_train); + syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s - " + "finished", data_train, data_engine); onion_response_printf(res, "%ld,%d", session_id, grab_id); return OCS_PROCESSED; } @@ -359,13 +366,15 @@ onion_connection_status handler_release_train(void *_, onion_request *req, int client_session_id = params_check_session_id(data_session_id); int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Release train - invalid session id (%s != %d)", - data_session_id, session_id); + syslog_server(LOG_ERR, "Request: Release train - grab id: %d - " + "invalid session id (%s != %d)", grab_id, data_session_id, session_id); return OCS_NOT_IMPLEMENTED; } else if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - syslog_server(LOG_ERR, "Request: Release train - invalid grab id"); + syslog_server(LOG_ERR, "Request: Release train - grab id: %d - invalid grab id", + grab_id); return OCS_NOT_IMPLEMENTED; } + syslog_server(LOG_NOTICE, "Request: Release train - grab id: %d", grab_id); // Ensure that the train has stopped moving pthread_mutex_lock(&grabbed_trains_mutex); @@ -373,7 +382,8 @@ onion_connection_status handler_release_train(void *_, onion_request *req, dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, true); pthread_mutex_unlock(&grabbed_trains_mutex); - t_bidib_train_state_query train_state_query = bidib_get_train_state(grabbed_trains[grab_id].name->str); + t_bidib_train_state_query train_state_query = + bidib_get_train_state(grabbed_trains[grab_id].name->str); while (train_state_query.data.set_speed_step != 0) { bidib_free_train_state_query(train_state_query); train_state_query = bidib_get_train_state(grabbed_trains[grab_id].name->str); @@ -381,10 +391,11 @@ onion_connection_status handler_release_train(void *_, onion_request *req, bidib_free_train_state_query(train_state_query); if (!release_train(grab_id)) { - syslog_server(LOG_ERR, "Request: Release train - invalid grab id"); + syslog_server(LOG_ERR, "Request: Release train - grab id: %d - invalid grab id", + grab_id); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Release train"); + syslog_server(LOG_NOTICE, "Request: Release train - grab id: %d - finished", grab_id); return OCS_PROCESSED; } } else { @@ -403,32 +414,39 @@ onion_connection_status handler_request_route(void *_, onion_request *req, const char *data_destination_name = onion_request_get_post(req, "destination"); const int client_session_id = params_check_session_id(data_session_id); const int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); - if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Request train route - invalid session id"); + if (data_source_name == NULL || data_destination_name == NULL) { + syslog_server(LOG_ERR, "Request: Request train route - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - syslog_server(LOG_ERR, "Request: Request train route - bad grab id"); + } else if (client_session_id != session_id) { + syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - " + "invalid session id", data_source_name, data_destination_name); return OCS_NOT_IMPLEMENTED; - } else if (data_source_name == NULL || data_destination_name == NULL) { - syslog_server(LOG_ERR, "Request: Request train route - invalid parameters"); + } else if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { + syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - bad grab id", + data_source_name, data_destination_name); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Request train route - " + "train: %s from: %s to: %s", + grabbed_trains[grab_id].name->str, data_source_name, + data_destination_name); // Use interlocker to find and grant a route - GString *route_id = grant_route(grabbed_trains[grab_id].name->str, data_source_name, data_destination_name); if (route_id->str != NULL && params_check_is_number(route_id->str)) { - syslog_server(LOG_NOTICE, "Request: Request train route - " - "train: %s route: %s", - grabbed_trains[grab_id].name->str, route_id->str); onion_response_printf(res, "%s", route_id->str); + syslog_server(LOG_NOTICE, "Request: Request train route - " + "train: %s route: %s from: %s to: %s - finished", + grabbed_trains[grab_id].name->str, route_id->str, data_source_name, + data_destination_name); g_string_free(route_id, true); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Request train route - " - "train: %s route not granted", - grabbed_trains[grab_id].name->str); + "train: %s from: %s to: %s - route not granted (%s)", + grabbed_trains[grab_id].name->str, data_source_name, + data_destination_name, route_id->str); if (strcmp(route_id->str, "no_interlocker") == 0) { onion_response_printf(res, "No interlocker has been selected for use"); } else if (strcmp(route_id->str, "no_routes") == 0) { @@ -452,7 +470,7 @@ onion_connection_status handler_request_route(void *_, onion_request *req, } else { syslog_server(LOG_ERR, "Request: Request train route - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; - } + } } onion_connection_status handler_request_route_id(void *_, onion_request *req, @@ -465,30 +483,38 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, const int client_session_id = params_check_session_id(data_session_id); const int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); const char *route_id = params_check_route_id(data_route_id); - if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Request train route - invalid session id"); + if (strcmp(route_id, "") == 0) { + syslog_server(LOG_ERR, "Request: Request train route id - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - syslog_server(LOG_ERR, "Request: Request train route - bad grab id"); + } else if (client_session_id != session_id) { + syslog_server(LOG_ERR, "Request: Request train route id - route: %s - " + "invalid session id", route_id); return OCS_NOT_IMPLEMENTED; - } else if (strcmp(route_id, "") == 0) { - syslog_server(LOG_ERR, "Request: Request train route - invalid parameters"); + } else if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { + syslog_server(LOG_ERR, "Request: Request train route id - route: %s - " + "bad grab id", route_id); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Request train route id - " + "train: %s route: %s", + grabbed_trains[grab_id].name->str, route_id); // Grant the route ID using an internal algorithm const char *result = grant_route_id(grabbed_trains[grab_id].name->str, route_id); if (strcmp(result, "granted") == 0) { - syslog_server(LOG_NOTICE, "Request: Request train route - " - "train: %s route: %s", + syslog_server(LOG_NOTICE, "Request: Request train route id - " + "train: %s route: %s - route granted", grabbed_trains[grab_id].name->str, route_id); onion_response_printf(res, "%s", result); + syslog_server(LOG_NOTICE, "Request: Request train route id - " + "train: %s route: %s - finished", + grabbed_trains[grab_id].name->str, route_id); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Request train route - " - "train: %s route: %s not granted", - grabbed_trains[grab_id].name->str, route_id); + syslog_server(LOG_ERR, "Request: Request train route id - " + "train: %s route: %s - route not granted (%s)", + grabbed_trains[grab_id].name->str, route_id, result); if (strcmp(result, "not_grantable") == 0) { onion_response_printf(res, "Route %s is not available " "or has conflicts with others", route_id); @@ -505,9 +531,9 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, } } } else { - syslog_server(LOG_ERR, "Request: Request train route - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Request train route id - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; - } + } } onion_connection_status handler_driving_direction(void *_, onion_request *req, @@ -521,19 +547,22 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Driving direction - bad train id"); return OCS_NOT_IMPLEMENTED; } else if (strcmp(route_id, "") == 0) { - syslog_server(LOG_ERR, "Request: Driving direction - bad route id"); + syslog_server(LOG_ERR, "Request: Driving direction - train: %s - bad route id", + data_train); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_INFO, "Request: Driving direction - train: %s", data_train); const t_interlocking_route *route = get_route(route_id); const char *direction = is_forward_driving(route, data_train) ? "forwards" : "backwards"; onion_response_printf(res, "%s", direction); + syslog_server(LOG_INFO, "Request: Driving direction - train: %s - finished", data_train); return OCS_PROCESSED; } } else { syslog_server(LOG_ERR, "Request: Driving direction - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; - } + } } onion_connection_status handler_drive_route(void *_, onion_request *req, @@ -561,11 +590,17 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Drive route - bad route id"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_NOTICE, "Request: Drive route - route: %s train: %s", + route_id, grabbed_trains[grab_id].name->str); const bool is_automatic = (strcmp(mode, "automatic") == 0); if (drive_route(grab_id, route_id, is_automatic)) { onion_response_printf(res, "Route %s driving completed", route_id); + syslog_server(LOG_NOTICE, "Request: Drive route - route: %s train: %s - finished", + route_id, grabbed_trains[grab_id].name->str); return OCS_PROCESSED; } else { + syslog_server(LOG_ERR, "Request: Drive route - route: %s train: %s - " + "driving unsuccessful", route_id, grabbed_trains[grab_id].name->str); return OCS_NOT_IMPLEMENTED; } } @@ -593,13 +628,17 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set train speed - bad grab id"); return OCS_NOT_IMPLEMENTED; } else if (speed == 999) { - syslog_server(LOG_ERR, "Request: Set train speed - bad speed"); + syslog_server(LOG_ERR, "Request: Set train speed - train: %s speed: %d - bad speed", + grabbed_trains[grab_id].name->str, speed); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set train speed - bad track output"); + syslog_server(LOG_ERR, "Request: Set train speed - train: %s speed: %d - bad track output", + grabbed_trains[grab_id].name->str, speed); return OCS_NOT_IMPLEMENTED; } else { pthread_mutex_lock(&grabbed_trains_mutex); + syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %s", + grabbed_trains[grab_id].name->str, speed); strcpy(grabbed_trains[grab_id].track_output, data_track_output); int dyn_containers_engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; if (speed < 0) { @@ -609,6 +648,8 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, dyn_containers_set_train_engine_instance_inputs(dyn_containers_engine_instance, speed, true); } + syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %s - finished", + grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; } @@ -637,23 +678,27 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, syslog_server(LOG_ERR, "Request: Set calibrated train speed - bad grab id"); return OCS_NOT_IMPLEMENTED; } else if (speed == 999) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - bad speed"); + syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s " + "speed: %d - bad speed", grabbed_trains[grab_id].name->str, speed); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - bad track output"); + syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s " + "speed: %d - bad track output", grabbed_trains[grab_id].name->str, speed); return OCS_NOT_IMPLEMENTED; } else { pthread_mutex_lock(&grabbed_trains_mutex); + syslog_server(LOG_NOTICE, "Request: Set calibrated train speed - train: %s speed: %s", + grabbed_trains[grab_id].name->str, speed); if (bidib_set_calibrated_train_speed(grabbed_trains[grab_id].name->str, - speed, data_track_output)) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - bad " - "parameter values"); + speed, data_track_output)) { + syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %s" + " - bad parameter values", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, "Request: Set calibrated train speed - " - "train: %s speed: %d", + "train: %s speed: %d - finished", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; @@ -661,7 +706,7 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, } } else { syslog_server(LOG_ERR, "Request: Set calibrated train speed - system not running " - "or wrong request type"); + "or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -683,19 +728,22 @@ onion_connection_status handler_set_train_emergency_stop(void *_, syslog_server(LOG_ERR, "Request: Set train emergency stop - bad grab id"); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set train emergency stop - bad track output"); + syslog_server(LOG_ERR, "Request: Set train emergency stop - train: %s" + " - bad track output", grabbed_trains[grab_id].name->str); return OCS_NOT_IMPLEMENTED; } else { pthread_mutex_lock(&grabbed_trains_mutex); + syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s", + grabbed_trains[grab_id].name->str); if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, - data_track_output)) { - syslog_server(LOG_ERR, "Request: Set train emergency stop - bad " - "parameter values"); + data_track_output)) { + syslog_server(LOG_ERR, "Request: Set train emergency stop - train: %s - bad " + "parameter values", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s", + syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s - finished", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; @@ -728,27 +776,36 @@ onion_connection_status handler_set_train_peripheral(void *_, syslog_server(LOG_ERR, "Request: Set train peripheral - bad grab id"); return OCS_NOT_IMPLEMENTED; } else if (state == -1) { - syslog_server(LOG_ERR, "Request: Set train peripheral - bad state"); + syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s - bad state", + grabbed_trains[grab_id].name->str); return OCS_NOT_IMPLEMENTED; } else if (data_peripheral == NULL) { - syslog_server(LOG_ERR, "Request: Set train peripheral - bad peripheral"); + syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s - bad peripheral", + grabbed_trains[grab_id].name->str); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set train peripheral - bad track output"); + syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s peripheral: %s - " + "bad track output", grabbed_trains[grab_id].name->str, data_peripheral); return OCS_NOT_IMPLEMENTED; } else { pthread_mutex_lock(&grabbed_trains_mutex); + syslog_server(LOG_NOTICE, "Request: Set train peripheral - train: %s " + "peripheral: %s state: 0x%02x", + grabbed_trains[grab_id].name->str, + data_peripheral, state); if (bidib_set_train_peripheral(grabbed_trains[grab_id].name->str, data_peripheral, state, data_track_output)) { - syslog_server(LOG_ERR, "Request: Set train peripheral - bad " - "parameter values"); + syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s " + "peripheral: %s state: 0x%02x - bad parameter values", + grabbed_trains[grab_id].name->str, + data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, "Request: Set train peripheral - train: %s " - "peripheral: %s state: 0x%02x", + "peripheral: %s state: 0x%02x - finished", grabbed_trains[grab_id].name->str, data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 2b11b4d4..92cfbe59 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -45,6 +45,7 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get available trains"); GString *trains = g_string_new(""); t_bidib_id_list_query query = bidib_get_trains(); for (size_t i = 0; i < query.length; i++) { @@ -57,7 +58,7 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, strcpy(response, trains->str); g_string_free(trains, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get available trains"); + syslog_server(LOG_INFO, "Request: Get available trains finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get available trains - system not running or " @@ -75,6 +76,7 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Get train state - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_INFO, "Request: Get train state - train: %s", data_train); t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); t_bidib_train_position_query train_position_query = @@ -119,12 +121,14 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, g_string_free(seg_string, true); g_string_free(ret_string, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get train state"); + syslog_server(LOG_INFO, "Request: Get train state - train: %s finished", + data_train); return OCS_PROCESSED; } else { bidib_free_train_position_query(train_position_query); bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Get train state - invalid train"); + syslog_server(LOG_ERR, "Request: Get train state - train: %s invalid train", + data_train); return OCS_NOT_IMPLEMENTED; } } @@ -144,6 +148,7 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re syslog_server(LOG_ERR, "Request: Get train peripherals - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s", data_train); t_bidib_id_list_query query = bidib_get_train_peripherals(data_train); if (query.length > 0) { @@ -160,12 +165,13 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re strcpy(response, train_peripherals->str); g_string_free(train_peripherals, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get train peripherals"); + syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s finished", + data_train); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get train train peripherals - invalid " - "train"); + syslog_server(LOG_ERR, "Request: Get train train peripherals - train: %s invalid " + "train", data_train); return OCS_NOT_IMPLEMENTED; } } @@ -180,6 +186,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get track outputs"); GString *track_outputs = g_string_new(""); t_bidib_id_list_query query = bidib_get_track_outputs(); for (size_t i = 0; i < query.length; i++) { @@ -226,7 +233,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, strcpy(response, track_outputs->str); g_string_free(track_outputs, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get track outputs"); + syslog_server(LOG_INFO, "Request: Get track outputs finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get track outputs - system not running or " @@ -239,6 +246,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get points"); GString *points = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_points(); for (size_t i = 0; i < query.length; i++) { @@ -268,7 +276,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, strcpy(response, points->str); g_string_free(points, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get points"); + syslog_server(LOG_INFO, "Request: Get points finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get points - system not running or wrong " @@ -281,6 +289,7 @@ onion_connection_status handler_get_signals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get signals"); GString *signals = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_signals(); for (size_t i = 0; i < query.length; i++) { @@ -298,7 +307,7 @@ onion_connection_status handler_get_signals(void *_, onion_request *req, strcpy(response, signals->str); g_string_free(signals, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get signals"); + syslog_server(LOG_INFO, "Request: Get signals finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get signals - system not running or wrong " @@ -317,6 +326,7 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Get point aspects - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s", data_point); t_bidib_id_list_query query = bidib_get_point_aspects(data_point); if (query.length > 0) { GString *aspects = g_string_new(""); @@ -329,11 +339,13 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, strcpy(response, aspects->str); g_string_free(aspects, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get point aspects"); + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s finished", + data_point); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get point aspects - invalid point"); + syslog_server(LOG_ERR, "Request: Get point aspects - point%s invalid point", + data_point); return OCS_NOT_IMPLEMENTED; } } @@ -353,6 +365,7 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Get signal aspects - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s", data_signal); t_bidib_id_list_query query = bidib_get_signal_aspects(data_signal); if (query.length > 0) { GString *aspects = g_string_new(""); @@ -365,11 +378,13 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, strcpy(response, aspects->str); g_string_free(aspects, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get signal aspects"); + syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s finished", + data_signal); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get signal aspects - invalid signal"); + syslog_server(LOG_ERR, "Request: Get signal aspects - signal: %s invalid signal", + data_signal); return OCS_NOT_IMPLEMENTED; } } @@ -384,6 +399,7 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get segments"); GString *segments = g_string_new(""); t_bidib_id_list_query seg_query = bidib_get_connected_segments(); for (size_t i = 0; i < seg_query.length; i++) { @@ -414,7 +430,7 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, strcpy(response, segments->str); g_string_free(segments, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get segments"); + syslog_server(LOG_INFO, "Request: Get segments finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get segments - system not running or " @@ -427,6 +443,7 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get reversers"); if (!reversers_state_update()) { syslog_server(LOG_ERR, "Request: Get reversers - unable to request state update"); return OCS_NOT_IMPLEMENTED; @@ -464,7 +481,7 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, strcpy(response, reversers->str); g_string_free(reversers, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get reversers"); + syslog_server(LOG_INFO, "Request: Get reversers finished"); return OCS_PROCESSED; } } else { @@ -478,6 +495,7 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get peripherals"); GString *peripherals = g_string_new(""); t_bidib_id_list_query per_query = bidib_get_connected_peripherals(); for (size_t i = 0; i < per_query.length; i++) { @@ -494,7 +512,7 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, strcpy(response, peripherals->str); g_string_free(peripherals, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get peripherals"); + syslog_server(LOG_INFO, "Request: Get peripherals finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get peripherals - system not running or " @@ -507,6 +525,7 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Get granted routes"); bool needNewLine = false; GString *granted_routes = g_string_new(""); GArray *route_ids = interlocking_table_get_all_route_ids(); @@ -528,7 +547,7 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, strcpy(response, granted_routes->str); g_string_free(granted_routes, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get granted routes"); + syslog_server(LOG_INFO, "Request: Get granted routes finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get granted routes - system not running or " @@ -571,6 +590,7 @@ onion_connection_status handler_get_route(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Get route - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { + syslog_server(LOG_INFO, "Request: Get route - route: %s", route_id); GString *route_str = g_string_new(""); t_interlocking_route *route = get_route(route_id); g_string_append_printf(route_str, "route id: %s\n", route->id); @@ -607,7 +627,7 @@ onion_connection_status handler_get_route(void *_, onion_request *req, strcpy(response, route_str->str); g_string_free(route_str, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_NOTICE, "Request: Get route"); + syslog_server(LOG_INFO, "Request: Get route - route: %s finished", route_id); return OCS_PROCESSED; } } else { diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index 7c9e0fc1..ad2a3cad 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -139,15 +139,18 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, const char *filename = onion_request_get_post(req, "file"); const char *temp_filepath = onion_request_get_file(req, "file"); if (filename == NULL || temp_filepath == NULL) { - syslog_server(LOG_ERR, "Request: Upload - engine file is invalid"); + syslog_server(LOG_ERR, "Request: Upload engine - engine file is invalid"); onion_response_printf(res, "Engine file is invalid"); onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } + + syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s" , filename); if (engine_file_exists(filename)) { - syslog_server(LOG_ERR, "Request: Upload - engine file already exists"); + syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s -" + " engine file already exists", filename); onion_response_printf(res, "Engine file already exists"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -162,8 +165,9 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, char final_filepath[PATH_MAX + NAME_MAX]; snprintf(final_filepath, sizeof(final_filepath), "%s/%s", engine_dir, filename); onion_shortcut_rename(temp_filepath, final_filepath); - syslog_server(LOG_NOTICE, "Request: Upload - copied engine SCCharts file from %s to %s", - temp_filepath, final_filepath); + syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s -" + " copied engine SCCharts file from %s to %s", + filename, temp_filepath, final_filepath); char filepath[sizeof(final_filepath)]; remove_file_extension(filepath, final_filepath, ".sctx"); @@ -171,15 +175,16 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, if (status == DYNLIB_COMPILE_SCCHARTS_C_ERR || status == DYNLIB_COMPILE_SHARED_SCCHARTS_ERR) { remove_engine_files(libname); - syslog_server(LOG_ERR, "Request: Upload - engine file %s could not be compiled " - "into a C file and then to a shared library", filepath); + syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - could not be " + "compiled into a C file and then to a shared library", filepath); onion_response_printf(res, "Engine file %s could not be compiled into a C file " - "and then a shared library", filepath); + "and then a shared library", filepath); onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Upload - engine %s compiled", filename); + syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s - engine compiled", + filename); pthread_mutex_lock(&dyn_containers_mutex); const int engine_slot = dyn_containers_get_free_engine_slot(); @@ -187,7 +192,8 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, pthread_mutex_unlock(&dyn_containers_mutex); remove_engine_files(libname); - syslog_server(LOG_ERR, "Request: Upload - no available engine slot"); + syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - " + "no available engine slot", filename); onion_response_printf(res, "No available engine slot"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -197,9 +203,10 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, snprintf(filepath, sizeof(filepath), "%s/%s", engine_dir, libname); dyn_containers_set_engine(engine_slot, filepath); pthread_mutex_unlock(&dyn_containers_mutex); + syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s - finished", filename); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Upload - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Upload engine - system not running or wrong request type"); onion_response_printf(res, "System not running or wrong request type"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -207,13 +214,16 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, } } +// What is being refreshed by this? Shouldn't it just be get_engines? onion_connection_status handler_refresh_engines(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Refresh engines"); GString *train_engines = dyn_containers_get_train_engines(); onion_response_printf(res, "%s", train_engines->str); g_string_free(train_engines, true); + syslog_server(LOG_INFO, "Request: Refresh engines finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Refresh engines - system not running or wrong request type"); @@ -235,13 +245,12 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s", name); pthread_mutex_lock(&dyn_containers_mutex); const int engine_slot = dyn_containers_get_engine_slot(name); if (engine_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_ERR, - "Request: Remove engine - engine %s could not be found", + syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - engine could not be found", name); onion_response_printf(res, "Engine %s could not be found", name); @@ -252,7 +261,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, const bool engine_freed_successfully = dyn_containers_free_engine(engine_slot); pthread_mutex_unlock(&dyn_containers_mutex); if (!engine_freed_successfully) { - syslog_server(LOG_ERR, "Request: Remove engine - engine %s is still in use", + syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - engine is still in use", name); onion_response_printf(res, "Engine %s is still in use", name); @@ -261,16 +270,15 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, } if (!remove_engine_files(name)) { - syslog_server(LOG_ERR, "Request: Remove engine - engine %s files could not be removed", - name); + syslog_server(LOG_ERR, + "Request: Remove engine - engine: %s - files could not be removed", name); onion_response_printf(res, "Engine %s files could not be removed", name); onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove engine - engine %s removed", - name); + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - removed - finished", name); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Remove engine - system not running or wrong request type"); @@ -330,9 +338,11 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } + syslog_server(LOG_NOTICE, "Request: Upload interlocker - interlocker file: %s" , filename); if (interlocker_file_exists(filename)) { - syslog_server(LOG_ERR, "Request: Upload - interlocker file already exists"); + syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s -" + " file already exists", filename); onion_response_printf(res, "Interlocker file already exists"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -347,8 +357,9 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, char final_filepath[PATH_MAX + NAME_MAX]; snprintf(final_filepath, sizeof(final_filepath), "%s/%s", interlocker_dir, filename); onion_shortcut_rename(temp_filepath, final_filepath); - syslog_server(LOG_NOTICE, "Request: Upload - copied interlocker BahnDSL file from %s to %s", - temp_filepath, final_filepath); + syslog_server(LOG_DEBUG, "Request: Upload interlocker - interlocker file: %s - " + "copied interlocker BahnDSL file from %s to %s", + filename, temp_filepath, final_filepath); char filepath[sizeof(final_filepath)]; remove_file_extension(filepath, final_filepath, ".bahn"); @@ -356,13 +367,15 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, if (status == DYNLIB_COMPILE_SHARED_BAHNDSL_ERR) { remove_interlocker_files(libname); - syslog_server(LOG_ERR, "Request: Upload - interlocker file %s could not be compiled", filepath); + syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s - " + "interlocker could not be compiled", filename); onion_response_printf(res, "Interlocker file %s could not be compiled", filepath); onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Upload - interlocker %s compiled", filename); + syslog_server(LOG_DEBUG, "Request: Upload interlocker - interlocker file: %s - " + "interlocker compiled", filename); pthread_mutex_lock(&dyn_containers_mutex); const int interlocker_slot = dyn_containers_get_free_interlocker_slot(); @@ -370,7 +383,8 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, pthread_mutex_unlock(&dyn_containers_mutex); remove_interlocker_files(libname); - syslog_server(LOG_ERR, "Request: Upload - no available interlocker slot"); + syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s - " + "no available interlocker slot", filename); onion_response_printf(res, "No available interlocker slot"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -380,9 +394,12 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, snprintf(filepath, sizeof(filepath), "%s/%s", interlocker_dir, libname); dyn_containers_set_interlocker(interlocker_slot, filepath); pthread_mutex_unlock(&dyn_containers_mutex); + syslog_server(LOG_NOTICE, "Request: Upload interlocker - interlocker file: %s - finished", + filename); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Upload - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Upload interlocker - system not running " + "or wrong request type"); onion_response_printf(res, "System not running or wrong request type"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -390,16 +407,20 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, } } +// What is being refreshed by this? Shouldn't it just be get_interlockers? onion_connection_status handler_refresh_interlockers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + syslog_server(LOG_INFO, "Request: Refresh interlockers"); GString *interlockers = dyn_containers_get_interlockers(); onion_response_printf(res, "%s", interlockers->str); g_string_free(interlockers, true); + syslog_server(LOG_INFO, "Request: Refresh interlockers finished"); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Refresh interlockers - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Refresh interlockers - system not running " + "or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -410,20 +431,21 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *name = onion_request_get_post(req, "interlocker-name"); if (name == NULL || plugin_is_unremovable(name)) { - syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker name is invalid or interlocker is unremovable", name); + syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker name is invalid " + "or interlocker is unremovable", name); onion_response_printf(res, "Interlocker name is invalid or interlocker is unremovable"); onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } + syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s", name); pthread_mutex_lock(&dyn_containers_mutex); const int interlocker_slot = dyn_containers_get_interlocker_slot(name); if (interlocker_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_ERR, - "Request: Remove interlocker - interlocker %s could not be found", - name); + syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " + "interlocker could not be found", name); onion_response_printf(res, "Interlocker %s could not be found", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -433,9 +455,8 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, const bool interlocker_freed_successfully = dyn_containers_free_interlocker(interlocker_slot); pthread_mutex_unlock(&dyn_containers_mutex); if (!interlocker_freed_successfully) { - syslog_server(LOG_ERR, - "Request: Remove interlocker - interlocker %s is still in use", - name); + syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " + "interlocker is still in use", name); onion_response_printf(res, "Interlocker %s is still in use", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -443,20 +464,20 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, } if (!remove_interlocker_files(name)) { - syslog_server(LOG_ERR, - "Request: Remove interlocker - interlocker %s files could not be removed", - name); + syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " + "files could not be removed", name); onion_response_printf(res, "Interlocker %s files could not be removed", name); onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker %s removed", - name); + syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - " + "removed - finished", name); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Remove interlocker - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Remove interlocker - system not running " + "or wrong request type"); onion_response_printf(res, "System not running or wrong request type"); onion_response_set_code(res, HTTP_BAD_REQUEST); From 747627de8e5753945e54203dc44aadadcf4cb59a Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Feb 2023 14:13:11 +0100 Subject: [PATCH 02/45] further fixes --- server/src/handler_admin.c | 4 ++-- server/src/handler_driver.c | 17 ++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 64be28f7..1669ebee 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -135,12 +135,12 @@ onion_connection_status handler_startup(void *_, onion_request *req, openlog("swtbahn", 0, LOG_LOCAL0); session_id = time(NULL); - syslog_server(LOG_NOTICE, "Request: Start, session id: %ld", session_id); + syslog_server(LOG_NOTICE, "Request: Start - session id: %ld", session_id); if (start_bidib()) { retval = OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Start, session id: %ld finished", session_id); + syslog_server(LOG_NOTICE, "Request: Start - session id: %ld - finished", session_id); } else { syslog_server(LOG_ERR, "Request: Start - BiDiB system is already running"); } diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index c0fc9592..c181af51 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -265,7 +265,7 @@ static int grab_train(const char *train, const char *engine) { for (size_t i = 0; i < TRAIN_ENGINE_INSTANCE_COUNT_MAX; i++) { if (grabbed_trains[i].is_valid && strcmp(grabbed_trains[i].name->str, train) == 0) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Train %s already grabbed", train); + syslog_server(LOG_ERR, "Grab train - train: %s - Train already grabbed", train); return -1; } } @@ -275,7 +275,7 @@ static int grab_train(const char *train, const char *engine) { while (grabbed_trains[next_grab_id].is_valid) { if (next_grab_id == start) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "All grab ids in use"); + syslog_server(LOG_ERR, "Grab train - train: %s - All grab ids in use", train); return -1; } increment_next_grab_id(); @@ -287,12 +287,13 @@ static int grab_train(const char *train, const char *engine) { strcpy(grabbed_trains[grab_id].track_output, "master"); if (dyn_containers_set_train_engine_instance(&grabbed_trains[grab_id], train, engine)) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Train engine %s could not be used", engine); + syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - train engine could not be used", + train, engine); return -1; } grabbed_trains[grab_id].is_valid = true; pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Train %s grabbed", train); + syslog_server(LOG_NOTICE, "Grab train - train: %s - Train grabbed", train); return grab_id; } @@ -427,9 +428,8 @@ onion_connection_status handler_request_route(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, "Request: Request train route - " - "train: %s from: %s to: %s", - grabbed_trains[grab_id].name->str, data_source_name, - data_destination_name); + "train: %s from: %s to: %s", grabbed_trains[grab_id].name->str, + data_source_name, data_destination_name); // Use interlocker to find and grant a route GString *route_id = grant_route(grabbed_trains[grab_id].name->str, data_source_name, @@ -790,8 +790,7 @@ onion_connection_status handler_set_train_peripheral(void *_, } else { pthread_mutex_lock(&grabbed_trains_mutex); syslog_server(LOG_NOTICE, "Request: Set train peripheral - train: %s " - "peripheral: %s state: 0x%02x", - grabbed_trains[grab_id].name->str, + "peripheral: %s state: 0x%02x", grabbed_trains[grab_id].name->str, data_peripheral, state); if (bidib_set_train_peripheral(grabbed_trains[grab_id].name->str, data_peripheral, state, From 1b48b763fd079b58d50cfe3d27cba0cd45fb4f16 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Wed, 1 Mar 2023 13:48:46 +0100 Subject: [PATCH 03/45] Improve log schema consistency Fix log type keywords --- server/src/handler_admin.c | 34 ++++++++++++++++++-------------- server/src/handler_controller.c | 33 +++++++++++++++++-------------- server/src/handler_driver.c | 35 ++++++++++++++++++++------------- server/src/handler_monitor.c | 34 ++++++++++++++++---------------- server/src/handler_upload.c | 32 ++++++++++++++++-------------- server/src/interlocking.c | 2 +- server/src/server.c | 4 ++-- 7 files changed, 95 insertions(+), 79 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 1669ebee..35b96eaa 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -78,31 +78,31 @@ static void *poll_bidib_messages(void *_) { static bool start_bidib(void) { const int err_serial = bidib_start_serial(serial_device, config_directory, 0); if (err_serial) { - syslog_server(LOG_ERR, "Request: Start - Could not start BiDiB serial connection"); + syslog_server(LOG_ERR, "Start - Could not start BiDiB serial connection"); return false; } const int succ_clear_dir = clear_engine_dir() + clear_interlocker_dir(); if (!succ_clear_dir) { - syslog_server(LOG_ERR, "Request: Start - Could not clear the engine and interlocker directories"); + syslog_server(LOG_ERR, "Start - Could not clear the engine and interlocker directories"); return false; } const int succ_config = bahn_data_util_initialise_config(config_directory); if (!succ_config) { - syslog_server(LOG_ERR, "Request: Start - Could not initialise interlocking tables"); + syslog_server(LOG_ERR, "Start - Could not initialise interlocking tables"); return false; } const int err_dyn_containers = dyn_containers_start(); if (err_dyn_containers) { - syslog_server(LOG_ERR, "Request: Start - Could not start shared library containers"); + syslog_server(LOG_ERR, "Start - Could not start shared library containers"); return false; } const int err_interlocker = load_default_interlocker_instance(); if (err_interlocker) { - syslog_server(LOG_ERR, "Request: Start - Could not load default interlocker instance"); + syslog_server(LOG_ERR, "Start - Could not load default interlocker instance"); return false; } @@ -114,12 +114,18 @@ static bool start_bidib(void) { void stop_bidib(void) { session_id = 0; syslog_server(LOG_NOTICE, "Stop bidib"); + syslog_server(LOG_INFO, "Stop bidib - Will cease printing to log once stop is complete"); release_all_grabbed_trains(); + syslog_server(LOG_INFO, "Stop bidib - Released all grabbed trains"); release_all_interlockers(); + syslog_server(LOG_INFO, "Stop bidib - Released all interlockers"); running = false; dyn_containers_stop(); + syslog_server(LOG_INFO, "Stop bidib - Stopped dyn-containers"); bahn_data_util_free_config(); pthread_join(poll_bidib_messages_thread, NULL); + syslog_server(LOG_INFO, "Stop bidib - Bidib message poll thread joined, " + "now stopping bidib and closing log"); bidib_stop(); } @@ -132,7 +138,7 @@ onion_connection_status handler_startup(void *_, onion_request *req, if (!running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { // Necessary when restarting the server because libbidib closes syslog on exit - openlog("swtbahn", 0, LOG_LOCAL0); + openlog("swtbahn", 0, LOG_LOCAL0); session_id = time(NULL); syslog_server(LOG_NOTICE, "Request: Start - session id: %ld", session_id); @@ -159,7 +165,7 @@ onion_connection_status handler_shutdown(void *_, onion_request *req, OR_METHODS) == OR_POST)) { syslog_server(LOG_NOTICE, "Request: Stop"); stop_bidib(); - // Can't log here since bidib closes the syslog when stopping + // Can't log "finished" here since bidib closes the syslog when stopping retval = OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Stop - BiDiB system is not running"); @@ -177,8 +183,7 @@ onion_connection_status handler_set_track_output(void *_, onion_request *req, char *end; const char *data_state = onion_request_get_post(req, "state"); long int state = strtol(data_state, &end, 10); - if (data_state == NULL || (state == LONG_MAX || state == LONG_MIN) || - *end != '\0') { + if (data_state == NULL || (state == LONG_MAX || state == LONG_MIN) || *end != '\0') { syslog_server(LOG_ERR, "Request: Set track output - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { @@ -197,7 +202,7 @@ onion_connection_status handler_set_track_output(void *_, onion_request *req, onion_connection_status handler_admin_release_train(void *_, onion_request *req, onion_response *res) { build_response_header(res); - if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { + if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_train = onion_request_get_post(req, "train"); const int grab_id = train_get_grab_id(data_train); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { @@ -209,7 +214,7 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Admin release train - train: %s", data_train); // Ensure that the train has stopped moving - pthread_mutex_lock(&grabbed_trains_mutex); + pthread_mutex_lock(&grabbed_trains_mutex); const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, true); pthread_mutex_unlock(&grabbed_trains_mutex); @@ -253,11 +258,10 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request "bad track output", data_train, speed); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %s", - data_train, data_speed); + syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %d", + data_train, speed); pthread_mutex_lock(&grabbed_trains_mutex); - if (bidib_set_train_speed(data_train, speed, - data_track_output)) { + if (bidib_set_train_speed(data_train, speed, data_track_output)) { syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " "bad parameter values", data_train, speed); } else { diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index ac8a051d..bfc444d5 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -63,7 +63,7 @@ const int set_interlocker(const char *interlocker_name) { if (dyn_containers_set_interlocker_instance( &interlocker_instances[i], interlocker_name) ) { - syslog_server(LOG_ERR, "Interlocker %s could not be used in instance %d", + syslog_server(LOG_ERR, "Set Interlocker - Interlocker %s could not be used in instance %d", interlocker_name, i); } else { selected_interlocker_name = g_string_new(interlocker_name); @@ -201,7 +201,8 @@ const bool get_route_is_clear(const char *route_id) { GString *grant_route(const char *train_id, const char *source_id, const char *destination_id) { if (selected_interlocker_instance == -1) { - syslog_server(LOG_ERR, "Grant route: No interlocker has been set"); + syslog_server(LOG_ERR, "Grant route - Train %s from %s to %s - No interlocker has been set", + train_id, source_id, destination_id); return g_string_new("no_interlocker"); } @@ -234,20 +235,20 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de // Return the result const char *route_id = interlocker_instance_io.output_route_id; if (route_id != NULL && params_check_is_number(route_id)) { - syslog_server(LOG_NOTICE, "Grant route: Route %s has been granted", route_id); + syslog_server(LOG_NOTICE, "Grant route - Train %s from %s to %s - Route %s has been granted", train_id, source_id, destination_id, route_id); - syslog_server(LOG_NOTICE, "Grant route: Set points and signals for route id \"%s\" - interlocker type %d", + syslog_server(LOG_NOTICE, "Grant route - Set points and signals for route id \"%s\" - interlocker type %d", interlocker_instance_io.output_route_id, interlocker_instance_io.output_interlocker_type); } else { if (strcmp(route_id, "no_routes") == 0) { - syslog_server(LOG_ERR, "Grant route: No routes possible from %s to %s", source_id, destination_id); + syslog_server(LOG_ERR, "Grant route - Train %s - No routes possible from %s to %s", train_id, source_id, destination_id); } else if (strcmp(route_id, "not_grantable") == 0) { - syslog_server(LOG_ERR, "Grant route: Conflicting routes are in use"); + syslog_server(LOG_ERR, "Grant route - Train %s - Conflicting routes are in use", train_id); } else if (strcmp(route_id, "not_clear") == 0) { - syslog_server(LOG_ERR, "Grant route: Route found has occupied blocks or source signal is not stop"); + syslog_server(LOG_ERR, "Grant route - Train %s - Route found has occupied blocks or source signal is not stop", train_id); } else { - syslog_server(LOG_ERR, "Grant route: Route could not be granted (%s)", route_id); + syslog_server(LOG_ERR, "Grant route - Train %s - Route could not be granted (%s)", train_id, route_id); } } GString *route_id_copy = g_string_new(route_id); @@ -306,22 +307,24 @@ void release_route(const char *route_id) { t_interlocking_route *route = get_route(route_id); if (route->train != NULL) { const char *signal_aspect = "aspect_stop"; - + syslog_server(LOG_INFO, "Release route - Route %s - Route currently granted to train %s", route_id, route->train); const int signal_count = route->signals->len; for (int signal_index = 0; signal_index < signal_count; signal_index++) { // Get each signal along the route const char *signal_id = g_array_index(route->signals, char *, signal_index); if (bidib_set_signal(signal_id, signal_aspect)) { - syslog_server(LOG_ERR, "Release route: Unable to set signal to aspect %s", signal_aspect); + syslog_server(LOG_ERR, "Release route - Route %s - Unable to set signal to aspect %s", route_id, signal_aspect); } bidib_flush(); } free(route->train); route->train = NULL; - syslog_server(LOG_NOTICE, "Release route: route %s released", route_id); - } + syslog_server(LOG_NOTICE, "Release route - Route %s - route released", route_id); + } else { + syslog_server(LOG_ERR, "Release route - Route %s - Route is not granted to any train", route_id); + } pthread_mutex_unlock(&interlocker_mutex); } @@ -472,13 +475,13 @@ onion_connection_status handler_get_interlocker(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_NOTICE, "Request: Get interlocker"); + syslog_server(LOG_INFO, "Request: Get interlocker"); if (selected_interlocker_instance != -1) { onion_response_printf(res, "%s", selected_interlocker_name->str); - syslog_server(LOG_NOTICE, "Request: Get interlocker finished"); + syslog_server(LOG_INFO, "Request: Get interlocker - finished"); return OCS_PROCESSED; } else { - syslog_server(LOG_WARNING, "Request: Get interlocker - none selected"); + syslog_server(LOG_ERR, "Request: Get interlocker - none selected"); return OCS_NOT_IMPLEMENTED; } } else { diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index c181af51..54361c0b 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -124,7 +124,8 @@ static const bool is_forward_driving(const t_interlocking_route *route, bidib_free_train_position_query(train_position_query); if (block_id == NULL) { - syslog_server(LOG_ERR, "Driving is forwards: %s - current block of train: %s is unknown", + syslog_server(LOG_ERR, "Is train forward driving - Driving is forwards: %s - " + "current block of train: %s is unknown", is_forwards ? "yes" : "no", train_id); return is_forwards; } @@ -154,14 +155,14 @@ static const bool is_forward_driving(const t_interlocking_route *route, const bool requested_forwards = electrically_reversed ? !is_forwards : is_forwards; - syslog_server(LOG_NOTICE, "Driving is forwards: %s", + syslog_server(LOG_NOTICE, "Is train forward driving - Driving is forwards: %s", requested_forwards ? "yes" : "no"); return requested_forwards; } static bool drive_route_params_valid(const char *train_id, t_interlocking_route *route) { if ((route->train == NULL) || strcmp(train_id, route->train) != 0) { - syslog_server(LOG_NOTICE, "Check drive route params: Route %s not granted to train %s", + syslog_server(LOG_WARNING, "Check drive route params - Route %s not granted to train %s", route->id, train_id); return false; } @@ -199,13 +200,13 @@ static bool drive_route_progressive_stop_signals(const char *train_id, t_interlo // Set signal to the Stop aspect set_signal_stop = false; if (bidib_set_signal(next_signal, signal_stop_aspect)) { - syslog_server(LOG_ERR, "Drive route progressive stop signals: " + syslog_server(LOG_ERR, "Drive route progressive stop signals - " "Unable to set route signal %s to aspect %s", next_signal, signal_stop_aspect); } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Drive route progressive stop signals: " - "Set signal - signal: %s state: %s", + syslog_server(LOG_NOTICE, "Drive route progressive stop signals - " + "Set signal: %s to aspect: %s", next_signal, signal_stop_aspect); } } @@ -303,7 +304,7 @@ bool release_train(int grab_id) { if (grabbed_trains[grab_id].is_valid) { grabbed_trains[grab_id].is_valid = false; dyn_containers_free_train_engine_instance(grabbed_trains[grab_id].dyn_containers_engine_instance); - syslog_server(LOG_NOTICE, "Train %s released (grab id %d)", + syslog_server(LOG_NOTICE, "Release train - train: %s released (grab id %d)", grabbed_trains[grab_id].name->str, grab_id); g_string_free(grabbed_trains[grab_id].name, TRUE); grabbed_trains[grab_id].name = NULL; @@ -368,7 +369,7 @@ onion_connection_status handler_release_train(void *_, onion_request *req, int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); if (client_session_id != session_id) { syslog_server(LOG_ERR, "Request: Release train - grab id: %d - " - "invalid session id (%s != %d)", grab_id, data_session_id, session_id); + "invalid session id %s", grab_id, data_session_id); return OCS_NOT_IMPLEMENTED; } else if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { syslog_server(LOG_ERR, "Request: Release train - grab id: %d - invalid grab id", @@ -435,9 +436,15 @@ onion_connection_status handler_request_route(void *_, onion_request *req, data_source_name, data_destination_name); if (route_id->str != NULL && params_check_is_number(route_id->str)) { + ///NOTE: kind of a repition with the "finished" log. If the "finished" log has to match + // the 'starting' log from earlier, it cannot include the route. However, we may want to + // know the route id that was granted. + syslog_server(LOG_NOTICE, "Request: Request train route - train: %s from: %s to: %s" + " - route %s granted", grabbed_trains[grab_id].name->str, + data_source_name, data_destination_name, route_id->str); onion_response_printf(res, "%s", route_id->str); syslog_server(LOG_NOTICE, "Request: Request train route - " - "train: %s route: %s from: %s to: %s - finished", + "train: %s from: %s to: %s - finished", grabbed_trains[grab_id].name->str, route_id->str, data_source_name, data_destination_name); g_string_free(route_id, true); @@ -547,7 +554,7 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Driving direction - bad train id"); return OCS_NOT_IMPLEMENTED; } else if (strcmp(route_id, "") == 0) { - syslog_server(LOG_ERR, "Request: Driving direction - train: %s - bad route id", + syslog_server(LOG_ERR, "Request: Driving direction - train: %s - route id empty", data_train); return OCS_NOT_IMPLEMENTED; } else { @@ -637,7 +644,7 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } else { pthread_mutex_lock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %s", + syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %d", grabbed_trains[grab_id].name->str, speed); strcpy(grabbed_trains[grab_id].track_output, data_track_output); int dyn_containers_engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; @@ -648,7 +655,7 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, dyn_containers_set_train_engine_instance_inputs(dyn_containers_engine_instance, speed, true); } - syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %s - finished", + syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %d - finished", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; @@ -687,11 +694,11 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, return OCS_NOT_IMPLEMENTED; } else { pthread_mutex_lock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Request: Set calibrated train speed - train: %s speed: %s", + syslog_server(LOG_NOTICE, "Request: Set calibrated train speed - train: %s speed: %d", grabbed_trains[grab_id].name->str, speed); if (bidib_set_calibrated_train_speed(grabbed_trains[grab_id].name->str, speed, data_track_output)) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %s" + syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %d" " - bad parameter values", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 92cfbe59..732d8eab 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -58,7 +58,7 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, strcpy(response, trains->str); g_string_free(trains, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get available trains finished"); + syslog_server(LOG_INFO, "Request: Get available trains - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get available trains - system not running or " @@ -121,13 +121,13 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, g_string_free(seg_string, true); g_string_free(ret_string, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get train state - train: %s finished", + syslog_server(LOG_INFO, "Request: Get train state - train: %s - finished", data_train); return OCS_PROCESSED; } else { bidib_free_train_position_query(train_position_query); bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Get train state - train: %s invalid train", + syslog_server(LOG_ERR, "Request: Get train state - train: %s - invalid train", data_train); return OCS_NOT_IMPLEMENTED; } @@ -165,12 +165,12 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re strcpy(response, train_peripherals->str); g_string_free(train_peripherals, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s finished", + syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s - finished", data_train); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get train train peripherals - train: %s invalid " + syslog_server(LOG_ERR, "Request: Get train train peripherals - train: %s - invalid " "train", data_train); return OCS_NOT_IMPLEMENTED; } @@ -233,7 +233,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, strcpy(response, track_outputs->str); g_string_free(track_outputs, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get track outputs finished"); + syslog_server(LOG_INFO, "Request: Get track outputs - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get track outputs - system not running or " @@ -276,7 +276,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, strcpy(response, points->str); g_string_free(points, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get points finished"); + syslog_server(LOG_INFO, "Request: Get points - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get points - system not running or wrong " @@ -307,7 +307,7 @@ onion_connection_status handler_get_signals(void *_, onion_request *req, strcpy(response, signals->str); g_string_free(signals, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get signals finished"); + syslog_server(LOG_INFO, "Request: Get signals - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get signals - system not running or wrong " @@ -339,12 +339,12 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, strcpy(response, aspects->str); g_string_free(aspects, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s finished", + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - finished", data_point); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get point aspects - point%s invalid point", + syslog_server(LOG_ERR, "Request: Get point aspects - point: %s - invalid point", data_point); return OCS_NOT_IMPLEMENTED; } @@ -378,12 +378,12 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, strcpy(response, aspects->str); g_string_free(aspects, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s finished", + syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s - finished", data_signal); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get signal aspects - signal: %s invalid signal", + syslog_server(LOG_ERR, "Request: Get signal aspects - signal: %s - invalid signal", data_signal); return OCS_NOT_IMPLEMENTED; } @@ -430,7 +430,7 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, strcpy(response, segments->str); g_string_free(segments, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get segments finished"); + syslog_server(LOG_INFO, "Request: Get segments - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get segments - system not running or " @@ -481,7 +481,7 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, strcpy(response, reversers->str); g_string_free(reversers, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get reversers finished"); + syslog_server(LOG_INFO, "Request: Get reversers - finished"); return OCS_PROCESSED; } } else { @@ -512,7 +512,7 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, strcpy(response, peripherals->str); g_string_free(peripherals, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get peripherals finished"); + syslog_server(LOG_INFO, "Request: Get peripherals - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get peripherals - system not running or " @@ -547,7 +547,7 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, strcpy(response, granted_routes->str); g_string_free(granted_routes, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get granted routes finished"); + syslog_server(LOG_INFO, "Request: Get granted routes - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get granted routes - system not running or " @@ -627,7 +627,7 @@ onion_connection_status handler_get_route(void *_, onion_request *req, strcpy(response, route_str->str); g_string_free(route_str, true); onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get route - route: %s finished", route_id); + syslog_server(LOG_INFO, "Request: Get route - route: %s - finished", route_id); return OCS_PROCESSED; } } else { diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index ad2a3cad..9f1cf9f0 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -57,7 +57,7 @@ bool clear_dir(const char dir[]) { DIR *dir_handle = opendir(dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Upload: Directory %s could not be opened", dir); + syslog_server(LOG_ERR, "Clear Directory - Directory %s could not be opened", dir); return false; } @@ -96,14 +96,14 @@ bool engine_file_exists(const char filename[]) { DIR *dir_handle = opendir(engine_dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Upload: Directory %s could not be opened", engine_dir); + syslog_server(LOG_ERR, "Engine file exists check - Directory %s could not be opened", engine_dir); return true; } struct dirent *dir_entry = NULL; while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_ERR, "Upload: Engine %s already exists", filename); + syslog_server(LOG_NOTICE, "Engine file exists check - Engine %s already exists", filename); return true; } } @@ -223,7 +223,7 @@ onion_connection_status handler_refresh_engines(void *_, onion_request *req, GString *train_engines = dyn_containers_get_train_engines(); onion_response_printf(res, "%s", train_engines->str); g_string_free(train_engines, true); - syslog_server(LOG_INFO, "Request: Refresh engines finished"); + syslog_server(LOG_INFO, "Request: Refresh engines - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Refresh engines - system not running or wrong request type"); @@ -238,8 +238,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, const char *name = onion_request_get_post(req, "engine-name"); if (name == NULL || plugin_is_unremovable(name)) { syslog_server(LOG_ERR, - "Request: Remove engine - engine name is invalid or engine is unremovable", - name); + "Request: Remove engine - engine name is invalid or engine is unremovable"); onion_response_printf(res, "Engine name is invalid or engine is unremovable"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -278,7 +277,8 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - removed - finished", name); + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - engine removed", name); + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - finished", name); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Remove engine - system not running or wrong request type"); @@ -293,14 +293,16 @@ bool interlocker_file_exists(const char filename[]) { DIR *dir_handle = opendir(interlocker_dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Upload: Directory %s could not be opened", interlocker_dir); + syslog_server(LOG_ERR, "Interlocker file exists check - Directory %s could not be opened", + interlocker_dir); return true; } struct dirent *dir_entry = NULL; while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_ERR, "Upload: Interlocker %s already exists", filename); + syslog_server(LOG_NOTICE, "Interlocker file exists check - Interlocker %s already exists", + filename); return true; } } @@ -365,10 +367,9 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, remove_file_extension(filepath, final_filepath, ".bahn"); const dynlib_status status = dynlib_compile_bahndsl(filepath, interlocker_dir); if (status == DYNLIB_COMPILE_SHARED_BAHNDSL_ERR) { - remove_interlocker_files(libname); - syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s - " "interlocker could not be compiled", filename); + remove_interlocker_files(libname); onion_response_printf(res, "Interlocker file %s could not be compiled", filepath); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -416,7 +417,7 @@ onion_connection_status handler_refresh_interlockers(void *_, onion_request *req GString *interlockers = dyn_containers_get_interlockers(); onion_response_printf(res, "%s", interlockers->str); g_string_free(interlockers, true); - syslog_server(LOG_INFO, "Request: Refresh interlockers finished"); + syslog_server(LOG_INFO, "Request: Refresh interlockers - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Refresh interlockers - system not running " @@ -471,9 +472,10 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - - syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - " - "removed - finished", name); + syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - removed", + name); + syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - finished", + name); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Remove interlocker - system not running " diff --git a/server/src/interlocking.c b/server/src/interlocking.c index 4a2a9d05..fecd67e2 100644 --- a/server/src/interlocking.c +++ b/server/src/interlocking.c @@ -74,7 +74,7 @@ void create_interlocking_hashtable(void) { } } - syslog_server(LOG_NOTICE, "Interlocking create hash table: successful"); + syslog_server(LOG_NOTICE, "Interlocking create hash table - successful"); } bool interlocking_table_initialise(const char *config_dir) { diff --git a/server/src/server.c b/server/src/server.c index 571f8e76..0d20fc79 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -87,7 +87,7 @@ static onion_connection_status handler_assets(void *_, onion_request *req, const char local_path[] = "../src/assets/"; char *global_path = realpath(local_path, NULL); if (!global_path) { - syslog_server(LOG_ERR, "Onion: Cannot calculate the global path of the given directory (%s)", + syslog_server(LOG_ERR, "Onion - Cannot calculate the global path of the given directory (%s)", local_path); ONION_ERROR("Cannot calculate the global path of the given directory (%s)", local_path); @@ -96,7 +96,7 @@ static onion_connection_status handler_assets(void *_, onion_request *req, struct stat st; if (stat(global_path, &st) != 0) { - syslog_server(LOG_ERR, "Onion: Cannot access to the exported directory/file (%s)", + syslog_server(LOG_ERR, "Onion - Cannot access to the exported directory/file (%s)", global_path); ONION_ERROR("Cannot access to the exported directory/file (%s)", global_path); onion_low_free(global_path); From d5ee5005a5ce5b2ada48d896e73e640f61b64c35 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 11 Nov 2023 10:56:08 +0100 Subject: [PATCH 04/45] Whitespace and formatting --- server/src/handler_admin.c | 2 +- server/src/handler_controller.c | 37 ++++++++++++++++++++++----------- server/src/handler_driver.c | 7 ++----- server/src/handler_monitor.c | 2 +- server/src/handler_upload.c | 10 ++++----- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 05a60479..e9b0dc19 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -296,7 +296,7 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request const char *data_speed = onion_request_get_post(req, "speed"); const char *data_track_output = onion_request_get_post(req, "track-output"); int speed = params_check_speed(data_speed); - ///TODO: Check if 999 is indeed "bad" or some signal for something else. + if (speed == 999) { syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " "bad speed", data_train, speed); diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 1200f6bb..a735fce5 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -26,6 +26,7 @@ * */ +#include #include #include #include @@ -65,7 +66,7 @@ const int set_interlocker(const char *interlocker_name) { ) { syslog_server(LOG_ERR, "Set Interlocker - Interlocker %s could not be used in instance %d", - interlocker_name, i); + interlocker_name, i); } else { selected_interlocker_name = g_string_new(interlocker_name); selected_interlocker_instance = i; @@ -228,8 +229,8 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de // Ask the interlocker to grant requested route. // May take multiple ticks to process the request. dyn_containers_set_interlocker_instance_inputs(&interlocker_instances[selected_interlocker_instance], - source_id, destination_id, - train_id); + source_id, destination_id, + train_id); struct t_interlocker_instance_io interlocker_instance_io; do { @@ -250,20 +251,26 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de // Return the result const char *route_id = interlocker_instance_io.output_route_id; if (route_id != NULL && params_check_is_number(route_id)) { - syslog_server(LOG_NOTICE, "Grant route - Train %s from %s to %s - Route %s has been granted", train_id, source_id, destination_id, route_id); + syslog_server(LOG_NOTICE, "Grant route - Train %s from %s to %s - Route %s has been granted", + train_id, source_id, destination_id, route_id); - syslog_server(LOG_NOTICE, "Grant route - Set points and signals for route id \"%s\" - interlocker type %d", + syslog_server(LOG_NOTICE, "Grant route - Set points and signals " + "for route id \"%s\" - interlocker type %d", interlocker_instance_io.output_route_id, interlocker_instance_io.output_interlocker_type); } else { if (strcmp(route_id, "no_routes") == 0) { - syslog_server(LOG_ERR, "Grant route - Train %s - No routes possible from %s to %s", train_id, source_id, destination_id); + syslog_server(LOG_ERR, "Grant route - Train %s - No routes possible from %s to %s", + train_id, source_id, destination_id); } else if (strcmp(route_id, "not_grantable") == 0) { - syslog_server(LOG_ERR, "Grant route - Train %s - Conflicting routes are in use", train_id); + syslog_server(LOG_ERR, "Grant route - Train %s - Conflicting routes are in use", + train_id); } else if (strcmp(route_id, "not_clear") == 0) { - syslog_server(LOG_ERR, "Grant route - Train %s - Route found has occupied blocks or source signal is not stop", train_id); + syslog_server(LOG_ERR, "Grant route - Train %s - Route found has occupied blocks " + "or source signal is not stop", train_id); } else { - syslog_server(LOG_ERR, "Grant route - Train %s - Route could not be granted (%s)", train_id, route_id); + syslog_server(LOG_ERR, "Grant route - Train %s - Route %s could not be granted %s", + train_id, route_id); } } GString *route_id_copy = g_string_new(route_id); @@ -280,7 +287,8 @@ const char *grant_route_id(const char *train_id, const char *route_id) { t_interlocking_route * const route = get_route(route_id); GArray * const granted_conflicts = get_granted_route_conflicts(route_id); if (granted_conflicts == NULL) { - syslog_server(LOG_ERR, "grant_route_id: granted_conflicts is NULL"); + syslog_server(LOG_ERR, "Grant route id - train: %s route: %s - granted_conflicts is NULL", + train_id, route_id); pthread_mutex_unlock(&interlocker_mutex); return "not_grantable"; } @@ -301,7 +309,9 @@ const char *grant_route_id(const char *train_id, const char *route_id) { route->train = strdup(train_id); if (route->train == NULL) { - syslog_server(LOG_ERR, "grant_route_id: Unable to allocate memory for route->train"); + syslog_server(LOG_ERR, "Grant route id - train: %s route: %s - " + "Unable to allocate memory for route->train", + train_id, route_id); pthread_mutex_unlock(&interlocker_mutex); return "not_grantable"; } @@ -323,6 +333,9 @@ const char *grant_route_id(const char *train_id, const char *route_id) { bidib_set_signal(signal, signal_aspect); bidib_flush(); } + + syslog_server(LOG_NOTICE, "Grant route id - train: %s route: %s - route granted", + train_id, route_id); pthread_mutex_unlock(&interlocker_mutex); return "granted"; @@ -350,7 +363,7 @@ void release_route(const char *route_id) { free(route->train); route->train = NULL; syslog_server(LOG_NOTICE, "Release route - Route %s - route released", route_id); - } else { + } else { syslog_server(LOG_ERR, "Release route - Route %s - Route is not granted to any train", route_id); } diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 896e2e6b..b59b2cfa 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -972,9 +972,7 @@ onion_connection_status handler_request_route(void *_, onion_request *req, train_id, data_source_name, data_destination_name); // Use interlocker to find and grant a route - GString *route_id = grant_route(train_id, - data_source_name, - data_destination_name); + GString *route_id = grant_route(train_id, data_source_name, data_destination_name); if (route_id->str != NULL && params_check_is_number(route_id->str)) { // Logging of the granted route ID happens in the grant_route function onion_response_printf(res, "%s", route_id->str); @@ -1321,8 +1319,7 @@ onion_connection_status handler_set_train_emergency_stop(void *_, syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s", grabbed_trains[grab_id].name->str); - if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, - data_track_output)) { + if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, data_track_output)) { syslog_server(LOG_ERR, "Request: Set train emergency stop - train: %s - bad " "parameter values", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 6b9d23ed..3a2b117e 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -470,7 +470,7 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, state_value_str = "unknown"; break; } - + g_string_append_printf(reversers, "%s%s - state: %s", i != 0 ? "\n" : "", reverser_id, state_value_str); diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index 67a3f382..ce00b79d 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -201,7 +201,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion ///TODO: Discuss which code to return onion_response_set_code(res, HTTP_INTERNAL_ERROR); onion_response_printf(res, "Engine file %s could not be compiled into a C file " - "and then a shared library", filepath); + "and then a shared library", filepath); return OCS_PROCESSED; } syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s - engine compiled", @@ -225,7 +225,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion dyn_containers_set_engine(engine_slot, filepath); pthread_mutex_unlock(&dyn_containers_mutex); syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s - finished", filename); - return OCS_PROCESSED; + return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Upload engine - system not running or wrong request type"); ///TODO: Discuss which code to return @@ -272,8 +272,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, if (engine_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - engine could not be found", - name); - + name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s could not be found", name); return OCS_PROCESSED; @@ -283,7 +282,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, pthread_mutex_unlock(&dyn_containers_mutex); if (!engine_freed_successfully) { syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - engine is still in use", - name); + name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s is still in use", name); @@ -293,7 +292,6 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, if (!remove_engine_files(name)) { syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - files could not be removed", name); - onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s files could not be removed", name); return OCS_PROCESSED; From 542c2d888478358045512924bbab85fa119a3284 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 11 Nov 2023 11:19:56 +0100 Subject: [PATCH 05/45] Request Logging Descript in Readme and verif new log --- README.md | 22 ++++++++++++++++++++++ server/src/handler_admin.c | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 98bf742f..9b8bb89a 100644 --- a/README.md +++ b/README.md @@ -213,3 +213,25 @@ When is a grab-id reset? is not the same as the one at the server * If the user issues `swtbahn admin shutdown` and the system was running * If the user issues `swtbahn config` + +### Logging Format Notes +We try to use a consistent logging format in all request handlers. Description: +- Before the first log, validation of request data and server state is performed. If validation fails, a log is printed that starts with "Request: ", followed by a phrase that describes the request name. Then a " - " and afterwards the reason for why the validation/state check failed. +- If validation has passed, a log is made that signifies the "start" of processing the request. This consists of: "Request: (request name) - (key parameters of the request)". For example, if we request to release a certain route, it looks like this: "Request: Release route - route: %s", where "%s" is replaced by the route id that is to be released. +- During request processing, after the "start" log, there may be further logs. These start in the same way, but may have more parameter data. And after the parameters, there can be a " - " followed by a string that describes what is currently happening. If an error occurs, the log level is LOG_ERR and that is the last log message sent by this request handler (rule: whenever LOG_ERR log is logged by request handler, that is the last log it will make before returning). +- At the "end" of the request processing, if there is no error, the "start" log is repeated, but now with " - finished" at the end. +- Experimental Feature/To be discussed: Some (few) request handlers will not log a separate "start" and "finish" log. In that case, they log only one log, which ends on " - done". + +The above description may be a bit confusing, so lets look at a concrete example. Say, we want to change the state of point "point10" to the state "normal". We send a request, and from the request handler we will then see the following logs: +1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" +2. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal - finished" +This means the point switch has been initiated successfully. + +Now, to compare, let's say we forget to pass the state, so it is NULL. We then get the following logs from the request handler: +1. Level LOG_ERR; Log: "Request: Set point - invalid parameters" +So, we can see that the validation failed. We get a log on the LOG_ERR level, so that will be the last log from this call to the request handler. + +Now, what if we pass a state that is not NULL but also not a valid state for our point? Let's pass the state "foobar" and point "point10": +1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: foobar" +2. Level LOG_ERR; Log: "Request: Set point - point: point10 state: foobar - invalid parameters" +So, now it wasn't picked up by the validation, but later. Again, since we got a log on the LOG_ERR level, this is the last log we can expect from this call to the request handler. \ No newline at end of file diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index e9b0dc19..a88d22e1 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -211,7 +211,7 @@ onion_connection_status handler_set_verification_option(void *_, onion_request * return OCS_NOT_IMPLEMENTED; } verification_enabled = params_check_verification_option(data_verification_option); - syslog_server(LOG_NOTICE, "Request: Set verification option - state: %s", + syslog_server(LOG_NOTICE, "Request: Set verification option - new state: %s - done", verification_enabled ? "enabled" : "disabled"); return OCS_PROCESSED; } else { From 93fefaa9c92178a42363b3c9f73608a60a987e4c Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 11 Nov 2023 12:20:13 +0100 Subject: [PATCH 06/45] improve logging, validation, logic in admin, controller --- README.md | 1 + server/src/handler_admin.c | 14 ++-- server/src/handler_controller.c | 131 ++++++++++++++++++++------------ 3 files changed, 89 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 9b8bb89a..99cec3e1 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,7 @@ We try to use a consistent logging format in all request handlers. Description: - During request processing, after the "start" log, there may be further logs. These start in the same way, but may have more parameter data. And after the parameters, there can be a " - " followed by a string that describes what is currently happening. If an error occurs, the log level is LOG_ERR and that is the last log message sent by this request handler (rule: whenever LOG_ERR log is logged by request handler, that is the last log it will make before returning). - At the "end" of the request processing, if there is no error, the "start" log is repeated, but now with " - finished" at the end. - Experimental Feature/To be discussed: Some (few) request handlers will not log a separate "start" and "finish" log. In that case, they log only one log, which ends on " - done". +- Some handlers will log on LOG_INFO instead of LOG_NOTICE, primarily trivial "getters", e.g. in the monitor The above description may be a bit confusing, so lets look at a concrete example. Say, we want to change the state of point "point10" to the state "normal". We send a request, and from the request handler we will then see the following logs: 1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index a88d22e1..faa91d26 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -230,7 +230,7 @@ onion_connection_status handler_set_verification_url(void *_, onion_request *req return OCS_NOT_IMPLEMENTED; } set_verifier_url(data_verification_url); - syslog_server(LOG_NOTICE, "Request: Set verification url - url: %s", + syslog_server(LOG_NOTICE, "Request: Set verification url - new url: %s - done", data_verification_url); return OCS_PROCESSED; } else { @@ -250,7 +250,7 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); syslog_server(LOG_ERR, "Request: Admin release train - invalid train id " - "or train not grabbed (%s)", + "or train %s not grabbed", data_train); return OCS_NOT_IMPLEMENTED; } @@ -298,23 +298,23 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request int speed = params_check_speed(data_speed); if (speed == 999) { - syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " + syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " "bad speed", data_train, speed); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " + syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " "bad track output", data_train, speed); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %d", + syslog_server(LOG_NOTICE, "Request: Admin set dcc train speed - train: %s speed: %d", data_train, speed); pthread_mutex_lock(&grabbed_trains_mutex); if (bidib_set_train_speed(data_train, speed, data_track_output)) { - syslog_server(LOG_ERR, "Request: Admin set train speed - train: %s speed: %d - " + syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " "bad parameter values", data_train, speed); } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Admin set train speed - train: %s speed: %d - " + syslog_server(LOG_NOTICE, "Request: Admin set dcc train speed - train: %s speed: %d - " "finished", data_train, speed); } pthread_mutex_unlock(&grabbed_trains_mutex); diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index a735fce5..a8f4dc80 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -23,6 +23,7 @@ * * - Nicolas Gross * - Tri Nguyen + * - Bernhard Luedtke * */ @@ -65,7 +66,7 @@ const int set_interlocker(const char *interlocker_name) { &interlocker_instances[i], interlocker_name) ) { syslog_server(LOG_ERR, - "Set Interlocker - Interlocker %s could not be used in instance %d", + "Set Interlocker - interlocker %s could not be used in instance %d", interlocker_name, i); } else { selected_interlocker_name = g_string_new(interlocker_name); @@ -128,8 +129,11 @@ void release_all_interlockers(void) { // get_granted_route_conflicts, but using direct implementation of sectional-style checker GArray *get_granted_route_conflicts_sectional(const char *route_id) { + if (route_id == NULL) { + return NULL; + } GArray* conflict_route_ids = g_array_new(FALSE, FALSE, sizeof(char *)); - + ///TODO: Discuss this hardcoded 1024 char *conflict_routes[1024]; const size_t conflict_routes_len = config_get_array_string_value("route", route_id, "conflicts", conflict_routes); for (size_t i = 0; i < conflict_routes_len; i++) { @@ -140,7 +144,7 @@ GArray *get_granted_route_conflicts_sectional(const char *route_id) { char *conflict_route_id_string = malloc(sizeof(char) * conflict_route_id_string_len); if (conflict_route_id_string == NULL) { syslog_server(LOG_ERR, - "get_granted_route_conflicts_sectional: Failed to allocate memory" + "get_granted_route_conflicts_sectional - failed to allocate memory" " for conflict_route_id_string"); g_array_free(conflict_route_ids, true); return NULL; @@ -155,6 +159,9 @@ GArray *get_granted_route_conflicts_sectional(const char *route_id) { } GArray *get_granted_route_conflicts(const char *route_id) { + if (route_id == NULL) { + return NULL; + } GArray* conflict_route_ids = g_array_new(FALSE, FALSE, sizeof(char *)); // When a sectional interlocker is in use, use the sectional checker to @@ -173,7 +180,7 @@ GArray *get_granted_route_conflicts(const char *route_id) { char *conflict_route_id_string = malloc(sizeof(char) * conflict_route_id_string_len); if (conflict_route_id_string == NULL) { syslog_server(LOG_ERR, - "get_granted_route_conflicts: Failed to allocate memory" + "get_granted_route_conflicts - failed to allocate memory" " for conflict_route_id_string"); g_array_free(conflict_route_ids, true); return NULL; @@ -188,6 +195,9 @@ GArray *get_granted_route_conflicts(const char *route_id) { } const bool get_route_is_clear(const char *route_id) { + if (route_id == NULL) { + return false; + } bahn_data_util_init_cached_track_state(); // Check that all route signals are in the Stop aspect @@ -216,14 +226,20 @@ const bool get_route_is_clear(const char *route_id) { } GString *grant_route(const char *train_id, const char *source_id, const char *destination_id) { + if (train_id == NULL || source_id == NULL || destination_id == NULL) { + syslog_server(LOG_ERR, "Grant route - invalid (NULL) parameter(s)"); + return g_string_new("not_grantable"); + } + + + pthread_mutex_lock(&interlocker_mutex); if (selected_interlocker_instance == -1) { - syslog_server(LOG_ERR, "Grant route - Train %s from %s to %s - No interlocker has been set", + pthread_mutex_unlock(&interlocker_mutex); + syslog_server(LOG_ERR, "Grant route - train: %s from: %s to: %s - no interlocker has been set", train_id, source_id, destination_id); return g_string_new("no_interlocker"); } - pthread_mutex_lock(&interlocker_mutex); - bahn_data_util_init_cached_track_state(); // Ask the interlocker to grant requested route. @@ -249,59 +265,64 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de } while (!interlocker_instance_io.output_terminated); // Return the result - const char *route_id = interlocker_instance_io.output_route_id; - if (route_id != NULL && params_check_is_number(route_id)) { - syslog_server(LOG_NOTICE, "Grant route - Train %s from %s to %s - Route %s has been granted", - train_id, source_id, destination_id, route_id); - - syslog_server(LOG_NOTICE, "Grant route - Set points and signals " - "for route id \"%s\" - interlocker type %d", - interlocker_instance_io.output_route_id, - interlocker_instance_io.output_interlocker_type); - } else { - if (strcmp(route_id, "no_routes") == 0) { - syslog_server(LOG_ERR, "Grant route - Train %s - No routes possible from %s to %s", - train_id, source_id, destination_id); - } else if (strcmp(route_id, "not_grantable") == 0) { - syslog_server(LOG_ERR, "Grant route - Train %s - Conflicting routes are in use", - train_id); - } else if (strcmp(route_id, "not_clear") == 0) { - syslog_server(LOG_ERR, "Grant route - Train %s - Route found has occupied blocks " - "or source signal is not stop", train_id); - } else { - syslog_server(LOG_ERR, "Grant route - Train %s - Route %s could not be granted %s", - train_id, route_id); - } - } - GString *route_id_copy = g_string_new(route_id); + GString *g_route_id = g_string_new(interlocker_instance_io.output_route_id); bahn_data_util_free_cached_track_state(); - pthread_mutex_unlock(&interlocker_mutex); - return route_id_copy; + + if (g_route_id->str != NULL && params_check_is_number(g_route_id->str)) { + syslog_server(LOG_NOTICE, "Grant route - train: %s from: %s to: %s - " + "route %s has been granted", + train_id, source_id, destination_id, g_route_id->str); + } else if (strcmp(g_route_id->str, "no_routes") == 0) { + syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " + "no route possible", + train_id, source_id, destination_id); + } else if (strcmp(g_route_id->str, "not_grantable") == 0) { + syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " + "conflicting routes in use", + train_id, source_id, destination_id); + } else if (strcmp(g_route_id->str, "not_clear") == 0) { + syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " + "route is blocked or source signal is not in aspect stop", + train_id, source_id, destination_id); + } else { + syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " + "route could not be granted for other reason (message: %s)", + train_id, source_id, destination_id, g_route_id->str); + } + return g_route_id; } const char *grant_route_id(const char *train_id, const char *route_id) { + if (train_id == NULL || route_id == NULL) { + syslog_server(LOG_ERR, "Grant route id - invalid (NULL) parameter(s)"); + return "not_grantable"; + } pthread_mutex_lock(&interlocker_mutex); - // Check whether the route can be granted t_interlocking_route * const route = get_route(route_id); GArray * const granted_conflicts = get_granted_route_conflicts(route_id); if (granted_conflicts == NULL) { - syslog_server(LOG_ERR, "Grant route id - train: %s route: %s - granted_conflicts is NULL", - train_id, route_id); pthread_mutex_unlock(&interlocker_mutex); + syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - granted_conflicts is NULL", + train_id, route_id); return "not_grantable"; } const bool hasGrantedConflicts = (granted_conflicts->len > 0); g_array_free(granted_conflicts, true); if (route->train != NULL || hasGrantedConflicts) { pthread_mutex_unlock(&interlocker_mutex); + syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - " + "route already granted or has conflicts with routes in use", + train_id, route_id); return "not_grantable"; } // Check whether the route is physically available if (!get_route_is_clear(route_id)) { pthread_mutex_unlock(&interlocker_mutex); + syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - route is not clear", + train_id, route_id); return "not_clear"; } @@ -309,12 +330,16 @@ const char *grant_route_id(const char *train_id, const char *route_id) { route->train = strdup(train_id); if (route->train == NULL) { + pthread_mutex_unlock(&interlocker_mutex); syslog_server(LOG_ERR, "Grant route id - train: %s route: %s - " - "Unable to allocate memory for route->train", + "unable to allocate memory for route->train", train_id, route_id); - pthread_mutex_unlock(&interlocker_mutex); return "not_grantable"; } + + syslog_server(LOG_INFO, "Grant route id - train: %s route: %s - " + "route granting in progress, setting points and signals", + train_id, route_id); // Set the points to their required positions for (size_t i = 0; i < route->points->len; i++) { @@ -342,19 +367,23 @@ const char *grant_route_id(const char *train_id, const char *route_id) { } void release_route(const char *route_id) { + if (route_id == NULL) { + syslog_server(LOG_ERR, "Release route - invalid parameter, route_id is null"); + return; + } pthread_mutex_lock(&interlocker_mutex); t_interlocking_route *route = get_route(route_id); - if (route->train != NULL) { - const char *signal_aspect = "aspect_stop"; - syslog_server(LOG_INFO, "Release route - Route %s - Route currently granted to train %s", + if (route != NULL && route->train != NULL) { + syslog_server(LOG_INFO, "Release route - route: %s - route currently granted to train %s, " + "now setting all route signals to aspect_stop", route_id, route->train); - const int signal_count = route->signals->len; - for (int signal_index = 0; signal_index < signal_count; signal_index++) { - // Get each signal along the route + + const char *signal_aspect = "aspect_stop"; + for (int signal_index = 0; signal_index < route->signals->len; signal_index++) { const char *signal_id = g_array_index(route->signals, char *, signal_index); if (bidib_set_signal(signal_id, signal_aspect)) { - syslog_server(LOG_ERR, "Release route - Route %s - Unable to set signal to aspect %s", + syslog_server(LOG_ERR, "Release route - route: %s - unable to set signal to aspect %s", route_id, signal_aspect); } bidib_flush(); @@ -362,9 +391,12 @@ void release_route(const char *route_id) { free(route->train); route->train = NULL; - syslog_server(LOG_NOTICE, "Release route - Route %s - route released", route_id); + syslog_server(LOG_NOTICE, "Release route - route: %s - route released", route_id); + } else if (route == NULL) { + syslog_server(LOG_ERR, "Release route - route: %s - route does not exist", route_id); } else { - syslog_server(LOG_ERR, "Release route - Route %s - Route is not granted to any train", route_id); + syslog_server(LOG_ERR, "Release route - route: %s - route is not granted to any train", + route_id); } pthread_mutex_unlock(&interlocker_mutex); @@ -404,7 +436,7 @@ const bool reversers_state_update(void) { } onion_connection_status handler_release_route(void *_, onion_request *req, - onion_response *res) { + onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_route_id = onion_request_get_post(req, "route-id"); @@ -437,7 +469,6 @@ onion_connection_status handler_set_point(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Set point - point: %s state: %s", data_point, data_state); if (bidib_switch_point(data_point, data_state)) { - bidib_flush(); syslog_server(LOG_ERR, "Request: Set point - point: %s state: %s - " "invalid parameters", data_point, data_state); return OCS_NOT_IMPLEMENTED; From afe862d0a3833597ba13d309b6fdabea8df2aea0 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 11 Nov 2023 14:07:57 +0100 Subject: [PATCH 07/45] improve logging, logic, in driver and monitor --- server/src/handler_controller.c | 18 +- server/src/handler_driver.c | 271 +++++++++--------- server/src/handler_monitor.c | 482 +++++++++++++++----------------- 3 files changed, 385 insertions(+), 386 deletions(-) diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index a8f4dc80..103ec1cf 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -265,32 +265,32 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de } while (!interlocker_instance_io.output_terminated); // Return the result - GString *g_route_id = g_string_new(interlocker_instance_io.output_route_id); + GString *g_route_id_copy = g_string_new(interlocker_instance_io.output_route_id); bahn_data_util_free_cached_track_state(); pthread_mutex_unlock(&interlocker_mutex); - if (g_route_id->str != NULL && params_check_is_number(g_route_id->str)) { + if (g_route_id_copy->str != NULL && params_check_is_number(g_route_id_copy->str)) { syslog_server(LOG_NOTICE, "Grant route - train: %s from: %s to: %s - " "route %s has been granted", - train_id, source_id, destination_id, g_route_id->str); - } else if (strcmp(g_route_id->str, "no_routes") == 0) { + train_id, source_id, destination_id, g_route_id_copy->str); + } else if (strcmp(g_route_id_copy->str, "no_routes") == 0) { syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " "no route possible", train_id, source_id, destination_id); - } else if (strcmp(g_route_id->str, "not_grantable") == 0) { + } else if (strcmp(g_route_id_copy->str, "not_grantable") == 0) { syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " "conflicting routes in use", train_id, source_id, destination_id); - } else if (strcmp(g_route_id->str, "not_clear") == 0) { + } else if (strcmp(g_route_id_copy->str, "not_clear") == 0) { syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " "route is blocked or source signal is not in aspect stop", train_id, source_id, destination_id); } else { syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " "route could not be granted for other reason (message: %s)", - train_id, source_id, destination_id, g_route_id->str); + train_id, source_id, destination_id, g_route_id_copy->str); } - return g_route_id; + return g_route_id_copy; } const char *grant_route_id(const char *train_id, const char *route_id) { @@ -366,6 +366,8 @@ const char *grant_route_id(const char *train_id, const char *route_id) { return "granted"; } +///TODO: This should not unconditionally set all route signals to stop, because that would +// sectional route release from working correctly! void release_route(const char *route_id) { if (route_id == NULL) { syslog_server(LOG_ERR, "Release route - invalid parameter, route_id is null"); diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index b59b2cfa..262a7a35 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -160,7 +160,7 @@ static const bool is_forward_driving(const t_interlocking_route *route, bidib_free_train_position_query(train_position_query); if (block_id == NULL) { - syslog_server(LOG_ERR, "Train %s is driving %s, " + syslog_server(LOG_ERR, "Is forward driving - train: %s driving: %s - " "current block of train is unknown", train_id, is_forwards ? "forwards" : "backwards"); return is_forwards; @@ -191,14 +191,18 @@ static const bool is_forward_driving(const t_interlocking_route *route, const bool requested_forwards = electrically_reversed ? !is_forwards : is_forwards; - syslog_server(LOG_NOTICE, "Train %s is driving %s", + syslog_server(LOG_NOTICE, "Is forward driving - train: %s driving: %s", train_id, is_forwards ? "forwards" : "backwards"); return requested_forwards; } static bool drive_route_params_valid(const char *train_id, t_interlocking_route *route) { + if (train_id == NULL || route == NULL) { + syslog_server(LOG_ERR, "Check drive route params - invalid (NULL) parameter(s)"); + return false; + } if ((route->train == NULL) || strcmp(train_id, route->train) != 0) { - syslog_server(LOG_WARNING, "Check drive route params - Route %s not granted to train %s", + syslog_server(LOG_WARNING, "Check drive route params - route %s not granted to train %s", route->id, train_id); return false; } @@ -217,7 +221,8 @@ static bool validate_interlocking_route_members_not_null(const t_interlocking_ro static void log_signal_info(int priority, const t_route_signal_info *sig_info) { if (sig_info != NULL) { - syslog_server(priority, "Drive route signal info: id - %s, %s source, %s destination, path index - %d", + syslog_server(priority, + "Drive route signal info: id - %s, %s source, %s destination, path index - %d", sig_info->id != NULL ? sig_info->id : "NULL", sig_info->is_source_signal ? "is" : "not", sig_info->is_destination_signal ? "is" : "not", @@ -227,13 +232,13 @@ static void log_signal_info(int priority, const t_route_signal_info *sig_info) { __attribute__ ((unused)) static void log_signal_info_array(int priority, const t_route_signal_info_array *sig_info_array) { - syslog_server(priority, "Drive route signal info array: Begin"); + syslog_server(priority, "log route signal info array - start"); if (sig_info_array != NULL) { for (size_t i = 0; i < sig_info_array->len; ++i) { log_signal_info(priority, sig_info_array->data_ptr[i]); } } - syslog_server(priority, "Drive route signal info array: End"); + syslog_server(priority, "log route signal info array - end"); } static void free_route_signal_info_array(t_route_signal_info_array *route_signal_info_array) { @@ -269,16 +274,16 @@ static bool add_signal_info_for_signal(t_route_signal_info_array *signal_info_ar size_t number_of_signal_infos) { if (signal_info_array == NULL || signal_info_array->data_ptr == NULL) { syslog_server(LOG_ERR, - "Add signal-info to signal_info_array: " - "Signal info array or signal info array data pointer is NULL"); + "Add signal-info to signal_info_array - " + "signal info array or signal info array data pointer is NULL"); return false; } const size_t i = index_in_info_array; // A. Return without adding signal-info if signal from route->signals is NULL if (signal_id_item == NULL) { syslog_server(LOG_WARNING, - "Add signal-info to signal_info_array: " - "Skipping NULL signal at index %d of route->signals", i); + "Add signal-info to signal_info_array - " + "skipping NULL signal at index %d of route->signals", i); signal_info_array->data_ptr[i] = NULL; signal_info_array->len = i + 1; // Return true as this is not a critical error, i.e. we can still continue with route @@ -289,8 +294,8 @@ static bool add_signal_info_for_signal(t_route_signal_info_array *signal_info_ar signal_info_array->len = i + 1; if (signal_info_array->data_ptr[i] == NULL) { syslog_server(LOG_ERR, - "Get drive route signal info array: " - "Unable to allocate memory for array index %d", i); + "Add signal-info to signal_info_array - " + "unable to allocate memory for array index %d", i); return false; } @@ -303,7 +308,8 @@ static bool add_signal_info_for_signal(t_route_signal_info_array *signal_info_ar signal_info_array->data_ptr[i]->id = strdup(signal_id_item); if (signal_info_array->data_ptr[i]->id == NULL) { syslog_server(LOG_ERR, - "Get drive route signal info array: Unable to allocate memory for signal id %s", + "Add signal-info to signal_info_array - " + "unable to allocate memory for signal id %s", signal_id_item); return false; } @@ -314,17 +320,20 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin t_route_signal_info_array info_arr = {.data_ptr = NULL, .len = 0}; if (!validate_interlocking_route_members_not_null(route)) { syslog_server(LOG_ERR, - "Get drive route signal info array: route is NULL or some route details are NULL"); + "Get route signal info array - route is NULL or some route details are NULL"); return info_arr; } - syslog_server(LOG_NOTICE, "Get drive route signal info array: Start building for route id %s", route->id); + syslog_server(LOG_DEBUG, "Get route signal info array - route: %s - start building", + route->id); // 1. Allocate memory for array of pointers to t_route_signal_info type entities const size_t number_of_signal_infos = route->signals->len; info_arr.data_ptr = (t_route_signal_info**) malloc(sizeof(t_route_signal_info*) * number_of_signal_infos); if (info_arr.data_ptr == NULL) { - syslog_server(LOG_ERR, "Get drive route signal info array: Could not allocate memory for array"); + syslog_server(LOG_ERR, "Get route signal info array - route: %s - " + "could not allocate memory for array", + route->id); return info_arr; } // 2. For every signal in route->signals... @@ -342,8 +351,8 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin for (size_t i = 0; i < info_arr.len; ++i) { if (info_arr.data_ptr[i] == NULL) { syslog_server(LOG_WARNING, - "Get drive route signal info array: " - "Skipping NULL signal_info at index %d of info_arr", i); + "Get route signal info array - " + "skipping NULL signal_info at index %d of info_arr", i); continue; } @@ -362,6 +371,8 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin } } } + syslog_server(LOG_DEBUG, "Get route signal info array - route: %s - finished building", + route->id); return info_arr; } @@ -384,7 +395,7 @@ static t_route_repeated_segment_flags get_route_repeated_segment_flags(const t_i r_seg_flags.arr = malloc(sizeof(bool) * route_path_len); if (r_seg_flags.arr == NULL) { syslog_server(LOG_ERR, - "Get repeated segment flags for route %s: Unable to allocate memory for array", + "Get repeated segment flags - route: %s - unable to allocate memory for array", route->id); return r_seg_flags; } @@ -509,8 +520,8 @@ static size_t update_route_signals_for_train_pos(t_route_signal_info_array *sign t_route_signal_info *sig_info = signal_info_array->data_ptr[sig_info_index]; if (sig_info == NULL) { - syslog_server(LOG_ERR, - "Update route signals: For route %s, signal_info_array[%d] is NULL", + syslog_server(LOG_WARNING, + "Update route signals - route: %s - signal_info_array[%d] is NULL", route->id, sig_info_index); continue; } @@ -520,14 +531,13 @@ static size_t update_route_signals_for_train_pos(t_route_signal_info_array *sign if (sig_info->index_in_route_path <= train_pos_index) { // 4. Try to set the signal to signal_stop_aspect. if (bidib_set_signal(sig_info->id, signal_stop_aspect)) { - // Log_ERR... but what else? Safety violation once we have a safety layer? - syslog_server(LOG_ERR, - "Update route signals: Unable to set signal %s to %s on route %s", - sig_info->id, signal_stop_aspect, route->id); + syslog_server(LOG_WARNING, + "Update route signals - route: %s - unable to set signal %s to %s", + route->id, sig_info->id, signal_stop_aspect); } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Update route signals: Signal %s set to %s on route %s", + "Update route signals - route: %s - signal %s set to %s", sig_info->id, signal_stop_aspect, route->id); sig_info->has_been_set_to_stop = true; signals_set_to_stop++; @@ -542,21 +552,21 @@ static bool drive_route_decoupled_signal_info_array_valid(const char *route_id, t_route_signal_info_array *signal_info_array) { if (signal_info_array == NULL || route_id == NULL) { syslog_server(LOG_ERR, - "Drive route decoupled signal info array validation: " - "Route id or signal info array is NULL"); + "Drive route decoupled signal info array validation - " + "route id or signal info array is NULL"); return false; } // Check that signal_info_array array is not empty and has at least 2 entries (source, destination) if (signal_info_array->data_ptr == NULL) { syslog_server(LOG_ERR, - "Drive route decoupled signal info array validation: " - "Signal info array retrieved for route %s is NULL", + "Drive route decoupled signal info array validation - route: %s - " + "signal info array is NULL", route_id); return false; } else if (signal_info_array->len < 2) { syslog_server(LOG_ERR, - "Drive route decoupled signal info array validation: Signal info array " - "retrieved for route %s has only %d elements (at least two elements needed)", + "Drive route decoupled signal info array validation - route: %s - " + "signal info array has only %d elements (at least two elements needed)", route_id, signal_info_array->len); return false; } @@ -573,11 +583,11 @@ static bool drive_route_decoupled_signal_info_array_valid(const char *route_id, */ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, t_interlocking_route *route) { if (route == NULL || route->id == NULL) { - syslog_server(LOG_ERR, "Drive route decoupled: Route or route id is NULL"); + syslog_server(LOG_ERR, "Drive route decoupled - route or route id is NULL"); return false; } if (train_id == NULL) { - syslog_server(LOG_ERR, "Drive route decoupled: Train id is NULL, route id is %s", route->id); + syslog_server(LOG_ERR, "Drive route decoupled - route: %s - train id is NULL", route->id); return false; } @@ -592,8 +602,8 @@ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, } syslog_server(LOG_DEBUG, - "Drive route decoupled: Retrieved signal_info_array with %d elements for route id %s", - signal_info_array.len, route->id); + "Drive route decoupled - route: %s train: %s - signal_info_array has %d elements", + route->id, train_id, signal_info_array.len); // Signals in a route shall be set to stop once the train has driven passed them. // Destination signal is already in STOP aspect, thus signal_info_array.len - 1 signals. @@ -605,12 +615,13 @@ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, while (running && drive_route_params_valid(train_id, route) && signals_set_to_stop < signals_to_set_to_stop_count) { // 1. Get position of train, and determine index (in route->path) of where the train is - t_train_index_on_route_query train_pos_query = get_train_pos_index_in_route_ignore_repeated_segments(train_id, route, &repeated_segment_flags); + t_train_index_on_route_query train_pos_query = + get_train_pos_index_in_route_ignore_repeated_segments(train_id, route, &repeated_segment_flags); if (train_pos_query.err_code != OKAY_TRAIN_ON_ROUTE) { syslog_server(LOG_DEBUG, - "Drive route decoupled: Unable to determine position of train %s on route id %s", - train_id, route->id); + "Drive route decoupled - route: %s train: %s - train position unknown", + route->id, train_id); // Train position unknown, perhaps temporarily lost -> skip this iteration. usleep(TRAIN_DRIVE_TIME_STEP); continue; @@ -621,16 +632,16 @@ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, if (train_pos_index_previous != train_pos_query.pos_index || first_okay_position) { const char *path_item = g_array_index(route->path, char *, train_pos_query.pos_index); syslog_server(LOG_DEBUG, - "Drive route decoupled: Train %s now at route path index %d (%s) on route %s", - train_id, train_pos_query.pos_index, - path_item != NULL ? path_item : "NULL", - route->id); + "Drive route decoupled - route: %s train: %s - train is at index %d (%s)", + route->id, train_id, train_pos_query.pos_index, + path_item != NULL ? path_item : "NULL"); if (train_pos_index_previous > train_pos_query.pos_index) { syslog_server(LOG_DEBUG, - "Drive route decoupled: Train %s position index %d on route %s is " - "lower than the previous value of %d", - train_id, train_pos_query.pos_index, route->id, train_pos_index_previous); + "Drive route decoupled - route: %s train: %s - " + "new train index %d is lower than previous index %d", + route->id, train_id, + train_pos_query.pos_index, train_pos_index_previous); } signals_set_to_stop += update_route_signals_for_train_pos(&signal_info_array, route, train_pos_query.pos_index); @@ -641,7 +652,7 @@ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, } syslog_server(LOG_NOTICE, - "Drive route decoupled: Finished setting %d signals to stop for route id %s", + "Drive route decoupled - Finished setting %d signals to stop for route id %s", signals_set_to_stop, route->id); free_route_signal_info_array(&signal_info_array); free_route_repeated_segment_flags(&repeated_segment_flags); @@ -650,6 +661,9 @@ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, __attribute__ ((unused)) static bool drive_route_progressive_stop_signals(const char *train_id, t_interlocking_route *route) { + if (train_id == NULL || route == NULL || route->id == NULL) { + return false; + } const char *signal_stop_aspect = "aspect_stop"; const char *next_signal = route->source; bool set_signal_stop = true; @@ -681,12 +695,12 @@ static bool drive_route_progressive_stop_signals(const char *train_id, t_interlo set_signal_stop = false; if (bidib_set_signal(next_signal, signal_stop_aspect)) { syslog_server(LOG_ERR, "Drive route progressive stop signals - " - "Unable to set route signal %s to aspect %s", + "unable to set route signal %s to aspect %s", next_signal, signal_stop_aspect); } else { bidib_flush(); syslog_server(LOG_NOTICE, "Drive route progressive stop signals - " - "Set signal: %s to aspect: %s", + "set signal: %s to aspect: %s", next_signal, signal_stop_aspect); } } @@ -701,21 +715,20 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a pthread_mutex_unlock(&grabbed_trains_mutex); if (train_id == NULL) { - syslog_server(LOG_ERR, - "Drive route: Unable to allocate memory for train_id"); + syslog_server(LOG_ERR, "Drive route - unable to allocate memory for train_id"); return false; } t_interlocking_route *route = get_route(route_id); if (route == NULL || !drive_route_params_valid(train_id, route)) { - syslog_server(LOG_ERR, "Drive route: Unable to start driving because route is invalid"); + syslog_server(LOG_ERR, "Drive route - unable to start driving because route is invalid"); free(train_id); return false; } // Driving starts: Driving direction is computed from the route orientation - syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - Driving starts", - route->id, train_id); + syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - driving starts (%s)", + route->id, train_id, is_automatic ? "automatic" : "manual"); pthread_mutex_lock(&grabbed_trains_mutex); const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; const char requested_forwards = is_forward_driving(route, train_id); @@ -727,23 +740,27 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a pthread_mutex_unlock(&grabbed_trains_mutex); // Set the signals along the route to Stop as the train drives past them + // This will return as soon as the train has passed all but the destination signal const bool result = drive_route_progressive_stop_signals_decoupled(train_id, route); + // If driving is automatic, slow train down at the end of the route if (is_automatic && result) { const char *pre_dest_segment = g_array_index(route->path, char *, route->path->len - 2); while (running && !train_position_is_at(train_id, pre_dest_segment) && drive_route_params_valid(train_id, route)) { usleep(TRAIN_DRIVE_TIME_STEP); + ///TODO: Discuss - why is this re-assignment necessary? Its the same pointer, right? route = get_route(route->id); } pthread_mutex_lock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - Slowing for end of route", + syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - slowing for end of route", train_id, route_id); dyn_containers_set_train_engine_instance_inputs(engine_instance, DRIVING_SPEED_STOPPING, requested_forwards); pthread_mutex_unlock(&grabbed_trains_mutex); } + // Wait for train to reach the end of the route const char *dest_segment = g_array_index(route->path, char *, route->path->len - 1); while (running && result && !is_segment_occupied(dest_segment) @@ -753,9 +770,9 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } // Driving stops - syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - Driving stops", + syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - driving stops", route->id, train_id); - // Should this also be done if is_automatic == false? + pthread_mutex_lock(&grabbed_trains_mutex); dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, requested_forwards); pthread_mutex_unlock(&grabbed_trains_mutex); @@ -769,11 +786,16 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } static int grab_train(const char *train, const char *engine) { + if (train == NULL || engine == NULL) { + syslog_server(LOG_ERR, "Grab train - invalid (NULL) parameter(s)"); + return -1; + } pthread_mutex_lock(&grabbed_trains_mutex); for (size_t i = 0; i < TRAIN_ENGINE_INSTANCE_COUNT_MAX; i++) { if (grabbed_trains[i].is_valid && strcmp(grabbed_trains[i].name->str, train) == 0) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Grab train - train: %s - Train already grabbed", train); + syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - train already grabbed", + train, engine); return -1; } } @@ -783,7 +805,8 @@ static int grab_train(const char *train, const char *engine) { while (grabbed_trains[next_grab_id].is_valid) { if (next_grab_id == start) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Grab train - train: %s - All grab ids in use", train); + syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - all grab ids in use", + train, engine); return -1; } increment_next_grab_id(); @@ -795,13 +818,14 @@ static int grab_train(const char *train, const char *engine) { strcpy(grabbed_trains[grab_id].track_output, "master"); if (dyn_containers_set_train_engine_instance(&grabbed_trains[grab_id], train, engine)) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - train engine could not be used", + syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - train engine could not be set", train, engine); return -1; } grabbed_trains[grab_id].is_valid = true; pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Grab train - train: %s engine: %s - Train grabbed", train, engine); + syslog_server(LOG_NOTICE, "Grab train - train: %s engine: %s - train grabbed (grab id %d)", + train, engine, grab_id); return grab_id; } @@ -831,35 +855,37 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_DEBUG, "Request received: Grab train"); const char *data_train = onion_request_get_post(req, "train"); - const char *data_engine = onion_request_get_post(req, "engine"); + const char *data_engine = onion_request_get_post(req, "engine"); + if (data_train == NULL || data_engine == NULL) { syslog_server(LOG_ERR, "Request: Grab train - invalid parameters"); return OCS_NOT_IMPLEMENTED; + } + syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s", + data_train, data_engine); + + t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); + if (!train_state_query.known) { + bidib_free_train_state_query(train_state_query); + syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - " + "unknown train/train state", + data_train, data_engine); + return OCS_NOT_IMPLEMENTED; + } + bidib_free_train_state_query(train_state_query); + + int grab_id = grab_train(data_train, data_engine); + if (grab_id == -1) { + syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - " + "train could not be grabbed", + data_train, data_engine); + return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s", + syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s - finished", data_train, data_engine); - t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); - if (!train_state_query.known) { - bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - " - "train not known", data_train, data_engine); - return OCS_NOT_IMPLEMENTED; - } else { - bidib_free_train_state_query(train_state_query); - int grab_id = grab_train(data_train, data_engine); - if (grab_id == -1) { - syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - train " - "already grabbed or engine not found", data_train, data_engine); - return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s - " - "finished", data_train, data_engine); - onion_response_printf(res, "%ld,%d", session_id, grab_id); - return OCS_PROCESSED; - } - } + onion_response_printf(res, "%ld,%d", session_id, grab_id); + return OCS_PROCESSED; } } else { syslog_server(LOG_ERR, "Request: Grab train - system not running or wrong request type"); @@ -871,7 +897,6 @@ onion_connection_status handler_release_train(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_DEBUG, "Request received: Release train"); const char *data_session_id = onion_request_get_post(req, "session-id"); const char *data_grab_id = onion_request_get_post(req, "grab-id"); int client_session_id = params_check_session_id(data_session_id); @@ -900,12 +925,13 @@ onion_connection_status handler_release_train(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Release train - grab id: %d train id: %s", grab_id, train_id); - // Ensure that the train has stopped moving + // Set train speed to 0 const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, true); pthread_mutex_unlock(&grabbed_trains_mutex); + // Wait until the train has stopped moving t_bidib_train_state_query train_state_query = bidib_get_train_state(train_id); while (train_state_query.data.set_speed_step != 0) { bidib_free_train_state_query(train_state_query); @@ -953,7 +979,7 @@ onion_connection_status handler_request_route(void *_, onion_request *req, pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - bad grab id", + syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - invalid grab id", data_source_name, data_destination_name); return OCS_NOT_IMPLEMENTED; } @@ -980,9 +1006,6 @@ onion_connection_status handler_request_route(void *_, onion_request *req, "train: %s from: %s to: %s - finished", train_id, route_id->str, data_source_name, data_destination_name); - g_string_free(route_id, true); - free(train_id); - return OCS_PROCESSED; } else { onion_response_set_code(res, HTTP_BAD_REQUEST); syslog_server(LOG_WARNING, "Request: Request train route - " @@ -1003,11 +1026,10 @@ onion_connection_status handler_request_route(void *_, onion_request *req, } else { onion_response_printf(res, "Route could not be granted (%s)", route_id->str); } - g_string_free(route_id, true); - free(train_id); - return OCS_PROCESSED; } - + g_string_free(route_id, true); + free(train_id); + return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Request train route - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; @@ -1037,7 +1059,7 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Request train route id - route: %s - bad grab id", + syslog_server(LOG_ERR, "Request: Request train route id - route: %s - invalid grab id", route_id); return OCS_NOT_IMPLEMENTED; } @@ -1093,7 +1115,7 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, const char *data_route_id = onion_request_get_post(req, "route-id"); const char *route_id = params_check_route_id(data_route_id); if (data_train == NULL) { - syslog_server(LOG_ERR, "Request: Driving direction - bad train id"); + syslog_server(LOG_ERR, "Request: Driving direction - train id is NULL"); return OCS_NOT_IMPLEMENTED; } else if (strcmp(route_id, "") == 0) { syslog_server(LOG_ERR, "Request: Driving direction - train: %s - route id empty", @@ -1130,17 +1152,17 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Drive route - invalid session id"); return OCS_NOT_IMPLEMENTED; } else if (strcmp(mode, "") == 0) { - syslog_server(LOG_ERR, "Request: Drive route - bad driving mode"); + syslog_server(LOG_ERR, "Request: Drive route - invalid driving mode"); return OCS_NOT_IMPLEMENTED; } else if (strcmp(route_id, "") == 0) { - syslog_server(LOG_ERR, "Request: Drive route - bad route id"); + syslog_server(LOG_ERR, "Request: Drive route - invalid route id"); return OCS_NOT_IMPLEMENTED; } pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Drive route - route: %s - bad grab id", route_id); + syslog_server(LOG_ERR, "Request: Drive route - route: %s - invalid grab id", route_id); return OCS_NOT_IMPLEMENTED; } char *train_id = strdup(grabbed_trains[grab_id].name->str); @@ -1151,20 +1173,23 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Drive route - route: %s train: %s", - route_id, train_id); + syslog_server(LOG_NOTICE, "Request: Drive route - route: %s train: %s drive mode: %s", + route_id, train_id, mode); const bool is_automatic = (strcmp(mode, "automatic") == 0); if (drive_route(grab_id, route_id, is_automatic)) { onion_response_printf(res, "Route %s driving completed", route_id); - syslog_server(LOG_NOTICE, "Request: Drive route - route: %s train: %s - finished", - route_id, train_id); + syslog_server(LOG_NOTICE, + "Request: Drive route - route: %s train: %s drive mode: %s - finished", + route_id, train_id, mode); free(train_id); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Drive route - route: %s train: %s - " - "driving unsuccessful", route_id, train_id); + syslog_server(LOG_ERR, "Request: Drive route - route: %s train: %s drive mode: %s - " + "driving unsuccessful", + route_id, train_id, mode); free(train_id); + ///TODO: Discuss - we should prob. return a code indicating why driving failed return OCS_NOT_IMPLEMENTED; } @@ -1178,7 +1203,6 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_DEBUG, "Request received: Set train speed"); const char *data_session_id = onion_request_get_post(req, "session-id"); const char *data_grab_id = onion_request_get_post(req, "grab-id"); const char *data_speed = onion_request_get_post(req, "speed"); @@ -1188,45 +1212,39 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, int speed = params_check_speed(data_speed); if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Set train speed - invalid session id"); + syslog_server(LOG_ERR, "Request: Set dcc train speed - invalid session id"); return OCS_NOT_IMPLEMENTED; } pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Set train speed - bad grab id"); + syslog_server(LOG_ERR, "Request: Set dcc train speed - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (speed == 999) { - syslog_server(LOG_ERR, "Request: Set train speed - train: %s speed: %d - bad speed", + syslog_server(LOG_ERR, "Request: Set dcc train speed - train: %s speed: %d - bad speed", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set train speed - train: %s speed: %d - bad track output", + syslog_server(LOG_ERR, "Request: Set dcc train speed - train: %s speed: %d - bad track output", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } - - syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %d", + + syslog_server(LOG_NOTICE, "Request: Set dcc train speed - train: %s speed: %d", grabbed_trains[grab_id].name->str, speed); strcpy(grabbed_trains[grab_id].track_output, data_track_output); - int dyn_containers_engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; - if (speed < 0) { - dyn_containers_set_train_engine_instance_inputs(dyn_containers_engine_instance, - -speed, false); - } else { - dyn_containers_set_train_engine_instance_inputs(dyn_containers_engine_instance, - speed, true); - } - syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %d - finished", + const int eng_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; + dyn_containers_set_train_engine_instance_inputs(eng_instance, abs(speed), speed >= 0); + + syslog_server(LOG_NOTICE, "Request: Set dcc train speed - train: %s speed: %d - finished", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; - } else { - syslog_server(LOG_ERR, "Request: Set train speed - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Set dcc train speed - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -1252,7 +1270,7 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Set calibrated train speed - bad grab id"); + syslog_server(LOG_ERR, "Request: Set calibrated train speed - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (speed == 999) { syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %d " @@ -1309,11 +1327,12 @@ onion_connection_status handler_set_train_emergency_stop(void *_, pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Set train emergency stop - bad grab id"); + syslog_server(LOG_ERR, "Request: Set train emergency stop - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, "Request: Set train emergency stop - train: %s " "- bad track output", grabbed_trains[grab_id].name->str); + pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s", @@ -1361,7 +1380,7 @@ onion_connection_status handler_set_train_peripheral(void *_, pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Set train peripheral - bad grab id"); + syslog_server(LOG_ERR, "Request: Set train peripheral - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (state == -1) { syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s - bad state", diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 3a2b117e..834abb9e 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -22,6 +22,7 @@ * present swtbahn-cli (in alphabetic order by surname): * * - Nicolas Gross + * - Bernhard Luedtke * */ @@ -32,6 +33,7 @@ #include #include +#include "request.h" #include "server.h" #include "handler_monitor.h" #include "handler_driver.h" @@ -39,6 +41,7 @@ #include "bahn_data_util.h" #include "interlocking.h" #include "param_verification.h" +#include "types.h" #include "websocket_uploader/engine_uploader.h" onion_connection_status handler_get_trains(void *_, onion_request *req, @@ -54,11 +57,9 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, train_grabbed(query.ids[i]) ? "yes" : "no"); } bidib_free_id_list_query(query); - char response[trains->len + 1]; - strcpy(response, trains->str); - g_string_free(trains, true); - onion_response_printf(res, "%s", response); + onion_response_printf(res, "%s", trains->str); syslog_server(LOG_INFO, "Request: Get available trains - finished"); + g_string_free(trains, true); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get available trains - system not running or " @@ -75,66 +76,60 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, if (data_train == NULL) { syslog_server(LOG_ERR, "Request: Get train state - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_INFO, "Request: Get train state - train: %s", data_train); - t_bidib_train_state_query train_state_query = - bidib_get_train_state(data_train); - t_bidib_train_position_query train_position_query = - bidib_get_train_position(data_train); - if (train_state_query.known) { - GString *seg_string = g_string_new("no"); - GString *block_string = g_string_new("no"); - if (train_position_query.length > 0) { - g_string_printf(seg_string, "%s", train_position_query.segments[0]); - for (size_t i = 1; i < train_position_query.length; i++) { - g_string_append_printf(seg_string, ", %s", train_position_query.segments[i]); - } - - for (size_t i = 0; i < train_position_query.length; i++) { - const char *block_id = - config_get_block_id_of_segment(train_position_query.segments[i]); - if (block_id != NULL) { - g_string_printf(block_string, "%s", block_id); - break; - } + } + + syslog_server(LOG_INFO, "Request: Get train state - train: %s", data_train); + t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); + t_bidib_train_position_query train_position_query = bidib_get_train_position(data_train); + + if (train_state_query.known) { + GString *seg_string = g_string_new("no"); + GString *block_string = g_string_new("no"); + if (train_position_query.length > 0) { + g_string_printf(seg_string, "%s", train_position_query.segments[0]); + for (size_t i = 1; i < train_position_query.length; i++) { + g_string_append_printf(seg_string, ", %s", train_position_query.segments[i]); + } + for (size_t i = 0; i < train_position_query.length; i++) { + const char *block_id = + config_get_block_id_of_segment(train_position_query.segments[i]); + if (block_id != NULL) { + g_string_printf(block_string, "%s", block_id); + break; } } - bidib_free_train_position_query(train_position_query); - - GString *ret_string = g_string_new(""); - g_string_append_printf(ret_string, "grabbed: %s - on segment: %s - on block: %s" - " - orientation: %s" - " - speed step: %d - detected speed: %d km/h - direction: %s", - train_grabbed(data_train) ? "yes" : "no", - seg_string->str, - block_string->str, - (train_state_query.data.orientation == - BIDIB_TRAIN_ORIENTATION_LEFT) ? - "left" : "right", - train_state_query.data.set_speed_step, - train_state_query.data.detected_kmh_speed, - train_state_query.data.set_is_forwards - ? "forwards" : "backwards"); - bidib_free_train_state_query(train_state_query); - char response[ret_string->len + 1]; - strcpy(response, ret_string->str); - g_string_free(seg_string, true); - g_string_free(ret_string, true); - onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get train state - train: %s - finished", - data_train); - return OCS_PROCESSED; - } else { - bidib_free_train_position_query(train_position_query); - bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Get train state - train: %s - invalid train", - data_train); - return OCS_NOT_IMPLEMENTED; } + bidib_free_train_position_query(train_position_query); + + GString *ret_string = g_string_new(""); + g_string_append_printf(ret_string, "grabbed: %s - on segment: %s - on block: %s" + " - orientation: %s" + " - speed step: %d - detected speed: %d km/h - direction: %s", + train_grabbed(data_train) ? "yes" : "no", + seg_string->str, + block_string->str, + (train_state_query.data.orientation == + BIDIB_TRAIN_ORIENTATION_LEFT) ? + "left" : "right", + train_state_query.data.set_speed_step, + train_state_query.data.detected_kmh_speed, + train_state_query.data.set_is_forwards + ? "forwards" : "backwards"); + bidib_free_train_state_query(train_state_query); + onion_response_printf(res, "%s", ret_string->str); + syslog_server(LOG_INFO, "Request: Get train state - train: %s - finished", data_train); + g_string_free(seg_string, true); + g_string_free(ret_string, true); + return OCS_PROCESSED; + } else { + bidib_free_train_position_query(train_position_query); + bidib_free_train_state_query(train_state_query); + syslog_server(LOG_ERR, "Request: Get train state - train: %s - invalid train", + data_train); + return OCS_NOT_IMPLEMENTED; } } else { - syslog_server(LOG_ERR, "Request: Get train state - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, "Request: Get train state - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -147,33 +142,31 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re if (data_train == NULL) { syslog_server(LOG_ERR, "Request: Get train peripherals - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s", data_train); - t_bidib_id_list_query query = - bidib_get_train_peripherals(data_train); - if (query.length > 0) { - GString *train_peripherals = g_string_new(""); - for (size_t i = 0; i < query.length; i++) { - t_bidib_train_peripheral_state_query per_state = + } + + syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s", data_train); + t_bidib_id_list_query query = bidib_get_train_peripherals(data_train); + if (query.length > 0) { + GString *train_peripherals = g_string_new(""); + for (size_t i = 0; i < query.length; i++) { + t_bidib_train_peripheral_state_query per_state = bidib_get_train_peripheral_state(data_train, query.ids[i]); - g_string_append_printf(train_peripherals, "%s%s - state: %s", - i != 0 ? "\n" : "", query.ids[i], - per_state.state == 1 ? "on" : "off"); - } - bidib_free_id_list_query(query); - char response[train_peripherals->len + 1]; - strcpy(response, train_peripherals->str); - g_string_free(train_peripherals, true); - onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s - finished", - data_train); - return OCS_PROCESSED; - } else { - bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get train train peripherals - train: %s - invalid " - "train", data_train); - return OCS_NOT_IMPLEMENTED; + g_string_append_printf(train_peripherals, "%s%s - state: %s", + i != 0 ? "\n" : "", query.ids[i], + per_state.state == 1 ? "on" : "off"); } + bidib_free_id_list_query(query); + + onion_response_printf(res, "%s", train_peripherals->str); + syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s - finished", + data_train); + g_string_free(train_peripherals, true); + return OCS_PROCESSED; + } else { + bidib_free_id_list_query(query); + syslog_server(LOG_ERR, "Request: Get train train peripherals - train: %s - invalid " + "train", data_train); + return OCS_NOT_IMPLEMENTED; } } else { syslog_server(LOG_ERR, "Request: Get train peripherals - system not running or " @@ -191,7 +184,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, t_bidib_id_list_query query = bidib_get_track_outputs(); for (size_t i = 0; i < query.length; i++) { t_bidib_track_output_state_query track_output_state = - bidib_get_track_output_state(query.ids[i]); + bidib_get_track_output_state(query.ids[i]); if (track_output_state.known) { char *state_string; switch (track_output_state.cs_state) { @@ -222,6 +215,9 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, case 0xFF: state_string = "query"; break; + default: + state_string = "off"; + break; } g_string_append_printf(track_outputs, "%s%s - state: %s", i != 0 ? "\n" : "", query.ids[i], @@ -229,11 +225,10 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, } } bidib_free_id_list_query(query); - char response[track_outputs->len + 1]; - strcpy(response, track_outputs->str); - g_string_free(track_outputs, true); - onion_response_printf(res, "%s", response); + + onion_response_printf(res, "%s", track_outputs->str); syslog_server(LOG_INFO, "Request: Get track outputs - finished"); + g_string_free(track_outputs, true); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get track outputs - system not running or " @@ -251,7 +246,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, t_bidib_id_list_query query = bidib_get_connected_points(); for (size_t i = 0; i < query.length; i++) { t_bidib_unified_accessory_state_query point_state = - bidib_get_point_state(query.ids[i]); + bidib_get_point_state(query.ids[i]); GString *execution_state = g_string_new(""); if (point_state.type == BIDIB_ACCESSORY_BOARD) { @@ -259,28 +254,24 @@ onion_connection_status handler_get_points(void *_, onion_request *req, point_state.board_accessory_state.execution_state ? " not" : ""); } - char execution_state_str[execution_state->len + 1]; - strcpy(execution_state_str, execution_state->str); - g_string_free(execution_state, true); g_string_append_printf(points, "%s%s - state: %s %s", i != 0 ? "\n" : "", query.ids[i], point_state.type == BIDIB_ACCESSORY_BOARD ? point_state.board_accessory_state.state_id : point_state.dcc_accessory_state.state_id, - execution_state_str); + execution_state->str); + g_string_free(execution_state, true); bidib_free_unified_accessory_state_query(point_state); } bidib_free_id_list_query(query); - char response[points->len + 1]; - strcpy(response, points->str); - g_string_free(points, true); - onion_response_printf(res, "%s", response); + + onion_response_printf(res, "%s", points->str); syslog_server(LOG_INFO, "Request: Get points - finished"); + g_string_free(points, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get points - system not running or wrong " - "request type"); + syslog_server(LOG_ERR, "Request: Get points - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -294,7 +285,7 @@ onion_connection_status handler_get_signals(void *_, onion_request *req, t_bidib_id_list_query query = bidib_get_connected_signals(); for (size_t i = 0; i < query.length; i++) { t_bidib_unified_accessory_state_query signal_state = - bidib_get_signal_state(query.ids[i]); + bidib_get_signal_state(query.ids[i]); g_string_append_printf(signals, "%s%s - state: %s", i != 0 ? "\n" : "", query.ids[i], signal_state.type == BIDIB_ACCESSORY_BOARD ? @@ -303,15 +294,13 @@ onion_connection_status handler_get_signals(void *_, onion_request *req, bidib_free_unified_accessory_state_query(signal_state); } bidib_free_id_list_query(query); - char response[signals->len + 1]; - strcpy(response, signals->str); - g_string_free(signals, true); - onion_response_printf(res, "%s", response); + + onion_response_printf(res, "%s", signals->str); syslog_server(LOG_INFO, "Request: Get signals - finished"); + g_string_free(signals, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get signals - system not running or wrong " - "request type"); + syslog_server(LOG_ERR, "Request: Get signals - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -325,29 +314,28 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, if (data_point == NULL) { syslog_server(LOG_ERR, "Request: Get point aspects - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s", data_point); - t_bidib_id_list_query query = bidib_get_point_aspects(data_point); - if (query.length > 0) { - GString *aspects = g_string_new(""); - for (size_t i = 0; i < query.length; i++) { - g_string_append_printf(aspects, "%s%s", i != 0 ? ", " : "", - query.ids[i]); - } - bidib_free_id_list_query(query); - char response[aspects->len + 1]; - strcpy(response, aspects->str); - g_string_free(aspects, true); - onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - finished", - data_point); - return OCS_PROCESSED; - } else { - bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get point aspects - point: %s - invalid point", - data_point); - return OCS_NOT_IMPLEMENTED; + } + + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s", data_point); + t_bidib_id_list_query query = bidib_get_point_aspects(data_point); + if (query.length > 0) { + GString *aspects = g_string_new(""); + for (size_t i = 0; i < query.length; i++) { + g_string_append_printf(aspects, "%s%s", i != 0 ? ", " : "", + query.ids[i]); } + bidib_free_id_list_query(query); + + onion_response_printf(res, "%s", aspects->str); + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - finished", + data_point); + g_string_free(aspects, true); + return OCS_PROCESSED; + } else { + bidib_free_id_list_query(query); + syslog_server(LOG_ERR, "Request: Get point aspects - point: %s - invalid point", + data_point); + return OCS_NOT_IMPLEMENTED; } } else { syslog_server(LOG_ERR, "Request: Get point aspects - system not running or " @@ -364,29 +352,27 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, if (data_signal == NULL) { syslog_server(LOG_ERR, "Request: Get signal aspects - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s", data_signal); - t_bidib_id_list_query query = bidib_get_signal_aspects(data_signal); - if (query.length > 0) { - GString *aspects = g_string_new(""); - for (size_t i = 0; i < query.length; i++) { - g_string_append_printf(aspects, "%s%s", i != 0 ? ", " : "", - query.ids[i]); - } - bidib_free_id_list_query(query); - char response[aspects->len + 1]; - strcpy(response, aspects->str); - g_string_free(aspects, true); - onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s - finished", - data_signal); - return OCS_PROCESSED; - } else { - bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get signal aspects - signal: %s - invalid signal", - data_signal); - return OCS_NOT_IMPLEMENTED; + } + + syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s", data_signal); + t_bidib_id_list_query query = bidib_get_signal_aspects(data_signal); + if (query.length > 0) { + GString *aspects = g_string_new(""); + for (size_t i = 0; i < query.length; i++) { + g_string_append_printf(aspects, "%s%s", i != 0 ? ", " : "", query.ids[i]); } + bidib_free_id_list_query(query); + + onion_response_printf(res, "%s", aspects->str); + syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s - finished", + data_signal); + g_string_free(aspects, true); + return OCS_PROCESSED; + } else { + bidib_free_id_list_query(query); + syslog_server(LOG_ERR, "Request: Get signal aspects - signal: %s - invalid signal", + data_signal); + return OCS_NOT_IMPLEMENTED; } } else { syslog_server(LOG_ERR, "Request: Get signal aspects - system not running or " @@ -403,8 +389,7 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, GString *segments = g_string_new(""); t_bidib_id_list_query seg_query = bidib_get_connected_segments(); for (size_t i = 0; i < seg_query.length; i++) { - t_bidib_segment_state_query seg_state_query = - bidib_get_segment_state(seg_query.ids[i]); + t_bidib_segment_state_query seg_state_query = bidib_get_segment_state(seg_query.ids[i]); g_string_append_printf(segments, "%s%s - occupied: %s", i != 0 ? "\n" : "", seg_query.ids[i], seg_state_query.data.occupied ? "yes" : "no"); @@ -414,11 +399,9 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, for (size_t j = 0; j < seg_state_query.data.dcc_address_cnt; j++) { id_query = bidib_get_train_id(seg_state_query.data.dcc_addresses[j]); if (id_query.known) { - g_string_append_printf(segments, "%s%s", - j != 0 ? ", " : "", id_query.id); + g_string_append_printf(segments, "%s%s", j != 0 ? ", " : "", id_query.id); } else { - g_string_append_printf(segments, "%s%s", - j != 0 ? ", " : "", "unknown"); + g_string_append_printf(segments, "%s%s", j != 0 ? ", " : "", "unknown"); } bidib_free_id_query(id_query); } @@ -426,11 +409,10 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, bidib_free_segment_state_query(seg_state_query); } bidib_free_id_list_query(seg_query); - char response[segments->len + 1]; - strcpy(response, segments->str); - g_string_free(segments, true); - onion_response_printf(res, "%s", response); + + onion_response_printf(res, "%s", segments->str); syslog_server(LOG_INFO, "Request: Get segments - finished"); + g_string_free(segments, true); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get segments - system not running or " @@ -447,43 +429,41 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, if (!reversers_state_update()) { syslog_server(LOG_ERR, "Request: Get reversers - unable to request state update"); return OCS_NOT_IMPLEMENTED; - } else { - GString *reversers = g_string_new(""); - t_bidib_id_list_query rev_query = bidib_get_connected_reversers(); - for (size_t i = 0; i < rev_query.length; i++) { - const char *reverser_id = rev_query.ids[i]; - t_bidib_reverser_state_query rev_state_query = - bidib_get_reverser_state(reverser_id); - if (!rev_state_query.available) { - continue; - } - - char *state_value_str = "unknown"; - switch (rev_state_query.data.state_value) { - case BIDIB_REV_EXEC_STATE_OFF: - state_value_str = "off"; - break; - case BIDIB_REV_EXEC_STATE_ON: - state_value_str = "on"; - break; - default: - state_value_str = "unknown"; - break; - } - - g_string_append_printf(reversers, "%s%s - state: %s", - i != 0 ? "\n" : "", - reverser_id, state_value_str); - bidib_free_reverser_state_query(rev_state_query); + } + + GString *reversers = g_string_new(""); + t_bidib_id_list_query rev_query = bidib_get_connected_reversers(); + for (size_t i = 0; i < rev_query.length; i++) { + const char *reverser_id = rev_query.ids[i]; + t_bidib_reverser_state_query rev_state_query = bidib_get_reverser_state(reverser_id); + if (!rev_state_query.available) { + continue; } - bidib_free_id_list_query(rev_query); - char response[reversers->len + 1]; - strcpy(response, reversers->str); - g_string_free(reversers, true); - onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get reversers - finished"); - return OCS_PROCESSED; + + char *state_value_str = "unknown"; + switch (rev_state_query.data.state_value) { + case BIDIB_REV_EXEC_STATE_OFF: + state_value_str = "off"; + break; + case BIDIB_REV_EXEC_STATE_ON: + state_value_str = "on"; + break; + default: + state_value_str = "unknown"; + break; + } + + g_string_append_printf(reversers, "%s%s - state: %s", + i != 0 ? "\n" : "", + reverser_id, state_value_str); + bidib_free_reverser_state_query(rev_state_query); } + bidib_free_id_list_query(rev_query); + + onion_response_printf(res, "%s", reversers->str); + syslog_server(LOG_INFO, "Request: Get reversers - finished"); + g_string_free(reversers, true); + return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get reversers - system not running or " "wrong request type"); @@ -500,7 +480,7 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, t_bidib_id_list_query per_query = bidib_get_connected_peripherals(); for (size_t i = 0; i < per_query.length; i++) { t_bidib_peripheral_state_query per_state_query = - bidib_get_peripheral_state(per_query.ids[i]); + bidib_get_peripheral_state(per_query.ids[i]); g_string_append_printf(peripherals, "%s%s - %s: %d", i != 0 ? "\n" : "", per_query.ids[i], per_state_query.data.state_id, @@ -508,11 +488,10 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, bidib_free_peripheral_state_query(per_state_query); } bidib_free_id_list_query(per_query); - char response[peripherals->len + 1]; - strcpy(response, peripherals->str); - g_string_free(peripherals, true); - onion_response_printf(res, "%s", response); + + onion_response_printf(res, "%s", peripherals->str); syslog_server(LOG_INFO, "Request: Get peripherals - finished"); + g_string_free(peripherals, true); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get peripherals - system not running or " @@ -527,7 +506,7 @@ onion_connection_status handler_get_verification_option(void *_, onion_request * if ((onion_request_get_flags(req) & OR_METHODS) == OR_GET) { onion_response_printf(res, "verification-enabled: %s", verification_enabled ? "true" : "false"); - syslog_server(LOG_NOTICE, "Request: Get verification option"); + syslog_server(LOG_INFO, "Request: Get verification option - done"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get verification option - wrong request type"); @@ -542,7 +521,7 @@ onion_connection_status handler_get_verification_url(void *_, onion_request *req const char *verif_url = get_verifier_url(); onion_response_printf(res, "verification-url: %s", verif_url == NULL ? "null" : verif_url); - syslog_server(LOG_NOTICE, "Request: Get verification url"); + syslog_server(LOG_INFO, "Request: Get verification url - done"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get verification url - wrong request type"); @@ -561,11 +540,13 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, if (route_ids != NULL) { for (size_t i = 0; i < route_ids->len; i++) { const char *route_id = g_array_index(route_ids, char *, i); - t_interlocking_route *route = get_route(route_id); - if (route->train != NULL) { - g_string_append_printf(granted_routes, "%sroute id: %s train: %s", - needNewLine ? "\n" : "", route->id, route->train); - needNewLine = true; + if (route_id != NULL) { + t_interlocking_route *route = get_route(route_id); + if (route != NULL && route->train != NULL) { + g_string_append_printf(granted_routes, "%sroute id: %s train: %s", + needNewLine ? "\n" : "", route->id, route->train); + needNewLine = true; + } } } g_array_free(route_ids, true); @@ -575,11 +556,9 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, g_string_append_printf(granted_routes, "No granted routes"); } - char response[granted_routes->len + 1]; - strcpy(response, granted_routes->str); - g_string_free(granted_routes, true); - onion_response_printf(res, "%s", response); + onion_response_printf(res, "%s", granted_routes->str); syslog_server(LOG_INFO, "Request: Get granted routes - finished"); + g_string_free(granted_routes, true); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get granted routes - system not running or " @@ -621,47 +600,46 @@ onion_connection_status handler_get_route(void *_, onion_request *req, if (route_id == NULL || strcmp(route_id, "") == 0 || get_route(route_id) == NULL) { syslog_server(LOG_ERR, "Request: Get route - invalid parameters"); return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_INFO, "Request: Get route - route: %s", route_id); - GString *route_str = g_string_new(""); - t_interlocking_route *route = get_route(route_id); - g_string_append_printf(route_str, "route id: %s\n", route->id); - g_string_append_printf(route_str, " source signal: %s\n", route->source); - g_string_append_printf(route_str, " destination signal: %s\n", route->destination); - g_string_append_printf(route_str, " orientation: %s\n", route->orientation); - g_string_append_printf(route_str, " length: %f\n", route->length); - g_string_append_printf(route_str, " path: "); - sprintf_garray_char(route_str, route->path); - g_string_append_printf(route_str, "\n sections: "); - sprintf_garray_char(route_str, route->sections); - g_string_append_printf(route_str, "\n points: "); - sprintf_garray_interlocking_point(route_str, route->points); - g_string_append_printf(route_str, "\n signals: "); - sprintf_garray_char(route_str, route->signals); - g_string_append_printf(route_str, "\n conflicting route ids: "); - sprintf_garray_char(route_str, route->conflicts); - - g_string_append_printf(route_str, "\nstatus:"); - g_string_append_printf(route_str, "\n granted conflicting route ids: "); - GArray *granted_route_conflicts = get_granted_route_conflicts(route_id); - sprintf_garray_char(route_str, granted_route_conflicts); - g_array_free(granted_route_conflicts, true); - - pthread_mutex_lock(&interlocker_mutex); - g_string_append_printf(route_str, "\n route clear: %s", - get_route_is_clear(route_id) ? "yes": "no"); - pthread_mutex_unlock(&interlocker_mutex); - - g_string_append_printf(route_str, "\n granted train: %s", - route->train == NULL ? "none" : route->train); - - char response[route_str->len + 1]; - strcpy(response, route_str->str); - g_string_free(route_str, true); - onion_response_printf(res, "%s", response); - syslog_server(LOG_INFO, "Request: Get route - route: %s - finished", route_id); - return OCS_PROCESSED; } + + syslog_server(LOG_INFO, "Request: Get route - route: %s", route_id); + GString *route_str = g_string_new(""); + + pthread_mutex_lock(&interlocker_mutex); + t_interlocking_route *route = get_route(route_id); + g_string_append_printf(route_str, "route id: %s\n", route->id); + g_string_append_printf(route_str, " source signal: %s\n", route->source); + g_string_append_printf(route_str, " destination signal: %s\n", route->destination); + g_string_append_printf(route_str, " orientation: %s\n", route->orientation); + g_string_append_printf(route_str, " length: %f\n", route->length); + g_string_append_printf(route_str, " path: "); + sprintf_garray_char(route_str, route->path); + g_string_append_printf(route_str, "\n sections: "); + sprintf_garray_char(route_str, route->sections); + g_string_append_printf(route_str, "\n points: "); + sprintf_garray_interlocking_point(route_str, route->points); + g_string_append_printf(route_str, "\n signals: "); + sprintf_garray_char(route_str, route->signals); + g_string_append_printf(route_str, "\n conflicting route ids: "); + sprintf_garray_char(route_str, route->conflicts); + + g_string_append_printf(route_str, "\nstatus:"); + g_string_append_printf(route_str, "\n granted conflicting route ids: "); + GArray *granted_route_conflicts = get_granted_route_conflicts(route_id); + sprintf_garray_char(route_str, granted_route_conflicts); + g_array_free(granted_route_conflicts, true); + + g_string_append_printf(route_str, "\n route clear: %s", + get_route_is_clear(route_id) ? "yes": "no"); + + g_string_append_printf(route_str, "\n granted train: %s", + route->train == NULL ? "none" : route->train); + pthread_mutex_unlock(&interlocker_mutex); + + onion_response_printf(res, "%s", route_str->str); + syslog_server(LOG_INFO, "Request: Get route - route: %s - finished", route_id); + g_string_free(route_str, true); + return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get route - system not running or " "wrong request type"); From 9f725677766446d9dcc2c6ae6db0e6f631d4a9cf Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 11 Nov 2023 14:18:14 +0100 Subject: [PATCH 08/45] improve logging in upload --- server/src/handler_upload.c | 43 +++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index ce00b79d..5d62eace 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -100,14 +100,14 @@ bool engine_file_exists(const char filename[]) { DIR *dir_handle = opendir(engine_dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Engine file exists check - Directory %s could not be opened", engine_dir); + syslog_server(LOG_ERR, "Engine file exists check - directory %s could not be opened", engine_dir); return true; } struct dirent *dir_entry = NULL; while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_NOTICE, "Engine file exists check - Engine %s already exists", filename); + syslog_server(LOG_NOTICE, "Engine file exists check - engine %s already exists", filename); return true; } } @@ -139,7 +139,6 @@ bool plugin_is_unremovable(const char name[]) { onion_connection_status handler_upload_engine(void *_, onion_request *req, onion_response *res) { build_response_header(res); - if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *filename = onion_request_get_post(req, "file"); const char *temp_filepath = onion_request_get_file(req, "file"); @@ -151,11 +150,11 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s" , filename); + syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s", filename); if (engine_file_exists(filename)) { - syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s -" - " engine file already exists", filename); + syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - " + "engine file already exists", filename); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine file already exists"); return OCS_PROCESSED; @@ -169,15 +168,15 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion char final_filepath[PATH_MAX + NAME_MAX]; snprintf(final_filepath, sizeof(final_filepath), "%s/%s", engine_dir, filename); onion_shortcut_rename(temp_filepath, final_filepath); - syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s -" - " copied engine SCCharts file from %s to %s", + syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s - " + "copied engine SCCharts file from %s to %s", filename, temp_filepath, final_filepath); if (verification_enabled) { verif_result engine_verif_result = verify_engine_model(final_filepath); if (!engine_verif_result.success) { // Stop upload if verification did not succeed - syslog_server(LOG_NOTICE, "Request: Upload Engine - Engine verification failed"); + syslog_server(LOG_NOTICE, "Request: Upload Engine - engine verification failed"); remove_engine_files(libname); onion_response_set_code(res, HTTP_BAD_REQUEST); if (engine_verif_result.message != NULL) { @@ -213,7 +212,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion pthread_mutex_unlock(&dyn_containers_mutex); remove_engine_files(libname); - syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - " + syslog_server(LOG_WARNING, "Request: Upload engine - engine file: %s - " "no available engine slot", filename); ///TODO: Discuss which code to return onion_response_set_code(res, HTTP_INTERNAL_ERROR); @@ -271,7 +270,8 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, const int engine_slot = dyn_containers_get_engine_slot(name); if (engine_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - engine could not be found", + syslog_server(LOG_WARNING, "Request: Remove engine - engine: %s - " + "engine could not be found", name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s could not be found", name); @@ -281,7 +281,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, const bool engine_freed_successfully = dyn_containers_free_engine(engine_slot); pthread_mutex_unlock(&dyn_containers_mutex); if (!engine_freed_successfully) { - syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - engine is still in use", + syslog_server(LOG_WARNING, "Request: Remove engine - engine: %s - engine is still in use", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -292,6 +292,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, if (!remove_engine_files(name)) { syslog_server(LOG_ERR, "Request: Remove engine - engine: %s - files could not be removed", name); + ///TODO: This is an internal error, should return different response code IMO onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s files could not be removed", name); return OCS_PROCESSED; @@ -311,7 +312,7 @@ bool interlocker_file_exists(const char filename[]) { DIR *dir_handle = opendir(interlocker_dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Interlocker file exists check - Directory %s could not be opened", + syslog_server(LOG_ERR, "Interlocker file exists check - directory %s could not be opened", interlocker_dir); return true; } @@ -319,7 +320,7 @@ bool interlocker_file_exists(const char filename[]) { while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_NOTICE, "Interlocker file exists check - Interlocker %s already exists", + syslog_server(LOG_NOTICE, "Interlocker file exists check - interlocker %s already exists", filename); return true; } @@ -402,7 +403,7 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, pthread_mutex_unlock(&dyn_containers_mutex); remove_interlocker_files(libname); - syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s - " + syslog_server(LOG_WARNING, "Request: Upload interlocker - interlocker file: %s - " "no available interlocker slot", filename); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -451,7 +452,7 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, const char *name = onion_request_get_post(req, "interlocker-name"); if (name == NULL || plugin_is_unremovable(name)) { syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker name is invalid " - "or interlocker is unremovable", name); + "or interlocker is unremovable"); onion_response_printf(res, "Interlocker name is invalid or interlocker is unremovable"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -466,19 +467,19 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " "interlocker could not be found", name); - onion_response_printf(res, "Interlocker %s could not be found", name); onion_response_set_code(res, HTTP_BAD_REQUEST); + onion_response_printf(res, "Interlocker %s could not be found", name); return OCS_PROCESSED; } const bool interlocker_freed_successfully = dyn_containers_free_interlocker(interlocker_slot); pthread_mutex_unlock(&dyn_containers_mutex); if (!interlocker_freed_successfully) { - syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " + syslog_server(LOG_WARNING, "Request: Remove interlocker - interlocker: %s - " "interlocker is still in use", name); - onion_response_printf(res, "Interlocker %s is still in use", name); onion_response_set_code(res, HTTP_BAD_REQUEST); + onion_response_printf(res, "Interlocker %s is still in use", name); return OCS_PROCESSED; } @@ -486,8 +487,8 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " "files could not be removed", name); - onion_response_printf(res, "Interlocker %s files could not be removed", name); onion_response_set_code(res, HTTP_BAD_REQUEST); + onion_response_printf(res, "Interlocker %s files could not be removed", name); return OCS_PROCESSED; } syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - finished", @@ -497,8 +498,8 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Remove interlocker - system not running " "or wrong request type"); - onion_response_printf(res, "System not running or wrong request type"); onion_response_set_code(res, HTTP_BAD_REQUEST); + onion_response_printf(res, "System not running or wrong request type"); return OCS_PROCESSED; } } From 88b85b6efcf2c59a290dcbb03a62913efffa8059 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 11 Nov 2023 15:03:02 +0100 Subject: [PATCH 09/45] outfactor common grab-id and train-id check --- server/src/handler_driver.c | 100 ++++++++++++++++-------------------- server/src/handler_driver.h | 8 +++ 2 files changed, 53 insertions(+), 55 deletions(-) diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 262a7a35..cac60d1b 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -851,6 +851,22 @@ void release_all_grabbed_trains(void) { } } +char *train_id_from_grab_id(int grab_id) { + pthread_mutex_lock(&grabbed_trains_mutex); + if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { + pthread_mutex_unlock(&grabbed_trains_mutex); + return NULL; + } + char *train_id = strdup(grabbed_trains[grab_id].name->str); + pthread_mutex_unlock(&grabbed_trains_mutex); + if (train_id == NULL) { + syslog_server(LOG_ERR, "Train ID from grab ID - unable to allocate memory for train_id"); + return NULL; + } + return train_id; +} + + onion_connection_status handler_grab_train(void *_, onion_request *req, onion_response *res) { build_response_header(res); @@ -908,24 +924,18 @@ onion_connection_status handler_release_train(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - // Check if grab_id is valid; if valid then remember train name in train_id - pthread_mutex_lock(&grabbed_trains_mutex); - if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Release train - grab id: %d - invalid grab id", - grab_id); - return OCS_NOT_IMPLEMENTED; - } - char *train_id = strdup(grabbed_trains[grab_id].name->str); + // If grab_id is valid, train_id will be, too. + char *train_id = train_id_from_grab_id(grab_id); if (train_id == NULL) { - pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Release train - unable to allocate memory for train_id"); - return false; + syslog_server(LOG_ERR, "Request: Release train - grab id: %d - invalid grab id", grab_id); + return OCS_NOT_IMPLEMENTED; } + syslog_server(LOG_NOTICE, "Request: Release train - grab id: %d train id: %s", grab_id, train_id); // Set train speed to 0 + pthread_mutex_lock(&grabbed_trains_mutex); const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, true); pthread_mutex_unlock(&grabbed_trains_mutex); @@ -977,24 +987,15 @@ onion_connection_status handler_request_route(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - pthread_mutex_lock(&grabbed_trains_mutex); - if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { + // If grab_id is valid, train_id will be, too. + char *train_id = train_id_from_grab_id(grab_id); + if (train_id == NULL) { syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - invalid grab id", data_source_name, data_destination_name); return OCS_NOT_IMPLEMENTED; - } - char *train_id = strdup(grabbed_trains[grab_id].name->str); - if (train_id == NULL) { - pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - " - "unable to allocate memory for train_id", - data_source_name, data_destination_name); - return false; } - pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Request: Request train route - " - "train: %s from: %s to: %s", + syslog_server(LOG_NOTICE, "Request: Request train route - train: %s from: %s to: %s", train_id, data_source_name, data_destination_name); // Use interlocker to find and grant a route @@ -1056,19 +1057,12 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - pthread_mutex_lock(&grabbed_trains_mutex); - if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - pthread_mutex_unlock(&grabbed_trains_mutex); + // If grab_id is valid, train_id will be, too. + char *train_id = train_id_from_grab_id(grab_id); + if (train_id == NULL) { syslog_server(LOG_ERR, "Request: Request train route id - route: %s - invalid grab id", route_id); return OCS_NOT_IMPLEMENTED; - } - char *train_id = strdup(grabbed_trains[grab_id].name->str); - pthread_mutex_unlock(&grabbed_trains_mutex); - if (train_id == NULL) { - syslog_server(LOG_ERR, - "Request: Request train route id - unable to allocate memory for train_id"); - return OCS_NOT_IMPLEMENTED; } syslog_server(LOG_NOTICE, "Request: Request train route id - train: %s route: %s", @@ -1082,11 +1076,14 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Request train route id - " "train: %s route: %s - finished", train_id, route_id); + free(train_id); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Request train route id - " "train: %s route: %s - route not granted (%s)", train_id, route_id, result); + free(train_id); + onion_response_set_code(res, HTTP_BAD_REQUEST); if (strcmp(result, "not_grantable") == 0) { onion_response_printf(res, "Route %s is not available " "or has conflicts with others", route_id); @@ -1097,7 +1094,6 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, onion_response_printf(res, "Route %s could not be granted", route_id); } - onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } @@ -1121,14 +1117,17 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Driving direction - train: %s - route id empty", data_train); return OCS_NOT_IMPLEMENTED; - } else { - syslog_server(LOG_INFO, "Request: Driving direction - train: %s", data_train); - const t_interlocking_route *route = get_route(route_id); - onion_response_printf(res, "%s", - is_forward_driving(route, data_train) ? "forwards" : "backwards"); - syslog_server(LOG_INFO, "Request: Driving direction - train: %s - finished", data_train); - return OCS_PROCESSED; } + + syslog_server(LOG_INFO, "Request: Driving direction - train: %s", data_train); + pthread_mutex_lock(&interlocker_mutex); + const t_interlocking_route *route = get_route(route_id); + onion_response_printf(res, "%s", + is_forward_driving(route, data_train) ? "forwards" : "backwards"); + pthread_mutex_unlock(&interlocker_mutex); + syslog_server(LOG_INFO, "Request: Driving direction - train: %s - finished", data_train); + return OCS_PROCESSED; + } else { syslog_server(LOG_ERR, "Request: Driving direction - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; @@ -1159,17 +1158,10 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - pthread_mutex_lock(&grabbed_trains_mutex); - if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { - pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Drive route - route: %s - invalid grab id", route_id); - return OCS_NOT_IMPLEMENTED; - } - char *train_id = strdup(grabbed_trains[grab_id].name->str); - pthread_mutex_unlock(&grabbed_trains_mutex); + // If grab_id is valid, train_id will be, too. + char *train_id = train_id_from_grab_id(grab_id); if (train_id == NULL) { - syslog_server(LOG_ERR, - "Request: Drive route - unable to allocate memory for train_id"); + syslog_server(LOG_ERR, "Request: Drive route - route: %s - invalid grab id", route_id); return OCS_NOT_IMPLEMENTED; } @@ -1189,10 +1181,8 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, "driving unsuccessful", route_id, train_id, mode); free(train_id); - ///TODO: Discuss - we should prob. return a code indicating why driving failed return OCS_NOT_IMPLEMENTED; } - } else { syslog_server(LOG_ERR, "Request: Drive route - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; diff --git a/server/src/handler_driver.h b/server/src/handler_driver.h index 6465eaa9..487fac72 100644 --- a/server/src/handler_driver.h +++ b/server/src/handler_driver.h @@ -54,6 +54,14 @@ bool release_train(int grab_id); void release_all_grabbed_trains(void); +/** + * @brief Returns a heap-allocated string with the name of the train grabbed with this grab-id. + * Caller must free the returned string. + * @param grab_id Grab-id with which the desired train is grabbed + * @return char* the name of the train grabbed by grab-id; NULL if not grabbed or otherwise invalid. + */ +char *train_id_from_grab_id(int grab_id); + onion_connection_status handler_grab_train(void *_, onion_request *req, onion_response *res); From a8799cb0c4d1fb7139f2511ffcf2e190a26f7a53 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sun, 12 Nov 2023 10:42:21 +0100 Subject: [PATCH 10/45] Improve includes (order, duplicates) --- server/src/handler_admin.c | 5 ++--- server/src/handler_admin.h | 2 -- server/src/handler_controller.c | 7 +++---- server/src/handler_controller.h | 7 +------ server/src/handler_driver.c | 12 +++++------- server/src/handler_monitor.c | 13 +++++-------- server/src/handler_monitor.h | 2 +- server/src/handler_upload.c | 9 +++------ server/src/interlocking.c | 1 - server/src/server.c | 7 +++---- server/src/server.h | 1 - 11 files changed, 23 insertions(+), 43 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index faa91d26..57750e45 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -25,13 +25,12 @@ * */ -#include #include #include -#include -#include #include +#include +#include "handler_admin.h" #include "server.h" #include "param_verification.h" #include "handler_upload.h" diff --git a/server/src/handler_admin.h b/server/src/handler_admin.h index e35276f7..6158555a 100644 --- a/server/src/handler_admin.h +++ b/server/src/handler_admin.h @@ -30,8 +30,6 @@ #include -#include - void stop_bidib(void); onion_connection_status handler_startup(void *_, onion_request *req, diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 103ec1cf..2bb027ae 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -27,14 +27,13 @@ * */ -#include -#include -#include #include #include -#include #include +#include +#include +#include "handler_controller.h" #include "server.h" #include "dyn_containers_interface.h" #include "param_verification.h" diff --git a/server/src/handler_controller.h b/server/src/handler_controller.h index 98eabbdf..fb7a65d2 100644 --- a/server/src/handler_controller.h +++ b/server/src/handler_controller.h @@ -29,17 +29,12 @@ #ifndef HANDLER_CONTROLLER_H #define HANDLER_CONTROLLER_H -#include -#include +#include #include - #define INTERLOCKER_COUNT_MAX 4 #define INTERLOCKER_INSTANCE_COUNT_MAX 4 -#include -#include - extern pthread_mutex_t interlocker_mutex; typedef struct { diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index cac60d1b..4f183455 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -26,22 +26,20 @@ * */ -#include #include #include #include +#include #include -#include -#include -#include #include -#include +#include +#include "handler_driver.h" #include "server.h" -#include "dyn_containers_interface.h" #include "handler_controller.h" -#include "interlocking.h" +#include "dyn_containers_interface.h" #include "param_verification.h" +#include "interlocking.h" #include "bahn_data_util.h" #define MICROSECOND 1 diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 834abb9e..e4a818de 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -26,22 +26,19 @@ * */ -#include #include #include -#include #include #include +#include -#include "request.h" -#include "server.h" #include "handler_monitor.h" -#include "handler_driver.h" +#include "server.h" #include "handler_controller.h" -#include "bahn_data_util.h" -#include "interlocking.h" +#include "handler_driver.h" #include "param_verification.h" -#include "types.h" +#include "interlocking.h" +#include "bahn_data_util.h" #include "websocket_uploader/engine_uploader.h" onion_connection_status handler_get_trains(void *_, onion_request *req, diff --git a/server/src/handler_monitor.h b/server/src/handler_monitor.h index 89d3a073..bf562991 100644 --- a/server/src/handler_monitor.h +++ b/server/src/handler_monitor.h @@ -28,7 +28,7 @@ #ifndef HANDLER_MONITOR_H #define HANDLER_MONITOR_H -#include +#include #include "dyn_containers_interface.h" #include "dyn_containers.h" diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index 5d62eace..d1a6d43a 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -28,17 +28,14 @@ */ -#include #include +#include +#include #include -#include -#include #include -#include -#include +#include #include "handler_upload.h" -#include "response.h" #include "server.h" #include "dynlib.h" #include "dyn_containers_interface.h" diff --git a/server/src/interlocking.c b/server/src/interlocking.c index 3d96e5aa..f3773aba 100644 --- a/server/src/interlocking.c +++ b/server/src/interlocking.c @@ -27,7 +27,6 @@ */ #include -#include #include #include diff --git a/server/src/server.c b/server/src/server.c index 2abf7a01..7d7e98f7 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -25,19 +25,18 @@ * */ -#include #include #include #include -#include #include +#include #include +#include #include #include -#include #include -#include #include +#include #include "handler_monitor.h" #include "handler_admin.h" diff --git a/server/src/server.h b/server/src/server.h index 83ad6165..90ea88bb 100644 --- a/server/src/server.h +++ b/server/src/server.h @@ -29,7 +29,6 @@ #define SERVER_H #include - #include extern volatile time_t session_id; From 39c17833359186416c6be2735e5d37af9f67e13d Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 11:39:59 +0100 Subject: [PATCH 11/45] improved logging when stopping server --- server/src/handler_admin.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 57750e45..946c6869 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -115,18 +115,18 @@ static bool start_bidib(void) { void stop_bidib(void) { session_id = 0; - syslog_server(LOG_NOTICE, "Stop bidib"); - syslog_server(LOG_INFO, "Stop bidib - Will cease printing to log once stop is complete"); + syslog_server(LOG_NOTICE, "Stop Server"); + syslog_server(LOG_INFO, "Stop Server - Will cease printing to log once stop is complete"); release_all_grabbed_trains(); - syslog_server(LOG_INFO, "Stop bidib - Released all grabbed trains"); + syslog_server(LOG_INFO, "Stop Server - Released all grabbed trains"); release_all_interlockers(); - syslog_server(LOG_INFO, "Stop bidib - Released all interlockers"); + syslog_server(LOG_INFO, "Stop Server - Released all interlockers"); running = false; dyn_containers_stop(); - syslog_server(LOG_INFO, "Stop bidib - Stopped dyn-containers"); + syslog_server(LOG_INFO, "Stop Server - Stopped dyn-containers"); bahn_data_util_free_config(); pthread_join(poll_bidib_messages_thread, NULL); - syslog_server(LOG_INFO, "Stop bidib - Bidib message poll thread joined, " + syslog_server(LOG_NOTICE, "Stop Server - Bidib message poll thread joined, " "now stopping bidib and closing log"); bidib_stop(); } From 4d6f1e20e9d6adeb165f39184f959f0a124d345d Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 11:42:07 +0100 Subject: [PATCH 12/45] improved startup logging --- server/src/handler_admin.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 946c6869..3ca9a3a6 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -146,8 +146,11 @@ onion_connection_status handler_startup(void *_, onion_request *req, if (start_bidib()) { retval = OCS_PROCESSED; + syslog_server(LOG_NOTICE, "Request: Start - session id: %ld - finished", session_id); + } else { + syslog_server(LOG_ERR, "Request: Start - session id: %ld - unable to start bidib", + session_id); } - syslog_server(LOG_NOTICE, "Request: Start - session id: %ld - finished", session_id); } else { syslog_server(LOG_ERR, "Request: Start - BiDiB system is already running"); } From ad307906b2b5ee404eefb868e3a8001fec2008af Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 11:46:55 +0100 Subject: [PATCH 13/45] admin handler minor log improv --- server/src/handler_admin.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 3ca9a3a6..b1236ed0 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -152,7 +152,8 @@ onion_connection_status handler_startup(void *_, onion_request *req, session_id); } } else { - syslog_server(LOG_ERR, "Request: Start - BiDiB system is already running"); + syslog_server(LOG_ERR, + "Request: Start - BiDiB system is already running or wrong request type"); } pthread_mutex_unlock(&start_stop_mutex); @@ -171,7 +172,7 @@ onion_connection_status handler_shutdown(void *_, onion_request *req, // Can't log "finished" here since bidib closes the syslog when stopping retval = OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Stop - BiDiB system is not running"); + syslog_server(LOG_ERR, "Request: Stop - BiDiB system is not running or wrong request type"); retval = OCS_NOT_IMPLEMENTED; } pthread_mutex_unlock(&start_stop_mutex); @@ -324,7 +325,7 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request } } else { syslog_server(LOG_ERR, - "Request: Admin set train speed - system not running or wrong request type"); + "Request: Admin set dcc train speed - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } From 2c76bf397e86590d990bea98cdee9be9ec06d2f1 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 11:59:49 +0100 Subject: [PATCH 14/45] consistent log before or after mutex in driveroute --- server/src/handler_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 4f183455..a618c428 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -750,9 +750,9 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a ///TODO: Discuss - why is this re-assignment necessary? Its the same pointer, right? route = get_route(route->id); } - pthread_mutex_lock(&grabbed_trains_mutex); syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - slowing for end of route", train_id, route_id); + pthread_mutex_lock(&grabbed_trains_mutex); dyn_containers_set_train_engine_instance_inputs(engine_instance, DRIVING_SPEED_STOPPING, requested_forwards); From 94a003796bf1ac0e93421707e587f72ce1dd8ea5 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 12:07:58 +0100 Subject: [PATCH 15/45] admin import removed dupl and unused --- server/src/handler_admin.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index b1236ed0..09cb237a 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -32,11 +32,9 @@ #include "handler_admin.h" #include "server.h" -#include "param_verification.h" #include "handler_upload.h" #include "handler_driver.h" #include "handler_controller.h" -#include "interlocking.h" #include "dyn_containers_interface.h" #include "param_verification.h" #include "bahn_data_util.h" From 0005f7d762261e22bfd0bd1b1c8fc9339b1b95c6 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 14:35:34 +0100 Subject: [PATCH 16/45] Applied (multi-arg) formatting scheme --- server/src/bahn_data_util.c | 7 +- server/src/handler_admin.c | 56 ++-- server/src/handler_controller.c | 158 +++++---- server/src/handler_driver.c | 302 ++++++++++-------- server/src/handler_monitor.c | 111 +++---- server/src/handler_upload.c | 125 +++++--- server/src/server.c | 12 +- .../src/websocket_uploader/engine_uploader.c | 15 +- 8 files changed, 439 insertions(+), 347 deletions(-) diff --git a/server/src/bahn_data_util.c b/server/src/bahn_data_util.c index c9da3ed2..d56e1057 100644 --- a/server/src/bahn_data_util.c +++ b/server/src/bahn_data_util.c @@ -563,13 +563,16 @@ bool config_set_scalar_string_value(const char *type, const char *id, const char t_interlocking_route *route = (t_interlocking_route *) obj; route->train = strdup(value); if (value != NULL && route->train == NULL) { - syslog_server(LOG_ERR, "config set scalar string value: unable to allocate memory for route->train"); + syslog_server(LOG_ERR, + "config set scalar string value: unable to allocate memory for route->train"); } result = true; } } - syslog_server(LOG_DEBUG, "Set scalar string: %s %s.%s = %s => %s", type, id, prop_name, value, result ? "true" : "false"); + syslog_server(LOG_DEBUG, + "Set scalar string: %s %s.%s = %s => %s", + type, id, prop_name, value, result ? "true" : "false"); return result; } diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 09cb237a..729d6451 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -124,13 +124,12 @@ void stop_bidib(void) { syslog_server(LOG_INFO, "Stop Server - Stopped dyn-containers"); bahn_data_util_free_config(); pthread_join(poll_bidib_messages_thread, NULL); - syslog_server(LOG_NOTICE, "Stop Server - Bidib message poll thread joined, " - "now stopping bidib and closing log"); + syslog_server(LOG_NOTICE, + "Stop Server - Bidib message poll thread joined, now stopping bidib and closing log"); bidib_stop(); } -onion_connection_status handler_startup(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_startup(void *_, onion_request *req, onion_response *res) { build_response_header(res); int retval = OCS_NOT_IMPLEMENTED; @@ -146,7 +145,8 @@ onion_connection_status handler_startup(void *_, onion_request *req, retval = OCS_PROCESSED; syslog_server(LOG_NOTICE, "Request: Start - session id: %ld - finished", session_id); } else { - syslog_server(LOG_ERR, "Request: Start - session id: %ld - unable to start bidib", + syslog_server(LOG_ERR, + "Request: Start - session id: %ld - unable to start bidib", session_id); } } else { @@ -158,8 +158,7 @@ onion_connection_status handler_startup(void *_, onion_request *req, return retval; } -onion_connection_status handler_shutdown(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_shutdown(void *_, onion_request *req, onion_response *res) { build_response_header(res); int retval = OCS_NOT_IMPLEMENTED; @@ -178,8 +177,7 @@ onion_connection_status handler_shutdown(void *_, onion_request *req, return retval; } -onion_connection_status handler_set_track_output(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_set_track_output(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { char *end; @@ -212,7 +210,8 @@ onion_connection_status handler_set_verification_option(void *_, onion_request * return OCS_NOT_IMPLEMENTED; } verification_enabled = params_check_verification_option(data_verification_option); - syslog_server(LOG_NOTICE, "Request: Set verification option - new state: %s - done", + syslog_server(LOG_NOTICE, + "Request: Set verification option - new state: %s - done", verification_enabled ? "enabled" : "disabled"); return OCS_PROCESSED; } else { @@ -231,7 +230,8 @@ onion_connection_status handler_set_verification_url(void *_, onion_request *req return OCS_NOT_IMPLEMENTED; } set_verifier_url(data_verification_url); - syslog_server(LOG_NOTICE, "Request: Set verification url - new url: %s - done", + syslog_server(LOG_NOTICE, + "Request: Set verification url - new url: %s - done", data_verification_url); return OCS_PROCESSED; } else { @@ -250,8 +250,8 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, pthread_mutex_lock(&grabbed_trains_mutex); if (grab_id == -1 || !grabbed_trains[grab_id].is_valid) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Request: Admin release train - invalid train id " - "or train %s not grabbed", + syslog_server(LOG_ERR, + "Request: Admin release train - invalid train id or train %s not grabbed", data_train); return OCS_NOT_IMPLEMENTED; } @@ -274,11 +274,13 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, if (!release_train(grab_id)) { - syslog_server(LOG_ERR, "Request: Admin release train - train: %s - invalid grab id", + syslog_server(LOG_ERR, + "Request: Admin release train - train: %s - invalid grab id", data_train); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Admin release train - train: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Admin release train - train: %s - finished", data_train); return OCS_PROCESSED; } @@ -299,24 +301,30 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request int speed = params_check_speed(data_speed); if (speed == 999) { - syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " - "bad speed", data_train, speed); + syslog_server(LOG_ERR, + "Request: Admin set dcc train speed - train: %s speed: %d - bad speed", + data_train, speed); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " - "bad track output", data_train, speed); + syslog_server(LOG_ERR, + "Request: Admin set dcc train speed - train: %s speed: %d - bad track output", + data_train, speed); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Admin set dcc train speed - train: %s speed: %d", + syslog_server(LOG_NOTICE, + "Request: Admin set dcc train speed - train: %s speed: %d", data_train, speed); pthread_mutex_lock(&grabbed_trains_mutex); if (bidib_set_train_speed(data_train, speed, data_track_output)) { - syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " - "bad parameter values", data_train, speed); + syslog_server(LOG_ERR, + "Request: Admin set dcc train speed - train: %s speed: %d - " + "bad parameter values", + data_train, speed); } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Admin set dcc train speed - train: %s speed: %d - " - "finished", data_train, speed); + syslog_server(LOG_NOTICE, + "Request: Admin set dcc train speed - train: %s speed: %d - finished", + data_train, speed); } pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 2bb027ae..601ec5eb 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -61,9 +61,7 @@ const int set_interlocker(const char *interlocker_name) { pthread_mutex_lock(&interlocker_mutex); for (size_t i = 0; i < INTERLOCKER_INSTANCE_COUNT_MAX; i++) { if (!interlocker_instances[i].is_valid) { - if (dyn_containers_set_interlocker_instance( - &interlocker_instances[i], interlocker_name) - ) { + if (dyn_containers_set_interlocker_instance(&interlocker_instances[i], interlocker_name)) { syslog_server(LOG_ERR, "Set Interlocker - interlocker %s could not be used in instance %d", interlocker_name, i); @@ -134,12 +132,14 @@ GArray *get_granted_route_conflicts_sectional(const char *route_id) { GArray* conflict_route_ids = g_array_new(FALSE, FALSE, sizeof(char *)); ///TODO: Discuss this hardcoded 1024 char *conflict_routes[1024]; - const size_t conflict_routes_len = config_get_array_string_value("route", route_id, "conflicts", conflict_routes); + const size_t conflict_routes_len = + config_get_array_string_value("route", route_id, "conflicts", conflict_routes); for (size_t i = 0; i < conflict_routes_len; i++) { t_interlocking_route *conflict_route = get_route(conflict_routes[i]); if (conflict_route->train != NULL) { if (!is_route_conflict_safe_sectional(conflict_routes[i],route_id)) { - const size_t conflict_route_id_string_len = strlen(conflict_route->id) + strlen(conflict_route->train) + 3 + 1; + const size_t conflict_route_id_string_len = strlen(conflict_route->id) + + strlen(conflict_route->train) + 3 + 1; char *conflict_route_id_string = malloc(sizeof(char) * conflict_route_id_string_len); if (conflict_route_id_string == NULL) { syslog_server(LOG_ERR, @@ -171,11 +171,13 @@ GArray *get_granted_route_conflicts(const char *route_id) { } char *conflict_routes[1024]; - const size_t conflict_routes_len = config_get_array_string_value("route", route_id, "conflicts", conflict_routes); + const size_t conflict_routes_len = + config_get_array_string_value("route", route_id, "conflicts", conflict_routes); for (size_t i = 0; i < conflict_routes_len; i++) { t_interlocking_route *conflict_route = get_route(conflict_routes[i]); if (conflict_route->train != NULL) { - const size_t conflict_route_id_string_len = strlen(conflict_route->id) + strlen(conflict_route->train) + 3 + 1; + const size_t conflict_route_id_string_len = strlen(conflict_route->id) + + strlen(conflict_route->train) + 3 + 1; char *conflict_route_id_string = malloc(sizeof(char) * conflict_route_id_string_len); if (conflict_route_id_string == NULL) { syslog_server(LOG_ERR, @@ -201,7 +203,8 @@ const bool get_route_is_clear(const char *route_id) { // Check that all route signals are in the Stop aspect char *signal_ids[1024]; - const size_t signal_ids_len = config_get_array_string_value("route", route_id, "route_signals", signal_ids); + const size_t signal_ids_len = config_get_array_string_value("route", route_id, + "route_signals", signal_ids); for (size_t i = 0; i < signal_ids_len; i++) { char *signal_state = track_state_get_value(signal_ids[i]); if (strcmp(signal_state, "stop")) { @@ -234,7 +237,8 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de pthread_mutex_lock(&interlocker_mutex); if (selected_interlocker_instance == -1) { pthread_mutex_unlock(&interlocker_mutex); - syslog_server(LOG_ERR, "Grant route - train: %s from: %s to: %s - no interlocker has been set", + syslog_server(LOG_ERR, + "Grant route - train: %s from: %s to: %s - no interlocker has been set", train_id, source_id, destination_id); return g_string_new("no_interlocker"); } @@ -269,24 +273,24 @@ GString *grant_route(const char *train_id, const char *source_id, const char *de pthread_mutex_unlock(&interlocker_mutex); if (g_route_id_copy->str != NULL && params_check_is_number(g_route_id_copy->str)) { - syslog_server(LOG_NOTICE, "Grant route - train: %s from: %s to: %s - " - "route %s has been granted", + syslog_server(LOG_NOTICE, + "Grant route - train: %s from: %s to: %s - route %s has been granted", train_id, source_id, destination_id, g_route_id_copy->str); } else if (strcmp(g_route_id_copy->str, "no_routes") == 0) { - syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " - "no route possible", + syslog_server(LOG_WARNING, + "Grant route - train: %s from: %s to: %s - no route possible", train_id, source_id, destination_id); } else if (strcmp(g_route_id_copy->str, "not_grantable") == 0) { - syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " - "conflicting routes in use", + syslog_server(LOG_WARNING, + "Grant route - train: %s from: %s to: %s - conflicting routes in use", train_id, source_id, destination_id); } else if (strcmp(g_route_id_copy->str, "not_clear") == 0) { - syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " - "route is blocked or source signal is not in aspect stop", + syslog_server(LOG_WARNING, + "Grant route - train: %s from: %s to: %s - route blocked or source signal not stop", train_id, source_id, destination_id); } else { - syslog_server(LOG_WARNING, "Grant route - train: %s from: %s to: %s - " - "route could not be granted for other reason (message: %s)", + syslog_server(LOG_WARNING, + "Grant route - train: %s from: %s to: %s - route could not be granted (message: %s)", train_id, source_id, destination_id, g_route_id_copy->str); } return g_route_id_copy; @@ -303,7 +307,8 @@ const char *grant_route_id(const char *train_id, const char *route_id) { GArray * const granted_conflicts = get_granted_route_conflicts(route_id); if (granted_conflicts == NULL) { pthread_mutex_unlock(&interlocker_mutex); - syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - granted_conflicts is NULL", + syslog_server(LOG_WARNING, + "Grant route id - train: %s route: %s - granted_conflicts is NULL", train_id, route_id); return "not_grantable"; } @@ -311,8 +316,9 @@ const char *grant_route_id(const char *train_id, const char *route_id) { g_array_free(granted_conflicts, true); if (route->train != NULL || hasGrantedConflicts) { pthread_mutex_unlock(&interlocker_mutex); - syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - " - "route already granted or has conflicts with routes in use", + syslog_server(LOG_WARNING, + "Grant route id - train: %s route: %s - route already granted " + "or conflicts with granted routes", train_id, route_id); return "not_grantable"; } @@ -320,7 +326,8 @@ const char *grant_route_id(const char *train_id, const char *route_id) { // Check whether the route is physically available if (!get_route_is_clear(route_id)) { pthread_mutex_unlock(&interlocker_mutex); - syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - route is not clear", + syslog_server(LOG_WARNING, + "Grant route id - train: %s route: %s - route is not clear", train_id, route_id); return "not_clear"; } @@ -330,20 +337,19 @@ const char *grant_route_id(const char *train_id, const char *route_id) { if (route->train == NULL) { pthread_mutex_unlock(&interlocker_mutex); - syslog_server(LOG_ERR, "Grant route id - train: %s route: %s - " - "unable to allocate memory for route->train", + syslog_server(LOG_ERR, + "Grant route id - train: %s route: %s - unable to allocate memory for route->train", train_id, route_id); return "not_grantable"; } - syslog_server(LOG_INFO, "Grant route id - train: %s route: %s - " - "route granting in progress, setting points and signals", + syslog_server(LOG_INFO, + "Grant route id - train: %s route: %s - granting in progress, setting points and signals", train_id, route_id); // Set the points to their required positions for (size_t i = 0; i < route->points->len; i++) { - const t_interlocking_point point = - g_array_index(route->points, t_interlocking_point, i); + const t_interlocking_point point = g_array_index(route->points, t_interlocking_point, i); const char *position = (point.position == NORMAL) ? "normal" : "reverse"; bidib_switch_point(point.id, position); bidib_flush(); @@ -358,7 +364,8 @@ const char *grant_route_id(const char *train_id, const char *route_id) { bidib_flush(); } - syslog_server(LOG_NOTICE, "Grant route id - train: %s route: %s - route granted", + syslog_server(LOG_NOTICE, + "Grant route id - train: %s route: %s - route granted", train_id, route_id); pthread_mutex_unlock(&interlocker_mutex); @@ -366,7 +373,7 @@ const char *grant_route_id(const char *train_id, const char *route_id) { } ///TODO: This should not unconditionally set all route signals to stop, because that would -// sectional route release from working correctly! +// prevent sectional route release from working correctly! void release_route(const char *route_id) { if (route_id == NULL) { syslog_server(LOG_ERR, "Release route - invalid parameter, route_id is null"); @@ -375,7 +382,8 @@ void release_route(const char *route_id) { pthread_mutex_lock(&interlocker_mutex); t_interlocking_route *route = get_route(route_id); if (route != NULL && route->train != NULL) { - syslog_server(LOG_INFO, "Release route - route: %s - route currently granted to train %s, " + syslog_server(LOG_INFO, + "Release route - route: %s - route currently granted to train %s, " "now setting all route signals to aspect_stop", route_id, route->train); @@ -384,7 +392,8 @@ void release_route(const char *route_id) { const char *signal_id = g_array_index(route->signals, char *, signal_index); if (bidib_set_signal(signal_id, signal_aspect)) { - syslog_server(LOG_ERR, "Release route - route: %s - unable to set signal to aspect %s", + syslog_server(LOG_ERR, + "Release route - route: %s - unable to set signal to aspect %s", route_id, signal_aspect); } bidib_flush(); @@ -396,8 +405,7 @@ void release_route(const char *route_id) { } else if (route == NULL) { syslog_server(LOG_ERR, "Release route - route: %s - route does not exist", route_id); } else { - syslog_server(LOG_ERR, "Release route - route: %s - route is not granted to any train", - route_id); + syslog_server(LOG_ERR, "Release route - route: %s - route is not granted to any train", route_id); } pthread_mutex_unlock(&interlocker_mutex); @@ -436,8 +444,7 @@ const bool reversers_state_update(void) { return !error; } -onion_connection_status handler_release_route(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_release_route(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_route_id = onion_request_get_post(req, "route-id"); @@ -457,8 +464,7 @@ onion_connection_status handler_release_route(void *_, onion_request *req, } } -onion_connection_status handler_set_point(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_set_point(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_point = onion_request_get_post(req, "point"); @@ -467,15 +473,18 @@ onion_connection_status handler_set_point(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set point - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set point - point: %s state: %s", + syslog_server(LOG_NOTICE, + "Request: Set point - point: %s state: %s", data_point, data_state); if (bidib_switch_point(data_point, data_state)) { - syslog_server(LOG_ERR, "Request: Set point - point: %s state: %s - " - "invalid parameters", data_point, data_state); + syslog_server(LOG_ERR, + "Request: Set point - point: %s state: %s - invalid parameters", + data_point, data_state); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set point - point: %s state: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Set point - point: %s state: %s - finished", data_point, data_state); return OCS_PROCESSED; } @@ -486,8 +495,7 @@ onion_connection_status handler_set_point(void *_, onion_request *req, } } -onion_connection_status handler_set_signal(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_set_signal(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_signal = onion_request_get_post(req, "signal"); @@ -496,14 +504,16 @@ onion_connection_status handler_set_signal(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set signal - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set signal - signal: %s state: %s", + syslog_server(LOG_NOTICE, + "Request: Set signal - signal: %s state: %s", data_signal, data_state); if (bidib_set_signal(data_signal, data_state)) { syslog_server(LOG_ERR, "Request: Set signal - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set signal - signal: %s state: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Set signal - signal: %s state: %s - finished", data_signal, data_state); return OCS_PROCESSED; } @@ -514,8 +524,7 @@ onion_connection_status handler_set_signal(void *_, onion_request *req, } } -onion_connection_status handler_set_peripheral(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_set_peripheral(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_peripheral = onion_request_get_post(req, "peripheral"); @@ -524,16 +533,19 @@ onion_connection_status handler_set_peripheral(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set peripheral - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set peripheral - peripheral: %s state: %s", + syslog_server(LOG_NOTICE, + "Request: Set peripheral - peripheral: %s state: %s", data_peripheral, data_state); if (bidib_set_peripheral(data_peripheral, data_state)) { - syslog_server(LOG_ERR, "Request: Set peripheral - peripheral: %s state: %s - " - "invalid parameters", data_peripheral, data_state); + syslog_server(LOG_ERR, + "Request: Set peripheral - peripheral: %s state: %s - invalid parameters", + data_peripheral, data_state); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set peripheral - peripheral: %s state: %s - " - "finished", data_peripheral, data_state); + syslog_server(LOG_NOTICE, + "Request: Set peripheral - peripheral: %s state: %s - finished", + data_peripheral, data_state); return OCS_PROCESSED; } } @@ -543,8 +555,7 @@ onion_connection_status handler_set_peripheral(void *_, onion_request *req, } } -onion_connection_status handler_get_interlocker(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_interlocker(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get interlocker"); @@ -562,8 +573,7 @@ onion_connection_status handler_get_interlocker(void *_, onion_request *req, } } -onion_connection_status handler_set_interlocker(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_set_interlocker(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_interlocker = onion_request_get_post(req, "interlocker"); @@ -571,23 +581,28 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set interlocker - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set interlocker - interlocker: %s", + syslog_server(LOG_NOTICE, + "Request: Set interlocker - interlocker: %s", selected_interlocker_name->str); if (selected_interlocker_instance != -1) { - syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - another " - "interlocker instance is already set", data_interlocker); + syslog_server(LOG_ERR, + "Request: Set interlocker - interlocker: %s - another " + "interlocker instance is already set", + data_interlocker); return OCS_NOT_IMPLEMENTED; } set_interlocker(data_interlocker); if (selected_interlocker_instance == -1) { - syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - invalid " + syslog_server(LOG_ERR, + "Request: Set interlocker - interlocker: %s - invalid " "parameters or no more interlocker instances can be loaded", data_interlocker); return OCS_NOT_IMPLEMENTED; } else { onion_response_printf(res, "%s", selected_interlocker_name->str); - syslog_server(LOG_NOTICE, "Request: Set interlocker - interlocker: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Set interlocker - interlocker: %s - finished", selected_interlocker_name->str); return OCS_PROCESSED; } @@ -598,8 +613,7 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, } } -onion_connection_status handler_unset_interlocker(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_unset_interlocker(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_interlocker = onion_request_get_post(req, "interlocker"); @@ -610,18 +624,22 @@ onion_connection_status handler_unset_interlocker(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Unset interlocker - interlocker: %s", data_interlocker); if (selected_interlocker_instance == -1) { - syslog_server(LOG_ERR, "Request: Unset interlocker - interlocker: %s - " - "no interlocker instance to unset", data_interlocker); + syslog_server(LOG_ERR, + "Request: Unset interlocker - interlocker: %s - " + "no interlocker instance to unset", + data_interlocker); return OCS_NOT_IMPLEMENTED; } unset_interlocker(data_interlocker); if (selected_interlocker_instance != -1) { - syslog_server(LOG_ERR, "Request: Unset interlocker - interlocker: %s - " - "invalid parameters", data_interlocker); + syslog_server(LOG_ERR, + "Request: Unset interlocker - interlocker: %s - invalid parameters", + data_interlocker); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Unset interlocker - interlocker: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Unset interlocker - interlocker: %s - finished", data_interlocker); return OCS_PROCESSED; } diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index a618c428..f7511f10 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -98,8 +98,7 @@ const int train_get_grab_id(const char *train) { pthread_mutex_lock(&grabbed_trains_mutex); int grab_id = -1; for (size_t i = 0; i < TRAIN_ENGINE_INSTANCE_COUNT_MAX; i++) { - if (grabbed_trains[i].is_valid - && strcmp(grabbed_trains[i].name->str, train) == 0) { + if (grabbed_trains[i].is_valid && strcmp(grabbed_trains[i].name->str, train) == 0) { grab_id = i; break; } @@ -137,8 +136,7 @@ static bool train_position_is_at(const char *train_id, const char *segment) { return false; } -static const bool is_forward_driving(const t_interlocking_route *route, - const char *train_id) { +static const bool is_forward_driving(const t_interlocking_route *route, const char *train_id) { t_bidib_train_position_query train_position_query = bidib_get_train_position(train_id); const bool train_is_left = train_position_query.orientation_is_left; @@ -158,8 +156,8 @@ static const bool is_forward_driving(const t_interlocking_route *route, bidib_free_train_position_query(train_position_query); if (block_id == NULL) { - syslog_server(LOG_ERR, "Is forward driving - train: %s driving: %s - " - "current block of train is unknown", + syslog_server(LOG_ERR, + "Is forward driving - train: %s driving: %s - current block of train is unknown", train_id, is_forwards ? "forwards" : "backwards"); return is_forwards; } @@ -174,12 +172,10 @@ static const bool is_forward_driving(const t_interlocking_route *route, if (strcmp(block_id, reverser_block) == 0) { const bool succ = reversers_state_update(); - t_bidib_reverser_state_query rev_state_query = - bidib_get_reverser_state(reverser_id); + t_bidib_reverser_state_query rev_state_query = bidib_get_reverser_state(reverser_id); // 3. Check the reverser's state if (succ && rev_state_query.available) { - electrically_reversed = - (rev_state_query.data.state_value == BIDIB_REV_EXEC_STATE_ON); + electrically_reversed = (rev_state_query.data.state_value == BIDIB_REV_EXEC_STATE_ON); } break; } @@ -189,7 +185,8 @@ static const bool is_forward_driving(const t_interlocking_route *route, const bool requested_forwards = electrically_reversed ? !is_forwards : is_forwards; - syslog_server(LOG_NOTICE, "Is forward driving - train: %s driving: %s", + syslog_server(LOG_NOTICE, + "Is forward driving - train: %s driving: %s", train_id, is_forwards ? "forwards" : "backwards"); return requested_forwards; } @@ -200,7 +197,8 @@ static bool drive_route_params_valid(const char *train_id, t_interlocking_route return false; } if ((route->train == NULL) || strcmp(train_id, route->train) != 0) { - syslog_server(LOG_WARNING, "Check drive route params - route %s not granted to train %s", + syslog_server(LOG_WARNING, + "Check drive route params - route %s not granted to train %s", route->id, train_id); return false; } @@ -281,7 +279,8 @@ static bool add_signal_info_for_signal(t_route_signal_info_array *signal_info_ar if (signal_id_item == NULL) { syslog_server(LOG_WARNING, "Add signal-info to signal_info_array - " - "skipping NULL signal at index %d of route->signals", i); + "skipping NULL signal at index %d of route->signals", + i); signal_info_array->data_ptr[i] = NULL; signal_info_array->len = i + 1; // Return true as this is not a critical error, i.e. we can still continue with route @@ -292,8 +291,8 @@ static bool add_signal_info_for_signal(t_route_signal_info_array *signal_info_ar signal_info_array->len = i + 1; if (signal_info_array->data_ptr[i] == NULL) { syslog_server(LOG_ERR, - "Add signal-info to signal_info_array - " - "unable to allocate memory for array index %d", i); + "Add signal-info to signal_info_array - unable to allocate memory for array index %d", + i); return false; } @@ -306,8 +305,7 @@ static bool add_signal_info_for_signal(t_route_signal_info_array *signal_info_ar signal_info_array->data_ptr[i]->id = strdup(signal_id_item); if (signal_info_array->data_ptr[i]->id == NULL) { syslog_server(LOG_ERR, - "Add signal-info to signal_info_array - " - "unable to allocate memory for signal id %s", + "Add signal-info to signal_info_array - unable to allocate memory for signal id %s", signal_id_item); return false; } @@ -321,7 +319,8 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin "Get route signal info array - route is NULL or some route details are NULL"); return info_arr; } - syslog_server(LOG_DEBUG, "Get route signal info array - route: %s - start building", + syslog_server(LOG_DEBUG, + "Get route signal info array - route: %s - start building", route->id); // 1. Allocate memory for array of pointers to t_route_signal_info type entities @@ -329,8 +328,8 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin info_arr.data_ptr = (t_route_signal_info**) malloc(sizeof(t_route_signal_info*) * number_of_signal_infos); if (info_arr.data_ptr == NULL) { - syslog_server(LOG_ERR, "Get route signal info array - route: %s - " - "could not allocate memory for array", + syslog_server(LOG_ERR, + "Get route signal info array - route: %s - could not allocate memory for array", route->id); return info_arr; } @@ -349,8 +348,9 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin for (size_t i = 0; i < info_arr.len; ++i) { if (info_arr.data_ptr[i] == NULL) { syslog_server(LOG_WARNING, - "Get route signal info array - " - "skipping NULL signal_info at index %d of info_arr", i); + "Get route signal info array - route: %s - " + "skip NULL signal_info at pos %d of info_arr", + i); continue; } @@ -369,7 +369,8 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin } } } - syslog_server(LOG_DEBUG, "Get route signal info array - route: %s - finished building", + syslog_server(LOG_DEBUG, + "Get route signal info array - route: %s - finished building", route->id); return info_arr; } @@ -579,7 +580,8 @@ static bool drive_route_decoupled_signal_info_array_valid(const char *route_id, * @return true signal updating successful (all signals were passed and set to stop) * @return false signal updating failed */ -static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, t_interlocking_route *route) { +static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, + t_interlocking_route *route) { if (route == NULL || route->id == NULL) { syslog_server(LOG_ERR, "Drive route decoupled - route or route id is NULL"); return false; @@ -692,13 +694,14 @@ static bool drive_route_progressive_stop_signals(const char *train_id, t_interlo // Set signal to the Stop aspect set_signal_stop = false; if (bidib_set_signal(next_signal, signal_stop_aspect)) { - syslog_server(LOG_ERR, "Drive route progressive stop signals - " + syslog_server(LOG_ERR, + "Drive route progressive stop signals - " "unable to set route signal %s to aspect %s", next_signal, signal_stop_aspect); } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Drive route progressive stop signals - " - "set signal: %s to aspect: %s", + syslog_server(LOG_NOTICE, + "Drive route progressive stop signals - set signal: %s to aspect: %s", next_signal, signal_stop_aspect); } } @@ -725,8 +728,10 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } // Driving starts: Driving direction is computed from the route orientation - syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - driving starts (%s)", + syslog_server(LOG_NOTICE, + "Drive route - route: %s train: %s - driving starts (%s)", route->id, train_id, is_automatic ? "automatic" : "manual"); + pthread_mutex_lock(&grabbed_trains_mutex); const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; const char requested_forwards = is_forward_driving(route, train_id); @@ -750,7 +755,9 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a ///TODO: Discuss - why is this re-assignment necessary? Its the same pointer, right? route = get_route(route->id); } - syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - slowing for end of route", + + syslog_server(LOG_NOTICE, + "Drive route - route: %s train: %s - slowing for end of route", train_id, route_id); pthread_mutex_lock(&grabbed_trains_mutex); dyn_containers_set_train_engine_instance_inputs(engine_instance, @@ -768,7 +775,8 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } // Driving stops - syslog_server(LOG_NOTICE, "Drive route - route: %s train: %s - driving stops", + syslog_server(LOG_NOTICE, + "Drive route - route: %s train: %s - driving stops", route->id, train_id); pthread_mutex_lock(&grabbed_trains_mutex); dyn_containers_set_train_engine_instance_inputs(engine_instance, 0, requested_forwards); @@ -792,7 +800,8 @@ static int grab_train(const char *train, const char *engine) { for (size_t i = 0; i < TRAIN_ENGINE_INSTANCE_COUNT_MAX; i++) { if (grabbed_trains[i].is_valid && strcmp(grabbed_trains[i].name->str, train) == 0) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - train already grabbed", + syslog_server(LOG_ERR, + "Grab train - train: %s engine: %s - train already grabbed", train, engine); return -1; } @@ -803,7 +812,8 @@ static int grab_train(const char *train, const char *engine) { while (grabbed_trains[next_grab_id].is_valid) { if (next_grab_id == start) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - all grab ids in use", + syslog_server(LOG_ERR, + "Grab train - train: %s engine: %s - all grab ids in use", train, engine); return -1; } @@ -816,13 +826,15 @@ static int grab_train(const char *train, const char *engine) { strcpy(grabbed_trains[grab_id].track_output, "master"); if (dyn_containers_set_train_engine_instance(&grabbed_trains[grab_id], train, engine)) { pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_ERR, "Grab train - train: %s engine: %s - train engine could not be set", + syslog_server(LOG_ERR, + "Grab train - train: %s engine: %s - train engine could not be set", train, engine); return -1; } grabbed_trains[grab_id].is_valid = true; pthread_mutex_unlock(&grabbed_trains_mutex); - syslog_server(LOG_NOTICE, "Grab train - train: %s engine: %s - train grabbed (grab id %d)", + syslog_server(LOG_NOTICE, + "Grab train - train: %s engine: %s - train grabbed (grab id %d)", train, engine, grab_id); return grab_id; } @@ -833,7 +845,8 @@ bool release_train(int grab_id) { if (grabbed_trains[grab_id].is_valid) { grabbed_trains[grab_id].is_valid = false; dyn_containers_free_train_engine_instance(grabbed_trains[grab_id].dyn_containers_engine_instance); - syslog_server(LOG_NOTICE, "Release train - train: %s grab id: %d - released", + syslog_server(LOG_NOTICE, + "Release train - train: %s grab id: %d - released", grabbed_trains[grab_id].name->str, grab_id); g_string_free(grabbed_trains[grab_id].name, TRUE); grabbed_trains[grab_id].name = NULL; @@ -865,8 +878,7 @@ char *train_id_from_grab_id(int grab_id) { } -onion_connection_status handler_grab_train(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_grab_train(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_train = onion_request_get_post(req, "train"); @@ -876,14 +888,15 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Grab train - invalid parameters"); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s", + syslog_server(LOG_NOTICE, + "Request: Grab train - train: %s engine: %s", data_train, data_engine); t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); if (!train_state_query.known) { bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - " - "unknown train/train state", + syslog_server(LOG_ERR, + "Request: Grab train - train: %s engine: %s - unknown train/train state", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } @@ -891,12 +904,13 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, int grab_id = grab_train(data_train, data_engine); if (grab_id == -1) { - syslog_server(LOG_ERR, "Request: Grab train - train: %s engine: %s - " - "train could not be grabbed", + syslog_server(LOG_ERR, + "Request: Grab train - train: %s engine: %s - train could not be grabbed", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Grab train - train: %s engine: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Grab train - train: %s engine: %s - finished", data_train, data_engine); onion_response_printf(res, "%ld,%d", session_id, grab_id); return OCS_PROCESSED; @@ -907,8 +921,7 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, } } -onion_connection_status handler_release_train(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_release_train(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_session_id = onion_request_get_post(req, "session-id"); @@ -917,8 +930,9 @@ onion_connection_status handler_release_train(void *_, onion_request *req, int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Release train - grab id: %d - " - "invalid session id %s", grab_id, data_session_id); + syslog_server(LOG_ERR, + "Request: Release train - grab id: %d - invalid session id %s", + grab_id, data_session_id); return OCS_NOT_IMPLEMENTED; } @@ -929,7 +943,8 @@ onion_connection_status handler_release_train(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Release train - grab id: %d train id: %s", + syslog_server(LOG_NOTICE, + "Request: Release train - grab id: %d train id: %s", grab_id, train_id); // Set train speed to 0 @@ -949,12 +964,14 @@ onion_connection_status handler_release_train(void *_, onion_request *req, bidib_free_train_state_query(train_state_query); if (!release_train(grab_id)) { - syslog_server(LOG_ERR, "Request: Release train - grab id: %d train: %s - invalid grab id", + syslog_server(LOG_ERR, + "Request: Release train - grab id: %d train: %s - invalid grab id", grab_id, train_id); free(train_id); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Release train - grab id: %d train: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Release train - grab id: %d train: %s - finished", grab_id, train_id); free(train_id); return OCS_PROCESSED; @@ -965,8 +982,7 @@ onion_connection_status handler_release_train(void *_, onion_request *req, } } -onion_connection_status handler_request_route(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_request_route(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_session_id = onion_request_get_post(req, "session-id"); @@ -980,20 +996,23 @@ onion_connection_status handler_request_route(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Request train route - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - " - "invalid session id", data_source_name, data_destination_name); + syslog_server(LOG_ERR, + "Request: Request train route - from: %s to: %s - invalid session id", + data_source_name, data_destination_name); return OCS_NOT_IMPLEMENTED; } // If grab_id is valid, train_id will be, too. char *train_id = train_id_from_grab_id(grab_id); if (train_id == NULL) { - syslog_server(LOG_ERR, "Request: Request train route - from: %s to: %s - invalid grab id", + syslog_server(LOG_ERR, + "Request: Request train route - from: %s to: %s - invalid grab id", data_source_name, data_destination_name); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Request train route - train: %s from: %s to: %s", + syslog_server(LOG_NOTICE, + "Request: Request train route - train: %s from: %s to: %s", train_id, data_source_name, data_destination_name); // Use interlocker to find and grant a route @@ -1001,27 +1020,26 @@ onion_connection_status handler_request_route(void *_, onion_request *req, if (route_id->str != NULL && params_check_is_number(route_id->str)) { // Logging of the granted route ID happens in the grant_route function onion_response_printf(res, "%s", route_id->str); - syslog_server(LOG_NOTICE, "Request: Request train route - " - "train: %s from: %s to: %s - finished", - train_id, route_id->str, data_source_name, - data_destination_name); + syslog_server(LOG_NOTICE, + "Request: Request train route - train: %s from: %s to: %s - finished", + train_id, route_id->str, data_source_name, data_destination_name); } else { onion_response_set_code(res, HTTP_BAD_REQUEST); - syslog_server(LOG_WARNING, "Request: Request train route - " - "train: %s from: %s to: %s - route %s not granted", - train_id, data_source_name, - data_destination_name, route_id->str); + syslog_server(LOG_WARNING, + "Request: Request train route - train: %s from: %s to: %s - route %s not granted", + train_id, data_source_name, data_destination_name, route_id->str); if (strcmp(route_id->str, "no_interlocker") == 0) { onion_response_printf(res, "No interlocker has been selected for use"); } else if (strcmp(route_id->str, "no_routes") == 0) { - onion_response_printf(res, "No routes possible from %s to %s", + onion_response_printf(res, + "No routes possible from %s to %s", data_source_name, data_destination_name); } else if (strcmp(route_id->str, "not_grantable") == 0) { onion_response_printf(res, "Route found conflicts with others"); } else if (strcmp(route_id->str, "not_clear") == 0) { - onion_response_printf(res, "Route found has occupied tracks " - "or source signal is not stop"); + onion_response_printf(res, + "Route found has occupied tracks or source signal is not stop"); } else { onion_response_printf(res, "Route could not be granted (%s)", route_id->str); } @@ -1035,8 +1053,7 @@ onion_connection_status handler_request_route(void *_, onion_request *req, } } -onion_connection_status handler_request_route_id(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_request_route_id(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_session_id = onion_request_get_post(req, "session-id"); @@ -1050,20 +1067,23 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Request train route id - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else if (client_session_id != session_id) { - syslog_server(LOG_ERR, "Request: Request train route id - route: %s - " - "invalid session id", route_id); + syslog_server(LOG_ERR, + "Request: Request train route id - route: %s - invalid session id", + route_id); return OCS_NOT_IMPLEMENTED; } // If grab_id is valid, train_id will be, too. char *train_id = train_id_from_grab_id(grab_id); if (train_id == NULL) { - syslog_server(LOG_ERR, "Request: Request train route id - route: %s - invalid grab id", + syslog_server(LOG_ERR, + "Request: Request train route id - route: %s - invalid grab id", route_id); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Request train route id - train: %s route: %s", + syslog_server(LOG_NOTICE, + "Request: Request train route id - train: %s route: %s", train_id, route_id); // Grant the route ID using an internal algorithm @@ -1071,32 +1091,36 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, if (strcmp(result, "granted") == 0) { onion_response_printf(res, "%s", result); - syslog_server(LOG_NOTICE, "Request: Request train route id - " - "train: %s route: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Request train route id - train: %s route: %s - finished", train_id, route_id); free(train_id); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Request train route id - " - "train: %s route: %s - route not granted (%s)", + syslog_server(LOG_ERR, + "Request: Request train route id - train: %s route: %s - route not granted (%s)", train_id, route_id, result); free(train_id); onion_response_set_code(res, HTTP_BAD_REQUEST); if (strcmp(result, "not_grantable") == 0) { - onion_response_printf(res, "Route %s is not available " - "or has conflicts with others", route_id); + onion_response_printf(res, + "Route %s is not available or has conflicts with others", + route_id); } else if (strcmp(result, "not_clear") == 0) { - onion_response_printf(res, "Route %s has occupied tracks " - "or source signal is not stop", route_id); + onion_response_printf(res, + "Route %s has occupied tracks or source signal is not stop", + route_id); } else { - onion_response_printf(res, "Route %s could not be granted", + onion_response_printf(res, + "Route %s could not be granted", route_id); } return OCS_PROCESSED; } } else { - syslog_server(LOG_ERR, "Request: Request train route id - system not running or wrong request type"); + syslog_server(LOG_ERR, + "Request: Request train route id - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -1112,7 +1136,8 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Driving direction - train id is NULL"); return OCS_NOT_IMPLEMENTED; } else if (strcmp(route_id, "") == 0) { - syslog_server(LOG_ERR, "Request: Driving direction - train: %s - route id empty", + syslog_server(LOG_ERR, + "Request: Driving direction - train: %s - route id empty", data_train); return OCS_NOT_IMPLEMENTED; } @@ -1127,13 +1152,13 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Driving direction - system not running or wrong request type"); + syslog_server(LOG_ERR, + "Request: Driving direction - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } -onion_connection_status handler_drive_route(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_drive_route(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_session_id = onion_request_get_post(req, "session-id"); @@ -1163,7 +1188,8 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Drive route - route: %s train: %s drive mode: %s", + syslog_server(LOG_NOTICE, + "Request: Drive route - route: %s train: %s drive mode: %s", route_id, train_id, mode); const bool is_automatic = (strcmp(mode, "automatic") == 0); @@ -1175,9 +1201,10 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, free(train_id); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Drive route - route: %s train: %s drive mode: %s - " - "driving unsuccessful", + syslog_server(LOG_ERR, + "Request: Drive route - route: %s train: %s drive mode: %s - driving failed", route_id, train_id, mode); + ///TODO: Automatic countermeasures? e.g. set train speed to 0 free(train_id); return OCS_NOT_IMPLEMENTED; } @@ -1210,29 +1237,34 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, syslog_server(LOG_ERR, "Request: Set dcc train speed - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (speed == 999) { - syslog_server(LOG_ERR, "Request: Set dcc train speed - train: %s speed: %d - bad speed", + syslog_server(LOG_ERR, + "Request: Set dcc train speed - train: %s speed: %d - bad speed", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set dcc train speed - train: %s speed: %d - bad track output", + syslog_server(LOG_ERR, + "Request: Set dcc train speed - train: %s speed: %d - bad track output", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Set dcc train speed - train: %s speed: %d", + syslog_server(LOG_NOTICE, + "Request: Set dcc train speed - train: %s speed: %d", grabbed_trains[grab_id].name->str, speed); strcpy(grabbed_trains[grab_id].track_output, data_track_output); const int eng_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; dyn_containers_set_train_engine_instance_inputs(eng_instance, abs(speed), speed >= 0); - syslog_server(LOG_NOTICE, "Request: Set dcc train speed - train: %s speed: %d - finished", + syslog_server(LOG_NOTICE, + "Request: Set dcc train speed - train: %s speed: %d - finished", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Set dcc train speed - system not running or wrong request type"); + syslog_server(LOG_ERR, + "Request: Set dcc train speed - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -1261,37 +1293,41 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, syslog_server(LOG_ERR, "Request: Set calibrated train speed - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (speed == 999) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %d " - "- bad speed", grabbed_trains[grab_id].name->str, speed); + syslog_server(LOG_ERR, + "Request: Set calibrated train speed - train: %s speed: %d - bad speed", + grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %d " - "- bad track output", grabbed_trains[grab_id].name->str, speed); + syslog_server(LOG_ERR, + "Request: Set calibrated train speed - train: %s speed: %d - bad track output", + grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Set calibrated train speed - train: %s speed: %d", + syslog_server(LOG_NOTICE, + "Request: Set calibrated train speed - train: %s speed: %d", grabbed_trains[grab_id].name->str, speed); if (bidib_set_calibrated_train_speed(grabbed_trains[grab_id].name->str, speed, data_track_output)) { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - train: %s speed: %d" - " - bad parameter values", grabbed_trains[grab_id].name->str, speed); + syslog_server(LOG_ERR, + "Request: Set calibrated train speed - train: %s speed: %d - bad parameter values", + grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set calibrated train speed - " - "train: %s speed: %d - finished", + syslog_server(LOG_NOTICE, + "Request: Set calibrated train speed - train: %s speed: %d - finished", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; } } else { - syslog_server(LOG_ERR, "Request: Set calibrated train speed - system not running " - "or wrong request type"); + syslog_server(LOG_ERR, + "Request: Set calibrated train speed - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -1318,30 +1354,34 @@ onion_connection_status handler_set_train_emergency_stop(void *_, syslog_server(LOG_ERR, "Request: Set train emergency stop - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set train emergency stop - train: %s " - "- bad track output", grabbed_trains[grab_id].name->str); + syslog_server(LOG_ERR, + "Request: Set train emergency stop - train: %s - bad track output", + grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s", + syslog_server(LOG_NOTICE, + "Request: Set train emergency stop - train: %s", grabbed_trains[grab_id].name->str); if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, data_track_output)) { - syslog_server(LOG_ERR, "Request: Set train emergency stop - train: %s - bad " - "parameter values", grabbed_trains[grab_id].name->str); + syslog_server(LOG_ERR, + "Request: Set train emergency stop - train: %s - bad parameter values", + grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set train emergency stop - train: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Set train emergency stop - train: %s - finished", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; } } else { - syslog_server(LOG_ERR, "Request: Set train emergency stop - system not running " - "or wrong request type"); + syslog_server(LOG_ERR, + "Request: Set train emergency stop - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -1371,47 +1411,49 @@ onion_connection_status handler_set_train_peripheral(void *_, syslog_server(LOG_ERR, "Request: Set train peripheral - invalid grab id"); return OCS_NOT_IMPLEMENTED; } else if (state == -1) { - syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s - bad state", + syslog_server(LOG_ERR, + "Request: Set train peripheral - train: %s - bad state", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_peripheral == NULL) { - syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s - bad peripheral", + syslog_server(LOG_ERR, + "Request: Set train peripheral - train: %s - bad peripheral", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { - syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s peripheral: %s - " - "bad track output", grabbed_trains[grab_id].name->str, data_peripheral); + syslog_server(LOG_ERR, + "Request: Set train peripheral - train: %s peripheral: %s - bad track output", + grabbed_trains[grab_id].name->str, data_peripheral); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Set train peripheral - train: %s " - "peripheral: %s state: 0x%02x", grabbed_trains[grab_id].name->str, - data_peripheral, state); + syslog_server(LOG_NOTICE, + "Request: Set train peripheral - train: %s peripheral: %s state: 0x%02x", + grabbed_trains[grab_id].name->str, data_peripheral, state); if (bidib_set_train_peripheral(grabbed_trains[grab_id].name->str, data_peripheral, state, data_track_output)) { - syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s " + syslog_server(LOG_ERR, + "Request: Set train peripheral - train: %s " "peripheral: %s state: 0x%02x - bad parameter values", - grabbed_trains[grab_id].name->str, - data_peripheral, state); + grabbed_trains[grab_id].name->str, data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set train peripheral - train: %s " - "peripheral: %s state: 0x%02x - finished", - grabbed_trains[grab_id].name->str, - data_peripheral, state); + syslog_server(LOG_NOTICE, + "Request: Set train peripheral - train: %s peripheral: %s state: 0x%02x - finished", + grabbed_trains[grab_id].name->str, data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; } } else { - syslog_server(LOG_ERR, "Request: Set train peripheral - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Set train peripheral - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index e4a818de..59cb4c29 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -41,8 +41,7 @@ #include "bahn_data_util.h" #include "websocket_uploader/engine_uploader.h" -onion_connection_status handler_get_trains(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_trains(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get available trains"); @@ -59,14 +58,13 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, g_string_free(trains, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get available trains - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get available trains - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } -onion_connection_status handler_get_train_state(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_train_state(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_train = onion_request_get_post(req, "train"); @@ -121,7 +119,8 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, } else { bidib_free_train_position_query(train_position_query); bidib_free_train_state_query(train_state_query); - syslog_server(LOG_ERR, "Request: Get train state - train: %s - invalid train", + syslog_server(LOG_ERR, + "Request: Get train state - train: %s - invalid train", data_train); return OCS_NOT_IMPLEMENTED; } @@ -155,19 +154,21 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re bidib_free_id_list_query(query); onion_response_printf(res, "%s", train_peripherals->str); - syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s - finished", + syslog_server(LOG_INFO, + "Request: Get train peripherals - train: %s - finished", data_train); g_string_free(train_peripherals, true); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get train train peripherals - train: %s - invalid " - "train", data_train); + syslog_server(LOG_ERR, + "Request: Get train train peripherals - train: %s - invalid train", + data_train); return OCS_NOT_IMPLEMENTED; } } else { - syslog_server(LOG_ERR, "Request: Get train peripherals - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get train peripherals - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -228,28 +229,25 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, g_string_free(track_outputs, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get track outputs - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get track outputs - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } -onion_connection_status handler_get_points(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_points(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get points"); GString *points = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_points(); for (size_t i = 0; i < query.length; i++) { - t_bidib_unified_accessory_state_query point_state = - bidib_get_point_state(query.ids[i]); + t_bidib_unified_accessory_state_query point_state = bidib_get_point_state(query.ids[i]); GString *execution_state = g_string_new(""); if (point_state.type == BIDIB_ACCESSORY_BOARD) { g_string_printf(execution_state, "(target state%s reached)", - point_state.board_accessory_state.execution_state ? - " not" : ""); + point_state.board_accessory_state.execution_state ? " not" : ""); } g_string_append_printf(points, "%s%s - state: %s %s", @@ -273,8 +271,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, } } -onion_connection_status handler_get_signals(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_signals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get signals"); @@ -318,25 +315,24 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, if (query.length > 0) { GString *aspects = g_string_new(""); for (size_t i = 0; i < query.length; i++) { - g_string_append_printf(aspects, "%s%s", i != 0 ? ", " : "", - query.ids[i]); + g_string_append_printf(aspects, "%s%s", i != 0 ? ", " : "", query.ids[i]); } bidib_free_id_list_query(query); onion_response_printf(res, "%s", aspects->str); - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - finished", - data_point); + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - finished", data_point); g_string_free(aspects, true); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get point aspects - point: %s - invalid point", + syslog_server(LOG_ERR, + "Request: Get point aspects - point: %s - invalid point", data_point); return OCS_NOT_IMPLEMENTED; } } else { - syslog_server(LOG_ERR, "Request: Get point aspects - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get point aspects - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -361,25 +357,26 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, bidib_free_id_list_query(query); onion_response_printf(res, "%s", aspects->str); - syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s - finished", + syslog_server(LOG_INFO, + "Request: Get signal aspects - signal: %s - finished", data_signal); g_string_free(aspects, true); return OCS_PROCESSED; } else { bidib_free_id_list_query(query); - syslog_server(LOG_ERR, "Request: Get signal aspects - signal: %s - invalid signal", + syslog_server(LOG_ERR, + "Request: Get signal aspects - signal: %s - invalid signal", data_signal); return OCS_NOT_IMPLEMENTED; } } else { - syslog_server(LOG_ERR, "Request: Get signal aspects - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get signal aspects - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } -onion_connection_status handler_get_segments(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_segments(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get segments"); @@ -395,11 +392,9 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, t_bidib_id_query id_query; for (size_t j = 0; j < seg_state_query.data.dcc_address_cnt; j++) { id_query = bidib_get_train_id(seg_state_query.data.dcc_addresses[j]); - if (id_query.known) { - g_string_append_printf(segments, "%s%s", j != 0 ? ", " : "", id_query.id); - } else { - g_string_append_printf(segments, "%s%s", j != 0 ? ", " : "", "unknown"); - } + g_string_append_printf(segments, "%s%s", + j != 0 ? ", " : "", + id_query.known ? id_query.id : "unknown"); bidib_free_id_query(id_query); } } @@ -412,14 +407,12 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, g_string_free(segments, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get segments - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, "Request: Get segments - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } -onion_connection_status handler_get_reversers(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_reversers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get reversers"); @@ -462,14 +455,12 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, g_string_free(reversers, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get reversers - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, "Request: Get reversers - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } -onion_connection_status handler_get_peripherals(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_peripherals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Get peripherals"); @@ -491,8 +482,8 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, g_string_free(peripherals, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get peripherals - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get peripherals - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -516,8 +507,7 @@ onion_connection_status handler_get_verification_url(void *_, onion_request *req build_response_header(res); if ((onion_request_get_flags(req) & OR_METHODS) == OR_GET) { const char *verif_url = get_verifier_url(); - onion_response_printf(res, "verification-url: %s", - verif_url == NULL ? "null" : verif_url); + onion_response_printf(res, "verification-url: %s", verif_url == NULL ? "null" : verif_url); syslog_server(LOG_INFO, "Request: Get verification url - done"); return OCS_PROCESSED; } else { @@ -558,8 +548,8 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, g_string_free(granted_routes, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get granted routes - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get granted routes - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -588,8 +578,7 @@ void sprintf_garray_interlocking_point(GString *output, GArray *garray) { } } -onion_connection_status handler_get_route(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_route(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_route_id = onion_request_get_post(req, "route-id"); @@ -638,8 +627,7 @@ onion_connection_status handler_get_route(void *_, onion_request *req, g_string_free(route_str, true); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get route - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, "Request: Get route - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -800,8 +788,7 @@ onion_connection_status handler_get_debug_info(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Get debug info"); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get debug info - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, "Request: Get debug info - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -841,8 +828,8 @@ onion_connection_status handler_get_debug_info_extra(void *_, onion_request *req syslog_server(LOG_NOTICE, "Request: Get debug info extra"); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Get debug info extra - system not running or " - "wrong request type"); + syslog_server(LOG_ERR, + "Request: Get debug info extra - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index d1a6d43a..e8997ab1 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -97,14 +97,18 @@ bool engine_file_exists(const char filename[]) { DIR *dir_handle = opendir(engine_dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Engine file exists check - directory %s could not be opened", engine_dir); + syslog_server(LOG_ERR, + "Engine file exists check - directory %s could not be opened", + engine_dir); return true; } struct dirent *dir_entry = NULL; while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_NOTICE, "Engine file exists check - engine %s already exists", filename); + syslog_server(LOG_NOTICE, + "Engine file exists check - engine %s already exists", + filename); return true; } } @@ -150,8 +154,9 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s", filename); if (engine_file_exists(filename)) { - syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - " - "engine file already exists", filename); + syslog_server(LOG_ERR, + "Request: Upload engine - engine file: %s - engine file already exists", + filename); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine file already exists"); return OCS_PROCESSED; @@ -165,8 +170,8 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion char final_filepath[PATH_MAX + NAME_MAX]; snprintf(final_filepath, sizeof(final_filepath), "%s/%s", engine_dir, filename); onion_shortcut_rename(temp_filepath, final_filepath); - syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s - " - "copied engine SCCharts file from %s to %s", + syslog_server(LOG_DEBUG, + "Request: Upload engine - engine file: %s - copied engine file from %s to %s", filename, temp_filepath, final_filepath); if (verification_enabled) { @@ -192,15 +197,20 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion if (status == DYNLIB_COMPILE_SCCHARTS_C_ERR || status == DYNLIB_COMPILE_SHARED_SCCHARTS_ERR) { remove_engine_files(libname); - syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - could not be " - "compiled into a C file and then to a shared library", filepath); + syslog_server(LOG_ERR, + "Request: Upload engine - engine file: %s - could not be " + "compiled into a C file and then to a shared library", + filepath); ///TODO: Discuss which code to return onion_response_set_code(res, HTTP_INTERNAL_ERROR); - onion_response_printf(res, "Engine file %s could not be compiled into a C file " - "and then a shared library", filepath); + onion_response_printf(res, + "Engine file %s could not be compiled into a C file " + "and then a shared library", + filepath); return OCS_PROCESSED; } - syslog_server(LOG_DEBUG, "Request: Upload engine - engine file: %s - engine compiled", + syslog_server(LOG_DEBUG, + "Request: Upload engine - engine file: %s - engine compiled", filename); pthread_mutex_lock(&dyn_containers_mutex); @@ -209,8 +219,9 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion pthread_mutex_unlock(&dyn_containers_mutex); remove_engine_files(libname); - syslog_server(LOG_WARNING, "Request: Upload engine - engine file: %s - " - "no available engine slot", filename); + syslog_server(LOG_WARNING, + "Request: Upload engine - engine file: %s - no available engine slot", + filename); ///TODO: Discuss which code to return onion_response_set_code(res, HTTP_INTERNAL_ERROR); onion_response_printf(res, "No available engine slot"); @@ -232,8 +243,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion } // What is being refreshed by this? Shouldn't it just be get_engines? -onion_connection_status handler_refresh_engines(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_refresh_engines(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { syslog_server(LOG_INFO, "Request: Refresh engines"); @@ -248,8 +258,7 @@ onion_connection_status handler_refresh_engines(void *_, onion_request *req, } } -onion_connection_status handler_remove_engine(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_remove_engine(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *name = onion_request_get_post(req, "engine-name"); @@ -262,13 +271,15 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion_response_printf(res, "Engine name is invalid or engine is unremovable"); return OCS_PROCESSED; } + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s", name); + pthread_mutex_lock(&dyn_containers_mutex); const int engine_slot = dyn_containers_get_engine_slot(name); if (engine_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_WARNING, "Request: Remove engine - engine: %s - " - "engine could not be found", + syslog_server(LOG_WARNING, + "Request: Remove engine - engine: %s - engine could not be found", name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s could not be found", name); @@ -278,7 +289,8 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, const bool engine_freed_successfully = dyn_containers_free_engine(engine_slot); pthread_mutex_unlock(&dyn_containers_mutex); if (!engine_freed_successfully) { - syslog_server(LOG_WARNING, "Request: Remove engine - engine: %s - engine is still in use", + syslog_server(LOG_WARNING, + "Request: Remove engine - engine: %s - engine is still in use", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -288,7 +300,8 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, if (!remove_engine_files(name)) { syslog_server(LOG_ERR, - "Request: Remove engine - engine: %s - files could not be removed", name); + "Request: Remove engine - engine: %s - files could not be removed", + name); ///TODO: This is an internal error, should return different response code IMO onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s files could not be removed", name); @@ -309,7 +322,8 @@ bool interlocker_file_exists(const char filename[]) { DIR *dir_handle = opendir(interlocker_dir); if (dir_handle == NULL) { closedir(dir_handle); - syslog_server(LOG_ERR, "Interlocker file exists check - directory %s could not be opened", + syslog_server(LOG_ERR, + "Interlocker file exists check - directory %s could not be opened", interlocker_dir); return true; } @@ -317,7 +331,8 @@ bool interlocker_file_exists(const char filename[]) { while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_NOTICE, "Interlocker file exists check - interlocker %s already exists", + syslog_server(LOG_NOTICE, + "Interlocker file exists check - interlocker %s already exists", filename); return true; } @@ -359,8 +374,9 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, syslog_server(LOG_NOTICE, "Request: Upload interlocker - interlocker file: %s" , filename); if (interlocker_file_exists(filename)) { - syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s -" - " file already exists", filename); + syslog_server(LOG_ERR, + "Request: Upload interlocker - interlocker file: %s - file already exists", + filename); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Interlocker file already exists"); @@ -375,7 +391,8 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, char final_filepath[PATH_MAX + NAME_MAX]; snprintf(final_filepath, sizeof(final_filepath), "%s/%s", interlocker_dir, filename); onion_shortcut_rename(temp_filepath, final_filepath); - syslog_server(LOG_DEBUG, "Request: Upload interlocker - interlocker file: %s - " + syslog_server(LOG_DEBUG, + "Request: Upload interlocker - interlocker file: %s - " "copied interlocker BahnDSL file from %s to %s", filename, temp_filepath, final_filepath); @@ -383,16 +400,19 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, remove_file_extension(filepath, final_filepath, ".bahn"); const dynlib_status status = dynlib_compile_bahndsl(filepath, interlocker_dir); if (status == DYNLIB_COMPILE_SHARED_BAHNDSL_ERR) { - syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s - " - "interlocker could not be compiled", filename); + syslog_server(LOG_ERR, + "Request: Upload interlocker - interlocker file: %s - " + "interlocker could not be compiled", + filename); remove_interlocker_files(libname); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Interlocker file %s could not be compiled", filepath); return OCS_PROCESSED; } - syslog_server(LOG_DEBUG, "Request: Upload interlocker - interlocker file: %s - " - "interlocker compiled", filename); + syslog_server(LOG_DEBUG, + "Request: Upload interlocker - interlocker file: %s - interlocker compiled", + filename); pthread_mutex_lock(&dyn_containers_mutex); const int interlocker_slot = dyn_containers_get_free_interlocker_slot(); @@ -400,8 +420,10 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, pthread_mutex_unlock(&dyn_containers_mutex); remove_interlocker_files(libname); - syslog_server(LOG_WARNING, "Request: Upload interlocker - interlocker file: %s - " - "no available interlocker slot", filename); + syslog_server(LOG_WARNING, + "Request: Upload interlocker - interlocker file: %s - " + "no available interlocker slot", + filename); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "No available interlocker slot"); @@ -411,12 +433,13 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, snprintf(filepath, sizeof(filepath), "%s/%s", interlocker_dir, libname); dyn_containers_set_interlocker(interlocker_slot, filepath); pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_NOTICE, "Request: Upload interlocker - interlocker file: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Upload interlocker - interlocker file: %s - finished", filename); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Upload interlocker - system not running " - "or wrong request type"); + syslog_server(LOG_ERR, + "Request: Upload interlocker - system not running or wrong request type"); onion_response_printf(res, "System not running or wrong request type"); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -436,8 +459,8 @@ onion_connection_status handler_refresh_interlockers(void *_, onion_request *req syslog_server(LOG_INFO, "Request: Refresh interlockers - finished"); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Refresh interlockers - system not running " - "or wrong request type"); + syslog_server(LOG_ERR, + "Request: Refresh interlockers - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -448,7 +471,8 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *name = onion_request_get_post(req, "interlocker-name"); if (name == NULL || plugin_is_unremovable(name)) { - syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker name is invalid " + syslog_server(LOG_ERR, + "Request: Remove interlocker - interlocker name is invalid " "or interlocker is unremovable"); onion_response_printf(res, "Interlocker name is invalid or interlocker is unremovable"); @@ -461,8 +485,10 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, const int interlocker_slot = dyn_containers_get_interlocker_slot(name); if (interlocker_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " - "interlocker could not be found", name); + syslog_server(LOG_ERR, + "Request: Remove interlocker - interlocker: %s - " + "interlocker could not be found", + name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Interlocker %s could not be found", name); @@ -472,8 +498,10 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, const bool interlocker_freed_successfully = dyn_containers_free_interlocker(interlocker_slot); pthread_mutex_unlock(&dyn_containers_mutex); if (!interlocker_freed_successfully) { - syslog_server(LOG_WARNING, "Request: Remove interlocker - interlocker: %s - " - "interlocker is still in use", name); + syslog_server(LOG_WARNING, + "Request: Remove interlocker - interlocker: %s - " + "interlocker is still in use", + name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Interlocker %s is still in use", name); @@ -481,19 +509,22 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, } if (!remove_interlocker_files(name)) { - syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " - "files could not be removed", name); + syslog_server(LOG_ERR, + "Request: Remove interlocker - interlocker: %s - " + "files could not be removed", + name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Interlocker %s files could not be removed", name); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - finished", + syslog_server(LOG_NOTICE, + "Request: Remove interlocker - interlocker: %s - finished", name); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Remove interlocker - system not running " - "or wrong request type"); + syslog_server(LOG_ERR, + "Request: Remove interlocker - system not running or wrong request type"); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "System not running or wrong request type"); diff --git a/server/src/server.c b/server/src/server.c index 7d7e98f7..02d300c9 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -65,8 +65,7 @@ void syslog_server(int priority, const char *format, ...) { } void build_response_header(onion_response *res) { - onion_response_set_header(res, "Access-Control-Allow-Origin", - "*"); + onion_response_set_header(res, "Access-Control-Allow-Origin", "*"); onion_response_set_header(res, "Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept"); onion_response_set_header(res, "Access-Control-Allow-Methods", @@ -81,16 +80,17 @@ static onion_connection_status handler_assets(void *_, onion_request *req, const char local_path[] = "../src/assets/"; char *global_path = realpath(local_path, NULL); if (!global_path) { - syslog_server(LOG_ERR, "Onion - Cannot calculate the global path of the given directory (%s)", + syslog_server(LOG_ERR, + "Onion - Cannot calculate the global path of the given directory (%s)", local_path); - ONION_ERROR("Cannot calculate the global path of the given directory (%s)", - local_path); + ONION_ERROR("Cannot calculate the global path of the given directory (%s)", local_path); return OCS_NOT_IMPLEMENTED; } struct stat st; if (stat(global_path, &st) != 0) { - syslog_server(LOG_ERR, "Onion - Cannot access to the exported directory/file (%s)", + syslog_server(LOG_ERR, + "Onion - Cannot access to the exported directory/file (%s)", global_path); ONION_ERROR("Cannot access to the exported directory/file (%s)", global_path); onion_low_free(global_path); diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index d092e9f5..2abea01a 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -170,8 +170,8 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data char *verif_success = strstr(ws_msg->data.ptr, msg_type_result_status_true_sig); if (verif_success) { - syslog_server(LOG_INFO, "Websocket upload engine: Verification Server finished," - " verification succeeded"); + syslog_server(LOG_INFO, + "Websocket upload engine: Verification Server done, verification succeeded"); ws_data_ptr->success = true; ws_data_ptr->finished = true; } else { @@ -180,12 +180,14 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data char *status_false_in_reply = strstr(ws_msg->data.ptr, msg_type_result_status_false_sig); if (!status_false_in_reply) { // No 'status' field in answer with either true or false - syslog_server(LOG_INFO, "Websocket upload engine: Verification Server finished," + syslog_server(LOG_INFO, + "Websocket upload engine: Verification Server done," " verification status not specified"); - ws_data_ptr->message = g_string_new("Verification finished but no result status known."); + ws_data_ptr->message = g_string_new("Verification done but no result status known."); } else { // Ordinary failure. Save server's reply (to forward to client later on) - syslog_server(LOG_INFO, "Websocket upload engine: Verification Server finished, " + syslog_server(LOG_INFO, + "Websocket upload engine: Verification Server done, " "verification did not succeed"); ws_data_ptr->message = g_string_new(""); g_string_append_printf(ws_data_ptr->message,"%s", ws_msg->data.ptr); @@ -356,7 +358,8 @@ void set_verifier_url(const char *upd_verifier_url) { } verifier_url = strdup(upd_verifier_url); syslog_server(LOG_NOTICE, - "Websocket set verifier url: verifier URL set to: %s", verifier_url); + "Websocket set verifier url: verifier URL set to: %s", + verifier_url); } From 2eb3304106beaf8444cbefb845967ebabe97c0b4 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 14:39:40 +0100 Subject: [PATCH 17/45] removed unnecessary log in upload dupl check --- server/src/handler_upload.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index e8997ab1..167a602c 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -331,9 +331,6 @@ bool interlocker_file_exists(const char filename[]) { while ((dir_entry = readdir(dir_handle)) != NULL) { if (strcmp(dir_entry->d_name, filename) == 0) { closedir(dir_handle); - syslog_server(LOG_NOTICE, - "Interlocker file exists check - interlocker %s already exists", - filename); return true; } } From 8e2d9474b47e9a34a2248d502a8b39646c04ffb7 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 14:42:34 +0100 Subject: [PATCH 18/45] merged some lines that stay < 100 --- server/src/handler_monitor.c | 3 +-- server/src/server.c | 12 ++++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 59cb4c29..98f5a611 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -775,8 +775,7 @@ GString *debug_info(void) { return info_str; } -onion_connection_status handler_get_debug_info(void *_, onion_request *req, - onion_response *res) { +onion_connection_status handler_get_debug_info(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { GString *debug_info_str = debug_info(); diff --git a/server/src/server.c b/server/src/server.c index 02d300c9..c816beeb 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -72,8 +72,7 @@ void build_response_header(onion_response *res) { "POST, GET, PUT, DELETE, OPTIONS"); } -static onion_connection_status handler_assets(void *_, onion_request *req, - onion_response *res) { +static onion_connection_status handler_assets(void *_, onion_request *req, onion_response *res) { build_response_header(res); onion_response_set_header(res, "Cache-Control", "max-age=43200"); @@ -179,12 +178,9 @@ int main(int argc, char **argv) { onion_url_add(urls, "driver/direction", handler_driving_direction); onion_url_add(urls, "driver/drive-route", handler_drive_route); onion_url_add(urls, "driver/set-dcc-train-speed", handler_set_dcc_train_speed); - onion_url_add(urls, "driver/set-calibrated-train-speed", - handler_set_calibrated_train_speed); - onion_url_add(urls, "driver/set-train-emergency-stop", - handler_set_train_emergency_stop); - onion_url_add(urls, "driver/set-train-peripheral", - handler_set_train_peripheral); + onion_url_add(urls, "driver/set-calibrated-train-speed", handler_set_calibrated_train_speed); + onion_url_add(urls, "driver/set-train-emergency-stop", handler_set_train_emergency_stop); + onion_url_add(urls, "driver/set-train-peripheral", handler_set_train_peripheral); // --- upload functions --- onion_url_add(urls, "upload/engine", handler_upload_engine); From d87853eb420d32adacad8cbae701a90327aefbd4 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 14:45:41 +0100 Subject: [PATCH 19/45] moved train time step constant to header to resolve multi-definition --- server/src/handler_admin.c | 3 +-- server/src/handler_driver.c | 3 --- server/src/handler_driver.h | 3 +++ 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 729d6451..cf0c4747 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -266,8 +266,7 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); while (train_state_query.data.set_speed_step != 0) { bidib_free_train_state_query(train_state_query); - ///TODO: Change to TRAIN_DRIVE_TIME_STEP like in handler_driver - usleep(10000); // 0.01 s (TRAIN_DRIVE_TIME_STEP) + usleep(TRAIN_DRIVE_TIME_STEP); // 0.01 s train_state_query = bidib_get_train_state(data_train); } bidib_free_train_state_query(train_state_query); diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index f7511f10..34280d95 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -42,9 +42,6 @@ #include "interlocking.h" #include "bahn_data_util.h" -#define MICROSECOND 1 -#define TRAIN_DRIVE_TIME_STEP 10000 * MICROSECOND // 0.01 seconds - pthread_mutex_t grabbed_trains_mutex = PTHREAD_MUTEX_INITIALIZER; static unsigned int DRIVING_SPEED_SLOW = 40; diff --git a/server/src/handler_driver.h b/server/src/handler_driver.h index 487fac72..b57c6d8b 100644 --- a/server/src/handler_driver.h +++ b/server/src/handler_driver.h @@ -34,6 +34,9 @@ #define TRAIN_ENGINE_COUNT_MAX 4 #define TRAIN_ENGINE_INSTANCE_COUNT_MAX 5 +#define MICROSECOND 1 +#define TRAIN_DRIVE_TIME_STEP 10000 * MICROSECOND // 0.01 seconds + extern pthread_mutex_t grabbed_trains_mutex; typedef struct { From e91ebe4e3c0a3507fc07dd5cd0f9ca8adff899c8 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 14:50:48 +0100 Subject: [PATCH 20/45] Add missing va_end --- server/src/server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/server.c b/server/src/server.c index c816beeb..a29a6fc8 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -62,6 +62,7 @@ void syslog_server(int priority, const char *format, ...) { vsnprintf(string, 1024, format, arg); syslog(priority, "server: %s", string); + va_end(arg); } void build_response_header(onion_response *res) { From ed042ad85865c8a965bf4e3f247f214062b7989d Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 14 Nov 2023 15:05:51 +0100 Subject: [PATCH 21/45] Updated Readme --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 99cec3e1..a61802cb 100644 --- a/README.md +++ b/README.md @@ -215,13 +215,15 @@ is not the same as the one at the server * If the user issues `swtbahn config` ### Logging Format Notes -We try to use a consistent logging format in all request handlers. Description: -- Before the first log, validation of request data and server state is performed. If validation fails, a log is printed that starts with "Request: ", followed by a phrase that describes the request name. Then a " - " and afterwards the reason for why the validation/state check failed. -- If validation has passed, a log is made that signifies the "start" of processing the request. This consists of: "Request: (request name) - (key parameters of the request)". For example, if we request to release a certain route, it looks like this: "Request: Release route - route: %s", where "%s" is replaced by the route id that is to be released. -- During request processing, after the "start" log, there may be further logs. These start in the same way, but may have more parameter data. And after the parameters, there can be a " - " followed by a string that describes what is currently happening. If an error occurs, the log level is LOG_ERR and that is the last log message sent by this request handler (rule: whenever LOG_ERR log is logged by request handler, that is the last log it will make before returning). -- At the "end" of the request processing, if there is no error, the "start" log is repeated, but now with " - finished" at the end. -- Experimental Feature/To be discussed: Some (few) request handlers will not log a separate "start" and "finish" log. In that case, they log only one log, which ends on " - done". -- Some handlers will log on LOG_INFO instead of LOG_NOTICE, primarily trivial "getters", e.g. in the monitor +We try to use a consistent logging format in all request handlers. Description of the patter for the request handlers: +1. Parse form data. +2. Validate form data. If validation fails: make a log on ERROR level and return. +3. Make a log on NOTICE or INFO level that represents the start of processing. +4. Process request. If processing causes an error, (try to) make a log on the ERROR level and return. +5. Processing concluded. Make a log to indicate this (or failed, respectively), by printing the "start of processing" log from step 3. again, but with " - finished" at the end. + +For request handlers that "just" return information (getters), the log level in steps 3 and 5 are INFO. +For request handlers that barely do any "processing" at all; e.g. where only one boolean is updated, they do not have a separate log for start and end of processing. They just make one log which ends on "done". The above description may be a bit confusing, so lets look at a concrete example. Say, we want to change the state of point "point10" to the state "normal". We send a request, and from the request handler we will then see the following logs: 1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" From e8da5f6b064c16babd2c09b37979c1c877325702 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Wed, 15 Nov 2023 10:37:47 +0100 Subject: [PATCH 22/45] improve name and log consistency for admin handler --- server/src/handler_admin.c | 46 ++++++++++--------- server/src/handler_admin.h | 2 +- server/src/server.c | 2 +- .../src/websocket_uploader/engine_uploader.c | 7 +-- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index cf0c4747..699c1938 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -75,34 +75,35 @@ static void *poll_bidib_messages(void *_) { } // Must be called with start_stop_mutex already acquired -static bool start_bidib(void) { +static bool startup_server(void) { const int err_serial = bidib_start_serial(serial_device, config_directory, 0); if (err_serial) { - syslog_server(LOG_ERR, "Start - Could not start BiDiB serial connection"); + syslog_server(LOG_ERR, "Startup server - Could not start BiDiB serial connection"); return false; } const int succ_clear_dir = clear_engine_dir() + clear_interlocker_dir(); if (!succ_clear_dir) { - syslog_server(LOG_ERR, "Start - Could not clear the engine and interlocker directories"); + syslog_server(LOG_ERR, + "Startup server - Could not clear the engine and interlocker directories"); return false; } const int succ_config = bahn_data_util_initialise_config(config_directory); if (!succ_config) { - syslog_server(LOG_ERR, "Start - Could not initialise interlocking tables"); + syslog_server(LOG_ERR, "Startup server - Could not initialise interlocking tables"); return false; } const int err_dyn_containers = dyn_containers_start(); if (err_dyn_containers) { - syslog_server(LOG_ERR, "Start - Could not start shared library containers"); + syslog_server(LOG_ERR, "Startup server - Could not start shared library containers"); return false; } const int err_interlocker = load_default_interlocker_instance(); if (err_interlocker) { - syslog_server(LOG_ERR, "Start - Could not load default interlocker instance"); + syslog_server(LOG_ERR, "Startup server - Could not load default interlocker instance"); return false; } @@ -111,21 +112,21 @@ static bool start_bidib(void) { return true; } -void stop_bidib(void) { +void shutdown_server(void) { session_id = 0; - syslog_server(LOG_NOTICE, "Stop Server"); - syslog_server(LOG_INFO, "Stop Server - Will cease printing to log once stop is complete"); + syslog_server(LOG_NOTICE, "Shutdown server"); + syslog_server(LOG_INFO, "Shutdown server - Will cease printing to log once stop is complete"); release_all_grabbed_trains(); - syslog_server(LOG_INFO, "Stop Server - Released all grabbed trains"); + syslog_server(LOG_INFO, "Shutdown server - Released all grabbed trains"); release_all_interlockers(); - syslog_server(LOG_INFO, "Stop Server - Released all interlockers"); + syslog_server(LOG_INFO, "Shutdown server - Released all interlockers"); running = false; dyn_containers_stop(); - syslog_server(LOG_INFO, "Stop Server - Stopped dyn-containers"); + syslog_server(LOG_INFO, "Shutdown server - Stopped dyn-containers"); bahn_data_util_free_config(); pthread_join(poll_bidib_messages_thread, NULL); syslog_server(LOG_NOTICE, - "Stop Server - Bidib message poll thread joined, now stopping bidib and closing log"); + "Shutdown server - Bidib message poll thread joined, now stopping bidib and closing log"); bidib_stop(); } @@ -139,19 +140,21 @@ onion_connection_status handler_startup(void *_, onion_request *req, onion_respo openlog("swtbahn", 0, LOG_LOCAL0); session_id = time(NULL); - syslog_server(LOG_NOTICE, "Request: Start - session id: %ld", session_id); + syslog_server(LOG_NOTICE, "Request: Startup server - session id: %ld", session_id); - if (start_bidib()) { + if (startup_server()) { retval = OCS_PROCESSED; - syslog_server(LOG_NOTICE, "Request: Start - session id: %ld - finished", session_id); + syslog_server(LOG_NOTICE, + "Request: Startup server - session id: %ld - finished", + session_id); } else { syslog_server(LOG_ERR, - "Request: Start - session id: %ld - unable to start bidib", + "Request: Startup server - session id: %ld - unable to start bidib", session_id); } } else { syslog_server(LOG_ERR, - "Request: Start - BiDiB system is already running or wrong request type"); + "Request: Startup server - BiDiB system is already running or wrong request type"); } pthread_mutex_unlock(&start_stop_mutex); @@ -164,12 +167,13 @@ onion_connection_status handler_shutdown(void *_, onion_request *req, onion_resp pthread_mutex_lock(&start_stop_mutex); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_NOTICE, "Request: Stop"); - stop_bidib(); + syslog_server(LOG_NOTICE, "Request: Shutdown server"); + shutdown_server(); // Can't log "finished" here since bidib closes the syslog when stopping retval = OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Stop - BiDiB system is not running or wrong request type"); + syslog_server(LOG_ERR, + "Request: Shutdown server - BiDiB system is not running or wrong request type"); retval = OCS_NOT_IMPLEMENTED; } pthread_mutex_unlock(&start_stop_mutex); diff --git a/server/src/handler_admin.h b/server/src/handler_admin.h index 6158555a..8209df52 100644 --- a/server/src/handler_admin.h +++ b/server/src/handler_admin.h @@ -30,7 +30,7 @@ #include -void stop_bidib(void); +void shutdown_server(void); onion_connection_status handler_startup(void *_, onion_request *req, onion_response *res); diff --git a/server/src/server.c b/server/src/server.c index a29a6fc8..27110201 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -215,7 +215,7 @@ int main(int argc, char **argv) { onion_listen(o); onion_free(o); if (running) { - stop_bidib(); + shutdown_server(); } cache_verifier_url(); free_verifier_url(); diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index 2abea01a..67ce3035 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -348,8 +348,7 @@ verif_result verify_engine_model(const char* f_filepath) { void set_verifier_url(const char *upd_verifier_url) { if (upd_verifier_url == NULL) { - syslog_server(LOG_WARNING, - "Websocket set verifier url: proposed URL is NULL, URL not updated"); + syslog_server(LOG_WARNING, "Set verification url - proposed URL is NULL, URL not updated"); return; } if (verifier_url != NULL) { @@ -357,9 +356,7 @@ void set_verifier_url(const char *upd_verifier_url) { verifier_url = NULL; } verifier_url = strdup(upd_verifier_url); - syslog_server(LOG_NOTICE, - "Websocket set verifier url: verifier URL set to: %s", - verifier_url); + syslog_server(LOG_NOTICE, "Set verification url - verifier URL set to: %s", verifier_url); } From dc421908ba48a03d23a964bcfd6e7cb289ae6256 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Wed, 15 Nov 2023 10:54:31 +0100 Subject: [PATCH 23/45] further name and log consistency improvements --- server/src/handler_controller.c | 2 +- server/src/handler_driver.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 601ec5eb..898b207d 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -63,7 +63,7 @@ const int set_interlocker(const char *interlocker_name) { if (!interlocker_instances[i].is_valid) { if (dyn_containers_set_interlocker_instance(&interlocker_instances[i], interlocker_name)) { syslog_server(LOG_ERR, - "Set Interlocker - interlocker %s could not be used in instance %d", + "Set interlocker - interlocker: %s - could not be used in instance %d", interlocker_name, i); } else { selected_interlocker_name = g_string_new(interlocker_name); diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 34280d95..ae385848 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -843,8 +843,8 @@ bool release_train(int grab_id) { grabbed_trains[grab_id].is_valid = false; dyn_containers_free_train_engine_instance(grabbed_trains[grab_id].dyn_containers_engine_instance); syslog_server(LOG_NOTICE, - "Release train - train: %s grab id: %d - released", - grabbed_trains[grab_id].name->str, grab_id); + "Release train - grab id: %d train: %s - released", + grab_id, grabbed_trains[grab_id].name->str); g_string_free(grabbed_trains[grab_id].name, TRUE); grabbed_trains[grab_id].name = NULL; success = true; @@ -1045,11 +1045,14 @@ onion_connection_status handler_request_route(void *_, onion_request *req, onion free(train_id); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Request train route - system not running or wrong request type"); + syslog_server(LOG_ERR, + "Request: Request train route - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } +///TODO: Discuss - maybe this should be called "request_route_by_id", to distinguish it from +// just getting a route id of/for something (similar to a monitor endpoint). onion_connection_status handler_request_route_id(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { From c9118698a93fcb1aee61550cb9d9bc97a30724a3 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Thu, 16 Nov 2023 17:16:21 +0100 Subject: [PATCH 24/45] Fix issues mentioned in PR --- server/src/handler_controller.c | 4 ++-- server/src/handler_driver.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 898b207d..442b7f66 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -583,7 +583,7 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, oni } else { syslog_server(LOG_NOTICE, "Request: Set interlocker - interlocker: %s", - selected_interlocker_name->str); + data_interlocker); if (selected_interlocker_instance != -1) { syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - another " @@ -603,7 +603,7 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, oni onion_response_printf(res, "%s", selected_interlocker_name->str); syslog_server(LOG_NOTICE, "Request: Set interlocker - interlocker: %s - finished", - selected_interlocker_name->str); + data_interlocker); return OCS_PROCESSED; } } diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index ae385848..43352be7 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -941,7 +941,7 @@ onion_connection_status handler_release_train(void *_, onion_request *req, onion } syslog_server(LOG_NOTICE, - "Request: Release train - grab id: %d train id: %s", + "Request: Release train - grab id: %d train: %s", grab_id, train_id); // Set train speed to 0 @@ -1019,7 +1019,7 @@ onion_connection_status handler_request_route(void *_, onion_request *req, onion onion_response_printf(res, "%s", route_id->str); syslog_server(LOG_NOTICE, "Request: Request train route - train: %s from: %s to: %s - finished", - train_id, route_id->str, data_source_name, data_destination_name); + train_id, data_source_name, data_destination_name); } else { onion_response_set_code(res, HTTP_BAD_REQUEST); syslog_server(LOG_WARNING, From 4dc17b9ccb8d72ffc68db52b36d823679b0fd644 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Thu, 16 Nov 2023 17:49:32 +0100 Subject: [PATCH 25/45] rephrase misleading log in dyn containers interface --- server/src/dyn_containers_interface.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/src/dyn_containers_interface.c b/server/src/dyn_containers_interface.c index e56c3c74..90fe9672 100644 --- a/server/src/dyn_containers_interface.c +++ b/server/src/dyn_containers_interface.c @@ -146,11 +146,13 @@ static void *dyn_containers_actuate(void *_) { ? engine_instance->output_nominal_speed : -engine_instance->output_nominal_speed, grabbed_trains[i].track_output)) { - syslog_server(LOG_ERR, "Request: Set train speed - train: %s: bad parameter values", + syslog_server(LOG_ERR, + "Dyn containers actuate - train: %s - bad parameter values when setting train speed", grabbed_trains[i].name->str); } else { bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set train speed - train: %s speed: %d", + syslog_server(LOG_NOTICE, + "Dyn containers actuate - train: %s speed: %d - set train speed", grabbed_trains[i].name->str, engine_instance->output_nominal_forwards ? engine_instance->output_nominal_speed From 81e3e5bb7e36e67b570b56d01476bfac39691058 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Wed, 22 Nov 2023 14:53:38 +0100 Subject: [PATCH 26/45] remove unnecessary route pointer lookup --- server/src/handler_driver.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 43352be7..935981cc 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -749,8 +749,6 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a while (running && !train_position_is_at(train_id, pre_dest_segment) && drive_route_params_valid(train_id, route)) { usleep(TRAIN_DRIVE_TIME_STEP); - ///TODO: Discuss - why is this re-assignment necessary? Its the same pointer, right? - route = get_route(route->id); } syslog_server(LOG_NOTICE, @@ -768,7 +766,6 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a while (running && result && !is_segment_occupied(dest_segment) && drive_route_params_valid(train_id, route)) { usleep(TRAIN_DRIVE_TIME_STEP); - route = get_route(route->id); } // Driving stops From ddc4882adb2c55f1848e5ca2202a529a02c4c9c8 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 25 Nov 2023 10:53:34 +0100 Subject: [PATCH 27/45] readme adjustments after review --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a61802cb..61a67567 100644 --- a/README.md +++ b/README.md @@ -214,13 +214,13 @@ is not the same as the one at the server * If the user issues `swtbahn admin shutdown` and the system was running * If the user issues `swtbahn config` -### Logging Format Notes -We try to use a consistent logging format in all request handlers. Description of the patter for the request handlers: +## Logging Format Notes +We try to use a consistent logging format in all request handlers. General workflow of how request handlers generate log messages: 1. Parse form data. -2. Validate form data. If validation fails: make a log on ERROR level and return. +2. Validate form data. If validation fails, make a log on `ERROR` level and stop processing. 3. Make a log on NOTICE or INFO level that represents the start of processing. -4. Process request. If processing causes an error, (try to) make a log on the ERROR level and return. -5. Processing concluded. Make a log to indicate this (or failed, respectively), by printing the "start of processing" log from step 3. again, but with " - finished" at the end. +4. Process request. If processing causes an error, (try to) make a log on the `ERROR` level and stop processing. +5. Processing concluded. Make a log to indicate this, by printing the log message of Step 3 again and appending ` - finished` to it. For request handlers that "just" return information (getters), the log level in steps 3 and 5 are INFO. For request handlers that barely do any "processing" at all; e.g. where only one boolean is updated, they do not have a separate log for start and end of processing. They just make one log which ends on "done". From 72629b3eef92abbccc2bf27738dd5bb9bacd0d77 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 25 Nov 2023 11:02:51 +0100 Subject: [PATCH 28/45] part of review comments addressed --- server/src/handler_upload.c | 18 ++++++++---------- server/src/handler_upload.h | 4 ++-- server/src/interlocking.c | 2 +- server/src/server.c | 8 ++++---- .../src/websocket_uploader/engine_uploader.c | 2 +- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index 167a602c..db65f2dc 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -242,18 +242,17 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion } } -// What is being refreshed by this? Shouldn't it just be get_engines? -onion_connection_status handler_refresh_engines(void *_, onion_request *req, onion_response *res) { +onion_connection_status handler_get_engines(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Refresh engines"); + syslog_server(LOG_INFO, "Request: Get engines"); GString *train_engines = dyn_containers_get_train_engines(); onion_response_printf(res, "%s", train_engines->str); g_string_free(train_engines, true); - syslog_server(LOG_INFO, "Request: Refresh engines - finished"); + syslog_server(LOG_INFO, "Request: Get engines - finished"); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Refresh engines - system not running or wrong request type"); + syslog_server(LOG_ERR, "Request: Get engines - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } @@ -444,20 +443,19 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, } } -// What is being refreshed by this? Shouldn't it just be get_interlockers? -onion_connection_status handler_refresh_interlockers(void *_, onion_request *req, +onion_connection_status handler_get_interlockers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Refresh interlockers"); + syslog_server(LOG_INFO, "Request: Get interlockers"); GString *interlockers = dyn_containers_get_interlockers(); onion_response_printf(res, "%s", interlockers->str); g_string_free(interlockers, true); - syslog_server(LOG_INFO, "Request: Refresh interlockers - finished"); + syslog_server(LOG_INFO, "Request: Get interlockers - finished"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, - "Request: Refresh interlockers - system not running or wrong request type"); + "Request: Get interlockers - system not running or wrong request type"); return OCS_NOT_IMPLEMENTED; } } diff --git a/server/src/handler_upload.h b/server/src/handler_upload.h index 953267b9..a3bcc28e 100644 --- a/server/src/handler_upload.h +++ b/server/src/handler_upload.h @@ -40,7 +40,7 @@ bool clear_interlocker_dir(void); onion_connection_status handler_upload_engine(void *_, onion_request *req, onion_response *res); -onion_connection_status handler_refresh_engines(void *_, onion_request *req, +onion_connection_status handler_get_engines(void *_, onion_request *req, onion_response *res); onion_connection_status handler_remove_engine(void *_, onion_request *req, @@ -49,7 +49,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion_connection_status handler_upload_interlocker(void *_, onion_request *req, onion_response *res); -onion_connection_status handler_refresh_interlockers(void *_, onion_request *req, +onion_connection_status handler_get_interlockers(void *_, onion_request *req, onion_response *res); onion_connection_status handler_remove_interlocker(void *_, onion_request *req, diff --git a/server/src/interlocking.c b/server/src/interlocking.c index f3773aba..bef6847c 100644 --- a/server/src/interlocking.c +++ b/server/src/interlocking.c @@ -80,7 +80,7 @@ void create_interlocking_hashtable(void) { } } - syslog_server(LOG_NOTICE, "Interlocking create hash table - successful"); + syslog_server(LOG_NOTICE, "Interlocking create hash table - done"); } bool interlocking_table_initialise(const char *config_dir) { diff --git a/server/src/server.c b/server/src/server.c index 27110201..af75327e 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -90,9 +90,9 @@ static onion_connection_status handler_assets(void *_, onion_request *req, onion struct stat st; if (stat(global_path, &st) != 0) { syslog_server(LOG_ERR, - "Onion - Cannot access to the exported directory/file (%s)", + "Onion - Cannot access the exported directory/file (%s)", global_path); - ONION_ERROR("Cannot access to the exported directory/file (%s)", global_path); + ONION_ERROR("Cannot access the exported directory/file (%s)", global_path); onion_low_free(global_path); return OCS_NOT_IMPLEMENTED; } @@ -185,10 +185,10 @@ int main(int argc, char **argv) { // --- upload functions --- onion_url_add(urls, "upload/engine", handler_upload_engine); - onion_url_add(urls, "upload/refresh-engines", handler_refresh_engines); + onion_url_add(urls, "upload/refresh-engines", handler_get_engines); onion_url_add(urls, "upload/remove-engine", handler_remove_engine); onion_url_add(urls, "upload/interlocker", handler_upload_interlocker); - onion_url_add(urls, "upload/refresh-interlockers", handler_refresh_interlockers); + onion_url_add(urls, "upload/refresh-interlockers", handler_get_interlockers); onion_url_add(urls, "upload/remove-interlocker", handler_remove_interlocker); // --- monitor functions --- diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index 67ce3035..9777d907 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -162,7 +162,7 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data *ws_data_ptr) { if (ws_msg == NULL || ws_data_ptr == NULL) { syslog_server(LOG_ERR, - "Websocket upload engine: received message or ws_verif_data is NULL"); + "Websocket upload engine: the received message or ws_verif_data is NULL"); return; } From c425513726fb597df826892fd0e6ee88c7e5ffee Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 25 Nov 2023 11:06:31 +0100 Subject: [PATCH 29/45] readme review comments addressed --- README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 61a67567..f528a591 100644 --- a/README.md +++ b/README.md @@ -218,23 +218,26 @@ is not the same as the one at the server We try to use a consistent logging format in all request handlers. General workflow of how request handlers generate log messages: 1. Parse form data. 2. Validate form data. If validation fails, make a log on `ERROR` level and stop processing. -3. Make a log on NOTICE or INFO level that represents the start of processing. +3. Make a log on `NOTICE` or `INFO` level that represents the start of processing. 4. Process request. If processing causes an error, (try to) make a log on the `ERROR` level and stop processing. 5. Processing concluded. Make a log to indicate this, by printing the log message of Step 3 again and appending ` - finished` to it. -For request handlers that "just" return information (getters), the log level in steps 3 and 5 are INFO. -For request handlers that barely do any "processing" at all; e.g. where only one boolean is updated, they do not have a separate log for start and end of processing. They just make one log which ends on "done". +For request handlers that just return information (getters), the log level in steps 3 and 5 are INFO. +For request handlers that barely do any "processing" at all; e.g. where only a status variable is updated, they only generate one log message that ends with ` - done`. -The above description may be a bit confusing, so lets look at a concrete example. Say, we want to change the state of point "point10" to the state "normal". We send a request, and from the request handler we will then see the following logs: +As an example, when a request is made to set point10 to the normal state, the request handler (`handler_set_point`) generates the following log messages when the processing is successful: +> LOG_NOTICE: `Request: Set point - point: point10 state: normal` +> _Intervening log messages from internal processing_ +> LOG_NOTICE: `Request: Set point - point: point10 state: normal - finished` 1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" 2. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal - finished" -This means the point switch has been initiated successfully. -Now, to compare, let's say we forget to pass the state, so it is NULL. We then get the following logs from the request handler: -1. Level LOG_ERR; Log: "Request: Set point - invalid parameters" -So, we can see that the validation failed. We get a log on the LOG_ERR level, so that will be the last log from this call to the request handler. +If the above request was instead made with an unsupported state, e.g., `foobar`, then the request handler would generate the following log messages to say that the processing was stopped because of invalid parameters: -Now, what if we pass a state that is not NULL but also not a valid state for our point? Let's pass the state "foobar" and point "point10": -1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: foobar" -2. Level LOG_ERR; Log: "Request: Set point - point: point10 state: foobar - invalid parameters" -So, now it wasn't picked up by the validation, but later. Again, since we got a log on the LOG_ERR level, this is the last log we can expect from this call to the request handler. \ No newline at end of file +> LOG_NOTICE: `Request: Set point - point: point10 state: foobar` +> _Intervening log messages from internal processing_ +> LOG_ERR: `Request: Set point - point: point10 state: foobar - invalid parameters` + +If the above request forgot to specify the state, e.g., a null parameter, then the request handler would only generate the following log message to say that the verification failed: + +> LOG_ERR: `Request: Set point - invalid parameters` \ No newline at end of file From 2ad20952a018577e6cf701529deb7d9e0542e1d7 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Sat, 25 Nov 2023 11:39:34 +0100 Subject: [PATCH 30/45] review comment addressing up to driver release train --- server/src/dyn_containers_interface.c | 2 +- server/src/handler_admin.c | 14 +++++++------- server/src/handler_controller.c | 21 +++++++++++---------- server/src/handler_driver.c | 20 ++++++++++---------- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/server/src/dyn_containers_interface.c b/server/src/dyn_containers_interface.c index 90fe9672..cc07351a 100644 --- a/server/src/dyn_containers_interface.c +++ b/server/src/dyn_containers_interface.c @@ -147,7 +147,7 @@ static void *dyn_containers_actuate(void *_) { : -engine_instance->output_nominal_speed, grabbed_trains[i].track_output)) { syslog_server(LOG_ERR, - "Dyn containers actuate - train: %s - bad parameter values when setting train speed", + "Dyn containers actuate - train: %s - invalid parameters", grabbed_trains[i].name->str); } else { bidib_flush(); diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 699c1938..2563766a 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -115,18 +115,18 @@ static bool startup_server(void) { void shutdown_server(void) { session_id = 0; syslog_server(LOG_NOTICE, "Shutdown server"); - syslog_server(LOG_INFO, "Shutdown server - Will cease printing to log once stop is complete"); release_all_grabbed_trains(); syslog_server(LOG_INFO, "Shutdown server - Released all grabbed trains"); release_all_interlockers(); syslog_server(LOG_INFO, "Shutdown server - Released all interlockers"); running = false; dyn_containers_stop(); - syslog_server(LOG_INFO, "Shutdown server - Stopped dyn-containers"); + syslog_server(LOG_INFO, "Shutdown server - Stopped dyn containers"); bahn_data_util_free_config(); + syslog_server(LOG_INFO, "Shutdown server - Released interlocking config and table data"); pthread_join(poll_bidib_messages_thread, NULL); syslog_server(LOG_NOTICE, - "Shutdown server - Bidib message poll thread joined, now stopping bidib and closing log"); + "Shutdown server - BiDiB message poll thread joined, now stopping BiDiB and closing log"); bidib_stop(); } @@ -149,7 +149,7 @@ onion_connection_status handler_startup(void *_, onion_request *req, onion_respo session_id); } else { syslog_server(LOG_ERR, - "Request: Startup server - session id: %ld - unable to start bidib", + "Request: Startup server - session id: %ld - unable to start BiDiB", session_id); } } else { @@ -305,12 +305,12 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request if (speed == 999) { syslog_server(LOG_ERR, - "Request: Admin set dcc train speed - train: %s speed: %d - bad speed", + "Request: Admin set dcc train speed - train: %s speed: %d - invalid speed", data_train, speed); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Admin set dcc train speed - train: %s speed: %d - bad track output", + "Request: Admin set dcc train speed - train: %s speed: %d - invalid track output", data_train, speed); return OCS_NOT_IMPLEMENTED; } else { @@ -321,7 +321,7 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request if (bidib_set_train_speed(data_train, speed, data_track_output)) { syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " - "bad parameter values", + "invalid parameters", data_train, speed); } else { bidib_flush(); diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 442b7f66..846cd948 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -308,7 +308,7 @@ const char *grant_route_id(const char *train_id, const char *route_id) { if (granted_conflicts == NULL) { pthread_mutex_unlock(&interlocker_mutex); syslog_server(LOG_WARNING, - "Grant route id - train: %s route: %s - granted_conflicts is NULL", + "Grant route id - train: %s route: %s - search for conflicting routes failed", train_id, route_id); return "not_grantable"; } @@ -318,7 +318,7 @@ const char *grant_route_id(const char *train_id, const char *route_id) { pthread_mutex_unlock(&interlocker_mutex); syslog_server(LOG_WARNING, "Grant route id - train: %s route: %s - route already granted " - "or conflicts with granted routes", + "or conflicting routes are in use", train_id, route_id); return "not_grantable"; } @@ -383,7 +383,7 @@ void release_route(const char *route_id) { t_interlocking_route *route = get_route(route_id); if (route != NULL && route->train != NULL) { syslog_server(LOG_INFO, - "Release route - route: %s - route currently granted to train %s, " + "Release route - route: %s - currently granted to train %s, " "now setting all route signals to aspect_stop", route_id, route->train); @@ -401,11 +401,11 @@ void release_route(const char *route_id) { free(route->train); route->train = NULL; - syslog_server(LOG_NOTICE, "Release route - route: %s - route released", route_id); + syslog_server(LOG_NOTICE, "Release route - route: %s - released", route_id); } else if (route == NULL) { - syslog_server(LOG_ERR, "Release route - route: %s - route does not exist", route_id); + syslog_server(LOG_ERR, "Release route - route: %s - does not exist", route_id); } else { - syslog_server(LOG_ERR, "Release route - route: %s - route is not granted to any train", route_id); + syslog_server(LOG_ERR, "Release route - route: %s - is not granted to any train", route_id); } pthread_mutex_unlock(&interlocker_mutex); @@ -508,7 +508,9 @@ onion_connection_status handler_set_signal(void *_, onion_request *req, onion_re "Request: Set signal - signal: %s state: %s", data_signal, data_state); if (bidib_set_signal(data_signal, data_state)) { - syslog_server(LOG_ERR, "Request: Set signal - invalid parameters"); + syslog_server(LOG_ERR, + "Request: Set signal - signal: %s state: %s - invalid parameters", + data_signal, data_state); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); @@ -558,10 +560,9 @@ onion_connection_status handler_set_peripheral(void *_, onion_request *req, onio onion_connection_status handler_get_interlocker(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get interlocker"); - if (selected_interlocker_instance != -1) { + if (selected_interlocker_instance != -1 && selected_interlocker_name != NULL) { onion_response_printf(res, "%s", selected_interlocker_name->str); - syslog_server(LOG_INFO, "Request: Get interlocker - finished"); + syslog_server(LOG_INFO, "Request: Get interlocker - done"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get interlocker - none selected"); diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 935981cc..f1388a6b 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -215,7 +215,7 @@ static bool validate_interlocking_route_members_not_null(const t_interlocking_ro static void log_signal_info(int priority, const t_route_signal_info *sig_info) { if (sig_info != NULL) { syslog_server(priority, - "Drive route signal info: id - %s, %s source, %s destination, path index - %d", + "Drive route signal info - id: %s, source: %s, destination: %s, path index: %d", sig_info->id != NULL ? sig_info->id : "NULL", sig_info->is_source_signal ? "is" : "not", sig_info->is_destination_signal ? "is" : "not", @@ -346,7 +346,7 @@ static t_route_signal_info_array get_route_signal_info_array(const t_interlockin if (info_arr.data_ptr[i] == NULL) { syslog_server(LOG_WARNING, "Get route signal info array - route: %s - " - "skip NULL signal_info at pos %d of info_arr", + "skipped NULL signal_info at pos %d of info_arr", i); continue; } @@ -528,12 +528,12 @@ static size_t update_route_signals_for_train_pos(t_route_signal_info_array *sign // 4. Try to set the signal to signal_stop_aspect. if (bidib_set_signal(sig_info->id, signal_stop_aspect)) { syslog_server(LOG_WARNING, - "Update route signals - route: %s - unable to set signal %s to %s", + "Update route signals - route: %s signal: %s - unable to set signal to %s", route->id, sig_info->id, signal_stop_aspect); } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Update route signals - route: %s - signal %s set to %s", + "Update route signals - route: %s signal: %s - signal set to %s", sig_info->id, signal_stop_aspect, route->id); sig_info->has_been_set_to_stop = true; signals_set_to_stop++; @@ -636,7 +636,7 @@ static bool drive_route_progressive_stop_signals_decoupled(const char *train_id, if (train_pos_index_previous > train_pos_query.pos_index) { syslog_server(LOG_DEBUG, "Drive route decoupled - route: %s train: %s - " - "new train index %d is lower than previous index %d", + "new train path index %d is lower than previous path index %d", route->id, train_id, train_pos_query.pos_index, train_pos_index_previous); } @@ -726,7 +726,7 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a // Driving starts: Driving direction is computed from the route orientation syslog_server(LOG_NOTICE, - "Drive route - route: %s train: %s - driving starts (%s)", + "Drive route - route: %s train: %s - %s driving starts", route->id, train_id, is_automatic ? "automatic" : "manual"); pthread_mutex_lock(&grabbed_trains_mutex); @@ -752,7 +752,7 @@ static bool drive_route(const int grab_id, const char *route_id, const bool is_a } syslog_server(LOG_NOTICE, - "Drive route - route: %s train: %s - slowing for end of route", + "Drive route - route: %s train: %s - slowing down for end of route", train_id, route_id); pthread_mutex_lock(&grabbed_trains_mutex); dyn_containers_set_train_engine_instance_inputs(engine_instance, @@ -828,7 +828,7 @@ static int grab_train(const char *train, const char *engine) { grabbed_trains[grab_id].is_valid = true; pthread_mutex_unlock(&grabbed_trains_mutex); syslog_server(LOG_NOTICE, - "Grab train - train: %s engine: %s - train grabbed (grab id %d)", + "Grab train - train: %s engine: %s - train grabbed with id: %d", train, engine, grab_id); return grab_id; } @@ -865,7 +865,7 @@ char *train_id_from_grab_id(int grab_id) { char *train_id = strdup(grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); if (train_id == NULL) { - syslog_server(LOG_ERR, "Train ID from grab ID - unable to allocate memory for train_id"); + syslog_server(LOG_ERR, "Train id from grab id - unable to allocate memory for train_id"); return NULL; } return train_id; @@ -890,7 +890,7 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, onion_re if (!train_state_query.known) { bidib_free_train_state_query(train_state_query); syslog_server(LOG_ERR, - "Request: Grab train - train: %s engine: %s - unknown train/train state", + "Request: Grab train - train: %s engine: %s - unknown train or train state", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } From 8f585b5b219deafe6383d395c4adc141c6844b9e Mon Sep 17 00:00:00 2001 From: BLuedtke Date: Mon, 27 Nov 2023 11:40:27 +0100 Subject: [PATCH 31/45] handler driver fixes & improvements --- server/src/handler_driver.c | 28 ++++++++++++++-------------- server/src/handler_driver.h | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index f1388a6b..334b31c7 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -920,12 +920,12 @@ onion_connection_status handler_release_train(void *_, onion_request *req, onion if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { const char *data_session_id = onion_request_get_post(req, "session-id"); const char *data_grab_id = onion_request_get_post(req, "grab-id"); - int client_session_id = params_check_session_id(data_session_id); - int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); + const int client_session_id = params_check_session_id(data_session_id); + const int grab_id = params_check_grab_id(data_grab_id, TRAIN_ENGINE_INSTANCE_COUNT_MAX); if (client_session_id != session_id) { syslog_server(LOG_ERR, - "Request: Release train - grab id: %d - invalid session id %s", + "Request: Release train - grab id: %d - invalid session id: %s", grab_id, data_session_id); return OCS_NOT_IMPLEMENTED; } @@ -1061,7 +1061,7 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, on const char *route_id = params_check_route_id(data_route_id); if (strcmp(route_id, "") == 0) { - syslog_server(LOG_ERR, "Request: Request train route id - invalid parameters"); + syslog_server(LOG_ERR, "Request: Request train route id - invalid route id"); return OCS_NOT_IMPLEMENTED; } else if (client_session_id != session_id) { syslog_server(LOG_ERR, @@ -1134,7 +1134,7 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } else if (strcmp(route_id, "") == 0) { syslog_server(LOG_ERR, - "Request: Driving direction - train: %s - route id empty", + "Request: Driving direction - train: %s - invalid route id", data_train); return OCS_NOT_IMPLEMENTED; } @@ -1241,7 +1241,7 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Set dcc train speed - train: %s speed: %d - bad track output", + "Request: Set dcc train speed - train: %s speed: %d - invalid track output", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1297,7 +1297,7 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Set calibrated train speed - train: %s speed: %d - bad track output", + "Request: Set calibrated train speed - train: %s speed: %d - invalid track output", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1309,7 +1309,7 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, if (bidib_set_calibrated_train_speed(grabbed_trains[grab_id].name->str, speed, data_track_output)) { syslog_server(LOG_ERR, - "Request: Set calibrated train speed - train: %s speed: %d - bad parameter values", + "Request: Set calibrated train speed - train: %s speed: %d - invalid parameters", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1352,7 +1352,7 @@ onion_connection_status handler_set_train_emergency_stop(void *_, return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Set train emergency stop - train: %s - bad track output", + "Request: Set train emergency stop - train: %s - invalid track output", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1363,7 +1363,7 @@ onion_connection_status handler_set_train_emergency_stop(void *_, if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, data_track_output)) { syslog_server(LOG_ERR, - "Request: Set train emergency stop - train: %s - bad parameter values", + "Request: Set train emergency stop - train: %s - invalid parameters", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1409,19 +1409,19 @@ onion_connection_status handler_set_train_peripheral(void *_, return OCS_NOT_IMPLEMENTED; } else if (state == -1) { syslog_server(LOG_ERR, - "Request: Set train peripheral - train: %s - bad state", + "Request: Set train peripheral - train: %s - invalid state", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_peripheral == NULL) { syslog_server(LOG_ERR, - "Request: Set train peripheral - train: %s - bad peripheral", + "Request: Set train peripheral - train: %s - invalid peripheral", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Set train peripheral - train: %s peripheral: %s - bad track output", + "Request: Set train peripheral - train: %s peripheral: %s - invalid track output", grabbed_trains[grab_id].name->str, data_peripheral); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1435,7 +1435,7 @@ onion_connection_status handler_set_train_peripheral(void *_, data_track_output)) { syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s " - "peripheral: %s state: 0x%02x - bad parameter values", + "peripheral: %s state: 0x%02x - invalid parameters", grabbed_trains[grab_id].name->str, data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; diff --git a/server/src/handler_driver.h b/server/src/handler_driver.h index b57c6d8b..0ca471b3 100644 --- a/server/src/handler_driver.h +++ b/server/src/handler_driver.h @@ -58,7 +58,7 @@ bool release_train(int grab_id); void release_all_grabbed_trains(void); /** - * @brief Returns a heap-allocated string with the name of the train grabbed with this grab-id. + * @brief For a given grab-id, return the associated train name (a heap-allocated string) if applicable. * Caller must free the returned string. * @param grab_id Grab-id with which the desired train is grabbed * @return char* the name of the train grabbed by grab-id; NULL if not grabbed or otherwise invalid. From 09cd8c3fd066708b8b7ff8e7554edca076fd56e4 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 13:29:53 +0100 Subject: [PATCH 32/45] add "start" to req handler log pattern --- README.md | 10 +++++----- server/src/handler_admin.c | 10 +++++----- server/src/handler_controller.c | 12 ++++++------ server/src/handler_driver.c | 20 ++++++++++---------- server/src/handler_monitor.c | 26 +++++++++++++------------- server/src/handler_upload.c | 14 ++++++++------ 6 files changed, 47 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index f528a591..a657d890 100644 --- a/README.md +++ b/README.md @@ -218,23 +218,23 @@ is not the same as the one at the server We try to use a consistent logging format in all request handlers. General workflow of how request handlers generate log messages: 1. Parse form data. 2. Validate form data. If validation fails, make a log on `ERROR` level and stop processing. -3. Make a log on `NOTICE` or `INFO` level that represents the start of processing. +3. Make a log on `NOTICE` or `INFO` level that represents the start of processing, ending on ` - start`. 4. Process request. If processing causes an error, (try to) make a log on the `ERROR` level and stop processing. -5. Processing concluded. Make a log to indicate this, by printing the log message of Step 3 again and appending ` - finished` to it. +5. Processing concluded. Make a log to indicate this, by printing the log message of Step 3 again with ` - finished` instead of ` - start`. For request handlers that just return information (getters), the log level in steps 3 and 5 are INFO. For request handlers that barely do any "processing" at all; e.g. where only a status variable is updated, they only generate one log message that ends with ` - done`. As an example, when a request is made to set point10 to the normal state, the request handler (`handler_set_point`) generates the following log messages when the processing is successful: -> LOG_NOTICE: `Request: Set point - point: point10 state: normal` +> LOG_NOTICE: `Request: Set point - point: point10 state: normal - start` > _Intervening log messages from internal processing_ > LOG_NOTICE: `Request: Set point - point: point10 state: normal - finished` 1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" 2. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal - finished" -If the above request was instead made with an unsupported state, e.g., `foobar`, then the request handler would generate the following log messages to say that the processing was stopped because of invalid parameters: +If the above request was instead made with an unsupported state, e.g., `foobar`, then the request handler would generate the following log messages to say that the processing was stopped because of invalid parameters: -> LOG_NOTICE: `Request: Set point - point: point10 state: foobar` +> LOG_NOTICE: `Request: Set point - point: point10 state: foobar - start` > _Intervening log messages from internal processing_ > LOG_ERR: `Request: Set point - point: point10 state: foobar - invalid parameters` diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index 2563766a..ac35f58d 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -140,7 +140,7 @@ onion_connection_status handler_startup(void *_, onion_request *req, onion_respo openlog("swtbahn", 0, LOG_LOCAL0); session_id = time(NULL); - syslog_server(LOG_NOTICE, "Request: Startup server - session id: %ld", session_id); + syslog_server(LOG_NOTICE, "Request: Startup server - session id: %ld - start", session_id); if (startup_server()) { retval = OCS_PROCESSED; @@ -167,7 +167,7 @@ onion_connection_status handler_shutdown(void *_, onion_request *req, onion_resp pthread_mutex_lock(&start_stop_mutex); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_NOTICE, "Request: Shutdown server"); + syslog_server(LOG_NOTICE, "Request: Shutdown server - start"); shutdown_server(); // Can't log "finished" here since bidib closes the syslog when stopping retval = OCS_PROCESSED; @@ -191,7 +191,7 @@ onion_connection_status handler_set_track_output(void *_, onion_request *req, on syslog_server(LOG_ERR, "Request: Set track output - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x", state); + syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x - start", state); bidib_set_track_output_state_all(state); bidib_flush(); syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x - finished", state); @@ -259,7 +259,7 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, data_train); return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_NOTICE, "Request: Admin release train - train: %s", data_train); + syslog_server(LOG_NOTICE, "Request: Admin release train - train: %s - start", data_train); // Ensure that the train has stopped moving const int engine_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; @@ -315,7 +315,7 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Admin set dcc train speed - train: %s speed: %d", + "Request: Admin set dcc train speed - train: %s speed: %d - start", data_train, speed); pthread_mutex_lock(&grabbed_trains_mutex); if (bidib_set_train_speed(data_train, speed, data_track_output)) { diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 846cd948..e3f92e92 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -453,7 +453,7 @@ onion_connection_status handler_release_route(void *_, onion_request *req, onion syslog_server(LOG_ERR, "Request: Release route - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Release route - route: %s", route_id); + syslog_server(LOG_NOTICE, "Request: Release route - route: %s - start", route_id); release_route(route_id); syslog_server(LOG_NOTICE, "Request: Release route - route: %s - finished", route_id); return OCS_PROCESSED; @@ -474,7 +474,7 @@ onion_connection_status handler_set_point(void *_, onion_request *req, onion_res return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Set point - point: %s state: %s", + "Request: Set point - point: %s state: %s - start", data_point, data_state); if (bidib_switch_point(data_point, data_state)) { syslog_server(LOG_ERR, @@ -505,7 +505,7 @@ onion_connection_status handler_set_signal(void *_, onion_request *req, onion_re return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Set signal - signal: %s state: %s", + "Request: Set signal - signal: %s state: %s - start", data_signal, data_state); if (bidib_set_signal(data_signal, data_state)) { syslog_server(LOG_ERR, @@ -536,7 +536,7 @@ onion_connection_status handler_set_peripheral(void *_, onion_request *req, onio return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Set peripheral - peripheral: %s state: %s", + "Request: Set peripheral - peripheral: %s state: %s - start", data_peripheral, data_state); if (bidib_set_peripheral(data_peripheral, data_state)) { syslog_server(LOG_ERR, @@ -583,7 +583,7 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, oni return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Set interlocker - interlocker: %s", + "Request: Set interlocker - interlocker: %s - start", data_interlocker); if (selected_interlocker_instance != -1) { syslog_server(LOG_ERR, @@ -622,7 +622,7 @@ onion_connection_status handler_unset_interlocker(void *_, onion_request *req, o syslog_server(LOG_ERR, "Request: Unset interlocker - invalid parameters"); return OCS_NOT_IMPLEMENTED; } else { - syslog_server(LOG_NOTICE, "Request: Unset interlocker - interlocker: %s", + syslog_server(LOG_NOTICE, "Request: Unset interlocker - interlocker: %s - start", data_interlocker); if (selected_interlocker_instance == -1) { syslog_server(LOG_ERR, diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 334b31c7..5529880e 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -883,7 +883,7 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, onion_re return OCS_NOT_IMPLEMENTED; } syslog_server(LOG_NOTICE, - "Request: Grab train - train: %s engine: %s", + "Request: Grab train - train: %s engine: %s - start", data_train, data_engine); t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); @@ -938,7 +938,7 @@ onion_connection_status handler_release_train(void *_, onion_request *req, onion } syslog_server(LOG_NOTICE, - "Request: Release train - grab id: %d train: %s", + "Request: Release train - grab id: %d train: %s - start", grab_id, train_id); // Set train speed to 0 @@ -1006,7 +1006,7 @@ onion_connection_status handler_request_route(void *_, onion_request *req, onion } syslog_server(LOG_NOTICE, - "Request: Request train route - train: %s from: %s to: %s", + "Request: Request train route - train: %s from: %s to: %s - start", train_id, data_source_name, data_destination_name); // Use interlocker to find and grant a route @@ -1080,7 +1080,7 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, on } syslog_server(LOG_NOTICE, - "Request: Request train route id - train: %s route: %s", + "Request: Request train route id - train: %s route: %s - start", train_id, route_id); // Grant the route ID using an internal algorithm @@ -1139,7 +1139,7 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Driving direction - train: %s", data_train); + syslog_server(LOG_INFO, "Request: Driving direction - train: %s - start", data_train); pthread_mutex_lock(&interlocker_mutex); const t_interlocking_route *route = get_route(route_id); onion_response_printf(res, "%s", @@ -1186,7 +1186,7 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, onion_r } syslog_server(LOG_NOTICE, - "Request: Drive route - route: %s train: %s drive mode: %s", + "Request: Drive route - route: %s train: %s drive mode: %s - start", route_id, train_id, mode); const bool is_automatic = (strcmp(mode, "automatic") == 0); @@ -1248,7 +1248,7 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, } syslog_server(LOG_NOTICE, - "Request: Set dcc train speed - train: %s speed: %d", + "Request: Set dcc train speed - train: %s speed: %d - start", grabbed_trains[grab_id].name->str, speed); strcpy(grabbed_trains[grab_id].track_output, data_track_output); const int eng_instance = grabbed_trains[grab_id].dyn_containers_engine_instance; @@ -1304,7 +1304,7 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, } syslog_server(LOG_NOTICE, - "Request: Set calibrated train speed - train: %s speed: %d", + "Request: Set calibrated train speed - train: %s speed: %d - start", grabbed_trains[grab_id].name->str, speed); if (bidib_set_calibrated_train_speed(grabbed_trains[grab_id].name->str, speed, data_track_output)) { @@ -1358,7 +1358,7 @@ onion_connection_status handler_set_train_emergency_stop(void *_, return OCS_NOT_IMPLEMENTED; } syslog_server(LOG_NOTICE, - "Request: Set train emergency stop - train: %s", + "Request: Set train emergency stop - train: %s - start", grabbed_trains[grab_id].name->str); if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, data_track_output)) { @@ -1428,7 +1428,7 @@ onion_connection_status handler_set_train_peripheral(void *_, } syslog_server(LOG_NOTICE, - "Request: Set train peripheral - train: %s peripheral: %s state: 0x%02x", + "Request: Set train peripheral - train: %s peripheral: %s state: 0x%02x - start", grabbed_trains[grab_id].name->str, data_peripheral, state); if (bidib_set_train_peripheral(grabbed_trains[grab_id].name->str, data_peripheral, state, diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 98f5a611..2f98dce2 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -44,7 +44,7 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get available trains"); + syslog_server(LOG_INFO, "Request: Get available trains - start"); GString *trains = g_string_new(""); t_bidib_id_list_query query = bidib_get_trains(); for (size_t i = 0; i < query.length; i++) { @@ -73,7 +73,7 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, oni return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get train state - train: %s", data_train); + syslog_server(LOG_INFO, "Request: Get train state - train: %s - start", data_train); t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); t_bidib_train_position_query train_position_query = bidib_get_train_position(data_train); @@ -140,7 +140,7 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s", data_train); + syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s - start", data_train); t_bidib_id_list_query query = bidib_get_train_peripherals(data_train); if (query.length > 0) { GString *train_peripherals = g_string_new(""); @@ -177,7 +177,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get track outputs"); + syslog_server(LOG_INFO, "Request: Get track outputs - start"); GString *track_outputs = g_string_new(""); t_bidib_id_list_query query = bidib_get_track_outputs(); for (size_t i = 0; i < query.length; i++) { @@ -238,7 +238,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, onion_connection_status handler_get_points(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get points"); + syslog_server(LOG_INFO, "Request: Get points - start"); GString *points = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_points(); for (size_t i = 0; i < query.length; i++) { @@ -274,7 +274,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, onion_re onion_connection_status handler_get_signals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get signals"); + syslog_server(LOG_INFO, "Request: Get signals - start"); GString *signals = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_signals(); for (size_t i = 0; i < query.length; i++) { @@ -310,7 +310,7 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s", data_point); + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - start", data_point); t_bidib_id_list_query query = bidib_get_point_aspects(data_point); if (query.length > 0) { GString *aspects = g_string_new(""); @@ -347,7 +347,7 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s", data_signal); + syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s - start", data_signal); t_bidib_id_list_query query = bidib_get_signal_aspects(data_signal); if (query.length > 0) { GString *aspects = g_string_new(""); @@ -379,7 +379,7 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, onion_connection_status handler_get_segments(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get segments"); + syslog_server(LOG_INFO, "Request: Get segments - start"); GString *segments = g_string_new(""); t_bidib_id_list_query seg_query = bidib_get_connected_segments(); for (size_t i = 0; i < seg_query.length; i++) { @@ -415,7 +415,7 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, onion_ onion_connection_status handler_get_reversers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get reversers"); + syslog_server(LOG_INFO, "Request: Get reversers - start"); if (!reversers_state_update()) { syslog_server(LOG_ERR, "Request: Get reversers - unable to request state update"); return OCS_NOT_IMPLEMENTED; @@ -463,7 +463,7 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, onion onion_connection_status handler_get_peripherals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get peripherals"); + syslog_server(LOG_INFO, "Request: Get peripherals - start"); GString *peripherals = g_string_new(""); t_bidib_id_list_query per_query = bidib_get_connected_peripherals(); for (size_t i = 0; i < per_query.length; i++) { @@ -520,7 +520,7 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get granted routes"); + syslog_server(LOG_INFO, "Request: Get granted routes - start"); bool needNewLine = false; GString *granted_routes = g_string_new(""); GArray *route_ids = interlocking_table_get_all_route_ids(); @@ -588,7 +588,7 @@ onion_connection_status handler_get_route(void *_, onion_request *req, onion_res return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get route - route: %s", route_id); + syslog_server(LOG_INFO, "Request: Get route - route: %s - start", route_id); GString *route_str = g_string_new(""); pthread_mutex_lock(&interlocker_mutex); diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index db65f2dc..6c81a3b5 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -151,7 +151,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s", filename); + syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s - start", filename); if (engine_file_exists(filename)) { syslog_server(LOG_ERR, @@ -245,7 +245,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion onion_connection_status handler_get_engines(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get engines"); + syslog_server(LOG_INFO, "Request: Get engines - start"); GString *train_engines = dyn_containers_get_train_engines(); onion_response_printf(res, "%s", train_engines->str); g_string_free(train_engines, true); @@ -271,7 +271,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s", name); + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - start", name); pthread_mutex_lock(&dyn_containers_mutex); const int engine_slot = dyn_containers_get_engine_slot(name); @@ -367,7 +367,9 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, onion_response_printf(res, "Interlocker file is invalid"); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Upload interlocker - interlocker file: %s" , filename); + syslog_server(LOG_NOTICE, + "Request: Upload interlocker - interlocker file: %s - start", + filename); if (interlocker_file_exists(filename)) { syslog_server(LOG_ERR, @@ -447,7 +449,7 @@ onion_connection_status handler_get_interlockers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get interlockers"); + syslog_server(LOG_INFO, "Request: Get interlockers - start"); GString *interlockers = dyn_containers_get_interlockers(); onion_response_printf(res, "%s", interlockers->str); g_string_free(interlockers, true); @@ -474,7 +476,7 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, onion_response_set_code(res, HTTP_BAD_REQUEST); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s", name); + syslog_server(LOG_NOTICE, "Request: Remove interlocker - interlocker: %s - start", name); pthread_mutex_lock(&dyn_containers_mutex); const int interlocker_slot = dyn_containers_get_interlocker_slot(name); From 9d54f71953a87385ed7830c52295e140819765f0 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 13:37:41 +0100 Subject: [PATCH 33/45] move "getter" handlers to log only "done" --- server/src/handler_monitor.c | 36 ++++++++++++------------------------ server/src/handler_upload.c | 6 ++---- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index 2f98dce2..ee18cc9e 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -44,7 +44,6 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get available trains - start"); GString *trains = g_string_new(""); t_bidib_id_list_query query = bidib_get_trains(); for (size_t i = 0; i < query.length; i++) { @@ -54,7 +53,7 @@ onion_connection_status handler_get_trains(void *_, onion_request *req, onion_re } bidib_free_id_list_query(query); onion_response_printf(res, "%s", trains->str); - syslog_server(LOG_INFO, "Request: Get available trains - finished"); + syslog_server(LOG_INFO, "Request: Get available trains - done"); g_string_free(trains, true); return OCS_PROCESSED; } else { @@ -73,7 +72,6 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, oni return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get train state - train: %s - start", data_train); t_bidib_train_state_query train_state_query = bidib_get_train_state(data_train); t_bidib_train_position_query train_position_query = bidib_get_train_position(data_train); @@ -112,7 +110,7 @@ onion_connection_status handler_get_train_state(void *_, onion_request *req, oni ? "forwards" : "backwards"); bidib_free_train_state_query(train_state_query); onion_response_printf(res, "%s", ret_string->str); - syslog_server(LOG_INFO, "Request: Get train state - train: %s - finished", data_train); + syslog_server(LOG_INFO, "Request: Get train state - train: %s - done", data_train); g_string_free(seg_string, true); g_string_free(ret_string, true); return OCS_PROCESSED; @@ -140,7 +138,6 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get train peripherals - train: %s - start", data_train); t_bidib_id_list_query query = bidib_get_train_peripherals(data_train); if (query.length > 0) { GString *train_peripherals = g_string_new(""); @@ -155,7 +152,7 @@ onion_connection_status handler_get_train_peripherals(void *_, onion_request *re onion_response_printf(res, "%s", train_peripherals->str); syslog_server(LOG_INFO, - "Request: Get train peripherals - train: %s - finished", + "Request: Get train peripherals - train: %s - done", data_train); g_string_free(train_peripherals, true); return OCS_PROCESSED; @@ -177,7 +174,6 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get track outputs - start"); GString *track_outputs = g_string_new(""); t_bidib_id_list_query query = bidib_get_track_outputs(); for (size_t i = 0; i < query.length; i++) { @@ -225,7 +221,7 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, bidib_free_id_list_query(query); onion_response_printf(res, "%s", track_outputs->str); - syslog_server(LOG_INFO, "Request: Get track outputs - finished"); + syslog_server(LOG_INFO, "Request: Get track outputs - done"); g_string_free(track_outputs, true); return OCS_PROCESSED; } else { @@ -238,7 +234,6 @@ onion_connection_status handler_get_track_outputs(void *_, onion_request *req, onion_connection_status handler_get_points(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get points - start"); GString *points = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_points(); for (size_t i = 0; i < query.length; i++) { @@ -262,7 +257,7 @@ onion_connection_status handler_get_points(void *_, onion_request *req, onion_re bidib_free_id_list_query(query); onion_response_printf(res, "%s", points->str); - syslog_server(LOG_INFO, "Request: Get points - finished"); + syslog_server(LOG_INFO, "Request: Get points - done"); g_string_free(points, true); return OCS_PROCESSED; } else { @@ -274,7 +269,6 @@ onion_connection_status handler_get_points(void *_, onion_request *req, onion_re onion_connection_status handler_get_signals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get signals - start"); GString *signals = g_string_new(""); t_bidib_id_list_query query = bidib_get_connected_signals(); for (size_t i = 0; i < query.length; i++) { @@ -290,7 +284,7 @@ onion_connection_status handler_get_signals(void *_, onion_request *req, onion_r bidib_free_id_list_query(query); onion_response_printf(res, "%s", signals->str); - syslog_server(LOG_INFO, "Request: Get signals - finished"); + syslog_server(LOG_INFO, "Request: Get signals - done"); g_string_free(signals, true); return OCS_PROCESSED; } else { @@ -310,7 +304,6 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - start", data_point); t_bidib_id_list_query query = bidib_get_point_aspects(data_point); if (query.length > 0) { GString *aspects = g_string_new(""); @@ -320,7 +313,7 @@ onion_connection_status handler_get_point_aspects(void *_, onion_request *req, bidib_free_id_list_query(query); onion_response_printf(res, "%s", aspects->str); - syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - finished", data_point); + syslog_server(LOG_INFO, "Request: Get point aspects - point: %s - done", data_point); g_string_free(aspects, true); return OCS_PROCESSED; } else { @@ -347,7 +340,6 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, return OCS_NOT_IMPLEMENTED; } - syslog_server(LOG_INFO, "Request: Get signal aspects - signal: %s - start", data_signal); t_bidib_id_list_query query = bidib_get_signal_aspects(data_signal); if (query.length > 0) { GString *aspects = g_string_new(""); @@ -358,7 +350,7 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, onion_response_printf(res, "%s", aspects->str); syslog_server(LOG_INFO, - "Request: Get signal aspects - signal: %s - finished", + "Request: Get signal aspects - signal: %s - done", data_signal); g_string_free(aspects, true); return OCS_PROCESSED; @@ -379,7 +371,6 @@ onion_connection_status handler_get_signal_aspects(void *_, onion_request *req, onion_connection_status handler_get_segments(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get segments - start"); GString *segments = g_string_new(""); t_bidib_id_list_query seg_query = bidib_get_connected_segments(); for (size_t i = 0; i < seg_query.length; i++) { @@ -403,7 +394,7 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, onion_ bidib_free_id_list_query(seg_query); onion_response_printf(res, "%s", segments->str); - syslog_server(LOG_INFO, "Request: Get segments - finished"); + syslog_server(LOG_INFO, "Request: Get segments - done"); g_string_free(segments, true); return OCS_PROCESSED; } else { @@ -415,7 +406,6 @@ onion_connection_status handler_get_segments(void *_, onion_request *req, onion_ onion_connection_status handler_get_reversers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get reversers - start"); if (!reversers_state_update()) { syslog_server(LOG_ERR, "Request: Get reversers - unable to request state update"); return OCS_NOT_IMPLEMENTED; @@ -451,7 +441,7 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, onion bidib_free_id_list_query(rev_query); onion_response_printf(res, "%s", reversers->str); - syslog_server(LOG_INFO, "Request: Get reversers - finished"); + syslog_server(LOG_INFO, "Request: Get reversers - done"); g_string_free(reversers, true); return OCS_PROCESSED; } else { @@ -463,7 +453,6 @@ onion_connection_status handler_get_reversers(void *_, onion_request *req, onion onion_connection_status handler_get_peripherals(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get peripherals - start"); GString *peripherals = g_string_new(""); t_bidib_id_list_query per_query = bidib_get_connected_peripherals(); for (size_t i = 0; i < per_query.length; i++) { @@ -478,7 +467,7 @@ onion_connection_status handler_get_peripherals(void *_, onion_request *req, oni bidib_free_id_list_query(per_query); onion_response_printf(res, "%s", peripherals->str); - syslog_server(LOG_INFO, "Request: Get peripherals - finished"); + syslog_server(LOG_INFO, "Request: Get peripherals - done"); g_string_free(peripherals, true); return OCS_PROCESSED; } else { @@ -520,7 +509,6 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get granted routes - start"); bool needNewLine = false; GString *granted_routes = g_string_new(""); GArray *route_ids = interlocking_table_get_all_route_ids(); @@ -544,7 +532,7 @@ onion_connection_status handler_get_granted_routes(void *_, onion_request *req, } onion_response_printf(res, "%s", granted_routes->str); - syslog_server(LOG_INFO, "Request: Get granted routes - finished"); + syslog_server(LOG_INFO, "Request: Get granted routes - done"); g_string_free(granted_routes, true); return OCS_PROCESSED; } else { diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index 6c81a3b5..ab93598c 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -245,11 +245,10 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion onion_connection_status handler_get_engines(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get engines - start"); GString *train_engines = dyn_containers_get_train_engines(); onion_response_printf(res, "%s", train_engines->str); g_string_free(train_engines, true); - syslog_server(LOG_INFO, "Request: Get engines - finished"); + syslog_server(LOG_INFO, "Request: Get engines - done"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Get engines - system not running or wrong request type"); @@ -449,11 +448,10 @@ onion_connection_status handler_get_interlockers(void *_, onion_request *req, onion_response *res) { build_response_header(res); if (running && ((onion_request_get_flags(req) & OR_METHODS) == OR_POST)) { - syslog_server(LOG_INFO, "Request: Get interlockers - start"); GString *interlockers = dyn_containers_get_interlockers(); onion_response_printf(res, "%s", interlockers->str); g_string_free(interlockers, true); - syslog_server(LOG_INFO, "Request: Get interlockers - finished"); + syslog_server(LOG_INFO, "Request: Get interlockers - done"); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, From ebb0e4da5740ca1f44f662a9c6d3b447b2816555 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 13:43:28 +0100 Subject: [PATCH 34/45] add apt update to pipeline steps --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39df8bed..73ca170f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,19 +21,19 @@ jobs: - uses: actions/checkout@v3 - name: Install cmocka - run: sudo apt-get install -y --no-install-recommends libyaml-dev libcmocka-dev + run: sudo apt update; sudo apt-get install -y --no-install-recommends libyaml-dev libcmocka-dev - name: Build libbidib run: git clone --depth 1 https://github.com/uniba-swt/libbidib.git; cd libbidib; mkdir bin; cd bin; cmake ..; make -j; sudo make -j install - name: Install pam, gnutls - run: sudo apt-get install -y --no-install-recommends libpam0g-dev libgnutls28-dev + run: sudo apt update; sudo apt-get install -y --no-install-recommends libpam0g-dev libgnutls28-dev - name: Build libonion run: git clone --depth 1 https://github.com/uniba-swt/onion.git; cd onion; mkdir bin; cd bin; cmake -DONION_EXAMPLES=false -DONION_USE_TESTS=false ..; make -j onion; make -j onion_static; sudo make -j install - name: Install flex-dev, graphviz - run: sudo apt-get install -y libfl-dev graphviz + run: sudo apt update; sudo apt-get install -y libfl-dev graphviz - name: Install forecc run: git clone --depth 1 https://github.com/PRETgroup/ForeC.git; cd ForeC/ForeC\ Compiler; make -j; echo "FOREC_COMPILER_PATH=`pwd`" >> $GITHUB_ENV From 9928d8b208237f9dc265ec1951e65baea9723ce9 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 13:50:25 +0100 Subject: [PATCH 35/45] readme log pattern refined --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a657d890..012d40f2 100644 --- a/README.md +++ b/README.md @@ -218,12 +218,12 @@ is not the same as the one at the server We try to use a consistent logging format in all request handlers. General workflow of how request handlers generate log messages: 1. Parse form data. 2. Validate form data. If validation fails, make a log on `ERROR` level and stop processing. -3. Make a log on `NOTICE` or `INFO` level that represents the start of processing, ending on ` - start`. +3. Make a log on `NOTICE` or `INFO` level that represents the start of processing, with ` - start` at the end of the log. 4. Process request. If processing causes an error, (try to) make a log on the `ERROR` level and stop processing. -5. Processing concluded. Make a log to indicate this, by printing the log message of Step 3 again with ` - finished` instead of ` - start`. +5. Processing concluded. Indicate this by printing the log message of Step 3 again with ` - finished` instead of ` - start` at the end. -For request handlers that just return information (getters), the log level in steps 3 and 5 are INFO. For request handlers that barely do any "processing" at all; e.g. where only a status variable is updated, they only generate one log message that ends with ` - done`. +Request handlers that only return information (getters) also use the ` - done` pattern instead of `start` and `finished`, and use the log level `INFO`. As an example, when a request is made to set point10 to the normal state, the request handler (`handler_set_point`) generates the following log messages when the processing is successful: > LOG_NOTICE: `Request: Set point - point: point10 state: normal - start` From 029beee9dfb703766c19c5fd6e12dc6cf48b9ffd Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 14:12:24 +0100 Subject: [PATCH 36/45] refactored verification option string parser --- server/src/handler_admin.c | 10 ++++++++-- server/src/param_verification.c | 13 ------------- server/src/param_verification.h | 2 -- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index ac35f58d..f7aa92a1 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -209,11 +209,17 @@ onion_connection_status handler_set_verification_option(void *_, onion_request * build_response_header(res); if ((onion_request_get_flags(req) & OR_METHODS) == OR_POST) { const char *data_verification_option = onion_request_get_post(req, "verification-option"); - if (data_verification_option == NULL || !params_check_is_bool_string(data_verification_option)) { + if (!params_check_is_bool_string(data_verification_option)) { syslog_server(LOG_ERR, "Request: Set verification option - invalid parameters"); return OCS_NOT_IMPLEMENTED; } - verification_enabled = params_check_verification_option(data_verification_option); + if (strcmp("true", data_verification_option) == 0 + || strcmp("True", data_verification_option) == 0 + || strcmp("TRUE", data_verification_option) == 0) { + verification_enabled = true; + } else { + verification_enabled = false; + } syslog_server(LOG_NOTICE, "Request: Set verification option - new state: %s - done", verification_enabled ? "enabled" : "disabled"); diff --git a/server/src/param_verification.c b/server/src/param_verification.c index 5fc55577..c0968ece 100644 --- a/server/src/param_verification.c +++ b/server/src/param_verification.c @@ -122,16 +122,3 @@ bool params_check_is_bool_string(const char *string) { return false; } } - -bool params_check_verification_option(const char *string) { - if (string == NULL || *string == '\0' || isspace(*string)) { - return false; - } else if (strcmp("false", string) == 0 || strcmp("False", string) == 0 || strcmp("FALSE", string) == 0) { - return false; - } else if (strcmp("true", string) == 0 || strcmp("True", string) == 0 || strcmp("TRUE", string) == 0) { - return true; - } - - return false; -} - diff --git a/server/src/param_verification.h b/server/src/param_verification.h index 98340c2b..eb1abd60 100644 --- a/server/src/param_verification.h +++ b/server/src/param_verification.h @@ -49,6 +49,4 @@ bool params_check_is_number(const char *string); bool params_check_is_bool_string(const char *string); -bool params_check_verification_option(const char *string); - #endif // PARAM_VERIFICATION_H \ No newline at end of file From 8a1088aa57b0865a73d00135ca121546ef5a6df5 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 15:23:59 +0100 Subject: [PATCH 37/45] engine uploader basic log refactor --- .../src/websocket_uploader/engine_uploader.c | 71 +++++++++---------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index 9777d907..cb7db3cd 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -110,9 +110,8 @@ bool parse_model_into_verif_msg_str(GString *destination, const char *model_file */ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* ws_data_ptr) { if (ws_connection == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, - "Websocket upload engine: Unable to open and parse model file, " - "connection or ws_verif_data* is/are NULL"); + syslog_server(LOG_ERR, "Send verification request message - invalid parameters"); + return; } // Read sctx model from file, build msg with necessary formatting @@ -121,8 +120,7 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* // Check if parsing succeeded if (!parse_success) { - syslog_server(LOG_ERR, - "Websocket upload engine: Unable to open and parse model file to be uploaded"); + syslog_server(LOG_ERR, "Send verification request message - unable to parse model file"); ws_data_ptr->finished = true; ws_data_ptr->success = false; g_string_free(g_verif_msg_str, true); @@ -132,18 +130,18 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* // Try to send verification request if (g_verif_msg_str != NULL && g_verif_msg_str->len > 0) { syslog_server(LOG_INFO, - "Websocket upload engine: Sending verification request to verifier server"); + "Send verification request message - sending request to verifier server"); ssize_t sent_bytes = mg_ws_send(ws_connection, g_verif_msg_str->str, g_verif_msg_str->len, WEBSOCKET_OP_TEXT); if (sent_bytes <= 0) { syslog_server(LOG_ERR, - "Websocket upload engine: Sending verification request failed"); + "Send verification request message - sending verification request failed"); ws_data_ptr->finished = true; ws_data_ptr->success = false; } } else { syslog_server(LOG_ERR, - "Websocket upload engine: Websocket msg payload setup has gone wrong"); + "Send verification request message - failed to construct message to send"); ws_data_ptr->finished = true; ws_data_ptr->success = false; } @@ -161,8 +159,7 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* */ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data *ws_data_ptr) { if (ws_msg == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, - "Websocket upload engine: the received message or ws_verif_data is NULL"); + syslog_server(LOG_ERR, "Process verification result message - invalid parameters"); return; } @@ -171,7 +168,7 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data if (verif_success) { syslog_server(LOG_INFO, - "Websocket upload engine: Verification Server done, verification succeeded"); + "Process verification result message - engine satisfies all its properties"); ws_data_ptr->success = true; ws_data_ptr->finished = true; } else { @@ -181,14 +178,14 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data if (!status_false_in_reply) { // No 'status' field in answer with either true or false syslog_server(LOG_INFO, - "Websocket upload engine: Verification Server done," - " verification status not specified"); + "Process verification result message - " + "engine verification result inconclusive"); ws_data_ptr->message = g_string_new("Verification done but no result status known."); } else { // Ordinary failure. Save server's reply (to forward to client later on) syslog_server(LOG_INFO, - "Websocket upload engine: Verification Server done, " - "verification did not succeed"); + "Process verification result message - " + "engine does not satisfy all its properties"); ws_data_ptr->message = g_string_new(""); g_string_append_printf(ws_data_ptr->message,"%s", ws_msg->data.ptr); } @@ -209,16 +206,15 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ // Parses mg_ws_message, which is expected to contain a message from the verification server. // Then adjusts ws_data_ptr struct according to server's message. if (ws_msg == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_INFO, - "Websocket upload engine: Can't process verification server reply, " - "invalid parameters"); + syslog_server(LOG_ERR, "Process verification server reply - invalid parameters"); + return; } // Check that expected field "__MESSAGE_TYPE__" is contained in message char *msg_type_is_defined = strstr(ws_msg->data.ptr, msg_type_field_key); if (!msg_type_is_defined) { - syslog_server(LOG_INFO, - "Websocket upload engine: Verification Server replied in unknown format"); + syslog_server(LOG_ERR, + "Process verification server reply - reply lacks __MESSAGE_TYPE__ field"); return; } @@ -229,16 +225,17 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ if (type_verif_req_received) { // verification has started syslog_server(LOG_INFO, - "Websocket upload engine: Verification Server started verification"); + "Process verification server reply - verification server begun verification"); ws_data_ptr->started = true; } else if (type_verif_req_result) { + syslog_server(LOG_INFO, + "Process verification server reply - verification server completed verification"); // verification has finished, parse result (updates ws_data_ptr) process_verification_result_msg(ws_msg, ws_data_ptr); } else { // Unknown message type specified by the server. syslog_server(LOG_WARNING, - "Websocket upload engine: Verification Server replied " - "in unknown format"); + "Process verification server reply - invalid reply format"); // We are pessimistic and assume that the verification server will not reply again // after this "mistake" ws_data_ptr->success = false; @@ -262,14 +259,13 @@ void websocket_verification_callback(struct mg_connection *ws_connection, int ev, void *ev_data, void *fn_data) { ws_verif_data *ws_data_ptr = fn_data; if (ws_connection == NULL) { - syslog_server(LOG_ERR, - "Websocket upload engine: ws_connection is NULL in Websocket callback"); + syslog_server(LOG_ERR, "Websocket verification callback - connection is NULL"); // Error is encountered, the verification can't be completed ws_data_ptr->success = false; ws_data_ptr->finished = true; } else if (ev == MG_EV_ERROR) { syslog_server(LOG_ERR, - "Websocket upload engine: Websocket callback received error event: %s", + "Websocket verification callback - received error event: %s", (char *) ev_data); // Error is encountered, the verification can't be completed ws_data_ptr->success = false; @@ -282,7 +278,8 @@ void websocket_verification_callback(struct mg_connection *ws_connection, process_verif_server_reply((struct mg_ws_message *) ev_data, ws_data_ptr); } else if (ev == MG_EV_CLOSE) { syslog_server(LOG_INFO, - "Websocket upload engine: Closing websocket connection to verifier server"); + "Websocket verification callback - " + "closing websocket connection to verifier server"); ws_data_ptr->finished = true; } } @@ -293,11 +290,10 @@ verif_result verify_engine_model(const char* f_filepath) { ws_verif_data ws_verif_data = {false, false, false, g_string_new(f_filepath), NULL}; if (verifier_url == NULL) { - syslog_server(LOG_ERR, - "Websocket upload engine: No verifier URL has been set, abort"); + syslog_server(LOG_ERR, "Verify engine model - no verifier URL has been set, abort"); verif_result result_data; result_data.success = false; - result_data.message = g_string_new("No verifier URL has been set, " + result_data.message = g_string_new("No verifier server URL has been set, " "thus no verification was possible"); return result_data; } @@ -322,7 +318,7 @@ verif_result verify_engine_model(const char* f_filepath) { ws_verif_data.finished = true; ws_verif_data.success = false; syslog_server(LOG_WARNING, - "Websocket upload engine: Verification did not start within %d ms, abort", + "Verify engine model - verification did not start within %d ms, abort", (poll_counter * websocket_single_poll_length_ms)); } } @@ -394,15 +390,14 @@ void load_cached_verifier_url() { free(buffer); syslog_server(LOG_INFO, - "Websocket load cached verifier url: loaded %s from cache", + "Load cached verifier URL - loaded URL %s from cache", verifier_url); } else { - syslog_server(LOG_NOTICE, - "Websocket load cached verifier url: no content in cache file"); + syslog_server(LOG_NOTICE, "Load cached verifier URL - no content in cache file"); } } else { syslog_server(LOG_NOTICE, - "Websocket load cached verifier url: url cache file could not be opened"); + "Load cached verifier URL - cache file could not be opened"); } } @@ -410,20 +405,20 @@ void load_cached_verifier_url() { void cache_verifier_url() { // write current verifier url to cache file unless url is null if (verifier_url == NULL) { - syslog_server(LOG_NOTICE, "Websocket cache verifier url: url not cached as it is NULL"); + syslog_server(LOG_NOTICE, "Cache verifier URL - not cached as URL is NULL"); return; } // Open file, write string into file, close file. FILE* file = fopen(cache_file_verifier_url, "w"); if (file == NULL) { - syslog_server(LOG_ERR, "Websocket cache verifier url: file opening failed"); + syslog_server(LOG_ERR, "Cache verifier URL - cache file opening failed"); return; } // Write the content to the file fputs(verifier_url, file); - syslog_server(LOG_INFO, "Websocket cache verifier url: cached url %s", verifier_url); + syslog_server(LOG_INFO, "Cache verifier URL - cached url %s", verifier_url); // Close the file fclose(file); From 463636c9ca41c80ba8222ee2265dc687778b4a1b Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 15:38:26 +0100 Subject: [PATCH 38/45] engine uploader context for WS related logs --- .../src/websocket_uploader/engine_uploader.c | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index cb7db3cd..f5220193 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -110,7 +110,9 @@ bool parse_model_into_verif_msg_str(GString *destination, const char *model_file */ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* ws_data_ptr) { if (ws_connection == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, "Send verification request message - invalid parameters"); + syslog_server(LOG_ERR, + "Websocket engine uploader: Send verification request message - " + "invalid parameters"); return; } @@ -120,7 +122,9 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* // Check if parsing succeeded if (!parse_success) { - syslog_server(LOG_ERR, "Send verification request message - unable to parse model file"); + syslog_server(LOG_ERR, + "Websocket engine uploader: Send verification request message - " + "unable to parse model file"); ws_data_ptr->finished = true; ws_data_ptr->success = false; g_string_free(g_verif_msg_str, true); @@ -130,7 +134,7 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* // Try to send verification request if (g_verif_msg_str != NULL && g_verif_msg_str->len > 0) { syslog_server(LOG_INFO, - "Send verification request message - sending request to verifier server"); + "Websocket engine uploader: Send verification request message - sending request to verifier server"); ssize_t sent_bytes = mg_ws_send(ws_connection, g_verif_msg_str->str, g_verif_msg_str->len, WEBSOCKET_OP_TEXT); if (sent_bytes <= 0) { @@ -141,7 +145,7 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* } } else { syslog_server(LOG_ERR, - "Send verification request message - failed to construct message to send"); + "Websocket engine uploader: Send verification request message - failed to construct message to send"); ws_data_ptr->finished = true; ws_data_ptr->success = false; } @@ -159,7 +163,7 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* */ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data *ws_data_ptr) { if (ws_msg == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, "Process verification result message - invalid parameters"); + syslog_server(LOG_ERR, "Websocket engine uploader: Process verification result message - invalid parameters"); return; } @@ -168,7 +172,7 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data if (verif_success) { syslog_server(LOG_INFO, - "Process verification result message - engine satisfies all its properties"); + "Websocket engine uploader: Process verification result message - engine satisfies all its properties"); ws_data_ptr->success = true; ws_data_ptr->finished = true; } else { @@ -178,13 +182,13 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data if (!status_false_in_reply) { // No 'status' field in answer with either true or false syslog_server(LOG_INFO, - "Process verification result message - " + "Websocket engine uploader: Process verification result message - " "engine verification result inconclusive"); ws_data_ptr->message = g_string_new("Verification done but no result status known."); } else { // Ordinary failure. Save server's reply (to forward to client later on) syslog_server(LOG_INFO, - "Process verification result message - " + "Websocket engine uploader: Process verification result message - " "engine does not satisfy all its properties"); ws_data_ptr->message = g_string_new(""); g_string_append_printf(ws_data_ptr->message,"%s", ws_msg->data.ptr); @@ -206,7 +210,7 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ // Parses mg_ws_message, which is expected to contain a message from the verification server. // Then adjusts ws_data_ptr struct according to server's message. if (ws_msg == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, "Process verification server reply - invalid parameters"); + syslog_server(LOG_ERR, "Websocket engine uploader: Process verification server reply - invalid parameters"); return; } @@ -214,7 +218,7 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ char *msg_type_is_defined = strstr(ws_msg->data.ptr, msg_type_field_key); if (!msg_type_is_defined) { syslog_server(LOG_ERR, - "Process verification server reply - reply lacks __MESSAGE_TYPE__ field"); + "Websocket engine uploader: Process verification server reply - reply lacks __MESSAGE_TYPE__ field"); return; } @@ -225,17 +229,17 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ if (type_verif_req_received) { // verification has started syslog_server(LOG_INFO, - "Process verification server reply - verification server begun verification"); + "Websocket engine uploader: Process verification server reply - verification server begun verification"); ws_data_ptr->started = true; } else if (type_verif_req_result) { syslog_server(LOG_INFO, - "Process verification server reply - verification server completed verification"); + "Websocket engine uploader: Process verification server reply - verification server completed verification"); // verification has finished, parse result (updates ws_data_ptr) process_verification_result_msg(ws_msg, ws_data_ptr); } else { // Unknown message type specified by the server. syslog_server(LOG_WARNING, - "Process verification server reply - invalid reply format"); + "Websocket engine uploader: Process verification server reply - invalid reply format"); // We are pessimistic and assume that the verification server will not reply again // after this "mistake" ws_data_ptr->success = false; @@ -259,13 +263,13 @@ void websocket_verification_callback(struct mg_connection *ws_connection, int ev, void *ev_data, void *fn_data) { ws_verif_data *ws_data_ptr = fn_data; if (ws_connection == NULL) { - syslog_server(LOG_ERR, "Websocket verification callback - connection is NULL"); + syslog_server(LOG_ERR, "Websocket engine uploader: verification callback - connection is NULL"); // Error is encountered, the verification can't be completed ws_data_ptr->success = false; ws_data_ptr->finished = true; } else if (ev == MG_EV_ERROR) { syslog_server(LOG_ERR, - "Websocket verification callback - received error event: %s", + "Websocket engine uploader: verification callback - received error event: %s", (char *) ev_data); // Error is encountered, the verification can't be completed ws_data_ptr->success = false; @@ -278,7 +282,7 @@ void websocket_verification_callback(struct mg_connection *ws_connection, process_verif_server_reply((struct mg_ws_message *) ev_data, ws_data_ptr); } else if (ev == MG_EV_CLOSE) { syslog_server(LOG_INFO, - "Websocket verification callback - " + "Websocket engine uploader: verification callback - " "closing websocket connection to verifier server"); ws_data_ptr->finished = true; } @@ -290,7 +294,9 @@ verif_result verify_engine_model(const char* f_filepath) { ws_verif_data ws_verif_data = {false, false, false, g_string_new(f_filepath), NULL}; if (verifier_url == NULL) { - syslog_server(LOG_ERR, "Verify engine model - no verifier URL has been set, abort"); + syslog_server(LOG_ERR, + "Websocket engine uploader: Verify engine model - " + "no verifier URL has been set, abort"); verif_result result_data; result_data.success = false; result_data.message = g_string_new("No verifier server URL has been set, " @@ -318,7 +324,8 @@ verif_result verify_engine_model(const char* f_filepath) { ws_verif_data.finished = true; ws_verif_data.success = false; syslog_server(LOG_WARNING, - "Verify engine model - verification did not start within %d ms, abort", + "Websocket engine uploader: Verify engine model - " + "verification did not start within %d ms, abort", (poll_counter * websocket_single_poll_length_ms)); } } From 042ec48a65ac4683fff3721c36f3288b7e113f45 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 15:42:25 +0100 Subject: [PATCH 39/45] engine uploader formatting --- .../src/websocket_uploader/engine_uploader.c | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index f5220193..33fe56b2 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -134,7 +134,8 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* // Try to send verification request if (g_verif_msg_str != NULL && g_verif_msg_str->len > 0) { syslog_server(LOG_INFO, - "Websocket engine uploader: Send verification request message - sending request to verifier server"); + "Websocket engine uploader: Send verification request message - " + "sending request to verifier server"); ssize_t sent_bytes = mg_ws_send(ws_connection, g_verif_msg_str->str, g_verif_msg_str->len, WEBSOCKET_OP_TEXT); if (sent_bytes <= 0) { @@ -145,7 +146,8 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* } } else { syslog_server(LOG_ERR, - "Websocket engine uploader: Send verification request message - failed to construct message to send"); + "Websocket engine uploader: Send verification request message - " + "failed to construct message to send"); ws_data_ptr->finished = true; ws_data_ptr->success = false; } @@ -163,7 +165,9 @@ void send_verif_req_message(struct mg_connection *ws_connection, ws_verif_data* */ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data *ws_data_ptr) { if (ws_msg == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, "Websocket engine uploader: Process verification result message - invalid parameters"); + syslog_server(LOG_ERR, + "Websocket engine uploader: Process verification result message - " + "invalid parameters"); return; } @@ -172,7 +176,8 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data if (verif_success) { syslog_server(LOG_INFO, - "Websocket engine uploader: Process verification result message - engine satisfies all its properties"); + "Websocket engine uploader: Process verification result message - " + "engine satisfies all its properties"); ws_data_ptr->success = true; ws_data_ptr->finished = true; } else { @@ -210,7 +215,9 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ // Parses mg_ws_message, which is expected to contain a message from the verification server. // Then adjusts ws_data_ptr struct according to server's message. if (ws_msg == NULL || ws_data_ptr == NULL) { - syslog_server(LOG_ERR, "Websocket engine uploader: Process verification server reply - invalid parameters"); + syslog_server(LOG_ERR, + "Websocket engine uploader: Process verification server reply - " + "invalid parameters"); return; } @@ -218,7 +225,8 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ char *msg_type_is_defined = strstr(ws_msg->data.ptr, msg_type_field_key); if (!msg_type_is_defined) { syslog_server(LOG_ERR, - "Websocket engine uploader: Process verification server reply - reply lacks __MESSAGE_TYPE__ field"); + "Websocket engine uploader: Process verification server reply - " + "reply lacks __MESSAGE_TYPE__ field"); return; } @@ -229,17 +237,20 @@ void process_verif_server_reply(struct mg_ws_message *ws_msg, ws_verif_data *ws_ if (type_verif_req_received) { // verification has started syslog_server(LOG_INFO, - "Websocket engine uploader: Process verification server reply - verification server begun verification"); + "Websocket engine uploader: Process verification server reply - " + "verification server begun verification"); ws_data_ptr->started = true; } else if (type_verif_req_result) { syslog_server(LOG_INFO, - "Websocket engine uploader: Process verification server reply - verification server completed verification"); + "Websocket engine uploader: Process verification server reply - " + "verification server completed verification"); // verification has finished, parse result (updates ws_data_ptr) process_verification_result_msg(ws_msg, ws_data_ptr); } else { // Unknown message type specified by the server. syslog_server(LOG_WARNING, - "Websocket engine uploader: Process verification server reply - invalid reply format"); + "Websocket engine uploader: Process verification server reply - " + "invalid reply format"); // We are pessimistic and assume that the verification server will not reply again // after this "mistake" ws_data_ptr->success = false; @@ -263,7 +274,8 @@ void websocket_verification_callback(struct mg_connection *ws_connection, int ev, void *ev_data, void *fn_data) { ws_verif_data *ws_data_ptr = fn_data; if (ws_connection == NULL) { - syslog_server(LOG_ERR, "Websocket engine uploader: verification callback - connection is NULL"); + syslog_server(LOG_ERR, + "Websocket engine uploader: verification callback - connection is NULL"); // Error is encountered, the verification can't be completed ws_data_ptr->success = false; ws_data_ptr->finished = true; From b1c70ce4d44205f427881097aab1e8c655aeb916 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Tue, 28 Nov 2023 15:53:18 +0100 Subject: [PATCH 40/45] admin verification URL formatting --- server/src/handler_admin.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index f7aa92a1..a04d6473 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -236,16 +236,16 @@ onion_connection_status handler_set_verification_url(void *_, onion_request *req if ((onion_request_get_flags(req) & OR_METHODS) == OR_POST) { const char *data_verification_url = onion_request_get_post(req, "verification-url"); if (data_verification_url == NULL) { - syslog_server(LOG_ERR, "Request: Set verification url - invalid parameters"); + syslog_server(LOG_ERR, "Request: Set verification URL - invalid parameters"); return OCS_NOT_IMPLEMENTED; } set_verifier_url(data_verification_url); syslog_server(LOG_NOTICE, - "Request: Set verification url - new url: %s - done", + "Request: Set verification URL - new URL: %s - done", data_verification_url); return OCS_PROCESSED; } else { - syslog_server(LOG_ERR, "Request: Set verification url - wrong request type"); + syslog_server(LOG_ERR, "Request: Set verification URL - wrong request type"); return OCS_NOT_IMPLEMENTED; } } From fe82c6cf4690709544aa0efdb4363d38cb8575a6 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Thu, 30 Nov 2023 16:48:30 +0100 Subject: [PATCH 41/45] updated handler log format with abort and finish --- README.md | 14 +++---- server/src/handler_admin.c | 14 +++---- server/src/handler_controller.c | 29 +++++++------- server/src/handler_driver.c | 68 ++++++++++++++++++--------------- server/src/handler_monitor.c | 2 +- server/src/handler_upload.c | 37 +++++++++--------- 6 files changed, 89 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 012d40f2..796aadbb 100644 --- a/README.md +++ b/README.md @@ -218,25 +218,25 @@ is not the same as the one at the server We try to use a consistent logging format in all request handlers. General workflow of how request handlers generate log messages: 1. Parse form data. 2. Validate form data. If validation fails, make a log on `ERROR` level and stop processing. -3. Make a log on `NOTICE` or `INFO` level that represents the start of processing, with ` - start` at the end of the log. -4. Process request. If processing causes an error, (try to) make a log on the `ERROR` level and stop processing. -5. Processing concluded. Indicate this by printing the log message of Step 3 again with ` - finished` instead of ` - start` at the end. +3. Make a log on log level `NOTICE` that represents the start of processing, with ` - start` at the end of the log. +4. Process request. If processing causes an error, make a log on the `ERROR` or `WARNING` log level with ` - abort` at the end of the log and stop processing. +5. Processing concluded. Indicate this by printing the log message of Step 3 again, on the same log level, with ` - finish` instead of ` - start` at the end. For request handlers that barely do any "processing" at all; e.g. where only a status variable is updated, they only generate one log message that ends with ` - done`. -Request handlers that only return information (getters) also use the ` - done` pattern instead of `start` and `finished`, and use the log level `INFO`. +Request handlers that only return information (getters) also use the ` - done` pattern instead of `start` and `finish`, and use the log level `INFO` for the ` - done` log. As an example, when a request is made to set point10 to the normal state, the request handler (`handler_set_point`) generates the following log messages when the processing is successful: > LOG_NOTICE: `Request: Set point - point: point10 state: normal - start` > _Intervening log messages from internal processing_ -> LOG_NOTICE: `Request: Set point - point: point10 state: normal - finished` +> LOG_NOTICE: `Request: Set point - point: point10 state: normal - finish` 1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" -2. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal - finished" +2. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal - finish" If the above request was instead made with an unsupported state, e.g., `foobar`, then the request handler would generate the following log messages to say that the processing was stopped because of invalid parameters: > LOG_NOTICE: `Request: Set point - point: point10 state: foobar - start` > _Intervening log messages from internal processing_ -> LOG_ERR: `Request: Set point - point: point10 state: foobar - invalid parameters` +> LOG_ERR: `Request: Set point - point: point10 state: foobar - invalid parameters - abort` If the above request forgot to specify the state, e.g., a null parameter, then the request handler would only generate the following log message to say that the verification failed: diff --git a/server/src/handler_admin.c b/server/src/handler_admin.c index a04d6473..2d73e078 100644 --- a/server/src/handler_admin.c +++ b/server/src/handler_admin.c @@ -145,11 +145,11 @@ onion_connection_status handler_startup(void *_, onion_request *req, onion_respo if (startup_server()) { retval = OCS_PROCESSED; syslog_server(LOG_NOTICE, - "Request: Startup server - session id: %ld - finished", + "Request: Startup server - session id: %ld - finish", session_id); } else { syslog_server(LOG_ERR, - "Request: Startup server - session id: %ld - unable to start BiDiB", + "Request: Startup server - session id: %ld - unable to start BiDiB - abort", session_id); } } else { @@ -194,7 +194,7 @@ onion_connection_status handler_set_track_output(void *_, onion_request *req, on syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x - start", state); bidib_set_track_output_state_all(state); bidib_flush(); - syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x - finished", state); + syslog_server(LOG_NOTICE, "Request: Set track output - state: 0x%02x - finish", state); return OCS_PROCESSED; } } else { @@ -284,12 +284,12 @@ onion_connection_status handler_admin_release_train(void *_, onion_request *req, if (!release_train(grab_id)) { syslog_server(LOG_ERR, - "Request: Admin release train - train: %s - invalid grab id", + "Request: Admin release train - train: %s - invalid grab id - abort", data_train); return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Admin release train - train: %s - finished", + "Request: Admin release train - train: %s - finish", data_train); return OCS_PROCESSED; } @@ -327,12 +327,12 @@ onion_connection_status handler_admin_set_dcc_train_speed(void *_, onion_request if (bidib_set_train_speed(data_train, speed, data_track_output)) { syslog_server(LOG_ERR, "Request: Admin set dcc train speed - train: %s speed: %d - " - "invalid parameters", + "invalid parameters - abort", data_train, speed); } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Admin set dcc train speed - train: %s speed: %d - finished", + "Request: Admin set dcc train speed - train: %s speed: %d - finish", data_train, speed); } pthread_mutex_unlock(&grabbed_trains_mutex); diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index e3f92e92..2037226b 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -455,7 +455,7 @@ onion_connection_status handler_release_route(void *_, onion_request *req, onion } else { syslog_server(LOG_NOTICE, "Request: Release route - route: %s - start", route_id); release_route(route_id); - syslog_server(LOG_NOTICE, "Request: Release route - route: %s - finished", route_id); + syslog_server(LOG_NOTICE, "Request: Release route - route: %s - finish", route_id); return OCS_PROCESSED; } } else { @@ -478,13 +478,13 @@ onion_connection_status handler_set_point(void *_, onion_request *req, onion_res data_point, data_state); if (bidib_switch_point(data_point, data_state)) { syslog_server(LOG_ERR, - "Request: Set point - point: %s state: %s - invalid parameters", + "Request: Set point - point: %s state: %s - invalid parameters - abort", data_point, data_state); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Set point - point: %s state: %s - finished", + "Request: Set point - point: %s state: %s - finish", data_point, data_state); return OCS_PROCESSED; } @@ -509,13 +509,14 @@ onion_connection_status handler_set_signal(void *_, onion_request *req, onion_re data_signal, data_state); if (bidib_set_signal(data_signal, data_state)) { syslog_server(LOG_ERR, - "Request: Set signal - signal: %s state: %s - invalid parameters", + "Request: Set signal - signal: %s state: %s - " + "invalid parameters - abort", data_signal, data_state); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Set signal - signal: %s state: %s - finished", + "Request: Set signal - signal: %s state: %s - finish", data_signal, data_state); return OCS_PROCESSED; } @@ -540,13 +541,14 @@ onion_connection_status handler_set_peripheral(void *_, onion_request *req, onio data_peripheral, data_state); if (bidib_set_peripheral(data_peripheral, data_state)) { syslog_server(LOG_ERR, - "Request: Set peripheral - peripheral: %s state: %s - invalid parameters", + "Request: Set peripheral - peripheral: %s state: %s - " + "invalid parameters - abort", data_peripheral, data_state); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Set peripheral - peripheral: %s state: %s - finished", + "Request: Set peripheral - peripheral: %s state: %s - finish", data_peripheral, data_state); return OCS_PROCESSED; } @@ -588,7 +590,7 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, oni if (selected_interlocker_instance != -1) { syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - another " - "interlocker instance is already set", + "interlocker instance is already set - abort", data_interlocker); return OCS_NOT_IMPLEMENTED; } @@ -597,13 +599,13 @@ onion_connection_status handler_set_interlocker(void *_, onion_request *req, oni if (selected_interlocker_instance == -1) { syslog_server(LOG_ERR, "Request: Set interlocker - interlocker: %s - invalid " - "parameters or no more interlocker instances can be loaded", + "parameters or no more interlocker instances can be loaded - abort", data_interlocker); return OCS_NOT_IMPLEMENTED; } else { onion_response_printf(res, "%s", selected_interlocker_name->str); syslog_server(LOG_NOTICE, - "Request: Set interlocker - interlocker: %s - finished", + "Request: Set interlocker - interlocker: %s - finish", data_interlocker); return OCS_PROCESSED; } @@ -627,7 +629,7 @@ onion_connection_status handler_unset_interlocker(void *_, onion_request *req, o if (selected_interlocker_instance == -1) { syslog_server(LOG_ERR, "Request: Unset interlocker - interlocker: %s - " - "no interlocker instance to unset", + "no interlocker instance to unset - abort", data_interlocker); return OCS_NOT_IMPLEMENTED; } @@ -635,12 +637,13 @@ onion_connection_status handler_unset_interlocker(void *_, onion_request *req, o unset_interlocker(data_interlocker); if (selected_interlocker_instance != -1) { syslog_server(LOG_ERR, - "Request: Unset interlocker - interlocker: %s - invalid parameters", + "Request: Unset interlocker - interlocker: %s - " + "invalid parameters - abort", data_interlocker); return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Unset interlocker - interlocker: %s - finished", + "Request: Unset interlocker - interlocker: %s - finish", data_interlocker); return OCS_PROCESSED; } diff --git a/server/src/handler_driver.c b/server/src/handler_driver.c index 5529880e..d8b024b1 100644 --- a/server/src/handler_driver.c +++ b/server/src/handler_driver.c @@ -890,7 +890,8 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, onion_re if (!train_state_query.known) { bidib_free_train_state_query(train_state_query); syslog_server(LOG_ERR, - "Request: Grab train - train: %s engine: %s - unknown train or train state", + "Request: Grab train - train: %s engine: %s - " + "unknown train or train state - abort", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } @@ -899,12 +900,12 @@ onion_connection_status handler_grab_train(void *_, onion_request *req, onion_re int grab_id = grab_train(data_train, data_engine); if (grab_id == -1) { syslog_server(LOG_ERR, - "Request: Grab train - train: %s engine: %s - train could not be grabbed", + "Request: Grab train - train: %s engine: %s - train could not be grabbed - abort", data_train, data_engine); return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Grab train - train: %s engine: %s - finished", + "Request: Grab train - train: %s engine: %s - finish", data_train, data_engine); onion_response_printf(res, "%ld,%d", session_id, grab_id); return OCS_PROCESSED; @@ -959,13 +960,13 @@ onion_connection_status handler_release_train(void *_, onion_request *req, onion if (!release_train(grab_id)) { syslog_server(LOG_ERR, - "Request: Release train - grab id: %d train: %s - invalid grab id", + "Request: Release train - grab id: %d train: %s - invalid grab id - abort", grab_id, train_id); free(train_id); return OCS_NOT_IMPLEMENTED; } else { syslog_server(LOG_NOTICE, - "Request: Release train - grab id: %d train: %s - finished", + "Request: Release train - grab id: %d train: %s - finish", grab_id, train_id); free(train_id); return OCS_PROCESSED; @@ -1012,11 +1013,10 @@ onion_connection_status handler_request_route(void *_, onion_request *req, onion // Use interlocker to find and grant a route GString *route_id = grant_route(train_id, data_source_name, data_destination_name); if (route_id->str != NULL && params_check_is_number(route_id->str)) { - // Logging of the granted route ID happens in the grant_route function - onion_response_printf(res, "%s", route_id->str); syslog_server(LOG_NOTICE, - "Request: Request train route - train: %s from: %s to: %s - finished", - train_id, data_source_name, data_destination_name); + "Request: Request train route - train: %s from: %s to: %s - route %s granted", + train_id, data_source_name, data_destination_name, route_id->str); + onion_response_printf(res, "%s", route_id->str); } else { onion_response_set_code(res, HTTP_BAD_REQUEST); syslog_server(LOG_WARNING, @@ -1037,6 +1037,9 @@ onion_connection_status handler_request_route(void *_, onion_request *req, onion } else { onion_response_printf(res, "Route could not be granted (%s)", route_id->str); } + syslog_server(LOG_NOTICE, + "Request: Request train route - train: %s from: %s to: %s - finish", + train_id, data_source_name, data_destination_name); } g_string_free(route_id, true); free(train_id); @@ -1089,16 +1092,13 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, on if (strcmp(result, "granted") == 0) { onion_response_printf(res, "%s", result); syslog_server(LOG_NOTICE, - "Request: Request train route id - train: %s route: %s - finished", - train_id, route_id); - free(train_id); - return OCS_PROCESSED; + "Request: Request train route id - train: %s route: %s - route granted", + train_id, route_id, result); } else { - syslog_server(LOG_ERR, + onion_response_set_code(res, HTTP_BAD_REQUEST); + syslog_server(LOG_WARNING, "Request: Request train route id - train: %s route: %s - route not granted (%s)", train_id, route_id, result); - free(train_id); - onion_response_set_code(res, HTTP_BAD_REQUEST); if (strcmp(result, "not_grantable") == 0) { onion_response_printf(res, "Route %s is not available or has conflicts with others", @@ -1112,9 +1112,12 @@ onion_connection_status handler_request_route_id(void *_, onion_request *req, on "Route %s could not be granted", route_id); } - return OCS_PROCESSED; } - + syslog_server(LOG_NOTICE, + "Request: Request train route id - train: %s route: %s - finish", + train_id, route_id); + free(train_id); + return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Request train route id - system not running or wrong request type"); @@ -1145,7 +1148,7 @@ onion_connection_status handler_driving_direction(void *_, onion_request *req, onion_response_printf(res, "%s", is_forward_driving(route, data_train) ? "forwards" : "backwards"); pthread_mutex_unlock(&interlocker_mutex); - syslog_server(LOG_INFO, "Request: Driving direction - train: %s - finished", data_train); + syslog_server(LOG_INFO, "Request: Driving direction - train: %s - finish", data_train); return OCS_PROCESSED; } else { @@ -1193,13 +1196,14 @@ onion_connection_status handler_drive_route(void *_, onion_request *req, onion_r if (drive_route(grab_id, route_id, is_automatic)) { onion_response_printf(res, "Route %s driving completed", route_id); syslog_server(LOG_NOTICE, - "Request: Drive route - route: %s train: %s drive mode: %s - finished", + "Request: Drive route - route: %s train: %s drive mode: %s - finish", route_id, train_id, mode); free(train_id); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, - "Request: Drive route - route: %s train: %s drive mode: %s - driving failed", + "Request: Drive route - route: %s train: %s drive mode: %s - " + "driving failed - abort", route_id, train_id, mode); ///TODO: Automatic countermeasures? e.g. set train speed to 0 free(train_id); @@ -1255,7 +1259,7 @@ onion_connection_status handler_set_dcc_train_speed(void *_, onion_request *req, dyn_containers_set_train_engine_instance_inputs(eng_instance, abs(speed), speed >= 0); syslog_server(LOG_NOTICE, - "Request: Set dcc train speed - train: %s speed: %d - finished", + "Request: Set dcc train speed - train: %s speed: %d - finish", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; @@ -1297,7 +1301,8 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Set calibrated train speed - train: %s speed: %d - invalid track output", + "Request: Set calibrated train speed - train: %s speed: %d - " + "invalid track output", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1309,14 +1314,15 @@ onion_connection_status handler_set_calibrated_train_speed(void *_, if (bidib_set_calibrated_train_speed(grabbed_trains[grab_id].name->str, speed, data_track_output)) { syslog_server(LOG_ERR, - "Request: Set calibrated train speed - train: %s speed: %d - invalid parameters", + "Request: Set calibrated train speed - train: %s speed: %d - " + "invalid parameters - abort", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Set calibrated train speed - train: %s speed: %d - finished", + "Request: Set calibrated train speed - train: %s speed: %d - finish", grabbed_trains[grab_id].name->str, speed); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; @@ -1363,14 +1369,14 @@ onion_connection_status handler_set_train_emergency_stop(void *_, if (bidib_emergency_stop_train(grabbed_trains[grab_id].name->str, data_track_output)) { syslog_server(LOG_ERR, - "Request: Set train emergency stop - train: %s - invalid parameters", + "Request: Set train emergency stop - train: %s - invalid parameters - abort", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Set train emergency stop - train: %s - finished", + "Request: Set train emergency stop - train: %s - finish", grabbed_trains[grab_id].name->str); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; @@ -1421,7 +1427,8 @@ onion_connection_status handler_set_train_peripheral(void *_, return OCS_NOT_IMPLEMENTED; } else if (data_track_output == NULL) { syslog_server(LOG_ERR, - "Request: Set train peripheral - train: %s peripheral: %s - invalid track output", + "Request: Set train peripheral - train: %s peripheral: %s - " + "invalid track output", grabbed_trains[grab_id].name->str, data_peripheral); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; @@ -1435,14 +1442,15 @@ onion_connection_status handler_set_train_peripheral(void *_, data_track_output)) { syslog_server(LOG_ERR, "Request: Set train peripheral - train: %s " - "peripheral: %s state: 0x%02x - invalid parameters", + "peripheral: %s state: 0x%02x - invalid parameters - abort", grabbed_trains[grab_id].name->str, data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_NOT_IMPLEMENTED; } else { bidib_flush(); syslog_server(LOG_NOTICE, - "Request: Set train peripheral - train: %s peripheral: %s state: 0x%02x - finished", + "Request: Set train peripheral - train: %s peripheral: %s state: 0x%02x" + " - finish", grabbed_trains[grab_id].name->str, data_peripheral, state); pthread_mutex_unlock(&grabbed_trains_mutex); return OCS_PROCESSED; diff --git a/server/src/handler_monitor.c b/server/src/handler_monitor.c index ee18cc9e..18bcf9ec 100644 --- a/server/src/handler_monitor.c +++ b/server/src/handler_monitor.c @@ -611,7 +611,7 @@ onion_connection_status handler_get_route(void *_, onion_request *req, onion_res pthread_mutex_unlock(&interlocker_mutex); onion_response_printf(res, "%s", route_str->str); - syslog_server(LOG_INFO, "Request: Get route - route: %s - finished", route_id); + syslog_server(LOG_INFO, "Request: Get route - route: %s - finish", route_id); g_string_free(route_str, true); return OCS_PROCESSED; } else { diff --git a/server/src/handler_upload.c b/server/src/handler_upload.c index ab93598c..a9041746 100644 --- a/server/src/handler_upload.c +++ b/server/src/handler_upload.c @@ -155,7 +155,8 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion if (engine_file_exists(filename)) { syslog_server(LOG_ERR, - "Request: Upload engine - engine file: %s - engine file already exists", + "Request: Upload engine - engine file: %s - " + "engine file already exists - abort", filename); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine file already exists"); @@ -178,7 +179,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion verif_result engine_verif_result = verify_engine_model(final_filepath); if (!engine_verif_result.success) { // Stop upload if verification did not succeed - syslog_server(LOG_NOTICE, "Request: Upload Engine - engine verification failed"); + syslog_server(LOG_NOTICE, "Request: Upload Engine - engine verification failed - abort"); remove_engine_files(libname); onion_response_set_code(res, HTTP_BAD_REQUEST); if (engine_verif_result.message != NULL) { @@ -199,7 +200,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion syslog_server(LOG_ERR, "Request: Upload engine - engine file: %s - could not be " - "compiled into a C file and then to a shared library", + "compiled into a C file and then to a shared library - abort", filepath); ///TODO: Discuss which code to return onion_response_set_code(res, HTTP_INTERNAL_ERROR); @@ -220,7 +221,8 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion remove_engine_files(libname); syslog_server(LOG_WARNING, - "Request: Upload engine - engine file: %s - no available engine slot", + "Request: Upload engine - engine file: %s - " + "no available engine slot - abort", filename); ///TODO: Discuss which code to return onion_response_set_code(res, HTTP_INTERNAL_ERROR); @@ -231,7 +233,7 @@ onion_connection_status handler_upload_engine(void *_, onion_request *req, onion snprintf(filepath, sizeof(filepath), "%s/%s", engine_dir, libname); dyn_containers_set_engine(engine_slot, filepath); pthread_mutex_unlock(&dyn_containers_mutex); - syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s - finished", filename); + syslog_server(LOG_NOTICE, "Request: Upload engine - engine file: %s - finish", filename); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Upload engine - system not running or wrong request type"); @@ -277,7 +279,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion if (engine_slot < 0) { pthread_mutex_unlock(&dyn_containers_mutex); syslog_server(LOG_WARNING, - "Request: Remove engine - engine: %s - engine could not be found", + "Request: Remove engine - engine: %s - engine could not be found - abort", name); onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s could not be found", name); @@ -288,7 +290,7 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion pthread_mutex_unlock(&dyn_containers_mutex); if (!engine_freed_successfully) { syslog_server(LOG_WARNING, - "Request: Remove engine - engine: %s - engine is still in use", + "Request: Remove engine - engine: %s - engine is still in use - abort", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -298,14 +300,14 @@ onion_connection_status handler_remove_engine(void *_, onion_request *req, onion if (!remove_engine_files(name)) { syslog_server(LOG_ERR, - "Request: Remove engine - engine: %s - files could not be removed", + "Request: Remove engine - engine: %s - files could not be removed - abort", name); ///TODO: This is an internal error, should return different response code IMO onion_response_set_code(res, HTTP_BAD_REQUEST); onion_response_printf(res, "Engine %s files could not be removed", name); return OCS_PROCESSED; } - syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - finished", name); + syslog_server(LOG_NOTICE, "Request: Remove engine - engine: %s - finish", name); return OCS_PROCESSED; } else { syslog_server(LOG_ERR, "Request: Remove engine - system not running or wrong request type"); @@ -372,7 +374,8 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, if (interlocker_file_exists(filename)) { syslog_server(LOG_ERR, - "Request: Upload interlocker - interlocker file: %s - file already exists", + "Request: Upload interlocker - interlocker file: %s - " + "file already exists - abort", filename); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -399,7 +402,7 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, if (status == DYNLIB_COMPILE_SHARED_BAHNDSL_ERR) { syslog_server(LOG_ERR, "Request: Upload interlocker - interlocker file: %s - " - "interlocker could not be compiled", + "interlocker could not be compiled - abort", filename); remove_interlocker_files(libname); @@ -419,7 +422,7 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, syslog_server(LOG_WARNING, "Request: Upload interlocker - interlocker file: %s - " - "no available interlocker slot", + "no available interlocker slot - abort", filename); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -431,7 +434,7 @@ onion_connection_status handler_upload_interlocker(void *_, onion_request *req, dyn_containers_set_interlocker(interlocker_slot, filepath); pthread_mutex_unlock(&dyn_containers_mutex); syslog_server(LOG_NOTICE, - "Request: Upload interlocker - interlocker file: %s - finished", + "Request: Upload interlocker - interlocker file: %s - finish", filename); return OCS_PROCESSED; } else { @@ -482,7 +485,7 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, pthread_mutex_unlock(&dyn_containers_mutex); syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " - "interlocker could not be found", + "interlocker could not be found - abort", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -495,7 +498,7 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, if (!interlocker_freed_successfully) { syslog_server(LOG_WARNING, "Request: Remove interlocker - interlocker: %s - " - "interlocker is still in use", + "interlocker is still in use - abort", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -506,7 +509,7 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, if (!remove_interlocker_files(name)) { syslog_server(LOG_ERR, "Request: Remove interlocker - interlocker: %s - " - "files could not be removed", + "files could not be removed - abort", name); onion_response_set_code(res, HTTP_BAD_REQUEST); @@ -514,7 +517,7 @@ onion_connection_status handler_remove_interlocker(void *_, onion_request *req, return OCS_PROCESSED; } syslog_server(LOG_NOTICE, - "Request: Remove interlocker - interlocker: %s - finished", + "Request: Remove interlocker - interlocker: %s - finish", name); return OCS_PROCESSED; } else { From 021c4583d07620eefc92ff7ca787576fef819cfc Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Thu, 30 Nov 2023 16:52:25 +0100 Subject: [PATCH 42/45] address "granting in progress" discussion --- server/src/handler_controller.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index 2037226b..b5d09a9b 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -332,7 +332,12 @@ const char *grant_route_id(const char *train_id, const char *route_id) { return "not_clear"; } - // Grant the route to the train and mark it unavailable + // Grant the route to the train + + syslog_server(LOG_INFO, + "Grant route id - train: %s route: %s - checks passed, now grant route", + train_id, route_id); + route->train = strdup(train_id); if (route->train == NULL) { @@ -342,10 +347,6 @@ const char *grant_route_id(const char *train_id, const char *route_id) { train_id, route_id); return "not_grantable"; } - - syslog_server(LOG_INFO, - "Grant route id - train: %s route: %s - granting in progress, setting points and signals", - train_id, route_id); // Set the points to their required positions for (size_t i = 0; i < route->points->len; i++) { From c6db3847c6313d0a1a3cccd494aa4637b4850967 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Thu, 30 Nov 2023 17:06:49 +0100 Subject: [PATCH 43/45] remove hardcoding route conflicts array length --- server/src/handler_controller.c | 11 +++++++---- server/src/interlocking.c | 8 ++++++++ server/src/interlocking.h | 7 +++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/server/src/handler_controller.c b/server/src/handler_controller.c index b5d09a9b..89749b7f 100644 --- a/server/src/handler_controller.c +++ b/server/src/handler_controller.c @@ -130,10 +130,12 @@ GArray *get_granted_route_conflicts_sectional(const char *route_id) { return NULL; } GArray* conflict_route_ids = g_array_new(FALSE, FALSE, sizeof(char *)); - ///TODO: Discuss this hardcoded 1024 - char *conflict_routes[1024]; + + const unsigned int route_count = MAX(interlocking_table_get_size(), 1024); + char *conflict_routes[route_count]; const size_t conflict_routes_len = config_get_array_string_value("route", route_id, "conflicts", conflict_routes); + for (size_t i = 0; i < conflict_routes_len; i++) { t_interlocking_route *conflict_route = get_route(conflict_routes[i]); if (conflict_route->train != NULL) { @@ -169,8 +171,9 @@ GArray *get_granted_route_conflicts(const char *route_id) { // Use native implementation of sectional checker return get_granted_route_conflicts_sectional(route_id); } - - char *conflict_routes[1024]; + + const unsigned int route_count = MAX(interlocking_table_get_size(), 1024); + char *conflict_routes[route_count]; const size_t conflict_routes_len = config_get_array_string_value("route", route_id, "conflicts", conflict_routes); for (size_t i = 0; i < conflict_routes_len; i++) { diff --git a/server/src/interlocking.c b/server/src/interlocking.c index bef6847c..66b0e0ab 100644 --- a/server/src/interlocking.c +++ b/server/src/interlocking.c @@ -163,3 +163,11 @@ t_interlocking_route *get_route(const char *route_id) { return NULL; } + +unsigned int interlocking_table_get_size() { + if (route_hash_table != NULL) { + return g_hash_table_size(route_hash_table); + } + + return 0; +} diff --git a/server/src/interlocking.h b/server/src/interlocking.h index a7210464..355ad00c 100644 --- a/server/src/interlocking.h +++ b/server/src/interlocking.h @@ -115,5 +115,12 @@ int interlocking_table_get_route_id(const char *source_id, const char *destinati */ t_interlocking_route *get_route(const char *route_id); +/** + * Returns the number of routes in the interlocking table. + * + * @return unsigned int number of routes in the interlocking table. 0 if no interlocking table exists. + */ +unsigned int interlocking_table_get_size(); + #endif // INTERLOCKING_H From c616f7f15d3ca8d1f70cd409db475b023141adc1 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Wed, 17 Jan 2024 13:33:05 +0100 Subject: [PATCH 44/45] Update Readme --- README.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 796aadbb..1da7c5ec 100644 --- a/README.md +++ b/README.md @@ -226,18 +226,16 @@ For request handlers that barely do any "processing" at all; e.g. where only a s Request handlers that only return information (getters) also use the ` - done` pattern instead of `start` and `finish`, and use the log level `INFO` for the ` - done` log. As an example, when a request is made to set point10 to the normal state, the request handler (`handler_set_point`) generates the following log messages when the processing is successful: -> LOG_NOTICE: `Request: Set point - point: point10 state: normal - start` -> _Intervening log messages from internal processing_ -> LOG_NOTICE: `Request: Set point - point: point10 state: normal - finish` -1. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal" -2. Level LOG_NOTICE; Log: "Request: Set point - point: point10 state: normal - finish" +> LOG_NOTICE: `Request: Set point - point: point10 state: normal - start` +> _Intervening log messages from internal processing_ +> LOG_NOTICE: `Request: Set point - point: point10 state: normal - finish` If the above request was instead made with an unsupported state, e.g., `foobar`, then the request handler would generate the following log messages to say that the processing was stopped because of invalid parameters: -> LOG_NOTICE: `Request: Set point - point: point10 state: foobar - start` -> _Intervening log messages from internal processing_ -> LOG_ERR: `Request: Set point - point: point10 state: foobar - invalid parameters - abort` +> LOG_NOTICE: `Request: Set point - point: point10 state: foobar - start` +> _Intervening log messages from internal processing_ +> LOG_ERR: `Request: Set point - point: point10 state: foobar - invalid parameters - abort` -If the above request forgot to specify the state, e.g., a null parameter, then the request handler would only generate the following log message to say that the verification failed: +If the above request forgot to specify the state, i.e., the state parameter is `null`, then the request handler would only generate the following log message to say that the parameter validation failed: > LOG_ERR: `Request: Set point - invalid parameters` \ No newline at end of file From 3975382af675b29eeda0db802416040dfb0f1304 Mon Sep 17 00:00:00 2001 From: Bernhard Luedtke Date: Wed, 17 Jan 2024 15:08:02 +0100 Subject: [PATCH 45/45] log consistency in engine uploader --- server/src/websocket_uploader/engine_uploader.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/websocket_uploader/engine_uploader.c b/server/src/websocket_uploader/engine_uploader.c index 33fe56b2..d9a4708b 100644 --- a/server/src/websocket_uploader/engine_uploader.c +++ b/server/src/websocket_uploader/engine_uploader.c @@ -189,7 +189,7 @@ void process_verification_result_msg(struct mg_ws_message *ws_msg, ws_verif_data syslog_server(LOG_INFO, "Websocket engine uploader: Process verification result message - " "engine verification result inconclusive"); - ws_data_ptr->message = g_string_new("Verification done but no result status known."); + ws_data_ptr->message = g_string_new("Engine verification done but result is unknown."); } else { // Ordinary failure. Save server's reply (to forward to client later on) syslog_server(LOG_INFO, @@ -363,7 +363,7 @@ verif_result verify_engine_model(const char* f_filepath) { void set_verifier_url(const char *upd_verifier_url) { if (upd_verifier_url == NULL) { - syslog_server(LOG_WARNING, "Set verification url - proposed URL is NULL, URL not updated"); + syslog_server(LOG_WARNING, "Set verifier URL - proposed URL is NULL, URL not updated"); return; } if (verifier_url != NULL) { @@ -371,7 +371,7 @@ void set_verifier_url(const char *upd_verifier_url) { verifier_url = NULL; } verifier_url = strdup(upd_verifier_url); - syslog_server(LOG_NOTICE, "Set verification url - verifier URL set to: %s", verifier_url); + syslog_server(LOG_NOTICE, "Set verifier URL - verifier URL set to: %s", verifier_url); } @@ -437,7 +437,7 @@ void cache_verifier_url() { // Write the content to the file fputs(verifier_url, file); - syslog_server(LOG_INFO, "Cache verifier URL - cached url %s", verifier_url); + syslog_server(LOG_INFO, "Cache verifier URL - cached URL %s", verifier_url); // Close the file fclose(file);