Skip to content

Commit db68a26

Browse files
committed
add ack receiving but no crosschecking [WIP]
1 parent 5869a9f commit db68a26

File tree

2 files changed

+46
-17
lines changed

2 files changed

+46
-17
lines changed

log.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ docker run -it -v /home/aneeshj/RIT/Sem2/FCN/RIP2:/root/ fcn_docker /bin/bash
22

33
docker run -it -v /home/aneeshj/RIT/Sem2/FCN/RIP2:/root/ fcn_docker /bin/bash
44

5-
docker run --cap-add=NET_ADMIN -it -v /home/aneeshj/RIT/Sem2/FCN/RIP2:/root/ fcn_docker /bin/bash
5+
docker run --cap-add=NET_ADMIN -it -v /home/aneeshj/RIT/Sem2/FCN/RIP2/out/production/RIP2:/root/ fcn_docker /bin/bash
66

77
iptables -A INPUT -s 172.17.0. -j DROP
88

99
head -c 10 /dev/urandom > temp_file
1010

11-
java Rover --port 52220 --multicastIp 233.0.0.0 --id 10 --file ../temp_file
11+
java Rover --port 52220 --multicastIp 233.0.0.0 --id 10 --file ../temp_file --dest 10.1.2.3

src/Rover.java

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,10 @@ public void run() {
9797

9898
// TODO add check for if file needs to be sent
9999
if (destAddress != null) {
100-
new Thread(() -> {
101-
sendFile();
102-
}).start();
100+
new Thread(this::sendFile).start();
103101
}
104102

105-
new Thread(() -> {
106-
listenForFileTransfer();
107-
}).start();
103+
new Thread(this::listenForFileTransfer).start();
108104

109105
}
110106

@@ -135,14 +131,14 @@ private void sendFile() {
135131
LOGGER.info("Resized the buffer to " + buffer.length);
136132
}
137133

138-
if(!synSent){
134+
if (!synSent) {
139135
packetToSend = JPacketUtil.jPacket2Arr(destAddress, this.myPrivateAddress,
140-
DOES_NOT_MATTER, DOES_NOT_MATTER, BitUtils.setBitInByte((byte)0, JPacketUtil.SYN_INDEX),
141-
buffer, (int)totalSize);
136+
DOES_NOT_MATTER, DOES_NOT_MATTER, BitUtils.setBitInByte((byte) 0, JPacketUtil.SYN_INDEX),
137+
buffer, (int) totalSize);
142138
synSent = true;
143-
}else{
139+
} else {
144140
packetToSend = JPacketUtil.jPacket2Arr(destAddress, this.myPrivateAddress,
145-
seqNumber++, DOES_NOT_MATTER, BitUtils.setBitInByte((byte)0, JPacketUtil.NORMAL_INDEX),
141+
seqNumber++, DOES_NOT_MATTER, BitUtils.setBitInByte((byte) 0, JPacketUtil.NORMAL_INDEX),
146142
buffer, DOES_NOT_MATTER);
147143
}
148144

@@ -152,7 +148,7 @@ private void sendFile() {
152148
System.out.println("-----------------------------\n");
153149

154150
packet = new DatagramPacket(packetToSend, packetToSend.length, routingTable.get(destAddress).nextHop, UDP_PORT);
155-
socket.send(packet);
151+
udpSocket.send(packet);
156152

157153
System.out.println("Sent the packet");
158154
}
@@ -166,6 +162,8 @@ private void listenForFileTransfer() {
166162
DatagramPacket packet;
167163
byte[] buffer = new byte[MAX_READ_WINDOW];
168164
byte[] actualPacket;
165+
int totalFileSize = 0;
166+
169167
try {
170168
while (true) {
171169
packet = new DatagramPacket(buffer, buffer.length);
@@ -176,9 +174,40 @@ private void listenForFileTransfer() {
176174
LOGGER.info("Got this packet " + BitUtils.getHexDump(actualPacket));
177175

178176
JPacket jPacket = JPacketUtil.arr2JPacket(actualPacket);
179-
LOGGER.info("Got this payload");
180-
BitUtils.printPacket(jPacket.payload);
181-
System.out.println("\n~~~~~~~~~~~~~~");
177+
if(jPacket.payload != null) {
178+
LOGGER.info("Got this payload");
179+
BitUtils.printPacket(jPacket.payload);
180+
System.out.println("\n~~~~~~~~~~~~~~");
181+
}
182+
183+
if (!jPacket.destAddress.equals(myPrivateAddress)) {
184+
udpSocket.send(new DatagramPacket(actualPacket, actualPacket.length));
185+
continue;
186+
}
187+
188+
if (JPacketUtil.isBitSet(jPacket.flags, JPacketUtil.ACK_INDEX)) {
189+
System.out.println("Got an ACK from " + jPacket.sourceAddress);
190+
}
191+
else if (JPacketUtil.isBitSet(jPacket.flags, JPacketUtil.SYN_INDEX)) {
192+
totalFileSize = jPacket.totalSize;
193+
byte[] ackPacket = JPacketUtil.jPacket2Arr(jPacket.sourceAddress, myPrivateAddress, DOES_NOT_MATTER,
194+
jPacket.seqNumber + 1,
195+
BitUtils.setBitInByte((byte)0, JPacketUtil.ACK_INDEX),
196+
new byte[0], DOES_NOT_MATTER);
197+
198+
udpSocket.send(new DatagramPacket(ackPacket, ackPacket.length,
199+
routingTable.get(jPacket.sourceAddress).nextHop, UDP_PORT));
200+
}else if(JPacketUtil.isBitSet(jPacket.flags, JPacketUtil.NORMAL_INDEX)){
201+
totalFileSize -= jPacket.payload.length;
202+
byte[] ackPacket = JPacketUtil.jPacket2Arr(jPacket.sourceAddress, myPrivateAddress, DOES_NOT_MATTER,
203+
jPacket.seqNumber + 1,
204+
BitUtils.setBitInByte((byte)0, JPacketUtil.ACK_INDEX),
205+
new byte[0], DOES_NOT_MATTER);
206+
207+
udpSocket.send(new DatagramPacket(ackPacket, ackPacket.length,
208+
routingTable.get(jPacket.sourceAddress).nextHop, UDP_PORT));
209+
}
210+
182211

183212
}
184213
} catch (IOException e) {

0 commit comments

Comments
 (0)