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

Function application_request

src/daemon/application.c:2609–2695  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2607}
2608
2609static cbm_daemon_runtime_application_status_t application_request(
2610 void *context, cbm_daemon_runtime_application_session_t *opaque_session,
2611 cbm_daemon_runtime_application_token_t request_token, const uint8_t *request,
2612 uint32_t request_length, uint8_t **response_out, uint32_t *response_length_out) {
2613 cbm_daemon_application_t *application = context;
2614 cbm_daemon_application_session_t *session = (cbm_daemon_application_session_t *)opaque_session;
2615 if (response_out) {
2616 *response_out = NULL;
2617 }
2618 if (response_length_out) {
2619 *response_length_out = 0;
2620 }
2621 if (!application || !session || session->application != application ||
2622 request_token == CBM_DAEMON_RUNTIME_APPLICATION_TOKEN_INVALID || !request ||
2623 request_length == 0 || !response_out || !response_length_out) {
2624 return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED;
2625 }
2626
2627 cbm_mutex_lock(&application->mutex);
2628 if (application->stopping) {
2629 cbm_mutex_unlock(&application->mutex);
2630 return CBM_DAEMON_RUNTIME_APPLICATION_UNAVAILABLE;
2631 }
2632 if (session->session_cancelled) {
2633 cbm_mutex_unlock(&application->mutex);
2634 return CBM_DAEMON_RUNTIME_APPLICATION_REJECTED;
2635 }
2636 if (session->request_active) {
2637 cbm_mutex_unlock(&application->mutex);
2638 return CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR;
2639 }
2640 if (session->request_cancel_token != request_token) {
2641 session->request_cancel_token = CBM_DAEMON_RUNTIME_APPLICATION_TOKEN_INVALID;
2642 }
2643 session->request_active = true;
2644 session->active_request_token = request_token;
2645 bool mcp_scope_started = cbm_mcp_server_request_scope_begin(session->mcp);
2646 if (!mcp_scope_started) {
2647 session->request_active = false;
2648 session->active_request_token = CBM_DAEMON_RUNTIME_APPLICATION_TOKEN_INVALID;
2649 cbm_mutex_unlock(&application->mutex);
2650 return CBM_DAEMON_RUNTIME_APPLICATION_HANDLER_ERROR;
2651 }
2652 bool cancelled_before_entry = session->request_cancel_token == request_token;
2653 cbm_mutex_unlock(&application->mutex);
2654
2655 cbm_daemon_runtime_application_status_t status =
2656 cancelled_before_entry
2657 ? CBM_DAEMON_RUNTIME_APPLICATION_CANCELLED
2658 : application_request_dispatch(application, session, request, request_length,
2659 response_out, response_length_out);
2660
2661 /* This mutex boundary is the cancellation/completion linearization point.
2662 * A matching cancel published before it wins; a later cancel is stale and
2663 * cannot affect the next unique request token. */
2664 cbm_mutex_lock(&application->mutex);
2665 bool cancelled = session->session_cancelled || session->request_cancel_token == request_token;
2666 cbm_mcp_server_request_scope_end(session->mcp);

Callers

nothing calls this directly

Tested by

no test coverage detected