diff options
-rw-r--r-- | 03_exercise/srv/shell.c | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c index cd053b6..b93030f 100644 --- a/03_exercise/srv/shell.c +++ b/03_exercise/srv/shell.c @@ -12,6 +12,23 @@ #include "prompt_utils.h" #include "builtins.h" +/* + * READ ME + * sorry für den unaufgeräumten Code hier :/ + * + * What works: + * - remote shell, weitesgehend die funktionalität der vorhergehenden aufgabe (damit auch pipes und background, + * auch wenn wir das nicht ausführlich getestet haben) + * - get und put für dateien + * What doesn't work: + * - mehrere clients an einem server + * Known bugs: + * - exit beendet nicht nur die client-server connection und setzt den server wieder in einen wartenden zustand, + * sondern terminiert ebenfalls den server + * - das erkennen, wann eine neue prompt geprintet werden muss ist aktuell sehr hacky client seitig implementiert, + * scheitert teilweise - die eingabe geht trzd ganz normal, es wird nur keine prompt angezeigt + */ + char *get_current_dir_name(void); #define BUF_SIZE 2048 @@ -24,6 +41,7 @@ int write_all(int target_sock, char *buffer, size_t size) { while (sent < size) { if ((nwrite = write(target_sock, buffer + sent, size - sent)) < 0) { perror("Write"); + printf("\n"); return -1; } @@ -38,7 +56,10 @@ void receive_file(int recv_sock, char *path, int size) { int file_fd; int received; - if ((file_fd = open(path, (O_WRONLY | O_CREAT | O_TRUNC), 0644)) == -1) { perror("Open"); } + if ((file_fd = open(path, (O_WRONLY | O_CREAT | O_TRUNC), 0644)) == -1) { + perror("Open"); + printf("\n"); + } if (size == 0) { // just touch @@ -78,6 +99,7 @@ void send_file(int client_fd, char *path) { if ((tmp_fd = open(path, O_RDONLY)) == -1) { perror("Open"); + printf("\n"); return; } FILE *file = fdopen(tmp_fd, "r"); @@ -88,10 +110,11 @@ void send_file(int client_fd, char *path) { close(tmp_fd); if ((file_fd = open(path, O_RDONLY)) == -1) { perror("Open"); + printf("\n"); return; } - int length = snprintf(NULL, 0, "%ld", sz); + int length = snprintf(NULL, 0, "%ld", sz); sprintf(buffer, "<<!%ld!", sz); sprintf(&(buffer[3 + length + 1]), "%s\n", path); @@ -107,8 +130,10 @@ void send_file(int client_fd, char *path) { /*printf("Sent %i bytes\n", */write_all(client_fd, buffer, count)/*)*/; } - if (errno) + if (errno) { perror("wad"); + printf("\n"); + } close(file_fd); @@ -128,16 +153,16 @@ void signal_handler(int signal) { bool check_put(char *buffer, int sock) { // "<<!bytecount!name" - char cmd[4]; - char rest[BUF_SIZE - 3]; + char cmd[4]; + char rest[BUF_SIZE - 3]; size_t file_size; memcpy(cmd, buffer, 3); cmd[3] = 0; if (strcmp(cmd, "<<!") == 0) { - int offset = 3; - int i = offset; + int offset = 3; + int i = offset; for (; i < BUF_SIZE; ++i) { if (buffer[i] == '!') break; @@ -146,7 +171,7 @@ bool check_put(char *buffer, int sock) { rest[i - offset] = 0; file_size = atoi(rest); - offset = ++i; + offset = ++i; for (; i < BUF_SIZE; ++i) { if (buffer[i] == '!') break; |