Skip to content
This repository was archived by the owner on Nov 6, 2022. It is now read-only.

Commit 5b9da88

Browse files
committed
IT WORKSgit add -pgit add -p
1 parent eff7a03 commit 5b9da88

File tree

7 files changed

+45
-11
lines changed

7 files changed

+45
-11
lines changed

app/src/main/java/network/grape/service/GrapeVpnService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public void startTrafficHandler() throws IOException {
157157
vpnWriterThread = new Thread(vpnWriter);
158158

159159
List<InetAddress> filters = new ArrayList<>();
160-
// filters.add(InetAddress.getByName("10.0.0.111"));
160+
//filters.add(InetAddress.getByName("10.0.0.111"));
161161
SessionHandler handler =
162162
new SessionHandler(sessionManager, new SocketProtector(this), vpnWriter, filters);
163163

lib/src/main/java/network/grape/lib/session/Session.java

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public String getKey() {
111111

112112
synchronized int appendOutboundData(ByteBuffer data) {
113113
final int remaining = data.remaining();
114+
logger.info("POS: {} REMAINING: {}", data.position(), data.remaining());
114115
sendingStream.write(data.array(), data.position(), data.remaining());
115116
logger.info(
116117
"Enqueued: " + remaining + " bytes in the outbound queue for " + this + " total size: "

lib/src/main/java/network/grape/lib/session/SessionHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ protected void handleTcpPacket(ByteBuffer payload, IpHeader ipHeader, TcpHeader
260260
sendFinAck(ipHeader, tcpHeader, session);
261261
} else if (session.isAckedToFin() && !tcpHeader.isFin()) {
262262
// the last ACK from VPN after FIN-ACK flag was set
263-
sessionManager.closeSession(session);
263+
//sessionManager.closeSession(session);
264264
logger.info("Got last ACK after FIN, session is now closed");
265265
}
266266
}
@@ -565,7 +565,7 @@ protected void ackFinAck(IpHeader ipHeader, TcpHeader tcpHeader, Session session
565565
vpnWriter.getOutputStream().write(data);
566566
if (session != null) {
567567
session.getSelectionKey().cancel();
568-
sessionManager.closeSession(session);
568+
//sessionManager.closeSession(session);
569569
logger.info("ACK to client's FIN and close session: " + session.getKey());
570570
}
571571
} catch (IOException ex) {

lib/src/main/java/network/grape/lib/util/PacketUtil.java

+13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package network.grape.lib.util;
22

33
import java.nio.Buffer;
4+
import java.util.Arrays;
5+
46
import network.grape.lib.transport.tcp.TcpHeader;
57
import org.slf4j.Logger;
68
import org.slf4j.LoggerFactory;
@@ -61,6 +63,12 @@ public static int getNetworkInt(byte[] buffer, int start, int length) {
6163
return value;
6264
}
6365

66+
public static byte[] addElementUsingArraysCopyOf(byte[] srcArray, byte elementToAdd) {
67+
byte[] destArray = Arrays.copyOf(srcArray, srcArray.length + 1);
68+
destArray[destArray.length - 1] = elementToAdd;
69+
return destArray;
70+
}
71+
6472
/**
6573
* Computes the checksum of a byte array with a given offset and length.
6674
*
@@ -70,6 +78,11 @@ public static int getNetworkInt(byte[] buffer, int start, int length) {
7078
* @return the checksum (short) as two byte array so its easy to copy back into place
7179
*/
7280
public static byte[] calculateChecksum(byte[] data, int offset, int length) {
81+
if (length % 2 != 0) {
82+
data = addElementUsingArraysCopyOf(data, (byte) 0);
83+
}
84+
85+
7386
int start = offset;
7487
int sum = 0;
7588
while (start < length) {

lib/src/main/java/network/grape/lib/vpn/SocketDataReaderWorker.java

+24-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.io.FileOutputStream;
88
import java.io.IOException;
99
import java.net.UnknownHostException;
10+
import java.nio.Buffer;
1011
import java.nio.ByteBuffer;
1112
import java.nio.channels.ClosedByInterruptException;
1213
import java.nio.channels.DatagramChannel;
@@ -19,6 +20,7 @@
1920
import network.grape.lib.network.ip.IpHeader;
2021
import network.grape.lib.session.Session;
2122
import network.grape.lib.session.SessionManager;
23+
import network.grape.lib.transport.TransportHeader;
2224
import network.grape.lib.transport.tcp.TcpHeader;
2325
import network.grape.lib.transport.udp.UdpHeader;
2426
import network.grape.lib.transport.udp.UdpPacketFactory;
@@ -66,7 +68,7 @@ public void run() {
6668
}
6769

6870
if (session.isAbortingConnection()) {
69-
abortSession(session);
71+
//abortSession(session);
7072
} else {
7173
session.setBusyRead(false);
7274
}
@@ -150,12 +152,13 @@ protected void readTcp(Session session) {
150152
if (!session.isClientWindowFull()) {
151153
len = channel.read(buffer);
152154
if (len > 0) {
155+
logger.info("GOT {} bytes from TCP endpoint", len);
153156
sendToRequester(buffer, len, session);
154157
buffer.clear();
155158
} 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);
159162
}
160163
} else {
161164
logger.info("client window full, now pause for " + sessionKey);
@@ -198,7 +201,6 @@ private void sendToRequester(ByteBuffer buffer, int dataSize, Session session) {
198201
private void pushDataToClient(Session session) {
199202
if (!session.hasReceivedData()) {
200203
logger.info("No data for VPN");
201-
;
202204
}
203205

204206
// likely 60 to leave room for TCP and IP headers
@@ -222,8 +224,25 @@ private void pushDataToClient(Session session) {
222224
session.isHasReceivedLastSegment(), session.getRecSequence(), unAck,
223225
session.getTimestampSender(), session.getTimestampReplyTo());
224226

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+
225242
try {
226243
outputStream.write(data);
244+
outputStream.flush();
245+
logger.info("Wrote {} bytes to VPN from {}", data.length, ipHeader.getDestinationAddress());
227246
// logger.info("Wrote " + data.length + " to VPN \n "
228247
// + BufferUtil.hexDump(data, 0, data.length, true, true));
229248
} catch (IOException ex) {

lib/src/main/java/network/grape/lib/vpn/SocketDataWriterWorker.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,8 @@ public void run() {
4747
}
4848
session.setBusyWrite(false);
4949

50-
// todo: find a way to factor this into common code with the reader
5150
if (session.isAbortingConnection()) {
52-
abortSession(session);
51+
//abortSession(session);
5352
}
5453
}
5554

@@ -63,6 +62,7 @@ protected void writeTcp(Session session) {
6362

6463
try {
6564
logger.debug("writing TCP data to: " + sessionKey);
65+
System.out.println("WRITE TCP TO " + sessionKey + " SIZE: " + data.length);
6666
channel.write(buffer);
6767
} catch (NotYetConnectedException ex) {
6868
logger.error("writing to unconnected socket for key: " + sessionKey + " :" + ex.toString());

lib/src/main/java/network/grape/lib/vpn/SocketWorker.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ protected void abortSession(Session session) {
6767
return;
6868
}
6969

70-
sessionManager.closeSession(session);
70+
//todo figure out if this should be here
71+
//sessionManager.closeSession(session);
7172
}
7273
}

0 commit comments

Comments
 (0)