From c1b52ca6586032d4d4d3ffbb8a87af93fece7d42 Mon Sep 17 00:00:00 2001 From: fanasina Date: Tue, 2 Sep 2025 22:18:37 +0200 Subject: [PATCH] y_socket: add post file and receive file --- y_socket_t/src/y_socket_t/y_file_handler.c | 88 ++++++++++++++++++++-- y_socket_t/src/y_socket_t/y_socket_t.c | 22 +++++- 2 files changed, 104 insertions(+), 6 deletions(-) diff --git a/y_socket_t/src/y_socket_t/y_file_handler.c b/y_socket_t/src/y_socket_t/y_file_handler.c index 2697415..39b9106 100644 --- a/y_socket_t/src/y_socket_t/y_file_handler.c +++ b/y_socket_t/src/y_socket_t/y_file_handler.c @@ -1,5 +1,7 @@ #include "y_socket_t/y_file_handler.h" +//#include "y_socket_t/y_node_t.h" + void fileNameDateScore(char* filename, char * pre, char* post,size_t score){ @@ -19,7 +21,70 @@ struct arg_send_file{ char * filename; }; #endif +/* */ +void y_send_post_file_to_all_nodes(void *arg){ + struct arg_send_file *argS=(struct arg_send_file*)arg; + struct pollfd *fds=argS->fds; + struct main_list_y_NODE_T *nodes=argS->nodes; + char * filename=argS->filename; +#if TEMP_ADDR + char tempAddr[BUF_SIZE+1]; +#endif + int c_af; +// char host[NI_MAXHOST], service[NI_MAXSERV]; + char buf_send[BUF_SIZE+1]; + int fd_file; + int retsprintf = sprintf(buf_send,"post file %s", filename ); + + for(struct list_y_NODE_T *local_list_current = nodes->begin_list; local_list_current; local_list_current=local_list_current->next ){ + //memset(tempAddr, 0, BUF_SIZE+1); + c_af=(local_list_current->value).addr.ss_family; +#if TEMP_ADDR + if(c_af==AF_INET){ + if(NULL == inet_ntop(c_af, + &(GET_IN_type_ADDR(&(local_list_current->value),)), + tempAddr, BUF_SIZE/*(argSock->local_list_current->value).addr_len*/)){ + fprintf(stderr, "error inet_ntop v4\n"); + } + }else if(c_af==AF_INET6){ + if(NULL == inet_ntop(c_af, + &(GET_IN_type_ADDR(&(local_list_current->value),6)), + tempAddr, BUF_SIZE /*(argSock->local_list_current->value).addr_len*/)){ + fprintf(stderr, "error inet_ntop v6 :errno=%d\n",errno); + } + } +#endif +#if 0 + off_t offset = 0; + ssize_t ret_sendfile ; + while((ret_sendfile = sendfile(fds[(c_af==AF_INET6)].fd ,fd_file, &offset, BUF_SIZE))>0){ + + } +#endif + /// printf("debug: destination %s :\n",tempAddr); + + if(sendto(fds[(c_af==AF_INET6)].fd, + buf_send, retsprintf, + /*msgRet, len_msgRet,*/ + 0, + (struct sockaddr*)&((local_list_current->value).addr), + (local_list_current->value).addr_len) != + retsprintf + /*len_msgRet*/ + ){ +#if TEMP_ADDR + fprintf(stderr, "Error sending response to %s\n",tempAddr); +#endif + }else{ +#if TEMP_ADDR + printf("debug: sending response to < %s >",tempAddr); +#endif + } + } + } + +/* */ #define TEMP_ADDR 1 //void y_socket_send_file_for_all_nodes(struct pollfd *fds, struct main_list_y_NODE_T *nodes, char * filename) @@ -55,7 +120,8 @@ void* y_socket_send_file_for_all_nodes(void* arg){ return NULL; } - + y_send_post_file_to_all_nodes(arg); + //memset(buf_send, 0, BUF_SIZE+1); while((retread = read(fd_file, buf_send, BUF_SIZE) ) > 0 ){ buf_send[retread]='\0'; @@ -122,20 +188,31 @@ void* y_socket_send_file_for_all_nodes(void* arg){ } -void recevefromnode(){ +void receve_from_node(struct pollfd *fds, char *msg, size_t count){ + + char filename[500]; + int fd_file; + long int nread; + char buf[BUF_SIZE]; + struct sockaddr_storage peer_addr; + socklen_t peer_addr_len = sizeof(struct sockaddr_storage); + //update_nodes(y_NODE_T node, struct main_list_y_NODE_T *nodes); + fileNameDateScore(filename, "_",msg,count); if((fd_file = open(filename, O_WRONLY | O_CREAT , S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) == -1){ fprintf(stderr,"erreur write %s\n",filename); - return NULL; + return ; //NULL; } memset(buf,0, BUF_SIZE); while((nread = recvfrom(fds[1].fd, buf, BUF_SIZE, 0, - (struct sockaddr *)&peer_addr, &peer_addr_len)) == BUF_SIZE){ + (struct sockaddr *)&peer_addr, &peer_addr_len + //(struct sockaddr *)&(node.addr), &(node.addr_len) + )) == BUF_SIZE){ if(nread == -1) { fprintf(stderr,"error nread\n"); - } + } else { printf("msg: %s\n",buf); @@ -144,6 +221,7 @@ void recevefromnode(){ } printf("nread==%ld\n",nread); } + if(nread >0 && nread mut_go_on); sock->go_on = 0; @@ -361,6 +361,26 @@ void* y_socket_handler_(void *arg){ } } + else if(strncmp(buf, "post", 4)==0){ + if(strncmp(buf+5,"file",4)==0){ + char filename[BUF_SIZE]; + strcpy(filename, buf + 9); + + + receve_from_node(fds, filename, strlen(filename)); + /* + pthread_mutex_lock(sock->mut_go_on); + sock->go_on = 0; + pthread_mutex_unlock(sock->mut_go_on); + */ +// kill_all_workers(argw); +// printf("debug: kill_all\n"); + } + + } + + + return NULL; } void *y_socket_poll_fds(void *arg){