diff options
author | syeyoung <42869671+cyoung06@users.noreply.github.com> | 2020-12-08 14:54:17 +0900 |
---|---|---|
committer | syeyoung <42869671+cyoung06@users.noreply.github.com> | 2020-12-08 14:54:17 +0900 |
commit | 87e89fd42ca44400a3d3d3d5477cd1525b24d91a (patch) | |
tree | 02023a2650c2a9e4fd2d47f64cb91ec614a28556 /src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java | |
parent | 055520e1d8313a302f58babc6526d95bf22b471f (diff) | |
download | Skyblock-Dungeons-Guide-87e89fd42ca44400a3d3d3d5477cd1525b24d91a.tar.gz Skyblock-Dungeons-Guide-87e89fd42ca44400a3d3d3d5477cd1525b24d91a.tar.bz2 Skyblock-Dungeons-Guide-87e89fd42ca44400a3d3d3d5477cd1525b24d91a.zip |
authentication stuff and network loading
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java')
-rw-r--r-- | src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java b/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java new file mode 100644 index 00000000..564eeb11 --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/NetworkClassLoader.java @@ -0,0 +1,57 @@ +package kr.syeyoung.dungeonsguide; + +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + +public class NetworkClassLoader extends ClassLoader { + Authenticator authenticator; + + public NetworkClassLoader(Authenticator authenticator) { + super(); + this.authenticator = authenticator; + } + + @Override + public Class findClass(String name) throws ClassNotFoundException { + byte[] b = new byte[0]; + try { + b = loadClassFromFile(name); + return defineClass(name, b, 0, b.length); + } catch (BadPaddingException e) { + e.printStackTrace(); + } catch (InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } + throw new ClassNotFoundException(); + } + + private byte[] loadClassFromFile(String fileName) throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IOException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException { + byte[] buffer; + InputStream inputStream = authenticator.getInputStream(fileName.replace('.', '/')+ ".class"); + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + int nextValue = 0; + while ( (nextValue = inputStream.read()) != -1 ) { + byteStream.write(nextValue); + } + buffer = byteStream.toByteArray(); + return buffer; + } +} |