From a16efe0f527fe0dce8b08a1fa85f4ad50c31db62 Mon Sep 17 00:00:00 2001 From: fanasina Date: Mon, 20 Oct 2025 20:09:14 +0200 Subject: [PATCH] y_socket: add arg_var_ struct to call cmd outside y_socket: func : set_cmd_to_socket --- y_socket_t/include/y_socket_t/y_socket_t.h | 22 ++++++- y_socket_t/src/y_socket_t/y_socket_t.c | 73 +++++++++++++++++++++- y_socket_t/test/is_good.c | 13 +++- 3 files changed, 103 insertions(+), 5 deletions(-) diff --git a/y_socket_t/include/y_socket_t/y_socket_t.h b/y_socket_t/include/y_socket_t/y_socket_t.h index ed34e0f..99f4ae3 100644 --- a/y_socket_t/include/y_socket_t/y_socket_t.h +++ b/y_socket_t/include/y_socket_t/y_socket_t.h @@ -47,6 +47,22 @@ enum ipVersions{ extern const int af_array[nbIpVersion];//={AF_INET, AF_INET6}; +struct arg_var_{ + int set_up; + struct y_socket_t * argSock; + struct main_list_TYPE_PTR * list_arg; + struct argExecTasQ *argx; + struct main_list_y_ptr_HEADER_T *m_ok_head_l_t; + pthread_mutex_t *mut_var; + pthread_cond_t *cond_var; +}; + +struct arg_var_ * create_arg_var_(); +void set_up_arg_var_init_(struct arg_var_ *var, struct y_socket_t * argSock, struct main_list_TYPE_PTR * list_arg, struct argExecTasQ *argx , struct main_list_y_ptr_HEADER_T *m_ok_head_l_t); +void free_arg_var_(struct arg_var_ *var); +void wait_var_set_up_value_not_equal(struct arg_var_ *var, int value_set_up); + + struct y_socket_t{ struct pollfd *fds; size_t size_fds; @@ -56,8 +72,11 @@ struct y_socket_t{ int go_on; pthread_mutex_t *mut_go_on; int nb_workers; + struct arg_var_ *var; }; +void set_cmd_to_socket(char * buf, size_t len_buf, struct arg_var_ *var); + //struct y_socket_t * create_y_socket_t(size_t size_fds, char *port); //void free_y_socket_t(struct y_socket_t *sock); @@ -68,7 +87,7 @@ struct argdst { }; //struct y_socket_t * y_socket_create_(char * port); -struct y_socket_t * y_socket_create(char * port, size_t size_fds, int nb_workers); +struct y_socket_t * y_socket_create(char * port, size_t size_fds, int nb_workers, struct arg_var_ *var); struct y_socket_t * y_socket_create_(char * port); void y_socket_free(struct y_socket_t *socket); @@ -79,7 +98,6 @@ void *threadFuncSend(void *arg); // type = nothing if v4, 6 if v6 #define GET_IN_type_ADDR(PointerSockAddr,type) \ ((struct sockaddr_in##type *)(PointerSockAddr))->sin##type##_addr.s##type##_addr - #if 0 /* y_ptr_STRING */ struct y_string{ diff --git a/y_socket_t/src/y_socket_t/y_socket_t.c b/y_socket_t/src/y_socket_t/y_socket_t.c index 4e2dd77..4e87978 100644 --- a/y_socket_t/src/y_socket_t/y_socket_t.c +++ b/y_socket_t/src/y_socket_t/y_socket_t.c @@ -9,7 +9,72 @@ const int af_array[nbIpVersion]={AF_INET, AF_INET6}; void handle_input_cmd(char * buf, int buf_len, struct y_socket_t * argSock, struct main_list_TYPE_PTR * list_arg, struct argExecTasQ *argx , struct main_list_y_ptr_HEADER_T *m_ok_head_l_t); -struct y_socket_t * y_socket_create(char *port, size_t size_fds, int nb_workers){ + +struct arg_var_ * create_arg_var_(){ + struct arg_var_ * new_var=malloc(sizeof(struct arg_var_)); + new_var->set_up = 0; + new_var->mut_var = malloc(sizeof(pthread_mutex_t)); + pthread_mutex_init(new_var->mut_var, NULL); + new_var->cond_var = malloc(sizeof(pthread_cond_t)); + pthread_cond_init(new_var->cond_var, NULL); + + new_var->argSock = NULL; + new_var->list_arg = NULL; + new_var->argx = NULL; + new_var->m_ok_head_l_t = NULL; + + return new_var; +} + +void set_up_arg_var_init_(struct arg_var_ *var, struct y_socket_t * argSock, struct main_list_TYPE_PTR * list_arg, struct argExecTasQ *argx , struct main_list_y_ptr_HEADER_T *m_ok_head_l_t){ + pthread_mutex_lock(var->mut_var); + if(var->set_up == 0){ + var->argSock = argSock; + var->list_arg = list_arg; + var->argx = argx; + var->m_ok_head_l_t = m_ok_head_l_t; + var->set_up = 1; + } + pthread_mutex_unlock(var->mut_var); + pthread_cond_signal(var->cond_var); +} + +void change_var_set_up_value(struct arg_var_ *var, int value_set_up){ + pthread_mutex_lock(var->mut_var); + var->set_up = value_set_up; + pthread_mutex_unlock(var->mut_var); + pthread_cond_signal(var->cond_var); +} + +void wait_var_set_up_value_not_equal(struct arg_var_ *var, int value_set_up){ + pthread_mutex_lock(var->mut_var); + while(var->set_up == value_set_up){ + pthread_cond_wait(var->cond_var, var->mut_var); + } + + pthread_mutex_unlock(var->mut_var); + +} + +void free_arg_var_(struct arg_var_ *var){ + if(var->mut_var){ + pthread_mutex_destroy(var->mut_var); + free(var->mut_var); + } + if(var->cond_var){ + pthread_cond_destroy(var->cond_var); + free(var->cond_var); + } + + if(var) + free(var); +} +void set_cmd_to_socket(char * buf, size_t len_buf, struct arg_var_ *var){ + handle_input_cmd(buf, len_buf, var->argSock, var->list_arg, var->argx , var->m_ok_head_l_t); + + +} +struct y_socket_t * y_socket_create(char *port, size_t size_fds, int nb_workers, struct arg_var_ *var){ struct y_socket_t *sock_temp=malloc(sizeof(struct y_socket_t)); if(size_fds>=nbIpVersion+1) sock_temp->size_fds = size_fds; @@ -25,11 +90,12 @@ struct y_socket_t * y_socket_create(char *port, size_t size_fds, int nb_workers) sock_temp->mut_go_on = malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(sock_temp->mut_go_on, NULL); sock_temp->nb_workers = nb_workers; + sock_temp->var = var; return sock_temp; } struct y_socket_t * y_socket_create_(char * port){ - return y_socket_create(port, 3, 2); + return y_socket_create(port, 3, 2, NULL); } void y_socket_free(struct y_socket_t *socket){ free(socket->fds); @@ -564,6 +630,9 @@ void *y_socket_poll_fds(void *arg){ struct main_list_y_ptr_HEADER_T *m_head_l_t = create_var_list_y_ptr_HEADER_T(); struct main_list_y_ptr_HEADER_T *m_ok_head_l_t = create_var_list_y_ptr_HEADER_T(); //struct main_list_y_ptr_VARIABLE *m_var = create_var_list_y_ptr_VARIABLE(); + + //set up var to be used out side! + set_up_arg_var_init_(argSock->var, argSock, list_arg, argx , m_ok_head_l_t); // char *temp_all_buf=NULL; diff --git a/y_socket_t/test/is_good.c b/y_socket_t/test/is_good.c index 99633f5..865fe29 100644 --- a/y_socket_t/test/is_good.c +++ b/y_socket_t/test/is_good.c @@ -181,11 +181,21 @@ TEST(import_nodes){ TEST(pollThread){ - struct y_socket_t *argS=y_socket_create("1600", 2, 3); + struct arg_var_ * var = create_arg_var_(); + struct y_socket_t *argS=y_socket_create("1600", 2, 3, var); pthread_t pollTh; pthread_create(&pollTh, NULL, y_socket_poll_fds, (void*)argS); + + wait_var_set_up_value_not_equal(var, 0); + EXPECT_EQ(var->set_up,1); + + char buf[] = "sendto 192.168.1.250 { \"cmd\" : \"get file __exode.txt\" }"; + size_t len_buf = strlen(buf); + + set_cmd_to_socket(buf, len_buf, var); + /* struct argdst dstarg={ .port="1600", @@ -200,6 +210,7 @@ TEST(pollThread){ pthread_join(pollTh, NULL); y_socket_free(argS); + free_arg_var_(var); }