package com.l7tech.server.tomcat;

import com.l7tech.gateway.common.transport.SsgConnector;
import com.l7tech.server.ServerConfig;
import com.l7tech.server.transport.ListenerException;
import com.l7tech.server.transport.http.HttpTransportModule;
import com.l7tech.server.transport.tls.SsgConnectorSslHelper;
import java.security.GeneralSecurityException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.coyote.Request;
import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
import org.apache.tomcat.util.net.AbstractJsseEndpoint;
import org.apache.tomcat.util.net.NioEndpoint;
import org.apache.tomcat.util.net.SSLHostConfig;
import org.apache.tomcat.util.net.SocketWrapperBase;

public abstract class SsgAbstractHttp11JsseProtocol<S> extends AbstractHttp11JsseProtocol<S> {
   private final Logger a = Logger.getLogger(SsgAbstractHttp11JsseProtocol.class.getName());
   private SSLHostConfig b = null;
   private static final String[] e;

   public SsgAbstractHttp11JsseProtocol(AbstractJsseEndpoint<S, ?> var1) {
      super(var1);
   }

   public void setSsgDefinitions(HttpTransportModule var1, SsgConnector var2, ServerConfig var3) throws ListenerException {
      AbstractJsseEndpoint var4 = this.getEndpoint();
      String[] var8 = e;
      String var5 = var3.getProperty(var8[8]);

      try {
         var4.setMaxConnections(Integer.parseInt(var5));
      } catch (NumberFormatException var10) {
         var8 = e;
         int var7 = 6 * var3.getIntProperty(var8[1], 200);
         this.a.config(var8[6] + var5 + var8[3] + var7 + var8[5]);
         var4.setMaxConnections(var7);
      }

      try {
         if (var4 instanceof NioEndpoint) {
            ((NioEndpoint)var4).setPollerThreadCount(var3.getIntProperty(e[9], 10));
            ((NioEndpoint)var4).setSelectorTimeout(var3.getIntProperty(e[2], 1000));
         }
      } catch (NumberFormatException var9) {
         throw a(var9);
      }

      try {
         ((SsgConnectorAwareEndpoint)var4).setConnectorGoid(var2.getGoid());
         if (var4.isSSLEnabled()) {
            try {
               ((SsgConnectorAwareEndpoint)var4).setSsgConnectorSslHelper(new SsgConnectorSslHelper(var1, var2));
            } catch (GeneralSecurityException var11) {
               throw new ListenerException(e[4] + var11.getMessage(), var11);
            }
         }
      } catch (NumberFormatException var12) {
         throw a(var12);
      }
   }

   public void reloadSslHostConfigs() {
      this.getEndpoint().reloadSslHostConfigs();
   }

   public void onRequestProcessing(SocketWrapperBase<?> var1, Request var2) {
      this.a(var1, var2);
   }

   private void a(SocketWrapperBase<?> var1, Request var2) {
      SsgConnectorAwareChannel var3 = this.getSsgConnectorAwareChannel(var1);
      Logger var10000 = this.getLogger();
      String[] var4 = e;
      var10000.log(Level.FINE, var4[10], var3.getConnectionId());
      var2.setAttribute(var4[0], var3.getConnectionId());
      var2.setAttribute(var4[7], var3.getConnectorGoid());
   }

   public void setClientAuth(String var1) {
      this.a();
      this.b.setCertificateVerification(var1);
   }

   private void a() {
      if (this.b == null) {
         for (SSLHostConfig var4 : this.findSslHostConfigs()) {
            try {
               if (this.getDefaultSSLHostConfigName().equals(var4.getHostName())) {
                  this.b = var4;
                  break;
               }
            } catch (NumberFormatException var6) {
               throw a(var6);
            }
         }

         try {
            if (this.b == null) {
               this.b = new SSLHostConfig();
               this.b.setHostName(this.getDefaultSSLHostConfigName());
               this.getEndpoint().addSslHostConfig(this.b);
            }
         } catch (NumberFormatException var5) {
            throw a(var5);
         }
      }
   }

