diff options
author | OpenGnSys Support Team <soporte-og@soleta.eu> | 2024-12-05 16:38:25 +0100 |
---|---|---|
committer | OpenGnSys Support Team <soporte-og@soleta.eu> | 2024-12-10 12:12:43 +0100 |
commit | e3188191d9da0e49dd156ea70f59b92776216e8c (patch) | |
tree | d9a42147778371baf03b3e04a0134d9bdf0e8315 /src | |
parent | 8f52b8911edfd3f4e2dd1c459f7779eb79492046 (diff) |
rest: add and use http error code to improve error reporting
Use http error code to improve better error reporting:
- 404 Not Found
+ object is not found
- 409 Conflict
+ object already exists
- 423 Locked
+ object is in use
- 500 Internal Server Error:
+ database query fails
+ out of memory
- 501 Service Unavailable
+ Cannot connect to database
- 507 Insufficient Storage
+ Disk is full
Diffstat (limited to 'src')
-rw-r--r-- | src/rest.c | 139 |
1 files changed, 134 insertions, 5 deletions
@@ -469,6 +469,7 @@ static int og_cmd_get_clients(struct og_rest_ctx *ctx) list_for_each_entry(cli_wol, &client_wol_list, list) { if (og_json_client_wol_append(array, cli_wol) < 0) { json_decref(array); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } } @@ -479,6 +480,7 @@ static int og_cmd_get_clients(struct og_rest_ctx *ctx) if (og_json_client_append(array, client) < 0) { json_decref(array); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } } @@ -486,11 +488,13 @@ static int og_cmd_get_clients(struct og_rest_ctx *ctx) root = json_pack("{s:o}", "clients", array); if (!root) { json_decref(array); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (json_dump_callback(root, og_json_dump_clients, &og_buffer, JSON_ENSURE_ASCII)) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -576,6 +580,7 @@ static int og_cmd_wol(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -592,6 +597,7 @@ static int og_cmd_wol(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -619,6 +625,7 @@ static int og_cmd_wol(struct og_rest_ctx *ctx) if (sd < 0) { syslog(LOG_ERR, "cannot open wol socket (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; goto err_free_params; } @@ -636,8 +643,10 @@ static int og_cmd_wol(struct og_rest_ctx *ctx) } cli_wol = og_client_wol_create(&addr); - if (!cli_wol) + if (!cli_wol) { + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; goto err_out; + } list_add_tail(&cli_wol->list, &client_wol_list); @@ -1014,12 +1023,14 @@ static int og_cmd_get_session(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } array = json_array(); if (!array) { og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -1028,6 +1039,7 @@ static int og_cmd_get_session(struct og_rest_ctx *ctx) if (!client_data) { json_decref(array); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } json_object_set_new(client_data, "addr", json_string(params->ips_array[i])); @@ -1037,6 +1049,7 @@ static int og_cmd_get_session(struct og_rest_ctx *ctx) json_decref(client_data); json_decref(array); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -1045,6 +1058,7 @@ static int og_cmd_get_session(struct og_rest_ctx *ctx) json_decref(client_data); json_decref(array); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } json_object_set_new(client_data, "partitions", partitions); @@ -1056,6 +1070,7 @@ static int og_cmd_get_session(struct og_rest_ctx *ctx) root = json_object(); if (!root){ json_decref(array); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -1063,6 +1078,7 @@ static int og_cmd_get_session(struct og_rest_ctx *ctx) if (json_dump_callback(root, og_json_dump_clients, &og_buffer, JSON_ENSURE_ASCII)) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -1218,18 +1234,22 @@ static int og_cmd_get_modes(struct og_rest_ctx *ctx) int ret; root = json_object(); - if (!root) + if (!root) { + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; + } modes = json_array(); if (!modes) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (og_get_boot_modes(&boot_mode_list) < 0) { json_decref(modes); json_decref(root); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -1777,6 +1797,7 @@ static int og_cmd_post_modes(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -1789,6 +1810,7 @@ static int og_cmd_post_modes(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (!dbi_result_next_row(result)) { @@ -1796,6 +1818,7 @@ static int og_cmd_post_modes(struct og_rest_ctx *ctx) params->ips_array[i], __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } mac = dbi_result_get_string(result, "mac"); @@ -1806,6 +1829,7 @@ static int og_cmd_post_modes(struct og_rest_ctx *ctx) params->ips_array[i], __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_507_INSUFFICIENT_STORAGE; return -1; } @@ -1858,12 +1882,15 @@ static int og_cmd_get_client_setup(struct og_rest_ctx *ctx) return -1; root = json_object(); - if (!root) + if (!root) { + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; + } partitions_array = json_array(); if (!partitions_array) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } json_object_set_new(root, "partitions", partitions_array); @@ -1873,6 +1900,7 @@ static int og_cmd_get_client_setup(struct og_rest_ctx *ctx) json_decref(root); syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -1891,6 +1919,7 @@ static int og_cmd_get_client_setup(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -1913,6 +1942,7 @@ static int og_cmd_get_client_setup(struct og_rest_ctx *ctx) json_decref(root); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -1946,6 +1976,7 @@ static int og_cmd_get_client_setup(struct og_rest_ctx *ctx) if (json_dump_callback(root, og_json_dump_clients, &og_buffer, JSON_ENSURE_ASCII)) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -2007,6 +2038,7 @@ static int og_cmd_post_client_repo(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -2025,6 +2057,7 @@ static int og_cmd_post_client_repo(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -2034,6 +2067,7 @@ static int og_cmd_post_client_repo(struct og_rest_ctx *ctx) if (err != 0) { dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } } @@ -2071,11 +2105,13 @@ static int og_cmd_get_center_info(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } if (og_dbi_get_center_info(dbi, ¢er)) { og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } og_dbi_close(dbi); @@ -2133,19 +2169,23 @@ static int og_cmd_get_client_info(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } if (og_dbi_get_computer_info(dbi, &computer, addr)) { og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } og_dbi_close(dbi); root = json_object(); - if (!root) + if (!root) { + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; + } json_object_set_new(root, "serial_number", json_string(computer.serial_number)); @@ -2168,6 +2208,7 @@ static int og_cmd_get_client_info(struct og_rest_ctx *ctx) if (json_dump_callback(root, og_json_dump_clients, &og_buffer, JSON_ENSURE_ASCII)) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -2209,6 +2250,7 @@ static int og_cmd_post_center_update(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -2220,6 +2262,7 @@ static int og_cmd_post_center_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (dbi_result_get_numrows(result) == 0) { @@ -2240,6 +2283,7 @@ static int og_cmd_post_center_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (dbi_result_next_row(result)) { @@ -2248,6 +2292,7 @@ static int og_cmd_post_center_update(struct og_rest_ctx *ctx) center_id, params->name); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } dbi_result_free(result); @@ -2263,6 +2308,7 @@ static int og_cmd_post_center_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to update center in database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } dbi_result_free(result); @@ -2336,6 +2382,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -2347,6 +2394,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (dbi_result_get_numrows(result) > 0) { @@ -2354,6 +2402,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) computer.ip); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } @@ -2367,6 +2416,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (dbi_result_next_row(result)) { @@ -2375,6 +2425,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) computer.mac, client_ip); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } @@ -2410,6 +2461,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to update client in database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } @@ -2419,6 +2471,7 @@ static int og_cmd_post_client_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to set client boot mode (%s:%d)\n", __func__, __LINE__); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -2663,6 +2716,7 @@ static int og_cmd_post_folder_update(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } if (folder.id & OG_COMPUTER_FOLDER_MARKER) { @@ -2713,6 +2767,7 @@ static int og_cmd_post_folder_add(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } if (params->flags & OG_REST_PARAM_ROOM) @@ -2722,6 +2777,9 @@ static int og_cmd_post_folder_add(struct og_rest_ctx *ctx) else err = -1; + if (err < 0) + ctx->http_error = OG_HTTP_409_CONFLICT; + og_dbi_close(dbi); return err; @@ -2833,6 +2891,7 @@ static int og_cmd_post_folder_delete(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -2842,6 +2901,9 @@ static int og_cmd_post_folder_delete(struct og_rest_ctx *ctx) err = og_delete_room_folder(dbi, folder_id); } + if (err < 0) + ctx->http_error = OG_HTTP_404_NOT_FOUND; + og_dbi_close(dbi); return err; } @@ -2918,6 +2980,7 @@ static int og_cmd_post_client_add(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -2930,6 +2993,7 @@ static int og_cmd_post_client_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -2938,6 +3002,7 @@ static int og_cmd_post_client_add(struct og_rest_ctx *ctx) computer.ip); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } dbi_result_free(result); @@ -2954,6 +3019,7 @@ static int og_cmd_post_client_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -3044,6 +3110,7 @@ static int og_cmd_post_client_delete(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3109,6 +3176,7 @@ static int og_cmd_post_client_move(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3172,6 +3240,7 @@ static int og_cmd_get_room_info(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3277,6 +3346,7 @@ static int og_cmd_get_hardware(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3423,6 +3493,7 @@ static int og_cmd_get_software(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3443,6 +3514,7 @@ static int og_cmd_get_software(struct og_rest_ctx *ctx) dbi_conn_error(dbi->conn, &msglog); syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } software = json_array(); @@ -3632,6 +3704,7 @@ static int og_cmd_images(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); json_decref(root); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3783,6 +3856,7 @@ static int og_cmd_add_image(struct og_rest_ctx *ctx, bool update) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3915,6 +3989,7 @@ static int og_cmd_restore_image(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -3967,6 +4042,7 @@ static int og_cmd_delete_image(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4071,6 +4147,7 @@ static int og_cmd_image_scope_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); og_scope_image_list_free(&scope_list); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4185,6 +4262,7 @@ static int og_cmd_image_scope_list(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4326,6 +4404,7 @@ static int og_cmd_cache_list(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); json_decref(clients); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4463,6 +4542,7 @@ static int og_cmd_efi_list(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); json_decref(clients); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4568,6 +4648,7 @@ static int og_cmd_cache_fetch(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4658,6 +4739,7 @@ static int og_cmd_scope_get(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); json_decref(root); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4712,6 +4794,7 @@ static int og_cmd_oglive_list(struct og_rest_ctx *ctx) syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); json_decref(root); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4726,6 +4809,7 @@ static int og_cmd_oglive_list(struct og_rest_ctx *ctx) __func__, __LINE__, msglog); og_dbi_close(dbi); json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -4740,6 +4824,7 @@ static int og_cmd_oglive_list(struct og_rest_ctx *ctx) dbi_result_free(result); og_dbi_close(dbi); json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -4792,6 +4877,7 @@ static int og_cmd_post_center_add(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4804,6 +4890,7 @@ static int og_cmd_post_center_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -4812,6 +4899,7 @@ static int og_cmd_post_center_add(struct og_rest_ctx *ctx) params->name); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } dbi_result_free(result); @@ -4862,6 +4950,7 @@ static int og_cmd_post_center_delete(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -4962,6 +5051,7 @@ static int og_cmd_post_repository_update(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5050,6 +5140,7 @@ static int og_cmd_post_repository_add(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5119,6 +5210,7 @@ static int og_cmd_post_repository_delete(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5191,6 +5283,7 @@ static int og_cmd_post_room_update(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5202,6 +5295,7 @@ static int og_cmd_post_room_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (!dbi_result_next_row(result)) { @@ -5209,6 +5303,7 @@ static int og_cmd_post_room_update(struct og_rest_ctx *ctx) room.id); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } room.center = dbi_result_get_uint(result, "idcentro"); @@ -5224,6 +5319,7 @@ static int og_cmd_post_room_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5233,6 +5329,7 @@ static int og_cmd_post_room_update(struct og_rest_ctx *ctx) room.name, room.center); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } dbi_result_free(result); @@ -5249,6 +5346,7 @@ static int og_cmd_post_room_update(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to update room in database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } dbi_result_free(result); @@ -5309,6 +5407,7 @@ static int og_cmd_post_room_add(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5322,6 +5421,7 @@ static int og_cmd_post_room_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5331,6 +5431,7 @@ static int og_cmd_post_room_add(struct og_rest_ctx *ctx) room.name, room.center); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } dbi_result_free(result); @@ -5357,6 +5458,7 @@ static int og_cmd_post_room_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to add room to database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5390,6 +5492,7 @@ static int og_cmd_post_room_delete(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5402,6 +5505,7 @@ static int og_cmd_post_room_delete(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (dbi_result_get_numrows_affected(result) < 1) { @@ -5409,6 +5513,7 @@ static int og_cmd_post_room_delete(struct og_rest_ctx *ctx) __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } @@ -5439,12 +5544,12 @@ static int og_cmd_get_servers(struct og_rest_ctx *ctx) return -1; } - dbi = og_dbi_open(&ogconfig.db); if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); json_decref(root); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5504,6 +5609,7 @@ static int og_cmd_post_server(struct og_rest_ctx *ctx) if (inet_pton(AF_INET, params->name, &addr) <= 0) { syslog(LOG_ERR, "invalid server ip address (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5511,6 +5617,7 @@ static int og_cmd_post_server(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5523,6 +5630,7 @@ static int og_cmd_post_server(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5531,6 +5639,7 @@ static int og_cmd_post_server(struct og_rest_ctx *ctx) params->name); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_409_CONFLICT; return -1; } dbi_result_free(result); @@ -5547,6 +5656,7 @@ static int og_cmd_post_server(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to add new ogserver address to database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5556,6 +5666,7 @@ static int og_cmd_post_server(struct og_rest_ctx *ctx) __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } id = dbi_conn_sequence_last(dbi->conn, NULL); @@ -5596,6 +5707,7 @@ static int og_cmd_delete_server(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open conection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5608,6 +5720,7 @@ static int og_cmd_delete_server(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to delete server (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (dbi_result_get_numrows_affected(result) < 1) { @@ -5615,6 +5728,7 @@ static int og_cmd_delete_server(struct og_rest_ctx *ctx) __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } @@ -5684,6 +5798,7 @@ static int og_cmd_oglive_set(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5696,6 +5811,7 @@ static int og_cmd_oglive_set(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } if (!dbi_result_next_row(result)) { @@ -5703,6 +5819,7 @@ static int og_cmd_oglive_set(struct og_rest_ctx *ctx) params->ips_array[i], __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_404_NOT_FOUND; return -1; } mode_str = dbi_result_get_string(result, "arranque"); @@ -5714,6 +5831,7 @@ static int og_cmd_oglive_set(struct og_rest_ctx *ctx) __func__, __LINE__); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5721,6 +5839,7 @@ static int og_cmd_oglive_set(struct og_rest_ctx *ctx) if (err < 0) { dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5764,6 +5883,7 @@ static int og_cmd_oglive_add(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5775,6 +5895,7 @@ static int og_cmd_oglive_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5804,6 +5925,7 @@ static int og_cmd_oglive_add(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5843,6 +5965,7 @@ static int og_cmd_oglive_delete(struct og_rest_ctx *ctx) if (!dbi) { syslog(LOG_ERR, "cannot open connection database (%s:%d)\n", __func__, __LINE__); + ctx->http_error = OG_HTTP_501_SERVICE_UNAVAILABLE; return -1; } @@ -5854,6 +5977,7 @@ static int og_cmd_oglive_delete(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5861,6 +5985,7 @@ static int og_cmd_oglive_delete(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to delete oglive '%s', live in use by a client", oglive_str); dbi_result_free(result); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_423_LOCKED; return -1; } @@ -5874,6 +5999,7 @@ static int og_cmd_oglive_delete(struct og_rest_ctx *ctx) syslog(LOG_ERR, "failed to query database (%s:%d) %s\n", __func__, __LINE__, msglog); og_dbi_close(dbi); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5909,6 +6035,7 @@ static int og_cmd_get_server_stats(struct og_rest_ctx *ctx) if (!memory) { json_decref(root); json_decref(time_obj); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } swap = json_object(); @@ -5916,6 +6043,7 @@ static int og_cmd_get_server_stats(struct og_rest_ctx *ctx) json_decref(root); json_decref(time_obj); json_decref(memory); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } @@ -5935,6 +6063,7 @@ static int og_cmd_get_server_stats(struct og_rest_ctx *ctx) if (json_dump_callback(root, og_json_dump_clients, &og_buffer, JSON_ENSURE_ASCII)) { json_decref(root); + ctx->http_error = OG_HTTP_500_INTERNAL_SERVER_ERROR; return -1; } |