| 2613 | } |
| 2614 | |
| 2615 | static cbm_daemon_runtime_application_status_t application_set_ui_config( |
| 2616 | cbm_daemon_application_t *application, cbm_daemon_application_session_t *session, |
| 2617 | const uint8_t *request, uint32_t request_length) { |
| 2618 | const uint8_t valid_mask = |
| 2619 | CBM_DAEMON_APPLICATION_UI_CONFIG_ENABLED | CBM_DAEMON_APPLICATION_UI_CONFIG_PORT; |
| 2620 | if (!session || !session->context_set || session->tool_profile != CBM_MCP_TOOL_PROFILE_ALL || |
| 2621 | request_length != APPLICATION_UI_CONFIG_REQUEST_SIZE) { |
| 2622 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2623 | } |
| 2624 | uint8_t update_mask = request[1]; |
| 2625 | uint8_t enabled = request[2]; |
| 2626 | uint32_t port = application_get_u32(request + 3); |
| 2627 | bool enabled_present = (update_mask & CBM_DAEMON_APPLICATION_UI_CONFIG_ENABLED) != 0; |
| 2628 | bool port_present = (update_mask & CBM_DAEMON_APPLICATION_UI_CONFIG_PORT) != 0; |
| 2629 | if (update_mask == 0 || (update_mask & (uint8_t)~valid_mask) != 0 || |
| 2630 | (enabled_present ? enabled > 1U : enabled != 0U) || |
| 2631 | (port_present ? port == 0 || request[3] != 0 || request[4] != 0 : port != 0U)) { |
| 2632 | return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED; |
| 2633 | } |
| 2634 | |
| 2635 | cbm_mutex_lock(&application->mutex); |
| 2636 | if (application->stopping) { |
| 2637 | cbm_mutex_unlock(&application->mutex); |
| 2638 | return CBM_DAEMON_RUNTIME_APPLICATION_UNAVAILABLE; |
| 2639 | } |
| 2640 | cbm_ui_config_t config; |
| 2641 | cbm_ui_config_load(&config); |
| 2642 | if (enabled_present) { |
| 2643 | config.ui_enabled = enabled != 0; |
| 2644 | } |
| 2645 | if (port_present) { |
| 2646 | config.ui_port = (int)port; |
| 2647 | } |
| 2648 | bool saved = cbm_ui_config_save(&config); |
| 2649 | cbm_mutex_unlock(&application->mutex); |
| 2650 | return saved ? CBM_DAEMON_RUNTIME_APPLICATION_OK : CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR; |
| 2651 | } |
| 2652 | |
| 2653 | static cbm_daemon_runtime_application_status_t application_ui_readiness_proof( |
| 2654 | cbm_daemon_application_t *application, const uint8_t *request, uint32_t request_length, |
no test coverage detected