   protected abstract SsgConnectorAwareChannel getSsgConnectorAwareChannel(SocketWrapperBase<?> var1);

   protected abstract Logger getLogger();

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

   static {
      String[] var5 = new String[11];
      int var3 = 0;
      String var2 = "x\u001e\u0001\f8/Y~\u0012\u0004\f'}_m\u0014\u001e\f7wCu\u0014\u000fV=wCR\u0015\u0018r\u001e$V h}t\u001e\u0000o5`nt\u001f\u000fW&jHu\u0012\u0015\u0018o\u001e\u0001A5lcr\u001e?G8}No\u001e\u001ev=uHt\u0004\u0018,<Q\u0005Qt}@k\u0005\u0015\u0002;j\rr\u001f\u001aC8qI5Q9Q=vJ;\u0015\tD5mAoQ\u001aC8mH;V'N\u001f\r@8}\ro\u001eLA&}Lo\u0014La;vC~\u0012\u0018M&8~H=Lj1t]~\u0003V\u0002\n<Q\u0005L'lHz\u0015B:X\u001e\u0002D=\u007fXi\u0010\u0018K;v\rk\u0003\u0003R1jYbQ\u0018M9{Lo0\u000fA1hYt\u0003!C,[Bu\u001f\tA qBuQ\u001aC8mH;V!x\u001e\u0001\f8/Y~\u0012\u0004\f'}_m\u0014\u001e\f'kJX\u001e\u0002L1{Yt\u0003#K0\u001bo\u001e\u0001A5llx\u0012\tR w_V\u0010\u0014a;vC~\u0012\u0018K;v";
      int var4 = "x\u001e\u0001\f8/Y~\u0012\u0004\f'}_m\u0014\u001e\f7wCu\u0014\u000fV=wCR\u0015\u0018r\u001e$V h}t\u001e\u0000o5`nt\u001f\u000fW&jHu\u0012\u0015\u0018o\u001e\u0001A5lcr\u001e?G8}No\u001e\u001ev=uHt\u0004\u0018,<Q\u0005Qt}@k\u0005\u0015\u0002;j\rr\u001f\u001aC8qI5Q9Q=vJ;\u0015\tD5mAoQ\u001aC8mH;V'N\u001f\r@8}\ro\u001eLA&}Lo\u0014La;vC~\u0012\u0018M&8~H=Lj1t]~\u0003V\u0002\n<Q\u0005L'lHz\u0015B:X\u001e\u0002D=\u007fXi\u0010\u0018K;v\rk\u0003\u0003R1jYbQ\u0018M9{Lo0\u000fA1hYt\u0003!C,[Bu\u001f\tA qBuQ\u001aC8mH;V!x\u001e\u0001\f8/Y~\u0012\u0004\f'}_m\u0014\u001e\f'kJX\u001e\u0002L1{Yt\u0003#K0\u001bo\u001e\u0001A5llx\u0012\tR w_V\u0010\u0014a;vC~\u0012\u0018K;v"
         .length();
      char var1 = 30;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 32;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     e = var5;
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "a\u0010\u000fO;bm|\u00102C6zFg+\n^?wGV\u0010\u0017B.\u001dF\u001a\u0016X3xD5\u0016\u0006\f<yQ5\u001c\rB4s@a\u0016\rBzm\u0013h";
                  var4 = "a\u0010\u000fO;bm|\u00102C6zFg+\n^?wGV\u0010\u0017B.\u001dF\u001a\u0016X3xD5\u0016\u0006\f<yQ5\u001c\rB4s@a\u0016\rBzm\u0013h"
                     .length();
                  var1 = 26;
                  var7 = -1;
            }

            var10000 = 46;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

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

      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 -> 59;
            case 1 -> 81;
            case 2 -> 76;
            case 3 -> 2;
            case 4 -> 116;
            case 5 -> 56;
            default -> 13;
         });
      }

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