diff --git a/.gitmodules b/.gitmodules
index 2609bba..77ec83f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,9 +1,6 @@
[submodule "client-holocore"]
path = client-holocore
- url = ssh://git@bitbucket.org/projectswg/client-holocore.git
-[submodule "PSWGCommon"]
- path = PSWGCommon
+ url = git@bitbucket.org:projectswg/client-holocore.git
+[submodule "pswgcommon"]
+ path = pswgcommon
url = git@bitbucket.org:projectswg/pswgcommon.git
-[submodule "ClientHolocore"]
- path = ClientHolocore
- url = ssh://git@bitbucket.org/projectswg/client-holocore.git
diff --git a/ClientHolocore b/ClientHolocore
deleted file mode 160000
index f6266df..0000000
--- a/ClientHolocore
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit f6266df106083e9de18bfc514c6ccc7234408b92
diff --git a/PSWGCommon b/PSWGCommon
deleted file mode 160000
index 753adac..0000000
--- a/PSWGCommon
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 753adaca225ec1db30c8b72e35bbe216d8def52e
diff --git a/build.gradle b/build.gradle
index d7fd73c..fbdd68f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,27 +1,20 @@
plugins {
- id 'java'
- id 'idea'
+ id 'java'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
-jar {
- baseName = "Forwarder"
- classifier = null
- version = null
-}
-
-task wrapper(type: Wrapper) {
- gradleVersion = "4.6"
-}
-
repositories {
jcenter()
}
dependencies {
- compile project(':PSWGCommon')
- compile project(':ClientHolocore')
- compileOnly fileTree(dir: 'lib', include: ['*.jar'])
+ compile project(':pswgcommon')
+ compile project(':client-holocore')
+ testCompile 'junit:junit:4.12'
+}
+
+task wrapper(type: Wrapper) {
+ gradleVersion = "4.7"
}
diff --git a/client-holocore b/client-holocore
new file mode 160000
index 0000000..58c943d
--- /dev/null
+++ b/client-holocore
@@ -0,0 +1 @@
+Subproject commit 58c943d639dab26e0d0d7005be2b553e5f5f5283
diff --git a/lib/findbugs.jar b/lib/findbugs.jar
deleted file mode 100644
index b861402..0000000
Binary files a/lib/findbugs.jar and /dev/null differ
diff --git a/lib/lz4-1.3.0.jar b/lib/lz4-1.3.0.jar
deleted file mode 100644
index aaf641c..0000000
Binary files a/lib/lz4-1.3.0.jar and /dev/null differ
diff --git a/pswgcommon b/pswgcommon
new file mode 160000
index 0000000..12e2de8
--- /dev/null
+++ b/pswgcommon
@@ -0,0 +1 @@
+Subproject commit 12e2de84b2b0d885a6b38bfbfd871fe64df1b4ab
diff --git a/settings.gradle b/settings.gradle
index 9873ad0..210dd03 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1,2 @@
-include ':PSWGCommon', ':ClientHolocore'
+include ':pswgcommon'
+include ':client-holocore'
diff --git a/src/main/java/com/projectswg/forwarder/intents/client/DataPacketInboundIntent.java b/src/main/java/com/projectswg/forwarder/intents/client/DataPacketInboundIntent.java
index 5d22216..990b8fe 100644
--- a/src/main/java/com/projectswg/forwarder/intents/client/DataPacketInboundIntent.java
+++ b/src/main/java/com/projectswg/forwarder/intents/client/DataPacketInboundIntent.java
@@ -1,18 +1,17 @@
package com.projectswg.forwarder.intents.client;
import me.joshlarson.jlcommon.control.Intent;
-
-import javax.annotation.Nonnull;
+import org.jetbrains.annotations.NotNull;
public class DataPacketInboundIntent extends Intent {
private final byte [] data;
- public DataPacketInboundIntent(@Nonnull byte [] data) {
+ public DataPacketInboundIntent(@NotNull byte [] data) {
this.data = data;
}
- @Nonnull
+ @NotNull
public byte [] getData() {
return data;
}
diff --git a/src/main/java/com/projectswg/forwarder/intents/client/DataPacketOutboundIntent.java b/src/main/java/com/projectswg/forwarder/intents/client/DataPacketOutboundIntent.java
index 3b10536..ce8acb9 100644
--- a/src/main/java/com/projectswg/forwarder/intents/client/DataPacketOutboundIntent.java
+++ b/src/main/java/com/projectswg/forwarder/intents/client/DataPacketOutboundIntent.java
@@ -1,18 +1,17 @@
package com.projectswg.forwarder.intents.client;
import me.joshlarson.jlcommon.control.Intent;
-
-import javax.annotation.Nonnull;
+import org.jetbrains.annotations.NotNull;
public class DataPacketOutboundIntent extends Intent {
private final byte [] data;
- public DataPacketOutboundIntent(@Nonnull byte [] data) {
+ public DataPacketOutboundIntent(@NotNull byte [] data) {
this.data = data;
}
- @Nonnull
+ @NotNull
public byte [] getData() {
return data;
}
diff --git a/src/main/java/com/projectswg/forwarder/intents/client/SonyPacketInboundIntent.java b/src/main/java/com/projectswg/forwarder/intents/client/SonyPacketInboundIntent.java
index ad04438..9ddd1c7 100644
--- a/src/main/java/com/projectswg/forwarder/intents/client/SonyPacketInboundIntent.java
+++ b/src/main/java/com/projectswg/forwarder/intents/client/SonyPacketInboundIntent.java
@@ -2,18 +2,17 @@ package com.projectswg.forwarder.intents.client;
import com.projectswg.forwarder.resources.networking.packets.Packet;
import me.joshlarson.jlcommon.control.Intent;
-
-import javax.annotation.Nonnull;
+import org.jetbrains.annotations.NotNull;
public class SonyPacketInboundIntent extends Intent {
private final Packet packet;
- public SonyPacketInboundIntent(@Nonnull Packet packet) {
+ public SonyPacketInboundIntent(@NotNull Packet packet) {
this.packet = packet;
}
- @Nonnull
+ @NotNull
public Packet getPacket() {
return packet;
}
diff --git a/src/main/java/com/projectswg/forwarder/intents/client/UpdateStackIntent.java b/src/main/java/com/projectswg/forwarder/intents/client/UpdateStackIntent.java
index 49a7f16..2bb468d 100644
--- a/src/main/java/com/projectswg/forwarder/intents/client/UpdateStackIntent.java
+++ b/src/main/java/com/projectswg/forwarder/intents/client/UpdateStackIntent.java
@@ -2,8 +2,7 @@ package com.projectswg.forwarder.intents.client;
import com.projectswg.forwarder.resources.networking.data.ProtocolStack;
import me.joshlarson.jlcommon.control.Intent;
-
-import javax.annotation.CheckForNull;
+import org.jetbrains.annotations.Nullable;
public class UpdateStackIntent extends Intent {
@@ -13,7 +12,7 @@ public class UpdateStackIntent extends Intent {
this.stack = stack;
}
- @CheckForNull
+ @Nullable
public ProtocolStack getStack() {
return stack;
}
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/NetInterceptor.java b/src/main/java/com/projectswg/forwarder/resources/networking/NetInterceptor.java
index c7cbcea..88a8fcb 100644
--- a/src/main/java/com/projectswg/forwarder/resources/networking/NetInterceptor.java
+++ b/src/main/java/com/projectswg/forwarder/resources/networking/NetInterceptor.java
@@ -6,8 +6,6 @@ import com.projectswg.common.network.packets.PacketType;
import com.projectswg.common.network.packets.swg.login.LoginClientId;
import com.projectswg.common.network.packets.swg.login.LoginClusterStatus;
import com.projectswg.forwarder.Forwarder.ForwarderData;
-import me.joshlarson.jlcommon.log.Log;
-import me.joshlarson.jlcommon.utilities.ByteUtilities;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/UDPServer.java b/src/main/java/com/projectswg/forwarder/resources/networking/UDPServer.java
deleted file mode 100644
index 7976f47..0000000
--- a/src/main/java/com/projectswg/forwarder/resources/networking/UDPServer.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/***********************************************************************************
-* Copyright (c) 2015 /// Project SWG /// www.projectswg.com *
-* *
-* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
-* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
-* Our goal is to create an emulator which will provide a server for players to *
-* continue playing a game similar to the one they used to play. We are basing *
-* it on the final publish of the game prior to end-game events. *
-* *
-* This file is part of Holocore. *
-* *
-* -------------------------------------------------------------------------------- *
-* *
-* Holocore is free software: you can redistribute it and/or modify *
-* it under the terms of the GNU Affero General Public License as *
-* published by the Free Software Foundation, either version 3 of the *
-* License, or (at your option) any later version. *
-* *
-* Holocore is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
-* GNU Affero General Public License for more details. *
-* *
-* You should have received a copy of the GNU Affero General Public License *
-* along with Holocore. If not, see . *
-* *
-***********************************************************************************/
-package com.projectswg.forwarder.resources.networking;
-
-import me.joshlarson.jlcommon.concurrency.Delay;
-import me.joshlarson.jlcommon.log.Log;
-
-import javax.annotation.Nonnull;
-import java.io.IOException;
-import java.net.*;
-import java.util.Locale;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Consumer;
-
-/**
- * This class represents a UDP server that listens for packets and
- * will call the callback when it receives one
- */
-public class UDPServer {
-
- private final byte [] dataBuffer;
- private final AtomicBoolean running;
- private final InetSocketAddress bindAddr;
- private final Consumer callback;
-
- private DatagramSocket socket;
- private Thread thread;
-
- public UDPServer(@Nonnull InetSocketAddress bindAddr, @Nonnull Consumer callback) {
- this(bindAddr, 1024, callback);
- }
-
- public UDPServer(@Nonnull InetSocketAddress bindAddr, int packetSize, @Nonnull Consumer callback) {
- this.dataBuffer = new byte[packetSize];
- this.running = new AtomicBoolean(false);
- this.bindAddr = bindAddr;
- this.callback = callback;
- }
-
- public void bind() throws SocketException {
- bind(null);
- }
-
- public void bind(Consumer customizationCallback) throws SocketException {
- assert socket == null : "binding twice";
- socket = new DatagramSocket(bindAddr);
- if (customizationCallback != null)
- customizationCallback.accept(socket);
- start();
- }
-
- public void close() {
- assert socket != null : "socket already closed";
- stop();
- socket.close();
- socket = null;
- }
-
- public int getPort() {
- int port = socket.getLocalPort();
- while (port == 0) {
- port = socket.getLocalPort();
- if (!Delay.sleepMilli(5))
- break;
- }
- return port;
- }
-
- public boolean isRunning() {
- return running.get();
- }
-
- public boolean send(DatagramPacket packet) {
- try {
- socket.send(packet);
- return true;
- } catch (IOException e) {
- String msg = e.getMessage();
- if (msg == null || !msg.toLowerCase(Locale.US).contains("socket closed")) {
- Log.e(e);
- close();
- }
- }
- return false;
- }
-
- public boolean send(int port, InetAddress addr, byte [] data) {
- return send(new DatagramPacket(data, data.length, addr, port));
- }
-
- public boolean send(int port, String addr, byte [] data) {
- try {
- return send(port, InetAddress.getByName(addr), data);
- } catch (UnknownHostException e) {
- Log.e(e);
- }
- return false;
- }
-
- public boolean send(InetSocketAddress addr, byte [] data) {
- return send(new DatagramPacket(data, data.length, addr));
- }
-
- private void start() {
- running.set(true);
- thread = new Thread(this::run);
- thread.setName("UDPServer Port#" + getPort());
- thread.start();
- }
-
- private void stop() {
- running.set(false);
- thread.interrupt();
- }
-
- private void run() {
- try {
- while (running.get()) {
- DatagramPacket packet = new DatagramPacket(dataBuffer, dataBuffer.length);
- try {
- socket.receive(packet);
- if (packet.getLength() > 0) {
- byte [] buffer = new byte[packet.getLength()];
- System.arraycopy(packet.getData(), 0, buffer, 0, packet.getLength());
- packet.setData(buffer);
- callback.accept(packet);
- }
- } catch (IOException e) {
- String msg = e.getMessage();
- if (msg == null || !msg.toLowerCase(Locale.US).contains("socket closed")) {
- Log.e(e);
- close();
- }
- packet.setLength(0);
- }
- }
- } catch (Exception e) {
- Log.e(e);
- } finally {
- running.set(false);
- }
- }
-
-}
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/data/FragmentedProcessor.java b/src/main/java/com/projectswg/forwarder/resources/networking/data/FragmentedProcessor.java
index 833eddc..2a92ebf 100644
--- a/src/main/java/com/projectswg/forwarder/resources/networking/data/FragmentedProcessor.java
+++ b/src/main/java/com/projectswg/forwarder/resources/networking/data/FragmentedProcessor.java
@@ -1,12 +1,12 @@
package com.projectswg.forwarder.resources.networking.data;
+import com.projectswg.forwarder.resources.networking.packets.Fragmented;
+import com.projectswg.forwarder.resources.networking.packets.Packet;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
-import com.projectswg.forwarder.resources.networking.packets.Fragmented;
-import com.projectswg.forwarder.resources.networking.packets.Packet;
-
public class FragmentedProcessor {
private final List fragmentedBuffer;
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/data/ProtocolStack.java b/src/main/java/com/projectswg/forwarder/resources/networking/data/ProtocolStack.java
index 7d9b259..60db69b 100644
--- a/src/main/java/com/projectswg/forwarder/resources/networking/data/ProtocolStack.java
+++ b/src/main/java/com/projectswg/forwarder/resources/networking/data/ProtocolStack.java
@@ -4,8 +4,8 @@ import com.projectswg.forwarder.resources.networking.ClientServer;
import com.projectswg.forwarder.resources.networking.packets.Fragmented;
import com.projectswg.forwarder.resources.networking.packets.Packet;
import com.projectswg.forwarder.resources.networking.packets.SequencedPacket;
+import org.jetbrains.annotations.NotNull;
-import javax.annotation.Nonnull;
import java.net.InetSocketAddress;
import java.util.*;
import java.util.function.BiConsumer;
@@ -103,7 +103,7 @@ public class ProtocolStack {
}
}
- public boolean addIncoming(@Nonnull SequencedPacket packet) {
+ public boolean addIncoming(@NotNull SequencedPacket packet) {
synchronized (sequenced) {
if (packet.getSequence() < rxSequence)
return true;
@@ -133,7 +133,7 @@ public class ProtocolStack {
return fragmentedProcessor.addFragmented(frag);
}
- public void addOutbound(@Nonnull byte [] data) {
+ public void addOutbound(@NotNull byte [] data) {
outboundRaw.offer(data);
}
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/encryption/Compression.java b/src/main/java/com/projectswg/forwarder/resources/networking/encryption/Compression.java
deleted file mode 100644
index f830c01..0000000
--- a/src/main/java/com/projectswg/forwarder/resources/networking/encryption/Compression.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.projectswg.forwarder.resources.networking.encryption;
-
-import net.jpountz.lz4.LZ4Compressor;
-import net.jpountz.lz4.LZ4Factory;
-import net.jpountz.lz4.LZ4SafeDecompressor;
-
-public class Compression {
-
- private static final LZ4Compressor COMPRESSOR = LZ4Factory.safeInstance().highCompressor();
- private static final LZ4SafeDecompressor DECOMPRESSOR = LZ4Factory.safeInstance().safeDecompressor();
-
- public static byte [] compress(byte [] data) {
- int maxCompressedLength = COMPRESSOR.maxCompressedLength(data.length);
- byte[] compressed = new byte[maxCompressedLength];
- int length = COMPRESSOR.compress(data, compressed);
- byte [] ret = new byte[length];
- System.arraycopy(compressed, 0, ret, 0, length);
- return ret;
- }
-
- public static byte [] decompress(byte [] data) {
- return decompress(data, data.length * 10);
- }
-
- public static byte [] decompress(byte [] data, int bufferSize) {
- byte [] restored = new byte[bufferSize];
- int length = DECOMPRESSOR.decompress(data, restored);
- if (length == bufferSize)
- return restored;
- byte [] ret = new byte[length];
- System.arraycopy(restored, 0, ret, 0, length);
- return ret;
- }
-
-}
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/packets/DataChannel.java b/src/main/java/com/projectswg/forwarder/resources/networking/packets/DataChannel.java
index b9d3bcd..b2782a0 100644
--- a/src/main/java/com/projectswg/forwarder/resources/networking/packets/DataChannel.java
+++ b/src/main/java/com/projectswg/forwarder/resources/networking/packets/DataChannel.java
@@ -27,12 +27,12 @@
***********************************************************************************/
package com.projectswg.forwarder.resources.networking.packets;
+import com.projectswg.common.network.NetBuffer;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
-import com.projectswg.common.network.NetBuffer;
-
public class DataChannel extends Packet implements SequencedPacket {
private final List content;
diff --git a/src/main/java/com/projectswg/forwarder/resources/networking/packets/MultiPacket.java b/src/main/java/com/projectswg/forwarder/resources/networking/packets/MultiPacket.java
index 2ca4490..2c3b053 100644
--- a/src/main/java/com/projectswg/forwarder/resources/networking/packets/MultiPacket.java
+++ b/src/main/java/com/projectswg/forwarder/resources/networking/packets/MultiPacket.java
@@ -27,12 +27,12 @@
***********************************************************************************/
package com.projectswg.forwarder.resources.networking.packets;
+import com.projectswg.common.network.NetBuffer;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
-import com.projectswg.common.network.NetBuffer;
-
public class MultiPacket extends Packet {
private final List content;
diff --git a/src/main/java/com/projectswg/forwarder/resources/recording/PacketRecorder.java b/src/main/java/com/projectswg/forwarder/resources/recording/PacketRecorder.java
index 8f204ef..cd00113 100644
--- a/src/main/java/com/projectswg/forwarder/resources/recording/PacketRecorder.java
+++ b/src/main/java/com/projectswg/forwarder/resources/recording/PacketRecorder.java
@@ -3,7 +3,6 @@ package com.projectswg.forwarder.resources.recording;
import java.io.*;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
-import java.net.InetSocketAddress;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TimeZone;
diff --git a/src/main/java/com/projectswg/forwarder/services/client/ClientOutboundDataService.java b/src/main/java/com/projectswg/forwarder/services/client/ClientOutboundDataService.java
index 0470418..1083347 100644
--- a/src/main/java/com/projectswg/forwarder/services/client/ClientOutboundDataService.java
+++ b/src/main/java/com/projectswg/forwarder/services/client/ClientOutboundDataService.java
@@ -3,12 +3,7 @@ package com.projectswg.forwarder.services.client;
import com.projectswg.common.network.NetBuffer;
import com.projectswg.common.network.packets.PacketType;
import com.projectswg.common.network.packets.swg.zone.HeartBeat;
-import com.projectswg.forwarder.intents.client.DataPacketInboundIntent;
-import com.projectswg.forwarder.intents.client.DataPacketOutboundIntent;
-import com.projectswg.forwarder.intents.client.SonyPacketInboundIntent;
-import com.projectswg.forwarder.intents.client.ClientConnectedIntent;
-import com.projectswg.forwarder.intents.client.ClientDisconnectedIntent;
-import com.projectswg.forwarder.intents.client.UpdateStackIntent;
+import com.projectswg.forwarder.intents.client.*;
import com.projectswg.forwarder.resources.client.state.OutboundDataTuner;
import com.projectswg.forwarder.resources.networking.data.ProtocolStack;
import com.projectswg.forwarder.resources.networking.data.SequencedOutbound;
diff --git a/src/main/java/com/projectswg/forwarder/services/client/ClientServerService.java b/src/main/java/com/projectswg/forwarder/services/client/ClientServerService.java
index 96caabd..0285eaa 100644
--- a/src/main/java/com/projectswg/forwarder/services/client/ClientServerService.java
+++ b/src/main/java/com/projectswg/forwarder/services/client/ClientServerService.java
@@ -1,14 +1,13 @@
package com.projectswg.forwarder.services.client;
import com.projectswg.forwarder.Forwarder.ForwarderData;
-import com.projectswg.forwarder.intents.client.SonyPacketInboundIntent;
import com.projectswg.forwarder.intents.client.ClientConnectedIntent;
import com.projectswg.forwarder.intents.client.ClientDisconnectedIntent;
+import com.projectswg.forwarder.intents.client.SonyPacketInboundIntent;
import com.projectswg.forwarder.intents.client.UpdateStackIntent;
import com.projectswg.forwarder.intents.control.StartForwarderIntent;
import com.projectswg.forwarder.intents.control.StopForwarderIntent;
import com.projectswg.forwarder.resources.networking.ClientServer;
-import com.projectswg.forwarder.resources.networking.UDPServer;
import com.projectswg.forwarder.resources.networking.data.ProtocolStack;
import com.projectswg.forwarder.resources.networking.packets.*;
import com.projectswg.forwarder.resources.networking.packets.Disconnect.DisconnectReason;
@@ -16,6 +15,7 @@ import me.joshlarson.jlcommon.control.IntentChain;
import me.joshlarson.jlcommon.control.IntentHandler;
import me.joshlarson.jlcommon.control.Service;
import me.joshlarson.jlcommon.log.Log;
+import me.joshlarson.jlcommon.network.UDPServer;
import me.joshlarson.jlcommon.utilities.ByteUtilities;
import java.net.*;
diff --git a/src/main/java/com/projectswg/forwarder/services/server/ServerConnectionService.java b/src/main/java/com/projectswg/forwarder/services/server/ServerConnectionService.java
index 760ff0f..3741138 100644
--- a/src/main/java/com/projectswg/forwarder/services/server/ServerConnectionService.java
+++ b/src/main/java/com/projectswg/forwarder/services/server/ServerConnectionService.java
@@ -4,10 +4,10 @@ import com.projectswg.connection.HolocoreSocket;
import com.projectswg.connection.ServerConnectionChangedReason;
import com.projectswg.connection.packets.RawPacket;
import com.projectswg.forwarder.Forwarder.ForwarderData;
-import com.projectswg.forwarder.intents.client.DataPacketInboundIntent;
-import com.projectswg.forwarder.intents.client.DataPacketOutboundIntent;
import com.projectswg.forwarder.intents.client.ClientConnectedIntent;
import com.projectswg.forwarder.intents.client.ClientDisconnectedIntent;
+import com.projectswg.forwarder.intents.client.DataPacketInboundIntent;
+import com.projectswg.forwarder.intents.client.DataPacketOutboundIntent;
import com.projectswg.forwarder.intents.control.StartForwarderIntent;
import com.projectswg.forwarder.intents.control.StopForwarderIntent;
import com.projectswg.forwarder.intents.server.ServerConnectedIntent;