|
Safe API Framework
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
|
IPC Request-Reply Pattern (RPC-style communication). More...
#include "safeapi/utils/status/sapi_status.h"#include "safeapi/utils/types/sapi_types.h"#include "sapi_ipc.h"Go to the source code of this file.
Data Structures | |
| struct | sapi_ipc_rr_server_config_t |
| Configuration for request-reply server. More... | |
| struct | sapi_ipc_rr_request_t |
| Incoming request with context for sending reply. More... | |
| struct | sapi_ipc_rr_client_config_t |
| Configuration for request-reply client. More... | |
Typedefs | |
| typedef struct sapi_ipc_rr_server_s * | sapi_ipc_rr_server_t |
| Request-Reply server channel handle. | |
| typedef struct sapi_ipc_rr_client_s * | sapi_ipc_rr_client_t |
| Request-reply client handle. | |
Functions | |
| 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_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_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_client_create (sapi_ipc_rr_client_t *handle_out, const sapi_ipc_rr_client_config_t *config) |
| Create a request-reply client connection. | |
| 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). | |
| sapi_status_t | sapi_ipc_rr_client_destroy (sapi_ipc_rr_client_t client) |
| Destroy request-reply client connection. | |
IPC Request-Reply Pattern (RPC-style communication).
Implements synchronous request-reply communication where a client sends a request and blocks (with timeout) waiting for a reply. Server receives the request, processes it, and sends a reply back.
This is a higher-level abstraction built on the base IPC layer.
Safety Properties:
Use Case:
Definition in file sapi_ipc_request_reply.h.
| typedef struct sapi_ipc_rr_server_s* sapi_ipc_rr_server_t |
Request-Reply server channel handle.
Definition at line 42 of file sapi_ipc_request_reply.h.
| typedef struct sapi_ipc_rr_client_s* sapi_ipc_rr_client_t |
Request-reply client handle.
Definition at line 149 of file sapi_ipc_request_reply.h.
| 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.
| handle_out | Receives server handle (not NULL) |
| config | Server configuration (not NULL) |
Example:
Local makros Local types declarations Local variables declarations Global variables declarations Local function declarations Global functions
Definition at line 25 of file sapi_ipc_request_reply.c.
| 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).
| server | Server handle (not NULL) |
| request_out | Receives request and context (not NULL) |
| timeout_ms | Max wait time; 0 = poll, UINT32_MAX = infinite |
Example:
Definition at line 50 of file sapi_ipc_request_reply.c.
| 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.
| server | Server handle (not NULL) |
| request_id | ID from the request being replied to |
| reply_data | Reply payload (not NULL) |
| reply_size | Size of reply (must match configured size) |
Example:
Definition at line 62 of file sapi_ipc_request_reply.c.
| sapi_status_t sapi_ipc_rr_server_destroy | ( | sapi_ipc_rr_server_t | server | ) |
Destroy request-reply server.
| server | Server handle (not NULL) |
Definition at line 77 of file sapi_ipc_request_reply.c.
| 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.
| handle_out | Receives client handle (not NULL) |
| config | Client configuration (not NULL) |
Example:
Definition at line 87 of file sapi_ipc_request_reply.c.
| 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).
This is the main client operation: send request, block waiting for reply.
| client | Client handle (not NULL) |
| request_data | Request to send (not NULL) |
| request_size | Size of request |
| reply_out | Destination buffer for reply (not NULL) |
| reply_size | Max size of reply buffer |
| timeout_ms | Max wait time for reply; 0 = poll, UINT32_MAX = infinite |
Example:
Definition at line 110 of file sapi_ipc_request_reply.c.
| sapi_status_t sapi_ipc_rr_client_destroy | ( | sapi_ipc_rr_client_t | client | ) |
Destroy request-reply client connection.
| client | Client handle (not NULL) |
Definition at line 128 of file sapi_ipc_request_reply.c.