From 6a58ecfa9b1a416149cd33125bae7ea38665b481 Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Mon, 5 Nov 2018 19:02:08 +0100 Subject: [PATCH] add a program to test the exchange durations --- pong/app/test-exchange.c | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 pong/app/test-exchange.c diff --git a/pong/app/test-exchange.c b/pong/app/test-exchange.c new file mode 100644 index 0000000..b90f67a --- /dev/null +++ b/pong/app/test-exchange.c @@ -0,0 +1,106 @@ +#include +#include +#include +#include +#include +#include + +#include + +#include "../../core/communication.h" +#include "../../core/error.h" + +#define SERVICE_NAME "pongd" + +#define NUMBER_OF_MESSAGES 1000 +#define MAX_MESSAGE_SIZE IPC_MAX_MESSAGE_SIZE +#define MESSAGE "salut ça va ?" + +void non_interactive (char msg_type, char *msg, char * service_name, char *env[]) +{ + struct ipc_message m; + memset (&m, 0, sizeof (struct ipc_message)); + struct ipc_service srv; + memset (&srv, 0, sizeof (struct ipc_service)); + + // index and version should be filled + srv.index = 0; + srv.version = 0; + + // init service + if (ipc_application_connection (env, &srv, service_name) < 0) { + handle_err ("main", "ipc_application_connection < 0"); + exit (EXIT_FAILURE); + } + + for (int i = 0 ; i < NUMBER_OF_MESSAGES ; i++) { + ipc_message_format (&m, msg_type, msg, strlen(msg) + 1); + // print_msg (&m); + + if (ipc_application_write (&srv, &m) < 0) { + handle_err("main", "application_write < 0"); + exit (EXIT_FAILURE); + } + ipc_message_empty (&m); + + if (ipc_application_read (&srv, &m) < 0) { + handle_err("main", "application_read < 0"); + exit (EXIT_FAILURE); + } + +#ifdef WITH_PRINT_MESSAGES + if (m.length > 0) { + printf ("msg recv: %.*s\n", m.length, m.payload); + } +#endif + ipc_message_empty (&m); + } + + if (ipc_application_close (&srv) < 0) { + handle_err("main", "application_close < 0"); + exit (EXIT_FAILURE); + } + ipc_message_empty (&m); +} + +// usage: ipc-debug [service-name] +int main (int argc, char *argv[], char *env[]) +{ + if (argc == 1) { + printf ("usage: %s service_name [message-type [message]]\n", argv[0]); + exit (EXIT_SUCCESS); + } + + char service_name[100]; + memset (service_name, 0, 100); + + int current_param = 1; + + if (argc != 1) { + ssize_t t = strlen(argv[current_param]) > 100 ? 100 : strlen(argv[current_param]); + memcpy(service_name, argv[current_param], t); + current_param++; + } + else { memcpy(service_name, SERVICE_NAME, strlen(SERVICE_NAME)); } + + char mtype = 2; + if (argc > 2) { + mtype = atoi(argv[current_param]); + current_param++; + } + + char *msg = malloc (MAX_MESSAGE_SIZE); + if (msg == NULL) { + handle_err("main", "not enough memory"); + exit (EXIT_FAILURE); + } + memset(msg, 0, MAX_MESSAGE_SIZE); + + if (argc > 3) { memcpy(msg, argv[current_param], strlen(argv[current_param])); } + else { memcpy(msg, MESSAGE, strlen(MESSAGE)); } + + non_interactive (mtype, msg, service_name, env); + free (msg); + + return EXIT_SUCCESS; +}