From cb353cbe3cab09813a52e039fea8ea95f29cebac Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Sun, 2 Apr 2017 21:44:59 +0200 Subject: [PATCH] first commit --- ftp/.gitmodules | 3 ++ ftp/Makefile | 109 ++++++++++++++++++++++++++++++++++++++++++++ ftp/client | Bin 0 -> 20708 bytes ftp/includes/ft_p.h | 22 +++++++++ ftp/libft | 1 + ftp/server | Bin 0 -> 20828 bytes ftp/srcs/client.c | 50 ++++++++++++++++++++ ftp/srcs/server.c | 76 ++++++++++++++++++++++++++++++ ftp/srcs/test.c | 4 ++ 9 files changed, 265 insertions(+) create mode 100644 ftp/.gitmodules create mode 100644 ftp/Makefile create mode 100755 ftp/client create mode 100644 ftp/includes/ft_p.h create mode 160000 ftp/libft create mode 100755 ftp/server create mode 100644 ftp/srcs/client.c create mode 100644 ftp/srcs/server.c create mode 100644 ftp/srcs/test.c diff --git a/ftp/.gitmodules b/ftp/.gitmodules new file mode 100644 index 00000000..ea1279ca --- /dev/null +++ b/ftp/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libft"] + path = libft + url = http://github.com/jzck/libft.git diff --git a/ftp/Makefile b/ftp/Makefile new file mode 100644 index 00000000..3924b232 --- /dev/null +++ b/ftp/Makefile @@ -0,0 +1,109 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: wescande +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2016/08/29 21:32:58 by wescande #+# #+# # +# Updated: 2017/04/02 21:32:01 by jhalford ### ########.fr # +# # +# **************************************************************************** # + +NAME = server client + +CC = gcc +W_FLAGS = -Wall -Wextra -Werror +D_FLAGS = +FLAGS = $(W_FLAGS) $(D_FLAGS) + +LEN_NAME = `printf "%s" $(NAME) |wc -c` +DELTA = $$(echo "$$(tput cols)-31-$(LEN_NAME)"|bc) + +LIBFT_DIR = libft/ +LIBFT_LIB = $(LIBFT_DIR)libft.a +LIBFT_INC = $(LIBFT_DIR)includes/ + +LIBS = + +SRC_DIR = srcs/ +INC_DIR = includes/ +OBJ_DIR = objs/ + +SERVER_OBJ = $(OBJ_DIR)server.o +CLIENT_OBJ = $(OBJ_DIR)client.o + +SRC_BASE = \ +client.c\ +server.c\ +test.c + +SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) +OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) +OBJS := $(filter-out $(SERVER_OBJ), $(OBJS)) +OBJS := $(filter-out $(CLIENT_OBJ), $(OBJS)) +NB = $(words $(SRC_BASE)) +INDEX = 0 + +all : + @make -C $(LIBFT_DIR) + @make -j $(NAME) + +server: $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) $(SERVER_OBJ) + @$(CC) $(OBJS) -o $@ \ + -I $(INC_DIR) \ + -I $(LIBFT_INC) \ + $(LIBS) $(LIBFT_LIB) $(SERVER_OBJ) $(FLAGS) + @printf "\r\033[38;5;117m✓ MAKE $@ \033[0m\033[K\n" + +client: $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) $(CLIENT_OBJ) + @$(CC) $(OBJS) -o $@ \ + -I $(INC_DIR) \ + -I $(LIBFT_INC) \ + $(LIBS) $(LIBFT_LIB) $(CLIENT_OBJ) $(FLAGS) + @printf "\r\033[38;5;117m✓ MAKE $@ \033[0m\033[K\n" + +$(LIBFT_LIB): + @make -C $(LIBFT_DIR) + +$(OBJ_DIR) : + @mkdir -p $(OBJ_DIR) + +$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) + @$(eval DONE=$(shell echo $$(($(INDEX)*20/$(NB))))) + @$(eval PERCENT=$(shell echo $$(($(INDEX)*100/$(NB))))) + @$(eval TO_DO=$(shell echo $$((20-$(INDEX)*20/$(NB) - 1)))) + @$(eval COLOR=$(shell list=(160 196 202 208 215 221 226 227 190 154 118 82 46); index=$$(($(PERCENT) * $${#list[@]} / 100)); echo "$${list[$$index]}")) + @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) ft_p $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" + @$(CC) $(FLAGS) $(OBJ_FLAG) -MMD -c $< -o $@\ + -I $(INC_DIR)\ + -I $(LIBFT_INC) + @$(eval INDEX=$(shell echo $$(($(INDEX)+1)))) + +clean: cleanlib + @if [ -e $(OBJ_DIR) ]; then \ + rm -rf $(OBJ_DIR); \ + printf "\r\033[38;5;202m✗ clean $(NAME) \033[0m\033[K\n"; \ + fi; + +cleanlib: + @make -C $(LIBFT_DIR) clean + +fclean: clean fcleanlib + @for file in $(NAME); do \ + if [ -e $$file ]; then \ + rm -f $$file ; \ + printf "\r\033[38;5;196m✗ fclean $$file\033[0m\033[K\n"; \ + fi; \ + done; + +fcleanlib: cleanlib + @make -C $(LIBFT_DIR) fclean + +re: fclean all + +relib: fcleanlib $(LIBFT_LIB) + +.PHONY : fclean clean re relib cleanlib fcleanlib + +-include $(OBJS:.o=.d) diff --git a/ftp/client b/ftp/client new file mode 100755 index 0000000000000000000000000000000000000000..9322ef44ebcfd7d586086d6bd7725eefe8edbf26 GIT binary patch literal 20708 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 literal 0 HcmV?d00001 diff --git a/ftp/includes/ft_p.h b/ftp/includes/ft_p.h new file mode 100644 index 00000000..fd858b4b --- /dev/null +++ b/ftp/includes/ft_p.h @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_p.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/04/02 19:18:58 by jhalford #+# #+# */ +/* Updated: 2017/04/02 20:23:38 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_P_H +# define FT_P_H + +#include "libft.h" +#include "sys/socket.h" +#include "netdb.h" +#include "netinet/in.h" +#include "arpa/inet.h" + +#endif diff --git a/ftp/libft b/ftp/libft new file mode 160000 index 00000000..ab685ea7 --- /dev/null +++ b/ftp/libft @@ -0,0 +1 @@ +Subproject commit ab685ea78b2fd776d07e2a150a8a2a884a48c80f diff --git a/ftp/server b/ftp/server new file mode 100755 index 0000000000000000000000000000000000000000..d74b86539e1e557b0b57e28a50207244bbc54453 GIT binary patch literal 20828 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 +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/04/02 19:18:31 by jhalford #+# #+# */ +/* Updated: 2017/04/02 21:40:32 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_p.h" + +#define FTP_CLIENT_USAGE "%s " + +int create_client(char *addr, int port) +{ + int sock; + struct protoent *proto; + struct sockaddr_in sin; + + if (!(proto = getprotobyname("tcp"))) + return (-1); + sock = socket(PF_INET, SOCK_STREAM, proto->p_proto); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = inet_addr(addr); + if (connect(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0) + return (-1); + return (sock); +} + +int main(int ac, char **av) +{ + int port; + int sock; + + if (ac != 3) + ft_usage(FTP_CLIENT_USAGE, av[0]); + port = ft_atoi(av[2]); + if ((sock = create_client(av[1], port)) < 0) + { + perror(av[0]); + return (1); + } + write(sock, "bonjour\n", 8); + close(sock); + return (0); +} diff --git a/ftp/srcs/server.c b/ftp/srcs/server.c new file mode 100644 index 00000000..6dc79f60 --- /dev/null +++ b/ftp/srcs/server.c @@ -0,0 +1,76 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* server.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/04/02 15:02:48 by jhalford #+# #+# */ +/* Updated: 2017/04/02 21:40:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_p.h" + +#define FTP_SERVER_USAGE "%s " + +int create_server(int port) +{ + int sock; + struct protoent *proto; + struct sockaddr_in sin; + + if (!(proto = getprotobyname("tcp"))) + return (-1); + sock = socket(PF_INET, SOCK_STREAM, proto->p_proto); + sin.sin_family = AF_INET; + sin.sin_port = htons(port); + sin.sin_addr.s_addr = htonl(INADDR_ANY); + if (bind(sock, (const struct sockaddr *)&sin, sizeof(sin)) < 0) + return (-1); + listen(sock, 42); + return (sock); +} + +int main(int ac, char **av) +{ + int port; + int sock; + int cs; + struct sockaddr_in csin; + socklen_t cslen; + int r; + char buf[1024]; + pid_t pid; + + if (ac != 2) + ft_usage(FTP_SERVER_USAGE, av[0]); + port = ft_atoi(av[1]); + if ((sock = create_server(port)) < 0) + { + perror(av[0]); + return (1); + } + while (1) + { + cs = accept(sock, (struct sockaddr*)&csin, &cslen); + if ((pid = fork()) < 0) + { + perror(av[0]); + return (1); + } + if (pid == 0) + { + while ((r = read(cs, buf, 1023)) > 0) + { + buf[r - 1] = 0; + ft_printf("==%i== received %i bytes: [%s]\n", getpid(), r, buf); + } + close(cs); + exit (0); + } + close(cs); + } + close(sock); + return (0); +} diff --git a/ftp/srcs/test.c b/ftp/srcs/test.c new file mode 100644 index 00000000..5d0d8f50 --- /dev/null +++ b/ftp/srcs/test.c @@ -0,0 +1,4 @@ +int test(void) +{ + return (0); +}