diff --git a/ftp/Makefile b/ftp/Makefile index 399107a4..4d5e241f 100644 --- a/ftp/Makefile +++ b/ftp/Makefile @@ -6,7 +6,7 @@ # By: wescande +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2016/08/29 21:32:58 by wescande #+# #+# # -# Updated: 2017/11/01 17:07:12 by jhalford ### ########.fr # +# Updated: 2017/11/02 15:58:48 by jhalford ### ########.fr # # # # **************************************************************************** # @@ -34,11 +34,16 @@ SRC_BASE = \ client/client.c\ console_msg.c\ crlf.c\ -login.c\ +ftp_dataconn.c\ +server/cmd_cwd.c\ server/cmd_list.c\ server/cmd_port.c\ server/cmd_pwd.c\ +server/cmd_quit.c\ +server/cmd_retr.c\ +server/cmd_stor.c\ server/cmd_type.c\ +server/cmd_user.c\ server/server.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) @@ -80,7 +85,7 @@ $(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) @$(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/^.*\///')" + @printf "\r\033[38;5;%dm⌛ [%s]: %2d%% `printf '█%.0s' {0..$(DONE)}`%*s❙%*.*s\033[0m\033[K" $(COLOR) ftp $(PERCENT) $(TO_DO) "" $(DELTA) $(DELTA) "$(shell echo "$@" | sed 's/^.*\///')" @$(CC) $(FLAGS) $(OBJ_FLAG) -MMD -c $< -o $@\ -I $(INC_DIR)\ -I $(LIBFT_INC) diff --git a/ftp/auteur b/ftp/auteur new file mode 100644 index 00000000..b0e9923f --- /dev/null +++ b/ftp/auteur @@ -0,0 +1 @@ +jhalford diff --git a/ftp/data/file1.txt b/ftp/data/file1.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/ftp/includes/ftp_server.h b/ftp/includes/ftp_server.h index 47e12ad6..7c9942af 100644 --- a/ftp/includes/ftp_server.h +++ b/ftp/includes/ftp_server.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/11/01 15:56:59 by jhalford #+# #+# */ -/* Updated: 2017/11/01 20:44:44 by jhalford ### ########.fr */ +/* Updated: 2017/11/02 16:33:37 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,26 +23,34 @@ # include "ftp.h" -# define FTP_SERVER_USAGE "%s " -# define ftp_ret(ftp, ...) ftp_send(ftp->cmd_sock, ##__VA_ARGS__) -# define ftp_data(ftp, ...) ftp_sendto(ftp->data_sock, \ - (struct sockaddr*)&ftp->data_sin, sizeof(ftp->data_sock), ##__VA_ARGS__) +# define REPOPATH "data/" +# define FTP_SERVER_USAGE "%s " +# define ftp_ret(ftp, ...) ftp_send((ftp)->cmd_sock, ##__VA_ARGS__) typedef struct s_ftp t_ftp; typedef struct s_ftp_cmd t_ftp_cmd; struct s_ftp { - struct sockaddr_in data_sin; - int data_sock; int cmd_sock; + struct sockaddr_in data_sin; + char username[100]; + char path[100]; + int state; +}; + +enum e_state +{ + IDLE, + LOGGED_IN, }; struct s_ftp_cmd { char *name; int (*f)(); + int statelock; }; @@ -51,11 +59,16 @@ extern int g_debug; extern char g_rootdir[PATH_MAX]; int ftp_send(int sock, char *msg, ...); -int ftp_sendto(int sock, struct sockaddr *s, size_t size, char *msg, ...); -int ftp_recv(t_ftp *ftp, char **msg); +int ftp_recv(int sock, char **msg); +int ftp_dataconn(t_ftp *ftp); int console_msg(int level, char *str, ...); int ftp_login(t_ftp *ftp); +int cmd_user(t_ftp *ftp, char **av); +int cmd_quit(t_ftp *ftp, char **av); +int cmd_retr(t_ftp *ftp, char **av); +int cmd_stor(t_ftp *ftp, char **av); +int cmd_cwd(t_ftp *ftp, char **av); int cmd_pwd(t_ftp *ftp, char **av); int cmd_port(t_ftp *ftp, char **av); int cmd_type(t_ftp *ftp, char **av); diff --git a/ftp/srcs/crlf.c b/ftp/srcs/crlf.c index a50a5494..ce15bad6 100644 --- a/ftp/srcs/crlf.c +++ b/ftp/srcs/crlf.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/08 12:04:11 by jhalford #+# #+# */ -/* Updated: 2017/11/01 21:05:34 by jhalford ### ########.fr */ +/* Updated: 2017/11/02 17:09:42 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,43 +18,24 @@ int read_req(int sock) return (0); } -int ftp_recv(t_ftp *ftp, char **msg) +int ftp_recv(int sock, char **msg) { int ret; - char buf[100]; + char buf[1024]; - if ((ret = recv(ftp->cmd_sock, buf, 100, 0)) < 0) - return (0); + if ((ret = recv(sock, buf, 1024, 0)) < 0) + return (ret); buf[ret] = 0; if (buf[ret - 1] == '\n' && buf[ret - 2] == '\r') - { buf[ret - 2] = 0; - } else - console_msg(0, "recv'd non-crlf message!"); - *msg = ft_strdup(buf); - console_msg(1, "%-5i<--- %s", getpid(), buf); - return (0); -} - -int ftp_sendto(int sock, struct sockaddr *s, size_t size, char *msg, ...) -{ - int err; - char *crlf_tmp; - char *crlf_msg; - va_list ap; - - va_start(ap, msg); - ft_vasprintf(&crlf_tmp, msg, ap); - crlf_msg = ft_strjoin(crlf_tmp, "\r\n"); - if ((err = sendto(sock, crlf_msg, ft_strlen(crlf_msg), 0, s, size)) < 0) { - return (err); + return (1); + console_msg(1, "recv'd non-crlf message!"); } - console_msg(1, "%-5i---> %s", getpid(), crlf_tmp); - ft_strdel(&crlf_tmp); - ft_strdel(&crlf_msg); - return (ft_atoi(msg)); + *msg = ft_strdup(buf); + console_msg(0, "%-5i<--- %s", getpid(), buf); + return (0); } int ftp_send(int sock, char *msg, ...) @@ -69,9 +50,10 @@ int ftp_send(int sock, char *msg, ...) crlf_msg = ft_strjoin(crlf_tmp, "\r\n"); if ((err = send(sock, crlf_msg, ft_strlen(crlf_msg), 0)) < 0) { + console_msg(1, "%-5i---> send error '%s'", getpid(), crlf_tmp); return (err); } - console_msg(1, "%-5i---> %s", getpid(), crlf_tmp); + console_msg(0, "%-5i---> %s", getpid(), crlf_tmp); ft_strdel(&crlf_tmp); ft_strdel(&crlf_msg); return (ft_atoi(msg)); diff --git a/ftp/srcs/login.c b/ftp/srcs/ftp_dataconn.c similarity index 52% rename from ftp/srcs/login.c rename to ftp/srcs/ftp_dataconn.c index 58a405a4..57771b4a 100644 --- a/ftp/srcs/login.c +++ b/ftp/srcs/ftp_dataconn.c @@ -1,34 +1,27 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* login.c :+: :+: :+: */ +/* ftp_dataconn.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2017/11/01 17:15:12 by jhalford #+# #+# */ -/* Updated: 2017/11/01 21:06:41 by jhalford ### ########.fr */ +/* Created: 2017/11/02 13:30:18 by jhalford #+# #+# */ +/* Updated: 2017/11/02 15:40:05 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "ftp_server.h" -int ftp_login(t_ftp *ftp) +int ftp_dataconn(t_ftp *ftp) { - char *msg; + char buf[INET_ADDRSTRLEN]; + int sock; - chdir("data"); - ftp_ret(ftp, "220 ready for user"); - ftp_recv(ftp, &msg); - ftp_ret(ftp, "230 user logged in, proceed"); - return (0); - - - if (ft_strncmp(msg, "USER ", 5) != 0) - console_msg(0, "expected USER"); - if (ft_strncmp(msg + 5, "jack", 4) != 0) - ftp_ret(ftp, "530 user not logged in"); - else - ftp_ret(ftp, "331 user name ok, send passwd"); - ftp_recv(ftp, &msg); - return (0); + sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + ftp_ret(ftp, "150 about to open data conn"); + if (connect(sock, (struct sockaddr*)&ftp->data_sin, + sizeof(ftp->data_sin)) < 0) + return(ftp_ret(ftp, "425 can't open data conn")); + console_msg(1, "dataconn @ %s:%i", inet_ntop(AF_INET, &ftp->data_sin.sin_addr, buf, sizeof(struct sockaddr_in)), ntohs(ftp->data_sin.sin_port)); + return (sock); }