upload/download for big files is much more consistent
This commit is contained in:
parent
8922e82aae
commit
fe4d06be47
13 changed files with 68 additions and 47 deletions
|
|
@ -1 +0,0 @@
|
|||
Hello ftp world
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/10 13:00:28 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 15:02:03 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:23:32 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -34,9 +34,15 @@ int cli_get(t_ftp *ftp, char **av)
|
|||
FTP_CMD(ftp, "RETR %s", av[1]);
|
||||
if (dconn_open(ftp) < 0)
|
||||
return (cleanup(fd, av[1]));
|
||||
size = ftp_recvraw(ftp->d_sock, &msg);
|
||||
write(fd, msg, size);
|
||||
ft_strdel(&msg);
|
||||
console_msg(0, "download in progress... please wait");
|
||||
if ((size = ftp_recvraw(ftp->d_sock, &msg)) < 0)
|
||||
console_msg(0, "download FAIL");
|
||||
else
|
||||
{
|
||||
console_msg(0, "download SUCCESS");
|
||||
write(fd, msg, size);
|
||||
ft_strdel(&msg);
|
||||
}
|
||||
close(fd);
|
||||
dconn_close(ftp);
|
||||
return (0);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/10 16:20:14 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 19:19:47 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:22:33 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -44,13 +44,17 @@ int cli_put(t_ftp *ftp, char **av)
|
|||
return (munmap(file, buf.st_size));
|
||||
FTP_CMD(ftp, "STOR %s", fname(av[1]));
|
||||
if (dconn_open(ftp) < 0)
|
||||
{
|
||||
console_msg(0, "Upload FAIL");
|
||||
return (munmap(file, buf.st_size));
|
||||
console_msg(0, "Upload in progess, please wait... %i", buf.st_size);
|
||||
/* ftp_sendraw(ftp->d_sock, file, buf.st_size); */
|
||||
send(ftp->d_sock, file, buf.st_size, 0);
|
||||
}
|
||||
console_msg(0, "upload in progess, please wait... (%i bytes)", buf.st_size);
|
||||
if (send(ftp->d_sock, file, buf.st_size, 0) < 0)
|
||||
console_msg(0, "upload FAIL");
|
||||
else
|
||||
console_msg(0, "upload SUCCESS");
|
||||
close(ftp->d_sock);
|
||||
ftp->d_sock = 0;
|
||||
dconn_close(ftp);
|
||||
munmap(file, buf.st_size);
|
||||
return (0);
|
||||
return (dconn_close(ftp));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/10/08 12:05:23 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/10 16:17:59 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:00:38 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/08 19:52:07 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 19:11:18 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:26:43 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -16,19 +16,21 @@
|
|||
** stream mode with file structure --> raw data no EOF
|
||||
*/
|
||||
|
||||
#define M (1024 * 1024)
|
||||
#define M (1024 * 1024)
|
||||
#define CHUNK (M)
|
||||
|
||||
int ftp_recvraw(int sock, char **msg)
|
||||
{
|
||||
int ret;
|
||||
char buf[1024];
|
||||
char buf[CHUNK];
|
||||
void *tmp;
|
||||
int size;
|
||||
|
||||
tmp = NULL;
|
||||
size = 0;
|
||||
while ((ret = recv(sock, buf, 1024, 0)) > 0)
|
||||
while ((ret = recv(sock, buf, CHUNK, 0)) > 0)
|
||||
{
|
||||
console_msg(2, "recv size=%i", ret);
|
||||
buf[ret] = 0;
|
||||
*msg = ft_strnew(size + ret);
|
||||
ft_memcpy(*msg, tmp, size);
|
||||
|
|
@ -71,19 +73,15 @@ int ftp_sendraw(int sock, char *file, off_t size)
|
|||
|
||||
sent = 0;
|
||||
chunk = M / 512;
|
||||
DG("size=%zu", size);
|
||||
while (sent < size)
|
||||
{
|
||||
if (size - sent < chunk)
|
||||
chunk = size - sent;
|
||||
DG("sent=%zu", sent);
|
||||
ret = send(sock, file, chunk, 0);
|
||||
DG("ret=%i", ret);
|
||||
console_msg(2, "---> sendraw error");
|
||||
file += chunk;
|
||||
sent += chunk;
|
||||
}
|
||||
DG("sent=%zu", sent);
|
||||
console_msg(1, "---> rawsend done size %zu", size);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -115,8 +113,8 @@ int ftp_msg(t_ftp *ftp, char **msg)
|
|||
|
||||
if (ftp_recv(ftp->cmd_sock, msg) < 0)
|
||||
return (-1);
|
||||
console_msg(0, "<--- %s", *msg);
|
||||
code = ft_atoi(*msg);
|
||||
console_msg(0, "<--- %s (%i)", *msg, code);
|
||||
return (code);
|
||||
}
|
||||
|
||||
|
|
@ -125,7 +123,8 @@ int ftp_code(t_ftp *ftp)
|
|||
char *msg;
|
||||
int code;
|
||||
|
||||
code = ftp_msg(ftp, &msg);
|
||||
if ((code = ftp_msg(ftp, &msg)) < 0)
|
||||
return (-1);
|
||||
ft_strdel(&msg);
|
||||
return (code);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/08 14:55:15 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 18:48:44 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:11:45 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -52,7 +52,11 @@ int dconn_open(t_ftp *ftp)
|
|||
{
|
||||
int code;
|
||||
|
||||
code = ftp_code(ftp);
|
||||
if ((code = ftp_code(ftp)) < 0)
|
||||
{
|
||||
console_msg(1, "code=%i", code);
|
||||
return (-1);
|
||||
}
|
||||
if (code == 150)
|
||||
{
|
||||
if (ftp->data_state == DATA_ACTV)
|
||||
|
|
@ -69,10 +73,8 @@ int dconn_close(t_ftp *ftp)
|
|||
{
|
||||
int code;
|
||||
|
||||
DG("check");
|
||||
if ((code = ftp_code(ftp)) < 0)
|
||||
return (-1);
|
||||
DG("check");
|
||||
if (code == 226)
|
||||
{
|
||||
if (ftp->d_sock != 0)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/02 15:32:28 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 14:50:38 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:23:28 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -28,7 +28,11 @@ static int retr_internal(t_ftp *ftp, struct stat buf, int fd)
|
|||
munmap(file, buf.st_size);
|
||||
return (-1);
|
||||
}
|
||||
console_msg(1, "starting upload");
|
||||
send(ftp->d_sock, file, buf.st_size, 0);
|
||||
console_msg(1, "upload done");
|
||||
close(ftp->d_sock);
|
||||
ftp->d_sock = 0;
|
||||
dconn_close(ftp);
|
||||
munmap(file, buf.st_size);
|
||||
return (0);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/02 16:01:54 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 18:35:55 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:01:47 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -25,7 +25,9 @@ int cmd_stor(t_ftp *ftp, char **av)
|
|||
dconn_close(ftp);
|
||||
return (FTP_RET(ftp, "550 couldn't open/create file"));
|
||||
}
|
||||
console_msg(2, "recvraw() now");
|
||||
size = ftp_recvraw(ftp->d_sock, &msg);
|
||||
console_msg(2, "recvraw() done");
|
||||
write(fd, msg, size);
|
||||
ft_strdel(&msg);
|
||||
close(fd);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/10/08 12:05:23 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/08 19:57:41 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:28:07 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -17,16 +17,19 @@ int console_msg(int level, char *str, ...)
|
|||
va_list ap;
|
||||
|
||||
va_start(ap, str);
|
||||
ft_dprintf(2, "|%-5d| ", getpid());
|
||||
if (g_debug >= level)
|
||||
{
|
||||
if (level == -1)
|
||||
ft_printf("{red}");
|
||||
if (level == 0)
|
||||
ft_printf("{blu}");
|
||||
ft_dprintf(2, "{red}");
|
||||
else if (level == 0)
|
||||
ft_dprintf(2, "{blu}");
|
||||
else if (level == 1)
|
||||
ft_dprintf(2, "{gre}");
|
||||
else
|
||||
ft_printf("{mag}");
|
||||
ft_vdprintf(1, str, ap);
|
||||
ft_printf("{eoc}\n");
|
||||
ft_dprintf(2, "{yel}");
|
||||
ft_vdprintf(2, str, ap);
|
||||
ft_dprintf(2, "{eoc}\n");
|
||||
}
|
||||
return (level);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/08 19:52:07 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 19:02:56 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:27:59 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -16,18 +16,20 @@
|
|||
** stream mode with file structure --> raw data no EOF
|
||||
*/
|
||||
|
||||
#define M (1024 * 1024)
|
||||
#define M (1024 * 1024)
|
||||
#define CHUNK (M)
|
||||
|
||||
int ftp_recvraw(int sock, char **msg)
|
||||
{
|
||||
int ret;
|
||||
char buf[10 * M];
|
||||
char buf[CHUNK];
|
||||
void *tmp;
|
||||
int size;
|
||||
|
||||
size = 0;
|
||||
tmp = NULL;
|
||||
while ((ret = recv(sock, buf, 10 * M, 0)) > 0)
|
||||
console_msg(0, "starting download...");
|
||||
while ((ret = recv(sock, buf, CHUNK, 0)) > 0)
|
||||
{
|
||||
buf[ret] = 0;
|
||||
*msg = ft_strnew(size + ret);
|
||||
|
|
@ -37,7 +39,7 @@ int ftp_recvraw(int sock, char **msg)
|
|||
tmp = *msg;
|
||||
size += ret;
|
||||
}
|
||||
console_msg(2, "%-5i<--- raw msg size %i", getpid(), size);
|
||||
console_msg(2, "<--- raw msg size %i", size);
|
||||
return (size);
|
||||
}
|
||||
|
||||
|
|
@ -50,7 +52,7 @@ int ftp_recv(int sock, char **msg)
|
|||
return (ret);
|
||||
if (ret == 0)
|
||||
{
|
||||
console_msg(0, "%-5i client terminated", getpid());
|
||||
console_msg(0, "client terminated");
|
||||
exit(0);
|
||||
}
|
||||
buf[ret] = 0;
|
||||
|
|
@ -64,7 +66,7 @@ int ftp_recv(int sock, char **msg)
|
|||
return (1);
|
||||
}
|
||||
*msg = ft_strdup(buf);
|
||||
console_msg(0, "%-5i<--- %s", getpid(), buf);
|
||||
console_msg(0, "<--- %s", buf);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
@ -80,10 +82,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);
|
||||
console_msg(1, "---> send error '%s'", crlf_tmp);
|
||||
return (err);
|
||||
}
|
||||
console_msg(0, "%-5i---> %s", getpid(), crlf_tmp);
|
||||
console_msg(0, "---> %s", crlf_tmp);
|
||||
ft_strdel(&crlf_tmp);
|
||||
ft_strdel(&crlf_msg);
|
||||
return (ft_atoi(msg));
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/11/08 14:55:15 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 14:44:50 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 13:11:03 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/04/02 15:02:48 by jhalford #+# #+# */
|
||||
/* Updated: 2017/11/12 17:59:25 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/11/15 12:47:20 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -35,7 +35,7 @@ t_ftp_cmd g_ftp_cmd[] =
|
|||
{"DELE", cmd_dele, LOG_YES},
|
||||
{0, 0, 0},
|
||||
};
|
||||
int g_debug = 2;
|
||||
int g_debug = 10;
|
||||
|
||||
int ftp_cmd(t_ftp *ftp, char *msg)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue