diff --git a/src/communication.c b/src/communication.c index 6d8f563..11e869c 100644 --- a/src/communication.c +++ b/src/communication.c @@ -34,18 +34,6 @@ service_path (char *path, const char *sname) IPC_RETURN_NO_ERROR; } -struct ipc_error ipc_ctx_init (struct ipc_ctx **ctx) -{ - T_R ((ctx == NULL), IPC_ERROR_CTX_INIT__NO_CONTEXT_PARAM); - T_R ((*ctx != NULL), IPC_ERROR_CTX_INIT__CONTEXT_ALREADY_INIT); - - *ctx = malloc(sizeof(struct ipc_ctx)); - T_R ((*ctx == NULL), IPC_ERROR_CTX_INIT__MALLOC_CTX); - memset (ctx, 0, sizeof(struct ipc_ctx)); - - IPC_RETURN_NO_ERROR; -} - /** * PERFORMANCE POINT: * Realloc is performed at each new user. There is plenty of room for improvement, @@ -76,12 +64,10 @@ struct ipc_error ipc_ctx_new_alloc (struct ipc_ctx *ctx) IPC_RETURN_NO_ERROR; } -struct ipc_error ipc_server_init (struct ipc_ctx **ctx, const char *sname) +struct ipc_error ipc_server_init (struct ipc_ctx *ctx, const char *sname) { T_R ((sname == NULL), IPC_ERROR_SERVER_INIT__NO_SERVER_NAME_PARAM); - ipc_ctx_init(ctx); // Allocate the context. - // Declaration and instanciation of the new connection (ipc_connection_info + pollfd). SECURE_DECLARATION (struct ipc_connection_info, srv); srv.type = IPC_CONNECTION_TYPE_SERVER; @@ -103,7 +89,7 @@ struct ipc_error ipc_server_init (struct ipc_ctx **ctx, const char *sname) // Add the server to the listened file descriptors. // ipc_add allocate memory then copy the data of srv and pollfd in ctx. - TEST_IPC_RR (ipc_add (*ctx, &srv, &pollfd), "cannot add the server in the context"); + TEST_IPC_RR (ipc_add (ctx, &srv, &pollfd), "cannot add the server in the context"); IPC_RETURN_NO_ERROR; } @@ -165,13 +151,11 @@ struct ipc_error ipc_contact_networkd (int *pfd, const char *sname) } // Create context, contact networkd, connects to the service. -struct ipc_error ipc_connection (struct ipc_ctx **ctx, const char *sname) +struct ipc_error ipc_connection (struct ipc_ctx *ctx, const char *sname) { T_R ((ctx == NULL), IPC_ERROR_CONNECTION__NO_CTX); T_R ((sname == NULL), IPC_ERROR_CONNECTION__NO_SERVICE_NAME); - ipc_ctx_init(ctx); // Allocate memory for the context. - SECURE_DECLARATION(struct ipc_connection_info, srv); srv.type = IPC_CONNECTION_TYPE_IPC; // Data received on the socket = messages, not new clients. SECURE_DECLARATION(struct pollfd, pollfd); @@ -188,7 +172,7 @@ struct ipc_error ipc_connection (struct ipc_ctx **ctx, const char *sname) } // Add the server to the listened file descriptors. - TEST_IPC_RR (ipc_add (*ctx, &srv, &pollfd), "cannot add the server in the context"); + TEST_IPC_RR (ipc_add (ctx, &srv, &pollfd), "cannot add the server in the context"); IPC_RETURN_NO_ERROR; } diff --git a/src/error.c b/src/error.c index d93f56a..6443dd4 100644 --- a/src/error.c +++ b/src/error.c @@ -120,6 +120,24 @@ static struct ipc_errors_verbose ipc_errors_verbose[] = { , {IPC_ERROR_DIR_SETUP__DIRECTORY_NOT_WRITABLE, "directory_setup_: directory not writable"} , {IPC_ERROR_DIRECTORY_SETUP__PATH_PARAM , "directory_setup_: no path param"} + + , {IPC_ERROR_SERVER_INIT__NOT_ENOUGH_MEMORY, "IPC_ERROR_SERVER_INIT__NOT_ENOUGH_MEMORY"} + , {IPC_ERROR_CONNECTION__NOT_ENOUGH_MEMORY, "IPC_ERROR_CONNECTION__NOT_ENOUGH_MEMORY"} + , {IPC_ERROR_CTX_INIT__NO_CONTEXT_PARAM, "IPC_ERROR_CTX_INIT__NO_CONTEXT_PARAM"} + , {IPC_ERROR_CTX_INIT__CONTEXT_ALREADY_INIT, "IPC_ERROR_CTX_INIT__CONTEXT_ALREADY_INIT"} + , {IPC_ERROR_ADD__MALLOC_POLLFD, "IPC_ERROR_ADD__MALLOC_POLLFD"} + , {IPC_ERROR_ADD_MESSAGE_TO_SEND__EMPTY_LIST, "IPC_ERROR_ADD_MESSAGE_TO_SEND__EMPTY_LIST"} + , {IPC_ERROR_ADD_MESSAGE_TO_SEND__MALLOC, "IPC_ERROR_ADD_MESSAGE_TO_SEND__MALLOC"} + , {IPC_ERROR_ADD_MESSAGE_TO_SEND__NO_PARAM_MESSAGE, "IPC_ERROR_ADD_MESSAGE_TO_SEND__NO_PARAM_MESSAGE"} + , {IPC_ERROR_ADD_MESSAGE_TO_SEND__NO_PARAM_MESSAGES, "IPC_ERROR_ADD_MESSAGE_TO_SEND__NO_PARAM_MESSAGES"} + , {IPC_ERROR_CONNECTION__NO_CTX, "IPC_ERROR_CONNECTION__NO_CTX"} + , {IPC_ERROR_CTX_INIT__MALLOC_CTX, "IPC_ERROR_CTX_INIT__MALLOC_CTX"} + , {IPC_ERROR_CTX_INIT__MALLOC_POLLFD, "IPC_ERROR_CTX_INIT__MALLOC_POLLFD"} + , {IPC_ERROR_CONTACT_NETWORKD__NO_FD_PARAM, "IPC_ERROR_CONTACT_NETWORKD__NO_FD_PARAM"} + , {IPC_ERROR_HANDLE_NEW_CONNECTION__INCONSISTENT_INDEX, "IPC_ERROR_HANDLE_NEW_CONNECTION__INCONSISTENT_INDEX"} + , {IPC_ERROR_DEL_MESSAGE_TO_SEND__NO_PARAM_MESSAGES, "IPC_ERROR_DEL_MESSAGE_TO_SEND__NO_PARAM_MESSAGES"} + , {IPC_ERROR_MESSAGE_DEL__INDEX_ERROR, "IPC_ERROR_MESSAGE_DEL__INDEX_ERROR"} + , {IPC_ERROR_MESSAGE_DEL__EMPTY_LIST, "IPC_ERROR_MESSAGE_DEL__EMPTY_LIST"} }; const char *ipc_errors_get (enum ipc_error_code e) diff --git a/src/ipc.h b/src/ipc.h index 3e1632c..c13f08e 100644 --- a/src/ipc.h +++ b/src/ipc.h @@ -295,8 +295,8 @@ enum ipc_connection_types { * main public functions **/ -struct ipc_error ipc_server_init (struct ipc_ctx **ctx, const char *sname); -struct ipc_error ipc_connection (struct ipc_ctx **ctx, const char *sname); +struct ipc_error ipc_server_init (struct ipc_ctx *ctx, const char *sname); +struct ipc_error ipc_connection (struct ipc_ctx *ctx, const char *sname); struct ipc_error ipc_close (struct ipc_ctx *ctx, uint32_t index); struct ipc_error ipc_close_all (struct ipc_ctx *ctx); diff --git a/tests/func_01_connection_establishment.c b/tests/func_01_connection_establishment.c index dbaafb0..8875987 100644 --- a/tests/func_01_connection_establishment.c +++ b/tests/func_01_connection_establishment.c @@ -6,28 +6,30 @@ #define SERVICE_NAME "pong" -int main(int argc, char * argv[], char **env) +int main(int argc, char * argv[]) { argc = (int) argc; argv = (char **) argv; SECURE_DECLARATION(struct ipc_error, ret); - SECURE_DECLARATION(struct ipc_connection_info,service); + SECURE_DECLARATION(struct ipc_ctx, ctx); SECURE_DECLARATION(struct ipc_event, event); - - ret = ipc_connection (env, &service, SERVICE_NAME); + + ret = ipc_connection (&ctx, SERVICE_NAME); if (ret.error_code != IPC_ERROR_NONE) { + printf ("error: %s\n", ipc_errors_get(ret.error_code)); return EXIT_FAILURE; } - // long timer = 10; + // int timer = 10000; // 10 seconds // ret = ipc_wait_event (services, struct ipc_event *event, &timer); // if (ret.error_code != IPC_ERROR_NONE) { // return EXIT_FAILURE; // } - ret = ipc_close (&service); + ret = ipc_close_all (&ctx); if (ret.error_code != IPC_ERROR_NONE) { + printf ("error: %s\n", ipc_errors_get(ret.error_code)); return EXIT_FAILURE; } diff --git a/tests/func_01_connection_establishmentd.c b/tests/func_01_connection_establishmentd.c index 79c845b..ea04754 100644 --- a/tests/func_01_connection_establishmentd.c +++ b/tests/func_01_connection_establishmentd.c @@ -11,14 +11,13 @@ int main(int argc, char * argv[], char **env) argc = (int) argc; argv = (char **) argv; - SECURE_DECLARATION(struct ipc_connection_info,srv); + SECURE_DECLARATION(struct ipc_ctx,ctx); long timer = 10; printf ("func 01 - server init...\n"); - TEST_IPC_Q(ipc_server_init (env, &srv, SERVICE_NAME), EXIT_FAILURE); + TEST_IPC_Q(ipc_server_init (&ctx, SERVICE_NAME), EXIT_FAILURE); printf ("func 01 - server init ok\n"); - SECURE_DECLARATION(struct ipc_ctx, clients); SECURE_DECLARATION(struct ipc_event,event); printf ("func 01 - service polling...\n");