y_socket: add extern_socket_handler to handle other cmd extern socket

This commit is contained in:
2025-10-23 14:27:15 +02:00
parent 151daf548d
commit 7dbcb2505f
3 changed files with 100 additions and 73 deletions
+2 -1
View File
@@ -55,9 +55,10 @@ struct arg_var_{
struct main_list_y_ptr_HEADER_T *m_ok_head_l_t; struct main_list_y_ptr_HEADER_T *m_ok_head_l_t;
pthread_mutex_t *mut_var; pthread_mutex_t *mut_var;
pthread_cond_t *cond_var; pthread_cond_t *cond_var;
void (*extern_socket_handler)(char*,int);
}; };
struct arg_var_ * create_arg_var_(); struct arg_var_ * create_arg_var_(void (*extern_socket_handler)(char*,int));
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 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 free_arg_var_(struct arg_var_ *var);
void wait_var_set_up_value_not_equal(struct arg_var_ *var, int value_set_up); void wait_var_set_up_value_not_equal(struct arg_var_ *var, int value_set_up);
+33 -7
View File
@@ -7,10 +7,12 @@
const int af_array[nbIpVersion]={AF_INET, AF_INET6}; 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); //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);
void handle_input_cmd(char * buf, int buf_len, 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);
struct arg_var_ * create_arg_var_(){ struct arg_var_ * create_arg_var_(void (*extern_socket_handler)(char*,int)){
struct arg_var_ * new_var=malloc(sizeof(struct arg_var_)); struct arg_var_ * new_var=malloc(sizeof(struct arg_var_));
new_var->set_up = 0; new_var->set_up = 0;
new_var->mut_var = malloc(sizeof(pthread_mutex_t)); new_var->mut_var = malloc(sizeof(pthread_mutex_t));
@@ -22,6 +24,7 @@ struct arg_var_ * create_arg_var_(){
new_var->list_arg = NULL; new_var->list_arg = NULL;
new_var->argx = NULL; new_var->argx = NULL;
new_var->m_ok_head_l_t = NULL; new_var->m_ok_head_l_t = NULL;
new_var->extern_socket_handler = extern_socket_handler;
return new_var; return new_var;
} }
@@ -70,7 +73,8 @@ void free_arg_var_(struct arg_var_ *var){
free(var); free(var);
} }
void set_cmd_to_socket(char * buf, size_t len_buf, struct arg_var_ *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); //handle_input_cmd(buf, len_buf, var->argSock, var->list_arg, var->argx , var->m_ok_head_l_t);
handle_input_cmd(buf, len_buf, var);//->argSock, var->list_arg, var->argx , var->m_ok_head_l_t);
} }
@@ -301,7 +305,7 @@ void* y_socket_handler_(void *arg){
write(fd_0,content,size_content); write(fd_0,content,size_content);
close(fd_0); close(fd_0);
}*/ }*/
handle_input_cmd(content, size_content, sock, argw->list_arg, argw->argx , argH->m_ok_head_l_t); handle_input_cmd(content, size_content, sock->var); //, argw->list_arg, argw->argx , argH->m_ok_head_l_t);
} }
else if(strncmp(buf, "get", 3)==0){ else if(strncmp(buf, "get", 3)==0){
if(len_buf > 4 && strncmp(buf+4,"file",4)==0){ if(len_buf > 4 && strncmp(buf+4,"file",4)==0){
@@ -484,7 +488,12 @@ void handle_buf_socket_rec(struct main_list_y_ptr_HEADER_T *m_ok_head_l_t, struc
} }
} }
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){ void handle_input_cmd(char * buf, int buf_len, 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
struct y_socket_t * argSock=var->argSock;
struct main_list_TYPE_PTR * list_arg=var->list_arg;
struct argExecTasQ *argx=var->argx;
struct main_list_y_ptr_HEADER_T *m_ok_head_l_t=var->m_ok_head_l_t;
y_NODE_T node; y_NODE_T node;
memset(&(node.addr), 0, sizeof(struct sockaddr_storage)); memset(&(node.addr), 0, sizeof(struct sockaddr_storage));
node.addr_len = sizeof(struct sockaddr_storage); node.addr_len = sizeof(struct sockaddr_storage);
@@ -494,6 +503,7 @@ if(buf_len>6){
#if 1 #if 1
char cmd[BUF_SIZE], dst_addr[BUF_SIZE];//, msg_buf[BUF_SIZE]; char cmd[BUF_SIZE], dst_addr[BUF_SIZE];//, msg_buf[BUF_SIZE];
int index_buf=0, index_str=0; int index_buf=0, index_str=0;
while((index_buf < buf_len) && (buf[index_buf]==' ')){++index_buf;}
for(; buf[index_buf]!=' '; ++index_buf){ for(; buf[index_buf]!=' '; ++index_buf){
cmd[index_str++]=buf[index_buf]; cmd[index_str++]=buf[index_buf];
} }
@@ -517,8 +527,9 @@ if(buf_len>6){
#endif #endif
if(/*check_y_socket_go_on(argSock) &&*/ strncmp(cmd, "sendto", 6)==0){ if(*cmd &&/*check_y_socket_go_on(argSock) &&*/ strncmp(cmd, "sendto", 6)==0){
///printf("debug : sendto match, dst_addr=[%s]\n", dst_addr); ///printf("debug : sendto match, dst_addr=[%s]\n", dst_addr);
if(*dst_addr){
if(strcmp(dst_addr, "all" ) == 0){ if(strcmp(dst_addr, "all" ) == 0){
struct arg_send_file *argS = malloc(sizeof(struct arg_send_file)); struct arg_send_file *argS = malloc(sizeof(struct arg_send_file));
argS->fds=fds; argS->fds=fds;
@@ -586,6 +597,13 @@ if(buf_len>6){
*/ */
} }
}
}else{
if(var->extern_socket_handler){
var->extern_socket_handler(buf,buf_len);
}else{
printf("debug: No extern_socket_handler in var\n");
}
} }
}else if(buf_len && strncmp(buf, "help", 4)==0){ }else if(buf_len && strncmp(buf, "help", 4)==0){
usage_cmdl(); usage_cmdl();
@@ -593,7 +611,14 @@ if(buf_len>6){
pthread_mutex_lock(argSock->mut_go_on); pthread_mutex_lock(argSock->mut_go_on);
argSock->go_on = 0; argSock->go_on = 0;
pthread_mutex_unlock(argSock->mut_go_on); pthread_mutex_unlock(argSock->mut_go_on);
}else{
if(var->extern_socket_handler){
var->extern_socket_handler(buf,buf_len);
}else{
printf("debug: No extern_socket_handler in var\n");
} }
}
} }
@@ -819,7 +844,8 @@ void *y_socket_poll_fds(void *arg){
} }
} }
#else #else
handle_input_cmd(buf, buf_len, argSock, list_arg, argx, m_ok_head_l_t); //handle_input_cmd(buf, buf_len, argSock, list_arg, argx, m_ok_head_l_t);
handle_input_cmd(buf, buf_len, argSock->var); //argSock, list_arg, argx, m_ok_head_l_t);
#endif #endif
} }
+1 -1
View File
@@ -181,7 +181,7 @@ TEST(import_nodes){
TEST(pollThread){ TEST(pollThread){
struct arg_var_ * var = create_arg_var_(); struct arg_var_ * var = create_arg_var_(NULL);
struct y_socket_t *argS=y_socket_create("1600", 2, 3, var); struct y_socket_t *argS=y_socket_create("1600", 2, 3, var);
pthread_t pollTh; pthread_t pollTh;