/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* cli_do_put.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/10/08 12:04:23 by jhalford #+# #+# */ /* Updated: 2017/10/08 12:05:21 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_p.h" int cli_do_put(int sock, char **av) { int req; int fd; struct stat stat; char *file; if (!av[1] || av[2]) return (console_msg(-1, "usage: put ")); else if ((fd = open(av[1], O_RDONLY)) < 0) return (console_msg(-1, "no such file")); else if ((fstat(fd, &stat)) < 0) return (console_msg(-1, "fstat error")); else if ((file = mmap(NULL, stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) return (console_msg(-1, "mmap error")); if (req_init(sock, REQUEST_PUT)) return (1); write(sock, av[1], ft_strlen(av[1])); req = read_req(sock); if (req != TRANSFER_START) return (1); net_send_large(sock, file, stat.st_size); return (0); }