Skip to content
Snippets Groups Projects
Commit 099c7b9c authored by MILON ETHAN's avatar MILON ETHAN
Browse files

hot fix

parent 2533505f
Branches
No related merge requests found
Pipeline #107916 passed with stages
in 6 seconds
......@@ -30,7 +30,7 @@ struct data {
int send_data(uint16_t data, int server)
{
uint16_t residue;
uint32_t ack = 0;
uint32_t ack = 0xFFFFFFFF;
// on calcule le crc
residue = crc_crc((uint8_t *)&(data), 2, &crc16_xmodem);
......@@ -40,7 +40,7 @@ int send_data(uint16_t data, int server)
// on envoie la donnée et on attend un acquittement
// jusqu'à ce que le serveur renvoie un acquittement positif
while (__builtin_popcount(ack) < 16) {
while (__builtin_popcount(ack) > 16) {
ssize_t ret = send(server, &packet, sizeof(packet), 0);
if (ret == -1) {
PERROR("send");
......@@ -100,12 +100,16 @@ int main(int argc, char *argv[])
// envoi de si la taille est paire ou impaire
// pour la dernière donnée (car on envoie 2 octets à la fois)
CHK(send_data(size % 2, server));
if (send_data(size % 2, server) < 0) {
return EXIT_FAILURE;
}
// envoi des données
for (int i = 0; i < size; i++) {
uint16_t data;
if (read(fd, &data, sizeof(data)) != sizeof(data))
uint16_t data;
int nb_packets = (size + sizeof(data) - 1) / sizeof(data);
for (int i = 0; i < nb_packets; i++) {
if (read(fd, &data, sizeof(data)) < 0)
return EXIT_FAILURE;
if (send_data(data, server) < 0)
return EXIT_FAILURE;
......
#include <arpa/inet.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
......@@ -168,10 +170,15 @@ void server_thread(int client, void *arg)
is_odd = buff.data;
// réception des données
size_t file_size = 0;
int ret;
printf("yo");
while ((ret = get_data(client, &buff, correction_table)) > 0) {
if (write_uint16(fd, buff.data) == -1)
goto err;
file_size++;
printf("\r data downloaded : %zu bytes\n> ", file_size * 2);
fflush(stdout);
}
if (ret == -1)
goto err;
......@@ -209,6 +216,7 @@ int main(int argc, char *argv[])
CHK(server_start(server, server_thread, table));
while (1) {
write(STDOUT_FILENO, "> ", 2);
// attente d'une commande
CHKN(fgets(buff, BUFF_SIZE, stdin));
// si la commande est "quit", on quitte le serveur
......
#include <arpa/inet.h>
#include <stdio.h>
#include <sys/poll.h>
#include <unistd.h>
......@@ -40,6 +41,10 @@ void proxy_thread(int client, void *arg)
PERROR("connect");
return;
}
printf("\rNew Connection\n> ");
fflush(stdout);
struct pollfd fds[2] = { { client, POLLIN, 0 }, { server, POLLIN, 0 } };
// boucle principale de transfert
......@@ -71,6 +76,8 @@ void proxy_thread(int client, void *arg)
fds[1].revents = 0;
}
}
printf("\rConnection died\n> ");
fflush(stdout);
close(server);
return;
......@@ -102,12 +109,14 @@ int main(int argc, char *argv[])
CHK(server_start(server, proxy_thread, &args));
while (1) {
write(STDOUT_FILENO, "> ", 2);
// attente d'une commande
CHKN(fgets(buff, BUFF_SIZE, stdin));
// si la commande est "quit", on quitte le serveur
if (strcmp(buff, "quit\n") == 0)
break;
}
CHK(server_stop(server));
CHK(server_join(server));
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment