@@ -97,14 +97,10 @@ public void run() {
97
97
98
98
// TODO add check for if file needs to be sent
99
99
if (destAddress != null ) {
100
- new Thread (() -> {
101
- sendFile ();
102
- }).start ();
100
+ new Thread (this ::sendFile ).start ();
103
101
}
104
102
105
- new Thread (() -> {
106
- listenForFileTransfer ();
107
- }).start ();
103
+ new Thread (this ::listenForFileTransfer ).start ();
108
104
109
105
}
110
106
@@ -135,14 +131,14 @@ private void sendFile() {
135
131
LOGGER .info ("Resized the buffer to " + buffer .length );
136
132
}
137
133
138
- if (!synSent ){
134
+ if (!synSent ) {
139
135
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 );
142
138
synSent = true ;
143
- }else {
139
+ } else {
144
140
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 ),
146
142
buffer , DOES_NOT_MATTER );
147
143
}
148
144
@@ -152,7 +148,7 @@ private void sendFile() {
152
148
System .out .println ("-----------------------------\n " );
153
149
154
150
packet = new DatagramPacket (packetToSend , packetToSend .length , routingTable .get (destAddress ).nextHop , UDP_PORT );
155
- socket .send (packet );
151
+ udpSocket .send (packet );
156
152
157
153
System .out .println ("Sent the packet" );
158
154
}
@@ -166,6 +162,8 @@ private void listenForFileTransfer() {
166
162
DatagramPacket packet ;
167
163
byte [] buffer = new byte [MAX_READ_WINDOW ];
168
164
byte [] actualPacket ;
165
+ int totalFileSize = 0 ;
166
+
169
167
try {
170
168
while (true ) {
171
169
packet = new DatagramPacket (buffer , buffer .length );
@@ -176,9 +174,40 @@ private void listenForFileTransfer() {
176
174
LOGGER .info ("Got this packet " + BitUtils .getHexDump (actualPacket ));
177
175
178
176
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
+
182
211
183
212
}
184
213
} catch (IOException e ) {
0 commit comments