Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
sapi_ipc_request_reply.c
Go to the documentation of this file.
1
6
9#include "safeapi/log.h"
10
11/* Implementation stubs - actual implementation would use base IPC layer */
12
14
16
18
20
22
23
26 const sapi_ipc_rr_server_config_t *config)
27{
28 sapi_status_t lifecycle_status;
29
30 if (handle_out == NULL || config == NULL) {
32 }
33
34 /* REQ-LIFECYCLE-001 (ADR-026): an RR server is a setup-only resource -
35 * refuse once the application's setup phase has been locked. */
36 lifecycle_status = sapi_lifecycle_check_setup_allowed();
37 if (lifecycle_status != SAPI_STATUS_OK)
38 {
39 return lifecycle_status;
40 }
41
42 SAPI_LOG_INFO("Creating RR server: %s (req_sz=%zu, reply_sz=%zu, depth=%zu)",
43 config->name, config->request_size, config->reply_size,
44 config->queue_depth);
45
46 /* TODO: Implement using base IPC layer */
47 return SAPI_STATUS_OK;
48}
49
51 sapi_ipc_rr_request_t *request_out,
52 sapi_duration_ms_t timeout_ms)
53{
54 if (server == NULL || request_out == NULL) {
56 }
57
58 /* TODO: Implement request receiving with timeout */
60}
61
63 uint32_t request_id,
64 const void *reply_data,
65 size_t reply_size)
66{
67 if (server == NULL || reply_data == NULL) {
69 }
70
71 SAPI_LOG_DEBUG("Sending reply to request %u (%zu bytes)", request_id, reply_size);
72
73 /* TODO: Implement reply sending */
74 return SAPI_STATUS_OK;
75}
76
78{
79 if (server == NULL) {
81 }
82
83 SAPI_LOG_INFO("Destroying RR server");
84 return SAPI_STATUS_OK;
85}
86
88 const sapi_ipc_rr_client_config_t *config)
89{
90 sapi_status_t lifecycle_status;
91
92 if (handle_out == NULL || config == NULL) {
94 }
95
96 /* REQ-LIFECYCLE-001 (ADR-026): an RR client is a setup-only resource -
97 * refuse once the application's setup phase has been locked. */
98 lifecycle_status = sapi_lifecycle_check_setup_allowed();
99 if (lifecycle_status != SAPI_STATUS_OK)
100 {
101 return lifecycle_status;
102 }
103
104 SAPI_LOG_INFO("Creating RR client for server: %s", config->server_name);
105
106 /* TODO: Implement client connection to server */
107 return SAPI_STATUS_OK;
108}
109
111 const void *request_data,
112 size_t request_size,
113 void *reply_out,
114 size_t reply_size,
115 sapi_duration_ms_t timeout_ms)
116{
117 if (client == NULL || request_data == NULL || reply_out == NULL) {
119 }
120
121 SAPI_LOG_DEBUG("Sending RPC request (%zu bytes), waiting for reply (timeout=%u ms)",
122 request_size, timeout_ms);
123
124 /* TODO: Implement request send + reply receive with timeout */
125 return SAPI_STATUS_TIMEOUT;
126}
127
129{
130 if (client == NULL) {
132 }
133
134 SAPI_LOG_INFO("Destroying RR client");
135 return SAPI_STATUS_OK;
136}
sapi_status_t sapi_lifecycle_check_setup_allowed(void)
Convenience check for a setup-only constructor: call this as one of the first checks in any function ...
sapi_status_t
Common result/status codes.
Definition sapi_status.h:27
@ SAPI_STATUS_TIMEOUT
Definition sapi_status.h:32
@ SAPI_STATUS_INVALID_PARAM
Definition sapi_status.h:29
@ SAPI_STATUS_OK
Definition sapi_status.h:28
uint32_t sapi_duration_ms_t
Definition sapi_types.h:27
IPC Request-Reply Pattern (RPC-style communication).
sapi_status_t sapi_ipc_rr_receive_request(sapi_ipc_rr_server_t server, sapi_ipc_rr_request_t *request_out, sapi_duration_ms_t timeout_ms)
Receive a request (blocking with timeout).
sapi_status_t sapi_ipc_rr_client_destroy(sapi_ipc_rr_client_t client)
Destroy request-reply client connection.
struct sapi_ipc_rr_client_s * sapi_ipc_rr_client_t
Request-reply client handle.
sapi_status_t sapi_ipc_rr_client_create(sapi_ipc_rr_client_t *handle_out, const sapi_ipc_rr_client_config_t *config)
Create a request-reply client connection.
struct sapi_ipc_rr_server_s * sapi_ipc_rr_server_t
Request-Reply server channel handle.
sapi_status_t sapi_ipc_rr_send_reply(sapi_ipc_rr_server_t server, uint32_t request_id, const void *reply_data, size_t reply_size)
Send reply to a request.
sapi_status_t sapi_ipc_rr_server_destroy(sapi_ipc_rr_server_t server)
Destroy request-reply server.
sapi_status_t sapi_ipc_rr_server_create(sapi_ipc_rr_server_t *handle_out, const sapi_ipc_rr_server_config_t *config)
Create a request-reply server channel.
sapi_status_t sapi_ipc_rr_request(sapi_ipc_rr_client_t client, const void *request_data, size_t request_size, void *reply_out, size_t reply_size, sapi_duration_ms_t timeout_ms)
Send request and wait for reply (blocking with timeout).
Process-wide application setup-phase lock (ADR-026).
Configuration for request-reply client.
Incoming request with context for sending reply.
Configuration for request-reply server.