Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Toggle main menu visibility
Loading...
Searching...
No Matches
sapi_ipc_request_reply.c
Go to the documentation of this file.
1
6
7
#include "
safeapi/oal/ipc/sapi_ipc_request_reply.h
"
8
#include "
safeapi/utils/lifecycle/sapi_lifecycle.h
"
9
#include "safeapi/log.h"
10
11
/* Implementation stubs - actual implementation would use base IPC layer */
12
14
16
18
20
22
23
25
sapi_status_t
sapi_ipc_rr_server_create
(
sapi_ipc_rr_server_t
*handle_out,
26
const
sapi_ipc_rr_server_config_t
*config)
27
{
28
sapi_status_t
lifecycle_status;
29
30
if
(handle_out == NULL || config == NULL) {
31
return
SAPI_STATUS_INVALID_PARAM
;
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
50
sapi_status_t
sapi_ipc_rr_receive_request
(
sapi_ipc_rr_server_t
server,
51
sapi_ipc_rr_request_t
*request_out,
52
sapi_duration_ms_t
timeout_ms)
53
{
54
if
(server == NULL || request_out == NULL) {
55
return
SAPI_STATUS_INVALID_PARAM
;
56
}
57
58
/* TODO: Implement request receiving with timeout */
59
return
SAPI_STATUS_TIMEOUT
;
60
}
61
62
sapi_status_t
sapi_ipc_rr_send_reply
(
sapi_ipc_rr_server_t
server,
63
uint32_t request_id,
64
const
void
*reply_data,
65
size_t
reply_size)
66
{
67
if
(server == NULL || reply_data == NULL) {
68
return
SAPI_STATUS_INVALID_PARAM
;
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
77
sapi_status_t
sapi_ipc_rr_server_destroy
(
sapi_ipc_rr_server_t
server)
78
{
79
if
(server == NULL) {
80
return
SAPI_STATUS_INVALID_PARAM
;
81
}
82
83
SAPI_LOG_INFO(
"Destroying RR server"
);
84
return
SAPI_STATUS_OK
;
85
}
86
87
sapi_status_t
sapi_ipc_rr_client_create
(
sapi_ipc_rr_client_t
*handle_out,
88
const
sapi_ipc_rr_client_config_t
*config)
89
{
90
sapi_status_t
lifecycle_status;
91
92
if
(handle_out == NULL || config == NULL) {
93
return
SAPI_STATUS_INVALID_PARAM
;
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
110
sapi_status_t
sapi_ipc_rr_request
(
sapi_ipc_rr_client_t
client,
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) {
118
return
SAPI_STATUS_INVALID_PARAM
;
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
128
sapi_status_t
sapi_ipc_rr_client_destroy
(
sapi_ipc_rr_client_t
client)
129
{
130
if
(client == NULL) {
131
return
SAPI_STATUS_INVALID_PARAM
;
132
}
133
134
SAPI_LOG_INFO(
"Destroying RR client"
);
135
return
SAPI_STATUS_OK
;
136
}
sapi_lifecycle_check_setup_allowed
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 ...
Definition
sapi_lifecycle.c:40
sapi_status_t
sapi_status_t
Common result/status codes.
Definition
sapi_status.h:27
SAPI_STATUS_TIMEOUT
@ SAPI_STATUS_TIMEOUT
Definition
sapi_status.h:32
SAPI_STATUS_INVALID_PARAM
@ SAPI_STATUS_INVALID_PARAM
Definition
sapi_status.h:29
SAPI_STATUS_OK
@ SAPI_STATUS_OK
Definition
sapi_status.h:28
sapi_duration_ms_t
uint32_t sapi_duration_ms_t
Definition
sapi_types.h:27
sapi_ipc_request_reply.h
IPC Request-Reply Pattern (RPC-style communication).
sapi_ipc_rr_receive_request
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).
Definition
sapi_ipc_request_reply.c:50
sapi_ipc_rr_client_destroy
sapi_status_t sapi_ipc_rr_client_destroy(sapi_ipc_rr_client_t client)
Destroy request-reply client connection.
Definition
sapi_ipc_request_reply.c:128
sapi_ipc_rr_client_t
struct sapi_ipc_rr_client_s * sapi_ipc_rr_client_t
Request-reply client handle.
Definition
sapi_ipc_request_reply.h:149
sapi_ipc_rr_client_create
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.
Definition
sapi_ipc_request_reply.c:87
sapi_ipc_rr_server_t
struct sapi_ipc_rr_server_s * sapi_ipc_rr_server_t
Request-Reply server channel handle.
Definition
sapi_ipc_request_reply.h:42
sapi_ipc_rr_send_reply
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.
Definition
sapi_ipc_request_reply.c:62
sapi_ipc_rr_server_destroy
sapi_status_t sapi_ipc_rr_server_destroy(sapi_ipc_rr_server_t server)
Destroy request-reply server.
Definition
sapi_ipc_request_reply.c:77
sapi_ipc_rr_server_create
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.
Definition
sapi_ipc_request_reply.c:25
sapi_ipc_rr_request
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).
Definition
sapi_ipc_request_reply.c:110
sapi_lifecycle.h
Process-wide application setup-phase lock (ADR-026).
sapi_ipc_rr_client_config_t
Configuration for request-reply client.
Definition
sapi_ipc_request_reply.h:154
sapi_ipc_rr_client_config_t::server_name
const char * server_name
Definition
sapi_ipc_request_reply.h:155
sapi_ipc_rr_request_t
Incoming request with context for sending reply.
Definition
sapi_ipc_request_reply.h:57
sapi_ipc_rr_server_config_t
Configuration for request-reply server.
Definition
sapi_ipc_request_reply.h:47
sapi_ipc_rr_server_config_t::queue_depth
size_t queue_depth
Definition
sapi_ipc_request_reply.h:51
sapi_ipc_rr_server_config_t::reply_size
size_t reply_size
Definition
sapi_ipc_request_reply.h:50
sapi_ipc_rr_server_config_t::request_size
size_t request_size
Definition
sapi_ipc_request_reply.h:49
sapi_ipc_rr_server_config_t::name
const char * name
Definition
sapi_ipc_request_reply.h:48
src
oal
ipc
sapi_ipc_request_reply.c
Generated by
1.18.0