2019-07-27 15:48:56 +02:00
|
|
|
#include "../src/ipc.h"
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#define SERVICE_NAME "pong"
|
|
|
|
#define SECURE_MALLOC(p, s, wat) p = malloc (s); if (p == NULL) { wat; }
|
|
|
|
|
|
|
|
// test the behavior of the server when the client never read its messages
|
|
|
|
|
|
|
|
void send_message (struct ipc_connection_info *ci)
|
|
|
|
{
|
|
|
|
SECURE_DECLARATION (struct ipc_message, m);
|
|
|
|
SECURE_MALLOC (m.payload, 5, exit(EXIT_FAILURE));
|
|
|
|
memcpy (m.payload, "salut", 5);
|
|
|
|
m.type = MSG_TYPE_DATA;
|
|
|
|
m.user_type = 42;
|
|
|
|
m.length = 5;
|
|
|
|
|
|
|
|
ipc_write (ci, &m);
|
|
|
|
|
|
|
|
ipc_message_empty (&m);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void read_message (struct ipc_connection_info *ci)
|
|
|
|
{
|
|
|
|
#if 0
|
|
|
|
SECURE_DECLARATION(struct ipc_event, event);
|
2020-06-27 19:16:07 +02:00
|
|
|
SECURE_DECLARATION(struct ipc_ctx, clients);
|
2019-07-27 15:48:56 +02:00
|
|
|
|
2020-01-01 12:11:34 +01:00
|
|
|
long timer = 10;
|
|
|
|
|
|
|
|
TEST_IPC_Q(ipc_read (ci, &m), EXIT_FAILURE);
|
2019-07-27 15:48:56 +02:00
|
|
|
|
2020-01-01 12:11:34 +01:00
|
|
|
ipc_wait_event (&clients, NULL, &event, &timer);
|
2019-07-27 15:48:56 +02:00
|
|
|
|
|
|
|
switch (event.type) {
|
|
|
|
case IPC_EVENT_TYPE_MESSAGE : {
|
|
|
|
printf ("received message: %*.s\n", m.length, ((struct ipc_message*) event.m)->payload);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case IPC_EVENT_TYPE_CONNECTION :
|
|
|
|
case IPC_EVENT_TYPE_DISCONNECTION :
|
|
|
|
case IPC_EVENT_TYPE_NOT_SET :
|
|
|
|
case IPC_EVENT_TYPE_ERROR :
|
|
|
|
case IPC_EVENT_TYPE_EXTRA_SOCKET :
|
|
|
|
default :
|
|
|
|
printf ("not ok - should not happen\n");
|
|
|
|
exit (EXIT_FAILURE);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2020-07-01 12:47:04 +02:00
|
|
|
ipc_ctx_free (&clients);
|
2019-07-27 15:48:56 +02:00
|
|
|
#else
|
|
|
|
SECURE_DECLARATION (struct ipc_message, m);
|
|
|
|
|
2020-01-01 12:11:34 +01:00
|
|
|
TEST_IPC_Q(ipc_read (ci, &m), EXIT_FAILURE);
|
2019-07-27 15:48:56 +02:00
|
|
|
printf ("received message: %*.s\n", m.length, m.payload);
|
|
|
|
free (m.payload);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char * argv[], char **env)
|
|
|
|
{
|
2020-01-01 12:11:34 +01:00
|
|
|
argc = argc;
|
|
|
|
argv = argv;
|
|
|
|
|
2019-07-27 15:48:56 +02:00
|
|
|
SECURE_DECLARATION(struct ipc_connection_info,srv1);
|
|
|
|
SECURE_DECLARATION(struct ipc_connection_info,srv2);
|
|
|
|
SECURE_DECLARATION(struct ipc_event, event);
|
|
|
|
|
2020-01-01 12:11:34 +01:00
|
|
|
TEST_IPC_Q (ipc_connection (env, &srv1, SERVICE_NAME), EXIT_FAILURE);
|
|
|
|
TEST_IPC_Q (ipc_connection (env, &srv2, SERVICE_NAME), EXIT_FAILURE);
|
|
|
|
|
2019-07-27 15:48:56 +02:00
|
|
|
send_message (&srv1);
|
|
|
|
read_message (&srv1);
|
2020-01-01 12:11:34 +01:00
|
|
|
|
|
|
|
TEST_IPC_Q (ipc_close (&srv1), EXIT_FAILURE);
|
|
|
|
|
2019-07-27 15:48:56 +02:00
|
|
|
send_message (&srv2);
|
|
|
|
read_message (&srv2);
|
2020-01-01 12:11:34 +01:00
|
|
|
|
|
|
|
TEST_IPC_Q (ipc_close (&srv2), EXIT_FAILURE);
|
2019-07-27 15:48:56 +02:00
|
|
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
}
|