package com.l7tech.common.io;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketOption;
import java.nio.channels.SocketChannel;
import java.util.List;
import java.util.Set;
import java.util.function.BiFunction;
import javax.net.ssl.HandshakeCompletedListener;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;

public class SSLSocketWrapper extends SSLSocket {
   private final SSLSocket a;
   private static final Method b;
   private static final String[] d;

   public SSLSocketWrapper(SSLSocket var1) {
      this.a = var1;
   }

   @Override
   public String[] getSupportedCipherSuites() {
      return this.a.getSupportedCipherSuites();
   }

   @Override
   public String[] getEnabledCipherSuites() {
      return this.a.getEnabledCipherSuites();
   }

   @Override
   public void setEnabledCipherSuites(String[] var1) {
      this.a.setEnabledCipherSuites(var1);
   }

   @Override
   public String[] getSupportedProtocols() {
      return this.a.getSupportedProtocols();
   }

   @Override
   public String[] getEnabledProtocols() {
      return this.a.getEnabledProtocols();
   }

   @Override
   public void setEnabledProtocols(String[] var1) {
      this.a.setEnabledProtocols(var1);
   }

   @Override
   public SSLSession getSession() {
      return this.a.getSession();
   }

   @Override
   public void addHandshakeCompletedListener(HandshakeCompletedListener var1) {
      this.a.addHandshakeCompletedListener(var1);
   }

   @Override
   public void removeHandshakeCompletedListener(HandshakeCompletedListener var1) {
      this.a.removeHandshakeCompletedListener(var1);
   }

   @Override
   public void startHandshake() throws IOException {
      this.a.startHandshake();
   }

   @Override
   public void setUseClientMode(boolean var1) {
      this.a.setUseClientMode(var1);
   }

   @Override
   public boolean getUseClientMode() {
      return this.a.getUseClientMode();
   }

   @Override
   public void setNeedClientAuth(boolean var1) {
      this.a.setNeedClientAuth(var1);
   }

   @Override
   public boolean getNeedClientAuth() {
      return this.a.getNeedClientAuth();
   }

   @Override
   public void setWantClientAuth(boolean var1) {
      this.a.setWantClientAuth(var1);
   }

   @Override
   public boolean getWantClientAuth() {
      return this.a.getWantClientAuth();
   }

   @Override
   public void setEnableSessionCreation(boolean var1) {
      this.a.setEnableSessionCreation(var1);
   }

   @Override
   public boolean getEnableSessionCreation() {
      return this.a.getEnableSessionCreation();
   }

   @Override
   public void connect(SocketAddress var1) throws IOException {
      this.a.connect(var1);
   }

   @Override
   public void connect(SocketAddress var1, int var2) throws IOException {
      this.a.connect(var1, var2);
   }

   @Override
   public void bind(SocketAddress var1) throws IOException {
      this.a.bind(var1);
   }

   @Override
   public InetAddress getInetAddress() {
      return this.a.getInetAddress();
   }

   @Override
   public InetAddress getLocalAddress() {
      return this.a.getLocalAddress();
   }

   @Override
   public int getPort() {
      return this.a.getPort();
   }

   @Override
   public int getLocalPort() {
      return this.a.getLocalPort();
   }

   @Override
   public SocketAddress getRemoteSocketAddress() {
      return this.a.getRemoteSocketAddress();
   }

   @Override
   public SocketAddress getLocalSocketAddress() {
      return this.a.getLocalSocketAddress();
   }

   @Override
   public SocketChannel getChannel() {
      return this.a.getChannel();
   }

   @Override
   public InputStream getInputStream() throws IOException {
      return this.a.getInputStream();
   }

   @Override
   public OutputStream getOutputStream() throws IOException {
      return this.a.getOutputStream();
   }

   @Override
   public void setTcpNoDelay(boolean var1) throws SocketException {
      this.a.setTcpNoDelay(var1);
   }

   @Override
   public boolean getTcpNoDelay() throws SocketException {
      return this.a.getTcpNoDelay();
   }

   @Override
   public void setSoLinger(boolean var1, int var2) throws SocketException {
      this.a.setSoLinger(var1, var2);
   }

   @Override
   public int getSoLinger() throws SocketException {
      return this.a.getSoLinger();
   }

   @Override
   public void sendUrgentData(int var1) throws IOException {
      this.a.sendUrgentData(var1);
   }

   @Override
   public void setOOBInline(boolean var1) throws SocketException {
      this.a.setOOBInline(var1);
   }

   @Override
   public boolean getOOBInline() throws SocketException {
      return this.a.getOOBInline();
   }

   @Override
   public synchronized void setSoTimeout(int var1) throws SocketException {
      this.a.setSoTimeout(var1);
   }

   @Override
   public synchronized int getSoTimeout() throws SocketException {
      return this.a.getSoTimeout();
   }

   @Override
   public synchronized void setSendBufferSize(int var1) throws SocketException {
      this.a.setSendBufferSize(var1);
   }

