recreate y_socket_t repo

This commit is contained in:
2025-04-10 13:33:59 +02:00
parent bdaf894aea
commit cb27059312
18 changed files with 365 additions and 250 deletions
+92
View File
@@ -0,0 +1,92 @@
# lib: -lysocket
PROJECT_LIB=libysocket.so
CC=gcc
INCLUDE_DIRS=$(PWD)/include
SOCDIR=$(PWD)
#$(wildcard $(PWD)/**/include)
YLISTDIR=$(PWD)/../list_t
INCLUDE=-I$(INCLUDE_DIRS) -I$(YLISTDIR)/src
CFLAGS=-g -lpthread -Wall -Werror -fpic $(INCLUDE) #"-D DEBUG=1"
#LDFLAGS=
YSOCKSRC=$(PWD)/src/y_socket_t/y_socket_t.c
YSOCKSRC_O=$(YSOCKSRC:.c=.o)
YNODESRC=$(PWD)/src/y_socket_t/y_node_t.c
YNODESRC_O=$(YNODESRC:.c=.o)
YLISTSRC=$(YLISTDIR)/src/list_t/list_t.c
YLISTSRC_O=$(YLISTSRC:.c=.o)
TOPTARGETS := all clean
DEPS=$(YLISTDIR)
OBJ=$(YSOCKSRC_O) $(YNODESRC_O) $(YLISTSRC_O)
$(TOPTARGETS): $(DEPS)
all: $(PROJECT_LIB)
$(PROJECT_LIB): $(OBJ)
echo "objects:" $(OBJ)
#$(CC) -shared -o $@ $^ $(INCLUDE) $(LDFLAGS)
#$(CC) -shared -o $@ $^ $(LDFLAGS)
$(CC) -shared -o $@ $^ $(CFLAGS)
$(YSOCKSRC_O): $(YSOCKSRC) $(YNODESRC_O)
$(CC) -o $@ -c $< $(CFLAGS)
$(YNODESRC_O): $(YNODESRC) $(YSOCKSRC_O) $(YLISTSRC_O)
$(CC) -o $@ -c $< $(CFLAGS)
$(DEPS):
$(MAKE) -C $@ $(MAKECMDGOALS)
# .PHONY: $(TOPTARGETS) $(SUBDIRS)
.PHONY: clean
clean:
rm -f $(OBJ)
mrproper: clean
rm -f $(PROJECT_LIB)
install:
cp libysocket.so /usr/lib/
@if [ -d /usr/local/include ] ; then\
echo "copy include to /usr/local/include/" ;\
cp -r include/* /usr/local/include/;\
else\
echo "copy include to /usr/include/" ;\
cp -r include/* /usr/include/;\
fi
uninstall:
rm /usr/lib/libysocket.so
@if [ -d /usr/local/include ] ; then\
echo "remove from /usr/local/include/" ;\
rm -r /usr/local/include/y_socket_t ;\
else\
echo "remove from /usr/include/" ;\
rm -r /usr/include/y_socket_t ;\
fi
#SRC_test=test/is_good.c
#compile: $(SRC_test) $(PROJECT_LIB)
# $(CC) -o launch_is_good_m $< -L. test/src/permutation_t/permutation_t.o test/src/set_theoric_t/set_theoric_t.o -lytest -I./test/src -I./include_ytest
+29
View File
@@ -0,0 +1,29 @@
#ifndef __Y_NODE_T_H__C
#define __Y_NODE_T_H__C
#include <netinet/in.h>
//#include "y_socket_t/y_socket_t.h"
#include "list_t/list_t.h"
typedef struct y_node_t{
//char *id;
struct sockaddr_storage addr;
socklen_t addr_len;
} y_NODE_T;
GENERATE_LIST_ALL(y_NODE_T)
void init_len_y_NODE_T(y_NODE_T *node);
void init_len_list_y_NODE_T(struct main_list_y_NODE_T *listNodes);
int y_NODE_T_cmp(y_NODE_T nodeA, y_NODE_T nodeB);
struct list_y_NODE_T * search_node_in_list_y_NODE_T(struct main_list_y_NODE_T *listNodes, y_NODE_T node);
#endif /* __Y_NODE_T_H__C */
@@ -0,0 +1,52 @@
#ifndef Y_SOCKET_T_H__C
#define Y_SOCKET_T_H__C
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
//#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
//#include <fcntl.h>
#include <pthread.h>
#include <poll.h>
#include <errno.h>
#include <signal.h>
#include "y_socket_t/y_node_t.h"
#define BUF_SIZE 500
#define type4
#define type6 6
enum ipVersions{
v4,v6,nbIpVersion
};
extern const int af_array[nbIpVersion];//={AF_INET, AF_INET6};
struct y_socket_t{
struct pollfd fds[nbIpVersion];
char * port;
struct main_list_y_NODE_T nodes;
};
struct y_socket_t * y_socket_create(char * port);
void y_socket_free(struct y_socket_t *socket);
// 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
#endif /* Y_SOCKET_T_H__C */
+45
View File
@@ -0,0 +1,45 @@
#include "y_socket_t/y_node_t.h"
#include "y_socket_t/y_socket_t.h"
// type=nothing if v4, type=6 if v6
#define GET_type_IN_ADDR(PointerSockAddr,type) \
((struct sockaddr_in##type *)(PointerSockAddr))->sin##type##_addr.s##type##_addr
GEN_LIST_ALL(y_NODE_T)
void init_len_y_NODE_T(y_NODE_T *node){
node->addr_len=sizeof(struct sockaddr_storage);
}
void init_len_list_y_NODE_T(struct main_list_y_NODE_T *listNodes){
FOR_LIST_FORM_BEGIN(y_NODE_T, listNodes){
init_len_y_NODE_T(&(listNodes->current_list->value));
}
}
int y_NODE_T_cmp(y_NODE_T nodeA, y_NODE_T nodeB){
int ret = nodeA.addr_len - nodeB.addr_len;
if(ret == 0){
ret = nodeA.addr.ss_family - nodeB.addr.ss_family;
if(ret == 0){
if(nodeA.addr.ss_family == AF_INET){
//ret = ((struct sockaddr_in*)&(nodeA.addr))->sin_addr.s_addr - ((struct sockaddr_in*)&(nodeB.addr))->sin_addr.s_addr;
ret = GET_IN_type_ADDR(&(nodeA.addr),) - GET_IN_type_ADDR(&(nodeB.addr),);
}else
if(nodeA.addr.ss_family == AF_INET6){
ret = memcmp(GET_IN_type_ADDR(&(nodeA.addr),6), GET_IN_type_ADDR(&(nodeB.addr),6), 8);
//ret = memcmp(((struct sockaddr_in6*)&(nodeA.addr))->sin6_addr.s6_addr , ((struct sockaddr_in6*)&(nodeB.addr))->sin6_addr.s6_addr, 8);
}
}
}
return ret;
}
struct list_y_NODE_T * search_node_in_list_y_NODE_T(struct main_list_y_NODE_T *listNodes, y_NODE_T node){
FOR_LIST_FORM_BEGIN(y_NODE_T, listNodes){
if(y_NODE_T_cmp(node, listNodes->current_list->value) == 0){
return listNodes->current_list;
}
}
return NULL;
}
+49
View File
@@ -0,0 +1,49 @@
#include "y_socket_t/y_socket_t.h"
const int af_array[nbIpVersion]={AF_INET, AF_INET6};
struct y_socket_t * y_socket_create(char *port){
struct y_socket_t *sock_temp=malloc(sizeof(struct y_socket_t));
sock_temp->port=port;
return sock_temp;
}
void y_socket_free(struct y_socket_t *socket){
free(socket);
}
#if 0
struct y_server_t server;
void close_server(struct y_server_t server){
char *message ="HTTP/1.1 201 OK\r\n"
"Connection: close";
for(int i=0; i<server.nb_clients;++i){
pthread_mutex_lock(server.client[i].mut_client);
write(server.client[i].id, message, strlen(message));
pthread_mutex_unlock(server.client[i].mut_client);
close(server.client[i].id);
}
close(server.sock);
}
void func_sig_Handler(int sig){
if(sig==SIGINT){
close_server(server);
sigaction(SIGINT, &old, NULL); /* equivalent à .sa_falg = SA_RESETHAND , i.e. 1 seul new_action, puis on revient à l'ancien*/
exit(0);
}
}
#endif
+68
View File
@@ -0,0 +1,68 @@
NAME_TEST=is_good
CC=gcc
YTESTDIR=$(PWD)/../../ytest_t
YLISTDIR=$(PWD)/../../list_t
ROOT_DIR=$(PWD)/..
INCLUDE_DIR=$(ROOT_DIR)/include
CFLAGS=-I$(INCLUDE_DIR) -I$(YTESTDIR)/include_ytest/include -I$(YLISTDIR)/src
LDFLAGS=-L$(YTESTDIR) -lytest -lpthread -lm -lOpenCL
#SRC_DIR=$(ROOT_DIR)/src
#SRC=$(wildcard */*/*.c)
#SRC=$(wildcard **/**/*.c)
#OBJ=$(SRC:.c=.o)
#HEADS=$(OBJS:.o=.h)
#TEST_DIR=$(PWD)
EXECSRC=$(NAME_TEST).c
EXEC=launch_$(NAME_TEST)_m
YSOCKSRC=$(ROOT_DIR)/src/y_socket_t/y_socket_t.c
YSOCKSRC_O=$(YSOCKSRC:.c=.o)
YNODESRC=$(ROOT_DIR)/src/y_socket_t/y_node_t.c
YNODESRC_O=$(YNODESRC:.c=.o)
YLISTSRC=$(YLISTDIR)/src/list_t/list_t.c
YLISTSRC_O=$(YLISTSRC:.c=.o)
TOPTARGETS := all clean
DEPS=$(YTESTDIR) $(YLISTDIR) $(ROOT_DIR)
OBJ=$(YSOCKSRC_O) $(YNODESRC_O) $(YLISTSRC_O)
LIB_YTEST=$(YTESTDIR)/libytest.so
LIB_YSOCK=$(PWD)/../libysocket.so
$(TOPTARGETS): $(DEPS)
$(DEPS):
$(MAKE) -C $@ $(MAKECMDGOALS)
all: $(EXEC) $(LIB_YSOCK) $(LIB_YTEST)
$(EXEC): $(EXECSRC) $(OBJ)
$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
.PHONY: clean mrproper
clean:
rm -f $(OBJ)
mrproper: clean
rm -f $(EXEC)
run: $(EXEC)
$(EXEC) -h
+122
View File
@@ -0,0 +1,122 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// for sleep !
#ifdef __linux__
#include <unistd.h>
#elif _WIN32
#include <windows.h>
#endif
#include "ftest/ftest.h"
#include "ftest/ftest_array.h"
#include "fmock/fmock.h"
//#include "permutation_t/permutation_t.h"
#include "y_socket_t/y_socket_t.h"
#include "y_socket_t/y_node_t.h"
//#include <netinet/in.h>
//#include <sys/socket.h>
//#include <arpa/inet.h>
#define VALGRIND_ 1
TEST(first){
struct y_socket_t *firstSock = y_socket_create("1600");
LOG("create y_socket_t in port |%s|\n",firstSock->port);
y_socket_free(firstSock);
for(int af=v4; af<=v6;++af)
LOG("af_array[%d]=%d\n",af,af_array[af]);
}
TEST(list_nodes){
struct main_list_y_NODE_T * listNodes = create_var_list_y_NODE_T();
LOG("main_list_y_NODE_T created\n");
y_NODE_T firstNode;
push_back_list_y_NODE_T(listNodes, firstNode);
free_all_var_list_y_NODE_T(listNodes);
}
TEST(equalNode){
y_NODE_T nA, nB;
init_len_y_NODE_T(&nA);
init_len_y_NODE_T(&nB);
nA.addr.ss_family=AF_INET;
nB.addr.ss_family=AF_INET;
//((struct sockaddr_in*)&(nA.addr))->sin_addr.s_addr = inet_addr("192.168.1.2");
//((struct sockaddr_in*)&(nB.addr))->sin_addr.s_addr = inet_addr("192.168.1.2");
GET_IN_type_ADDR(&(nA.addr),) = inet_addr("1.1.1.1");
GET_IN_type_ADDR(&(nB.addr),) = inet_addr("1.1.1.1");
LOG("nA = %d\n",GET_IN_type_ADDR(&(nA.addr),));
LOG("nB = %d\n",GET_IN_type_ADDR(&(nB.addr),));
EXPECT_EQ(0, y_NODE_T_cmp(nA,nB));
GET_IN_type_ADDR(&(nB.addr),) = inet_addr("0.1.1.1");
LOG("diff = %d\n", y_NODE_T_cmp(nA,nB));
}
TEST(searchNode){
y_NODE_T nA, nB;
init_len_y_NODE_T(&nA);
init_len_y_NODE_T(&nB);
nA.addr.ss_family=AF_INET;
nB.addr.ss_family=AF_INET;
//((struct sockaddr_in*)&(nA.addr))->sin_addr.s_addr = inet_addr("192.168.1.2");
//((struct sockaddr_in*)&(nB.addr))->sin_addr.s_addr = inet_addr("192.168.1.2");
GET_IN_type_ADDR(&(nA.addr),) = inet_addr("1.1.1.1");
GET_IN_type_ADDR(&(nB.addr),) = inet_addr("1.1.1.2");
LOG("nA = %d\n",GET_IN_type_ADDR(&(nA.addr),));
LOG("nB = %d\n",GET_IN_type_ADDR(&(nB.addr),));
struct main_list_y_NODE_T *listNodes = create_var_list_y_NODE_T();
push_back_list_y_NODE_T(listNodes, nA);
push_back_list_y_NODE_T(listNodes, nB);
GET_IN_type_ADDR(&(nA.addr),) = inet_addr("1.1.1.3");
push_back_list_y_NODE_T(listNodes, nA);
GET_IN_type_ADDR(&(nB.addr),) = inet_addr("0.1.1.1");
// push_back_list_y_NODE_T(listNodes, nB);
EXPECT_TRUE(NULL == search_node_in_list_y_NODE_T(listNodes, nB));
GET_IN_type_ADDR(&(nA.addr),) = inet_addr("1.1.1.3");
EXPECT_FALSE(NULL == search_node_in_list_y_NODE_T(listNodes, nA));
free_all_var_list_y_NODE_T(listNodes);
}
int main(int argc, char **argv){
run_all_tests_args(argc, argv);
return 0;
}