7
7
import java .io .FileOutputStream ;
8
8
import java .io .IOException ;
9
9
import java .net .UnknownHostException ;
10
+ import java .nio .Buffer ;
10
11
import java .nio .ByteBuffer ;
11
12
import java .nio .channels .ClosedByInterruptException ;
12
13
import java .nio .channels .DatagramChannel ;
19
20
import network .grape .lib .network .ip .IpHeader ;
20
21
import network .grape .lib .session .Session ;
21
22
import network .grape .lib .session .SessionManager ;
23
+ import network .grape .lib .transport .TransportHeader ;
22
24
import network .grape .lib .transport .tcp .TcpHeader ;
23
25
import network .grape .lib .transport .udp .UdpHeader ;
24
26
import network .grape .lib .transport .udp .UdpPacketFactory ;
@@ -66,7 +68,7 @@ public void run() {
66
68
}
67
69
68
70
if (session .isAbortingConnection ()) {
69
- abortSession (session );
71
+ // abortSession(session);
70
72
} else {
71
73
session .setBusyRead (false );
72
74
}
@@ -150,12 +152,13 @@ protected void readTcp(Session session) {
150
152
if (!session .isClientWindowFull ()) {
151
153
len = channel .read (buffer );
152
154
if (len > 0 ) {
155
+ logger .info ("GOT {} bytes from TCP endpoint" , len );
153
156
sendToRequester (buffer , len , session );
154
157
buffer .clear ();
155
158
} else if (len == -1 ) {
156
- logger .info ("End of data from remote server, will send FIN to session: " + sessionKey );
157
- sendFin (session );
158
- session .setAbortingConnection (true );
159
+ // logger.info("End of data from remote server, will send FIN to session: " + sessionKey);
160
+ // sendFin(session);
161
+ // session.setAbortingConnection(true);
159
162
}
160
163
} else {
161
164
logger .info ("client window full, now pause for " + sessionKey );
@@ -198,7 +201,6 @@ private void sendToRequester(ByteBuffer buffer, int dataSize, Session session) {
198
201
private void pushDataToClient (Session session ) {
199
202
if (!session .hasReceivedData ()) {
200
203
logger .info ("No data for VPN" );
201
- ;
202
204
}
203
205
204
206
// likely 60 to leave room for TCP and IP headers
@@ -222,8 +224,25 @@ private void pushDataToClient(Session session) {
222
224
session .isHasReceivedLastSegment (), session .getRecSequence (), unAck ,
223
225
session .getTimestampSender (), session .getTimestampReplyTo ());
224
226
227
+ try {
228
+ ByteBuffer temp = ByteBuffer .allocate (data .length );
229
+ temp .put (data );
230
+ temp .rewind ();
231
+ Ip4Header ip4Header = Ip4Header .parseBuffer (temp );
232
+ TransportHeader transportHeader = TcpHeader .parseBuffer (temp );
233
+ logger .info ("SENDING TO VPN CLIENT: {} {}" , ip4Header , transportHeader );
234
+ //logger.info(BufferUtil.hexDump(data, 0, data.length, true, true));
235
+ } catch (PacketHeaderException e ) {
236
+ e .printStackTrace ();
237
+ logger .info (BufferUtil .hexDump (data , 0 , data .length , true , true ));
238
+ } catch (UnknownHostException e ) {
239
+ e .printStackTrace ();
240
+ }
241
+
225
242
try {
226
243
outputStream .write (data );
244
+ outputStream .flush ();
245
+ logger .info ("Wrote {} bytes to VPN from {}" , data .length , ipHeader .getDestinationAddress ());
227
246
// logger.info("Wrote " + data.length + " to VPN \n "
228
247
// + BufferUtil.hexDump(data, 0, data.length, true, true));
229
248
} catch (IOException ex ) {
0 commit comments