From a8d0a82adf55799f0613d5cfc98e5b91bb05fac3 Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Tue, 4 Jun 2019 01:35:33 +0200 Subject: [PATCH] user_type --- examples/pong.c | 4 ++-- src/communication.h | 4 ---- src/ipc.h | 10 ++++++---- src/message.c | 14 ++++++++++---- 4 files changed, 18 insertions(+), 14 deletions(-) delete mode 100644 src/communication.h diff --git a/examples/pong.c b/examples/pong.c index 676edf6..6383504 100644 --- a/examples/pong.c +++ b/examples/pong.c @@ -35,7 +35,7 @@ void non_interactive (char *env[]) } printf ("msg to send (%ld): %.*s\n", (ssize_t) strlen(MSG) +1, (int) strlen(MSG), MSG); - ret = ipc_message_format_data (&m, MSG, (ssize_t) strlen(MSG) +1); + ret = ipc_message_format_data (&m, 42, MSG, (ssize_t) strlen(MSG) +1); if (ret != IPC_ERROR_NONE) { PRINTERR(ret, "message format data"); exit (EXIT_FAILURE); @@ -58,7 +58,7 @@ void non_interactive (char *env[]) exit (EXIT_FAILURE); } - printf ("msg recv: %s\n", m.payload); + printf ("msg recv (type: %u): %s\n", m.user_type, m.payload); ipc_message_empty (&m); ret = ipc_close (&srv); diff --git a/src/communication.h b/src/communication.h deleted file mode 100644 index e3c31b0..0000000 --- a/src/communication.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef __IPC_COMMUNICATION_H__ -#define __IPC_COMMUNICATION_H__ - -#endif diff --git a/src/ipc.h b/src/ipc.h index a937f87..3451d6d 100644 --- a/src/ipc.h +++ b/src/ipc.h @@ -11,7 +11,7 @@ #define RUNDIR "/run/ipc/" #define PATH_MAX 4096 -#define IPC_HEADER_SIZE 5 +#define IPC_HEADER_SIZE 6 #define IPC_MAX_MESSAGE_SIZE 8000000-IPC_HEADER_SIZE // #define IPC_MAX_MESSAGE_SIZE 100-IPC_HEADER_SIZE // #include "queue.h" @@ -146,6 +146,7 @@ struct ipc_connection_infos { struct ipc_message { char type; + char user_type; uint32_t length; char *payload; }; @@ -211,7 +212,6 @@ enum ipc_errors ipc_connection (char **env, struct ipc_connection_info *srv, c enum ipc_errors ipc_server_close (struct ipc_connection_info *srv); enum ipc_errors ipc_close (struct ipc_connection_info *p); -enum ipc_errors ipc_accept (struct ipc_connection_info *srv, struct ipc_connection_info *p); enum ipc_errors ipc_read (const struct ipc_connection_info *, struct ipc_message *m); enum ipc_errors ipc_write (const struct ipc_connection_info *, const struct ipc_message *m); @@ -259,8 +259,10 @@ enum ipc_errors ipc_message_read (int32_t fd, struct ipc_message *m); // write a structure msg to fd enum ipc_errors ipc_message_write (int32_t fd, const struct ipc_message *m); -enum ipc_errors ipc_message_format (struct ipc_message *m, char type, const char *payload, ssize_t length); -enum ipc_errors ipc_message_format_data (struct ipc_message *m, const char *payload, ssize_t length); +enum ipc_errors ipc_message_format (struct ipc_message *m + , char type, char utype, const char *payload, ssize_t length); +enum ipc_errors ipc_message_format_data (struct ipc_message *m + , char utype, const char *payload, ssize_t length); enum ipc_errors ipc_message_format_server_close (struct ipc_message *m); enum ipc_errors ipc_message_empty (struct ipc_message *m); diff --git a/src/message.c b/src/message.c index a20cc72..0a4c683 100644 --- a/src/message.c +++ b/src/message.c @@ -56,8 +56,11 @@ enum ipc_errors ipc_message_format_read (struct ipc_message *m, const char *buf, return IPC_ERROR_MESSAGE_FORMAT_READ__MESSAGE_SIZE; } + // message format: + // Type (1 B) | Length (4 B) | UserType (1 B) | Payload (Length B) m->type = buf[0]; memcpy (&m->length, buf+1, sizeof m->length); + m->user_type = buf[1 + sizeof m->length]; assert (m->length <= IPC_MAX_MESSAGE_SIZE); #if defined(IPC_WITH_ERRORS) && IPC_WITH_ERRORS > 2 @@ -106,6 +109,7 @@ enum ipc_errors ipc_message_format_write (const struct ipc_message *m, char **bu buffer[0] = m->type; memcpy (buffer + 1, &m->length, sizeof m->length); + buffer[1 + sizeof m->length] = m->user_type; if (m->payload != NULL) { memcpy (buffer + IPC_HEADER_SIZE, m->payload, m->length); } @@ -185,7 +189,8 @@ enum ipc_errors ipc_message_write (int32_t fd, const struct ipc_message *m) // MSG FORMAT -enum ipc_errors ipc_message_format (struct ipc_message *m, char type, const char *payload, ssize_t length) +enum ipc_errors ipc_message_format (struct ipc_message *m + , char type, char utype, const char *payload, ssize_t length) { assert (m != NULL); assert (length <= IPC_MAX_MESSAGE_SIZE); @@ -206,6 +211,7 @@ enum ipc_errors ipc_message_format (struct ipc_message *m, char type, const char } m->type = type; + m->user_type = utype; m->length = (uint32_t) length; if (payload != NULL) { @@ -226,14 +232,14 @@ enum ipc_errors ipc_message_format (struct ipc_message *m, char type, const char return IPC_ERROR_NONE; } -enum ipc_errors ipc_message_format_data (struct ipc_message *m, const char *payload, ssize_t length) +enum ipc_errors ipc_message_format_data (struct ipc_message *m, char utype, const char *payload, ssize_t length) { - return ipc_message_format (m, MSG_TYPE_DATA, payload, length); + return ipc_message_format (m, MSG_TYPE_DATA, utype, payload, length); } enum ipc_errors ipc_message_format_server_close (struct ipc_message *m) { - return ipc_message_format (m, MSG_TYPE_SERVER_CLOSE, NULL, 0); + return ipc_message_format (m, MSG_TYPE_SERVER_CLOSE, 0, NULL, 0); } enum ipc_errors ipc_message_empty (struct ipc_message *m)