diff --git a/LaunchServer/build.gradle b/LaunchServer/build.gradle index 890bb281..77e444c7 100644 --- a/LaunchServer/build.gradle +++ b/LaunchServer/build.gradle @@ -81,6 +81,7 @@ pack project(':LauncherAPI') bundle 'org.fusesource.jansi:jansi:1.18' bundle 'commons-io:commons-io:2.6' bundle 'commons-codec:commons-codec:1.12' + bundle 'org.apache.httpcomponents:httpclient:4.5.7' bundle 'org.javassist:javassist:3.25.0-GA' bundle 'io.netty:netty-all:4.1.36.Final' bundle 'org.hibernate:hibernate-core:5.4.4.Final' diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java index 0b60e7f8..67fae76b 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/LaunchServer.java @@ -36,7 +36,8 @@ import java.io.BufferedReader; import java.io.IOException; import java.lang.ProcessBuilder.Redirect; -import java.lang.reflect.InvocationTargetException; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.security.InvalidAlgorithmParameterException; @@ -390,9 +391,8 @@ public LaunchServer(LaunchServerDirectories directories, LaunchServerEnv env, La private LauncherBinary binary() { if (launcherEXEBinaryClass != null) { try { - return launcherEXEBinaryClass.getConstructor(LaunchServer.class).newInstance(this); - } catch (InstantiationException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException | NoSuchMethodException | SecurityException e) { + return (LauncherBinary) MethodHandles.publicLookup().findConstructor(launcherEXEBinaryClass, MethodType.methodType(void.class, LaunchServer.class)).invoke(this); + } catch (Throwable e) { LogHelper.error(e); } } diff --git a/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java b/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java index d37031be..e2f20159 100644 --- a/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java +++ b/LaunchServer/src/main/java/pro/gravit/launchserver/config/LaunchServerConfig.java @@ -319,7 +319,12 @@ public static LaunchServerConfig getDefault(LaunchServer.LaunchServerEnv env) { newConfig.netty.fileServerEnabled = true; newConfig.netty.binds = new NettyBindAddress[]{new NettyBindAddress("0.0.0.0", 9274)}; newConfig.netty.performance = new NettyPerformanceConfig(); - newConfig.netty.performance.usingEpoll = Epoll.isAvailable(); + try { + newConfig.netty.performance.usingEpoll = Epoll.isAvailable(); + } catch (Throwable e) { + // Epoll class line 51+ catch (Exception) but Error will be thrown by System.load + newConfig.netty.performance.usingEpoll = false; + } // such as on ARM newConfig.netty.performance.bossThread = 2; newConfig.netty.performance.workerThread = 8; diff --git a/LauncherAPI/src/main/java/pro/gravit/launcher/downloader/ListDownloader.java b/LauncherAPI/src/main/java/pro/gravit/launcher/downloader/ListDownloader.java index 643e50e3..741cdf3f 100644 --- a/LauncherAPI/src/main/java/pro/gravit/launcher/downloader/ListDownloader.java +++ b/LauncherAPI/src/main/java/pro/gravit/launcher/downloader/ListDownloader.java @@ -47,10 +47,18 @@ public interface DownloadTotalCallback { public static class DownloadTask { public final String apply; - public final long size; + public long size; + public final String urlApply; public DownloadTask(String apply, long size) { this.apply = apply; + urlApply = apply; + this.size = size; + } + + public DownloadTask(String urlApply, String apply, long size) { + this.apply = apply; + this.urlApply = urlApply; this.size = size; } } @@ -70,7 +78,7 @@ public void download(String base, List applies, Path dstDirFile, D String path = baseUri.getPath(); List excs = new CopyOnWriteArrayList<>(); for (DownloadTask apply : applies) { - URI u = new URI(scheme, host, path + apply.apply, "", ""); + URI u = new URI(scheme, host, path + apply.urlApply, "", ""); callback.stateChanged(apply.apply, 0L, apply.size); Path targetPath = dstDirFile.resolve(apply.apply); toExec.add(() -> { @@ -181,7 +189,9 @@ public Path handleResponse(HttpResponse response) throws IOException { } long contentLength = response.getEntity().getContentLength(); if (task != null && contentLength != task.size) { - LogHelper.warning("Missing content length: expected %d | found %d", task.size, contentLength); + if (task.size > 0) + LogHelper.warning("Missing content length: expected %d | found %d", task.size, contentLength); + else task.size = contentLength; } if (zip) { try (ZipInputStream input = IOHelper.newZipInput(source)) { diff --git a/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java b/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java index 740fe8b4..16737cd1 100644 --- a/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java +++ b/LauncherAPI/src/main/java/pro/gravit/launcher/modules/impl/SimpleModuleManager.java @@ -10,6 +10,8 @@ import pro.gravit.utils.verify.LauncherTrustManager; import java.io.IOException; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.net.URL; import java.nio.file.FileVisitResult; import java.nio.file.Files; @@ -29,6 +31,7 @@ import java.util.jar.JarFile; public class SimpleModuleManager implements LauncherModulesManager { + private static final MethodType VOID_TYPE = MethodType.methodType(void.class); protected final List modules = new ArrayList<>(); protected final List moduleNames = new ArrayList<>(); protected final SimpleModuleContext context; @@ -149,10 +152,17 @@ public LauncherModule loadModule(Path file) throws IOException { @SuppressWarnings("unchecked") Class clazz = (Class) Class.forName(moduleClass, false, classLoader); checkModuleClass(clazz, checkMode); - LauncherModule module = clazz.newInstance(); + if (!LauncherModule.class.isAssignableFrom(clazz)) + throw new ClassNotFoundException("Invalid module class... Not contains LauncherModule in hierarchy."); + LauncherModule module; + try { + module = (LauncherModule) MethodHandles.publicLookup().findConstructor(clazz, VOID_TYPE).invoke(); + } catch (Throwable e) { + throw (InstantiationException) new InstantiationException("Error on instancing...").initCause(e); + } loadModule(module); return module; - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + } catch (ClassNotFoundException | InstantiationException e) { LogHelper.error(e); LogHelper.error("In module %s Module-Main-Class incorrect", file.toString()); return null; diff --git a/ServerWrapper/build.gradle b/ServerWrapper/build.gradle index 72d24cec..e4d95236 100644 --- a/ServerWrapper/build.gradle +++ b/ServerWrapper/build.gradle @@ -38,6 +38,7 @@ task javadocJar(type: Jar) { dependencies { pack project(':LauncherAuthlib') + pack 'org.bouncycastle:bcprov-jdk15:1.46' pack 'org.apache.httpcomponents:httpclient:4.5.7' pack 'io.netty:netty-codec-http:4.1.36.Final' } diff --git a/modules b/modules index 52818e6e..cec48e15 160000 --- a/modules +++ b/modules @@ -1 +1 @@ -Subproject commit 52818e6ef05d90ad678d02e83f9bd4140d8eda34 +Subproject commit cec48e154a44b3ee51aadda8e2886739445939ec