| 2506 | } |
| 2507 | |
| 2508 | static cbm_daemon_runtime_application_status_t application_set_ui_config( |
| 2509 | cbm_daemon_application_t *application, cbm_daemon_application_session_t *session, |
| 2510 | const uint8_t *request, uint32_t request_length) { |
| 2511 | const uint8_t valid_mask = |
| 2512 | CBM_DAEMON_APPLICATION_UI_CONFIG_ENABLED | CBM_DAEMON_APPLICATION_UI_CONFIG_PORT; |
| 2513 | if (!session || !session->context_set || session->tool_profile != CBM_MCP_TOOL_PROFILE_ALL || |
| 2514 | request_length != APPLICATION_UI_CONFIG_REQUEST_SIZE) { |
| 2515 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2516 | } |
| 2517 | uint8_t update_mask = request[1]; |
| 2518 | uint8_t enabled = request[2]; |
| 2519 | uint32_t port = application_get_u32(request + 3); |
| 2520 | bool enabled_present = (update_mask & CBM_DAEMON_APPLICATION_UI_CONFIG_ENABLED) != 0; |
| 2521 | bool port_present = (update_mask & CBM_DAEMON_APPLICATION_UI_CONFIG_PORT) != 0; |
| 2522 | if (update_mask == 0 || (update_mask & (uint8_t)~valid_mask) != 0 || |
| 2523 | (enabled_present ? enabled > 1U : enabled != 0U) || |
| 2524 | (port_present ? port == 0 || request[3] != 0 || request[4] != 0 : port != 0U)) { |
| 2525 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2526 | } |
| 2527 | |
| 2528 | cbm_mutex_lock(&application->mutex); |
| 2529 | if (application->stopping) { |
| 2530 | cbm_mutex_unlock(&application->mutex); |
| 2531 | return CBM_DAEMON_RUNTIME_APPLICATION_UNAVAILABLE; |
| 2532 | } |
| 2533 | cbm_ui_config_t config; |
| 2534 | cbm_ui_config_load(&config); |
| 2535 | if (enabled_present) { |
| 2536 | config.ui_enabled = enabled != 0; |
| 2537 | } |
| 2538 | if (port_present) { |
| 2539 | config.ui_port = (int)port; |
| 2540 | } |
| 2541 | bool saved = cbm_ui_config_save(&config); |
| 2542 | cbm_mutex_unlock(&application->mutex); |
| 2543 | return saved ? CBM_DAEMON_RUNTIME_APPLICATION_OK : CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR; |
| 2544 | } |
| 2545 | |
| 2546 | static cbm_daemon_runtime_application_status_t application_ui_readiness_proof( |
| 2547 | cbm_daemon_application_t *application, const uint8_t *request, uint32_t request_length, |
no test coverage detected