   @Override
   public synchronized int getSendBufferSize() throws SocketException {
      return this.a.getSendBufferSize();
   }

   @Override
   public synchronized void setReceiveBufferSize(int var1) throws SocketException {
      this.a.setReceiveBufferSize(var1);
   }

   @Override
   public synchronized int getReceiveBufferSize() throws SocketException {
      return this.a.getReceiveBufferSize();
   }

   @Override
   public void setKeepAlive(boolean var1) throws SocketException {
      this.a.setKeepAlive(var1);
   }

   @Override
   public boolean getKeepAlive() throws SocketException {
      return this.a.getKeepAlive();
   }

   @Override
   public void setTrafficClass(int var1) throws SocketException {
      this.a.setTrafficClass(var1);
   }

   @Override
   public int getTrafficClass() throws SocketException {
      return this.a.getTrafficClass();
   }

   @Override
   public void setReuseAddress(boolean var1) throws SocketException {
      this.a.setReuseAddress(var1);
   }

   @Override
   public boolean getReuseAddress() throws SocketException {
      return this.a.getReuseAddress();
   }

   @Override
   public synchronized void close() throws IOException {
      this.a.close();
   }

   @Override
   public void shutdownInput() throws IOException {
      this.a.shutdownInput();
   }

   @Override
   public void shutdownOutput() throws IOException {
      this.a.shutdownOutput();
   }

   @Override
   public String toString() {
      return this.a.toString();
   }

   @Override
   public boolean isConnected() {
      return this.a.isConnected();
   }

   @Override
   public boolean isBound() {
      return this.a.isBound();
   }

   @Override
   public boolean isClosed() {
      return this.a.isClosed();
   }

   @Override
   public boolean isInputShutdown() {
      return this.a.isInputShutdown();
   }

   @Override
   public boolean isOutputShutdown() {
      return this.a.isOutputShutdown();
   }

   @Override
   public void setPerformancePreferences(int var1, int var2, int var3) {
      this.a.setPerformancePreferences(var1, var2, var3);
   }

   @Override
   public SSLParameters getSSLParameters() {
      return this.a.getSSLParameters();
   }

   @Override
   public void setSSLParameters(SSLParameters var1) {
      this.a.setSSLParameters(var1);
   }

   @Override
   public String getApplicationProtocol() {
      return this.a.getApplicationProtocol();
   }

   @Override
   public String getHandshakeApplicationProtocol() {
      return this.a.getHandshakeApplicationProtocol();
   }

   @Override
   public void setHandshakeApplicationProtocolSelector(BiFunction<SSLSocket, List<String>, String> var1) {
      this.a.setHandshakeApplicationProtocolSelector(var1);
   }

   @Override
   public BiFunction<SSLSocket, List<String>, String> getHandshakeApplicationProtocolSelector() {
      return this.a.getHandshakeApplicationProtocolSelector();
   }

   @Override
   public <T> Socket setOption(SocketOption<T> var1, T var2) throws IOException {
      return this.a.setOption(var1, var2);
   }

   @Override
   public <T> T getOption(SocketOption<T> var1) throws IOException {
      return this.a.getOption(var1);
   }

   @Override
   public Set<SocketOption<?>> supportedOptions() {
      return this.a.supportedOptions();
   }

   @Override
   public SSLSession getHandshakeSession() {
      try {
         if (b == null) {
            throw new UnsupportedOperationException(d[1]);
         }
      } catch (Exception var3) {
         throw a(var3);
      }

      try {
         return (SSLSession)b.invoke(this.a);
      } catch (Exception var2) {
         throw new RuntimeException(var2);
      }
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "\u0002|*='z4\u0016q?\u001e#G5\u0016j7\u001a(O(|*\u001d)pp6J\u0012&)w;\u0000mp\u0012#`\u0018\u0004w:\u0006.u;\u0000J;\u00065}?\u000b1wU({$Ex(\u0014/x1\u0007u;U/zp\u0011q;U%a\"\u0017|0\u0001fq>\u0013p,\u001a(y5\u000bm";
      int var4 = "\u0002|*='z4\u0016q?\u001e#G5\u0016j7\u001a(O(|*\u001d)pp6J\u0012&)w;\u0000mp\u0012#`\u0018\u0004w:\u0006.u;\u0000J;\u00065}?\u000b1wU({$Ex(\u0014/x1\u0007u;U/zp\u0011q;U%a\"\u0017|0\u0001fq>\u0013p,\u001a(y5\u000bm"
         .length();
      char var1 = 19;
      int var0 = -1;

      while (true) {
         String var10002 = a(9, a(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            d = var5;
            Method var6 = null;

            try {
               var6 = SSLSocket.class.getMethod(d[0]);
            } catch (Exception var8) {
            }

            b = var6;
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

   private static Exception a(Exception var0) {
      return var0;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 89);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 108;
            case 1 -> 16;
            case 2 -> 87;
            case 3 -> 124;
            case 4 -> 79;
            case 5 -> 29;
            default -> 89;
         });
      }

      return new String(var10001).intern();
   }
}
