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, 22 insertions, 19 deletions
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, "<<!%ld", sz);
+ sprintf(buffer, "<<!%ld!", sz);
+ sprintf(&(buffer[3 + length + 1]), "%s\n", path);
- write(server_fd, msg, strlen(msg));
-
- int size;
- while (read(file_fd, buffer, sizeof(buffer)) != 0) {
- size = strlen(buffer) + 1;
- if (write(server_fd, &size, sizeof(size)) < 0) {
- perror("Write");
- exit(1);
- }
+ write(server_fd, buffer, strlen(buffer));
+ memset(buffer, 0, BUF_SIZE);
+ errno = 0;
+ while (read(file_fd, buffer, sizeof(buffer)) > 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: