File transfer examples
parent
34a5a592b0
commit
4f2a7905f3
|
@ -60,9 +60,6 @@ int main(int argc, char **argv) {
|
||||||
file_name = argv[argc-1];
|
file_name = argv[argc-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("File %s\n",file_name);
|
|
||||||
printf("Socket %s\n",socket_path);
|
|
||||||
|
|
||||||
fd = fopen(file_name, "w+");
|
fd = fopen(file_name, "w+");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
printf("Could not open output file\n");
|
printf("Could not open output file\n");
|
||||||
|
@ -86,7 +83,8 @@ int main(int argc, char **argv) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Connected to WiPacket\n");
|
if (verbose) printf("Connected to WiPacket\n");
|
||||||
|
printf("Waiting for file...\n");
|
||||||
|
|
||||||
fd_set wiSocketSet;
|
fd_set wiSocketSet;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
|
@ -111,11 +109,10 @@ int main(int argc, char **argv) {
|
||||||
if (socketReady == 1) {
|
if (socketReady == 1) {
|
||||||
sRead = recv(wiSocket, sBuffer, PACKET_SIZE, 0);
|
sRead = recv(wiSocket, sBuffer, PACKET_SIZE, 0);
|
||||||
if (sRead != 0) {
|
if (sRead != 0) {
|
||||||
printf("Read %d bytes\n", sRead);
|
|
||||||
memcpy(&fragment, sBuffer, HEADER_SIZE);
|
memcpy(&fragment, sBuffer, HEADER_SIZE);
|
||||||
|
|
||||||
if (fragment == ack+1) {
|
if (fragment == ack+1) {
|
||||||
printf("Got fragment %lu\n", fragment);
|
if (verbose) printf("Got fragment %lu (%d bytes)\n", fragment, sRead);
|
||||||
ack++;
|
ack++;
|
||||||
if ((fwrite(sBuffer+HEADER_SIZE, 1, sRead - HEADER_SIZE, fd)) != sRead - HEADER_SIZE) {
|
if ((fwrite(sBuffer+HEADER_SIZE, 1, sRead - HEADER_SIZE, fd)) != sRead - HEADER_SIZE) {
|
||||||
printf("Error while writing received data to file\n");
|
printf("Error while writing received data to file\n");
|
||||||
|
@ -130,14 +127,20 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ack > 0 && fragment == 0) {
|
if (ack > 0 && fragment == 0) {
|
||||||
fclose(fd);
|
|
||||||
printf("File received\n");
|
printf("File received\n");
|
||||||
|
ack = 0;
|
||||||
|
memcpy(aBuffer, &ack, HEADER_SIZE);
|
||||||
|
if (send(wiSocket, aBuffer, HEADER_SIZE, 0) < 0) {
|
||||||
|
printf("Error writing to WiPacket socket while sending ACK\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
done = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fclose(fd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
|
@ -60,9 +60,6 @@ int main(int argc, char **argv) {
|
||||||
file_name = argv[argc-1];
|
file_name = argv[argc-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("File %s\n",file_name);
|
|
||||||
printf("Socket %s\n",socket_path);
|
|
||||||
|
|
||||||
fd = fopen(file_name, "r");
|
fd = fopen(file_name, "r");
|
||||||
if (fd == NULL) {
|
if (fd == NULL) {
|
||||||
printf("Could not input file\n");
|
printf("Could not input file\n");
|
||||||
|
@ -87,7 +84,8 @@ int main(int argc, char **argv) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Connected to WiPacket\n");
|
if (verbose) printf("Connected to WiPacket\n");
|
||||||
|
printf("Sending file...\n");
|
||||||
|
|
||||||
fd_set wiSocketSet;
|
fd_set wiSocketSet;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
|
@ -108,7 +106,7 @@ int main(int argc, char **argv) {
|
||||||
printf("Error writing to WiPacket socket\n");
|
printf("Error writing to WiPacket socket\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("Sent fragment %lu\n", fragment);
|
if (verbose) printf("Sent fragment %lu\n", fragment);
|
||||||
|
|
||||||
FD_ZERO(&wiSocketSet);
|
FD_ZERO(&wiSocketSet);
|
||||||
FD_SET(wiSocket, &wiSocketSet);
|
FD_SET(wiSocket, &wiSocketSet);
|
||||||
|
@ -124,19 +122,18 @@ int main(int argc, char **argv) {
|
||||||
if (socketReady == 1) {
|
if (socketReady == 1) {
|
||||||
sRead = recv(wiSocket, sBuffer, PACKET_SIZE, 0);
|
sRead = recv(wiSocket, sBuffer, PACKET_SIZE, 0);
|
||||||
if (sRead != 0) {
|
if (sRead != 0) {
|
||||||
printf("Read %d bytes\n", sRead);
|
|
||||||
memcpy(&ack, sBuffer, HEADER_SIZE);
|
memcpy(&ack, sBuffer, HEADER_SIZE);
|
||||||
|
|
||||||
if (ack == fragment) {
|
if (ack == fragment) {
|
||||||
gotAck = true;
|
gotAck = true;
|
||||||
} else {
|
} else {
|
||||||
printf("Got a response, but not correct ACK\n");
|
if (verbose) printf("Got a response, but not correct ACK\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
printf("Got ACK for fragment %lu, moving on...\n", fragment);
|
if (verbose) printf("Got ACK for fragment %lu, moving on...\n", fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
// File transmitted, send EOF packet
|
// File transmitted, send EOF packet
|
||||||
|
@ -150,7 +147,7 @@ int main(int argc, char **argv) {
|
||||||
printf("Error writing to WiPacket socket\n");
|
printf("Error writing to WiPacket socket\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("Sent EOF packet\n");
|
if (verbose) printf("Sent EOF packet\n");
|
||||||
|
|
||||||
FD_ZERO(&wiSocketSet);
|
FD_ZERO(&wiSocketSet);
|
||||||
FD_SET(wiSocket, &wiSocketSet);
|
FD_SET(wiSocket, &wiSocketSet);
|
||||||
|
@ -166,13 +163,12 @@ int main(int argc, char **argv) {
|
||||||
if (socketReady == 1) {
|
if (socketReady == 1) {
|
||||||
sRead = recv(wiSocket, sBuffer, PACKET_SIZE, 0);
|
sRead = recv(wiSocket, sBuffer, PACKET_SIZE, 0);
|
||||||
if (sRead != 0) {
|
if (sRead != 0) {
|
||||||
printf("Read %d bytes\n", sRead);
|
|
||||||
memcpy(&ack, sBuffer, HEADER_SIZE);
|
memcpy(&ack, sBuffer, HEADER_SIZE);
|
||||||
|
|
||||||
if (ack == fragment) {
|
if (ack == fragment) {
|
||||||
gotAck = true;
|
gotAck = true;
|
||||||
} else {
|
} else {
|
||||||
printf("Got a response, but not correct ACK\n");
|
if (verbose) printf("Got a response, but not correct ACK\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
main.c
1
main.c
|
@ -204,7 +204,6 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
nReadLength = recvfrom(netSocket, packetBuffer, PAYLOAD_LENGTH+14, 0, &saddr, (socklen_t*)&saddr_size);
|
nReadLength = recvfrom(netSocket, packetBuffer, PAYLOAD_LENGTH+14, 0, &saddr, (socklen_t*)&saddr_size);
|
||||||
if (nReadLength > 0) {
|
if (nReadLength > 0) {
|
||||||
printf("Putting into domain socket...\n");
|
|
||||||
if (protocolIdMatch(packetBuffer) && notMine(packetBuffer)) {
|
if (protocolIdMatch(packetBuffer) && notMine(packetBuffer)) {
|
||||||
if (send(connection, packetBuffer+14, nReadLength-14, 0) < 0) {
|
if (send(connection, packetBuffer+14, nReadLength-14, 0) < 0) {
|
||||||
if (verbose) printf("Error writing packet to domain socket\n");
|
if (verbose) printf("Error writing packet to domain socket\n");
|
||||||
|
|
Loading…
Reference in New Issue