diff --git a/libft/Makefile b/libft/Makefile index 0b7088f5..b5abab40 100644 --- a/libft/Makefile +++ b/libft/Makefile @@ -151,6 +151,7 @@ sstr/ft_sstrprint.c\ sstr/ft_sstrprint_fd.c\ sstr/ft_sstrsort.c\ sstr/ft_sstrstr.c\ +str/ft_strsepjoin.c\ str/ft_atoi.c\ str/ft_convert_base.c\ str/ft_putaddr_fd.c\ diff --git a/libft/includes/net.h b/libft/includes/net.h index f6add720..91698c7f 100644 --- a/libft/includes/net.h +++ b/libft/includes/net.h @@ -1,8 +1,9 @@ #ifndef NET_H # define NET_H -# define ACK 2 -# define NACK 3 +# define ACK 2 +# define NACK 3 +# define NET_MAXSIZE 512 # include # include @@ -14,7 +15,9 @@ int create_client(char *addr, int port, char *protoname); void listener(int domain, int sock, int proto, void (*handler)(void *buf, int bytes, struct sockaddr_in *addr)); int net_send(int sock, char *msg, int size); +int net_send_large(int sock, char *msg, int size); int net_get(int sock, char *msg, int size); int net_get_fd(int sock, int fd, int size); +int net_get_large(int sock, int fd); #endif diff --git a/libft/includes/str.h b/libft/includes/str.h index 3db450ed..0d08a4b6 100644 --- a/libft/includes/str.h +++ b/libft/includes/str.h @@ -51,6 +51,7 @@ int ft_strequ(char const *s1, char const *s2); int ft_strnequ(char const *s1, char const *s2, size_t n); char *ft_strsub(char const *s, unsigned int start, size_t len); char *ft_strjoin(char const *s1, char const *s2); +char *ft_strsepjoin(char **tab, char sep); char *ft_strtrim(char const *s); char **ft_strsplit(char const *s, char c); diff --git a/libft/srcs/net/net_get.c b/libft/srcs/net/net_get.c index e09418c1..9541282c 100644 --- a/libft/srcs/net/net_get.c +++ b/libft/srcs/net/net_get.c @@ -26,3 +26,21 @@ int net_get_fd(int sock, int fd, int size) return (-1); return (0); } + +int net_get_large(int sock, int fd) +{ + int i; + int num_blks; + int num_last_blk; + + net_get(sock, (char*)&num_blks, sizeof(num_blks)); + net_get(sock, (char*)&num_last_blk, sizeof(num_last_blk)); + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_get_fd(sock, fd, NET_MAXSIZE); + if (num_last_blk) + net_get_fd(sock, fd, num_last_blk); + return (0); +} diff --git a/libft/srcs/net/net_send.c b/libft/srcs/net/net_send.c index e4a76e0e..de981f56 100644 --- a/libft/srcs/net/net_send.c +++ b/libft/srcs/net/net_send.c @@ -12,3 +12,26 @@ int net_send(int sock, char *msg, int size) return (1); return (0); } + +int net_send_large(int sock, char *msg, int size) +{ + int i; + int num_blks; + int num_last_blk; + + num_blks = htons(size / NET_MAXSIZE + 1); + num_last_blk = htons(size % NET_MAXSIZE); + if (net_send(sock, (char*)&num_blks, sizeof(num_blks))) + return (1); + if (net_send(sock, (char*)&num_last_blk, sizeof(num_blks))) + return (1); + + num_blks = ntohs(num_blks); + num_last_blk = ntohs(num_last_blk); + i = -1; + while (++i < num_blks - 1) + net_send(sock, msg + i * NET_MAXSIZE, NET_MAXSIZE); + if (num_last_blk) + net_send(sock, msg + i * NET_MAXSIZE, num_last_blk); + return (0); +} diff --git a/libft/srcs/str/ft_strsepjoin.c b/libft/srcs/str/ft_strsepjoin.c new file mode 100644 index 00000000..8fbb0ee3 --- /dev/null +++ b/libft/srcs/str/ft_strsepjoin.c @@ -0,0 +1,25 @@ +#include "libft.h" + +char *ft_strsepjoin(char **tab, char sep) +{ + char *join; + char **p; + int len; + + len = 0; + if (!(p = tab)) + return (NULL); + while (*p) + len += ft_strlen(*p++) + 1; + if (!(join = ft_strnew(len))) + return (NULL); + *join = 0; + p = tab; + while (*p) + { + ft_strcat(join, *p++); + ft_strcat(join, &sep); + } + join[len - 1] = 0; + return (join); +}