summaryrefslogtreecommitdiffstats
path: root/03_exercise/cli/client.c
diff options
context:
space:
mode:
Diffstat (limited to '03_exercise/cli/client.c')
-rw-r--r--03_exercise/cli/client.c41
1 files changed, 27 insertions, 14 deletions
diff --git a/03_exercise/cli/client.c b/03_exercise/cli/client.c
index f3a4479..9ae6c0a 100644
--- a/03_exercise/cli/client.c
+++ b/03_exercise/cli/client.c
@@ -19,6 +19,8 @@
#define BREAK 1
#define CONTINUE 2
+char *get_current_dir_name(void);
+
int server_sock;
pid_t pid;
@@ -56,39 +58,50 @@ int main() {
pid = fork();
- if (pid != 0) {
+ if (pid == 0) {
read_stdin();
} else {
read_server_sock();
}
close(server_sock);
+ kill(pid, SIGKILL);
+
return 0;
}
void receive_file(int recv_sock, char *path, int size) {
- char buffer[512];
+ char buffer[BUF_SIZE];
int file_fd;
int received;
if ((file_fd = open(path, (O_WRONLY | O_CREAT | O_TRUNC), 0644)) == -1) { perror("Open"); }
+ if (size == 0) {
+ // just touch
+ close(file_fd);
+ return;
+ }
+
received = 0;
/* Read all data */
while (received < size) {
int nread;
- if ((nread = read(recv_sock, buffer + received, size - received)) < 0) {
- perror("Read");
- //pthread_exit(NULL);
- exit(1);
+ if ((nread = read(recv_sock, buffer, BUF_SIZE)) > 0) {
+ if (write_all(file_fd, buffer, nread) != nread) {
+ break;
+ }
+ received += nread;
}
-
- received += nread;
}
- if (write_all(file_fd, buffer, strlen(buffer) + 1) == strlen(buffer) + 1) {
- printf("successfully got remote file \"%s\"\n", path);
+ if (received == size) {
+ printf("successfully got remote file \"%s/%s\"", get_current_dir_name(), path);
+ printf("\n");
+ } else {
+ printf("error getting remote file \"%s/%s\"", get_current_dir_name(), path);
+ printf("\n");
}
close(file_fd);
@@ -102,7 +115,7 @@ bool check_get(char *buffer) {
cmd[3] = 0;
if (strcmp(cmd, "<<!") == 0) {
- printf("[c]: \"%s\"\n", buffer);
+ //printf("[c]: \"%s\"\n", buffer);
int offset = 3;
int i = offset;
char rest[BUF_SIZE - 3];
@@ -177,7 +190,6 @@ void read_stdin() {
}
}
}
- kill(pid, SIGKILL);
}
void sigintHandler(int sig_num) {
@@ -243,8 +255,9 @@ void send_file(char *path) {
memset(buffer, 0, BUF_SIZE);
errno = 0;
- while (read(file_fd, buffer, sizeof(buffer)) > 0) {
- printf("Sent %i bytes\n", write_all(server_sock, buffer, strlen(buffer) + 1));
+ size_t count;
+ while ((count = read(file_fd, buffer, sizeof(buffer))) > 0) {
+ printf("Sent %i bytes\n", write_all(server_sock, buffer, count));
}
if (errno)