MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / application_request

Function application_request

src/daemon/application.c:2716–2802  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2714}
2715
2716static cbm_daemon_runtime_application_status_t application_request(
2717 void *context, cbm_daemon_runtime_application_session_t *opaque_session,
2718 cbm_daemon_runtime_application_token_t request_token, const uint8_t *request,
2719 uint32_t request_length, uint8_t **response_out, uint32_t *response_length_out) {
2720 cbm_daemon_application_t *application = context;
2721 cbm_daemon_application_session_t *session = (cbm_daemon_application_session_t *)opaque_session;
2722 if (response_out) {
2723 *response_out = NULL;
2724 }
2725 if (response_length_out) {
2726 *response_length_out = 0;
2727 }
2728 if (!application || !session || session->application != application ||
2729 request_token == CBM_DAEMON_RUNTIME_APPLICATION_TOKEN_INVALID || !request ||
2730 request_length == 0 || !response_out || !response_length_out) {
2731 return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED;
2732 }
2733
2734 cbm_mutex_lock(&application->mutex);
2735 if (application->stopping) {
2736 cbm_mutex_unlock(&application->mutex);
2737 return CBM_DAEMON_RUNTIME_APPLICATION_UNAVAILABLE;
2738 }
2739 if (session->session_cancelled) {
2740 cbm_mutex_unlock(&application->mutex);
2741 return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED;
2742 }
2743 if (session->request_active) {
2744 cbm_mutex_unlock(&application->mutex);
2745 return CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR;
2746 }
2747 if (session->request_cancel_token != request_token) {
2748 session->request_cancel_token = CBM_DAEMON_RUNTIME_APPLICATION_TOKEN_INVALID;
2749 }
2750 session->request_active = true;
2751 session->active_request_token = request_token;
2752 bool mcp_scope_started = cbm_mcp_server_request_scope_begin(session->mcp);
2753 if (!mcp_scope_started) {
2754 session->request_active = false;
2755 session->active_request_token = CBM_DAEMON_RUNTIME_APPLICATION_TOKEN_INVALID;
2756 cbm_mutex_unlock(&application->mutex);
2757 return CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR;
2758 }
2759 bool cancelled_before_entry = session->request_cancel_token == request_token;
2760 cbm_mutex_unlock(&application->mutex);
2761
2762 cbm_daemon_runtime_application_status_t status =
2763 cancelled_before_entry
2764 ? CBM_DAEMON_RUNTIME_APPLICATION_CANCELLED
2765 : application_request_dispatch(application, session, request, request_length,
2766 response_out, response_length_out);
2767
2768 /* This mutex boundary is the cancellation/completion linearization point.
2769 * A matching cancel published before it wins; a later cancel is stale and
2770 * cannot affect the next unique request token. */
2771 cbm_mutex_lock(&application->mutex);
2772 bool cancelled = session->session_cancelled || session->request_cancel_token == request_token;
2773 cbm_mcp_server_request_scope_end(session->mcp);

Callers

nothing calls this directly

Tested by

no test coverage detected