From 9629104f494a441681fd28295f98531682875fc7 Mon Sep 17 00:00:00 2001 From: Niklas Halle Date: Sun, 7 Jun 2020 12:51:27 +0200 Subject: put works --- 03_exercise/.srv_pid | 2 +- 03_exercise/cli/client | Bin 28384 -> 28360 bytes 03_exercise/cli/client.c | 41 ++++++++++++++------------- 03_exercise/srv/server.c | 27 ------------------ 03_exercise/srv/shell.c | 72 ++++++++++++++++++++++++++++++++++++----------- 5 files changed, 78 insertions(+), 64 deletions(-) diff --git a/03_exercise/.srv_pid b/03_exercise/.srv_pid index ab09251..8dcdde2 100644 --- a/03_exercise/.srv_pid +++ b/03_exercise/.srv_pid @@ -1 +1 @@ -1493889 +2202992 diff --git a/03_exercise/cli/client b/03_exercise/cli/client index 0fcf5c1..34d1d01 100755 Binary files a/03_exercise/cli/client and b/03_exercise/cli/client differ diff --git a/03_exercise/cli/client.c b/03_exercise/cli/client.c index c1bc5d1..052dabd 100644 --- a/03_exercise/cli/client.c +++ b/03_exercise/cli/client.c @@ -50,36 +50,38 @@ int write_all(int sock, char *buffer, int size) { } void send_file(int server_fd, char *path) { - char buffer[512]; - int file_fd; - - if ((file_fd = open(path, O_RDONLY)) == -1) { perror("Open"); } - - FILE *file = fdopen(file_fd, "r"); + printf("Trying to send \"%s\" to remote...\n", path); + char buffer[BUF_SIZE]; + memset(buffer, 0, BUF_SIZE); + int tmp_fd, file_fd; + if ((tmp_fd = open(path, O_RDONLY)) == -1) { perror("Open"); } + FILE *file = fdopen(tmp_fd, "r"); fseek(file, 0L, SEEK_END); long int sz = ftell(file); fseek(file, 0L, SEEK_SET); + fclose(file); + close(tmp_fd); + if ((file_fd = open(path, O_RDONLY)) == -1) { perror("Open"); } int length = snprintf(NULL, 0, "%ld", sz); - char msg[length + 1 + 3]; - sprintf(msg, "< 0) { printf("Sent %i bytes\n", write_all(server_fd, buffer, strlen(buffer) + 1)); } - fclose(file); + if (errno) + perror("wad"); + close(file_fd); + + printf("done.\n"); } #define BREAK 1 @@ -143,7 +145,7 @@ int main() { pid_t pid = fork(); int done = 0; - if (pid == 0) { + if (pid != 0) { read_stdin(&done); } else { read_server_sock(&done); @@ -175,6 +177,7 @@ void read_stdin(int *done) { ssize_t length; while (!*done) { + memset(stdinp_buffer, 0, BUF_SIZE); if ((length = read(STDIN_FILENO, stdinp_buffer, BUF_SIZE)) > 0) { switch (parse(sock, stdinp_buffer, length)) { case CONTINUE: diff --git a/03_exercise/srv/server.c b/03_exercise/srv/server.c index 8527b83..11f7482 100644 --- a/03_exercise/srv/server.c +++ b/03_exercise/srv/server.c @@ -49,33 +49,6 @@ int main() { printf("srv: connected: %s\n", inet_ntoa(cli_addr.sin_addr)); int status = shell(cfd); - /* - while ((bytes = read(sock, in_buf, BUF_SIZE)) != 0) { - if (bytes < 0) - die("Couldn't receive message"); - - //printf("srv: %s\n", in_buf); - - if (strcmp(in_buf, "get") == 0) { - // TODO: implement get - } else if (strcmp(in_buf, "put") == 0) { - // TODO: implement put - } else if (strcmp(in_buf, "ping") == 0) { - strncpy(out_buf, "pong!", sizeof(out_buf)); - } else { - // TODO: connect our shell implementation - memcpy(out_buf, "got: ", sizeof(out_buf)); - memcpy(out_buf + sizeof("got: ") - 1, in_buf, BUF_SIZE - sizeof("got: ") + 1); - } - - if (write(sock, out_buf, sizeof(out_buf)) < 0) - die("Couldn't send message"); - - memset(in_buf, 0, BUF_SIZE); - memset(out_buf, 0, BUF_SIZE); - }*/ - - //printf("srv: closing down\n"); close(cfd); close(sfd); diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c index 449905b..aea1a68 100644 --- a/03_exercise/srv/shell.c +++ b/03_exercise/srv/shell.c @@ -38,24 +38,21 @@ void receive_file(int sock, char *path, int size) { if ((file_fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644)) == -1) { perror("Open"); } - while (true) { - received = 0; - - /* Read all data */ - while (received < size) { - if ((nread = read(sock, buffer + received, size - received)) < 0) { - perror("Read"); - //pthread_exit(NULL); - exit(1); - } + received = 0; - received += nread; + /* Read all data */ + while (received < size) { + if ((nread = read(sock, buffer + received, size - received)) < 0) { + perror("Read"); + //pthread_exit(NULL); + exit(1); } - if (strncmp(buffer, "end", 4) == 0) { break; } - - write_all(file_fd, buffer, strlen(buffer) + 1); + received += nread; } + + write_all(file_fd, buffer, strlen(buffer) + 1); + close(file_fd); } void signal_handler(int signal) { @@ -69,6 +66,44 @@ void signal_handler(int signal) { } } +bool check_put(char *buffer, int sock) { + // "<