package com.l7tech.server.transport.http;

import com.l7tech.util.ShutdownExceptionHandler;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TimeoutInputStream extends ServletInputStream {
   private static final Logger a;
   private static final long b = 20000L;
   private static final long c = 20000L;
   private static final int d = 1024;
   private static final Queue<m> e;
   private static final Object f;
   private static Exception g;
   private static Thread h;
   private ServletInputStream i;
   private m j;
   private ReentrantLock k;
   private static final String[] l;

   public TimeoutInputStream(ServletInputStream var1) throws IOException {
      this(var1, 20000L, 20000L, 1024);
   }

   public TimeoutInputStream(InputStream var1, long var2, long var4, int var6) throws IOException {
      this((ServletInputStream)var1, var2, var4, var6);
   }

   public TimeoutInputStream(ServletInputStream var1, long var2, long var4, int var6) throws IOException {
      if (var1 == null) {
         throw new IOException(l[4]);
      }

      this.i = var1;
      this.j = new m(this, var2, var4, var6);
      this.k = new ReentrantLock();
      e.add(this.j);
   }

   public int read() throws IOException {
      this.enterBlocking();

      try {
         a.log(Level.FINEST, l[2]);
         return this.trackBytes(this.i.read());
      } finally {
         this.exitBlocking();
      }
   }

   public int read(byte[] var1) throws IOException {
      this.enterBlocking();

      try {
         a.log(Level.FINEST, l[1], var1.length);
         return this.trackBytes(this.i.read(var1));
      } finally {
         this.exitBlocking();
      }
   }

   public int read(byte[] var1, int var2, int var3) throws IOException {
      this.enterBlocking();

      try {
         a.log(Level.FINEST, l[3], var3);
         return this.trackBytes(this.i.read(var1, var2, var3));
      } finally {
         this.exitBlocking();
      }
   }

   public int readLine(byte[] var1, int var2, int var3) throws IOException {
      this.enterBlocking();

      try {
         String[] var6 = l;
         a.log(Level.FINEST, var6[1], var3);
         return this.trackBytes(this.i.readLine(var1, var2, var3));
      } catch (ClassCastException var9) {
         throw new UnsupportedOperationException(l[6]);
      } finally {
         this.exitBlocking();
      }
   }

   public boolean isFinished() {
      return this.i.isFinished();
   }

   public boolean isReady() {
      return this.i.isReady();
   }

   public void setReadListener(ReadListener var1) {
      this.i.setReadListener(var1);
   }

   public long skip(long var1) throws IOException {
      this.enterBlocking();

      try {
         return this.trackBytes(this.i.skip(var1));
      } finally {
         this.exitBlocking();
      }
   }

   public int available() throws IOException {
      this.d();
      return this.i.available();
   }

   public void close() throws IOException {
      try {
         if (!this.j.g()) {
            this.i.close();
            this.doneBlocking();
         }
      } catch (IOException var1) {
         throw a(var1);
      }
   }

   public synchronized void mark(int var1) {
      this.i.mark(var1);
   }

   public synchronized void reset() throws IOException {
      this.d();
      this.i.reset();
   }

   public boolean markSupported() {
      return this.i.markSupported();
   }

   public final void done() {
      a.log(Level.FINEST, l[7]);
      this.j.d();
   }

   protected final void enterBlocking() throws IOException {
      this.a();

      try {
         this.d();
      } catch (IOException var3) {
         this.b();
         throw var3;
      }

      try {
         if (this.c()) {
            this.j.a();
         }
      } catch (IOException var2) {
         throw a(var2);
      }
   }

   protected final void exitBlocking() throws IOException {
      try {
         try {
            if (this.c()) {
               this.j.b();
            }
         } catch (IOException var4) {
            throw a(var4);
         }

         this.d();
      } finally {
         this.b();
      }
   }

   protected final void doneBlocking() {
      this.j.c();
   }

   protected final int trackBytes(int var1) {
      this.j.a(var1);
      return var1;
   }

   protected final long trackBytes(long var1) {
      this.j.a(var1);
      return var1;
   }

   private void a() {
      this.k.lock();
   }

   private void b() {
      this.k.unlock();
   }

   private boolean c() {
      try {
         if (this.k.getHoldCount() == 1) {
            return true;
         }
      } catch (ClassCastException var1) {
         throw a(var1);
      }

      return false;
   }

   private void d() throws IOException {
      try {
         if (this.j.g()) {
            throw new TimeoutInputStream.TimeoutIOException();
         }
      } catch (IOException var1) {
         throw a(var1);
      }
   }

   static {
      String[] var5 = new String[8];
      int var3 = 0;
      String var2 = "\u001e{>`DO\u0013:p!`DO\u0012%p/qgz\u000e4}*zW\u0019\u0000t'aYu\u001dwa!5B~\u001b355%M;\u0018.a+f\u0016\u0000t'aYu\u001dwa!5B~\u001b35\u007f5Rb\u000e2\u0019\u0000t'aYu\u001dwa!5B~\u001b355%M;\u0018.a+f\u00109`\"y\u0010r\u0014'`:FDi\u001f6x\u0012\u001e{>`DO\u0013:p!`DO\u0012%p/q";
      int var4 = "\u001e{>`DO\u0013:p!`DO\u0012%p/qgz\u000e4}*zW\u0019\u0000t'aYu\u001dwa!5B~\u001b355%M;\u0018.a+f\u0016\u0000t'aYu\u001dwa!5B~\u001b35\u007f5Rb\u000e2\u0019\u0000t'aYu\u001dwa!5B~\u001b355%M;\u0018.a+f\u00109`\"y\u0010r\u0014'`:FDi\u001f6x\u0012\u001e{>`DO\u0013:p!`DO\u0012%p/q"
         .length();
      char var1 = 26;
      int var10 = -1;

      label35:
      while (true) {
         byte var10000 = 90;
         String var10001 = var2.substring(++var10, var10 + var1);
         byte var10002 = -1;

         while (true) {
            String var13 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var13;
                  if ((var10 += var1) >= var4) {
                     l = var5;
                     a = Logger.getLogger(TimeoutInputStream.class.getName());
                     e = new ConcurrentLinkedQueue<>();
                     f = new Object();
                     g = null;
                     h = null;
                     synchronized (f) {
                        h = new Thread(new n());
                        h.setDaemon(true);
                        String[] var11 = l;
                        h.setName(var11[5]);
                        h.setUncaughtExceptionHandler(ShutdownExceptionHandler.getInstance());
                        h.start();
                     }

                     Thread var12 = new Thread(new o());
                     var12.setDaemon(true);
                     var12.setName(l[0]);
                     var12.setUncaughtExceptionHandler(ShutdownExceptionHandler.getInstance());
                     var12.start();
                     return;
                  }

                  var1 = var2.charAt(var10);
                  break;
               default:
                  var5[var3++] = var13;
                  if ((var10 += var1) < var4) {
                     var1 = var2.charAt(var10);
                     continue label35;
                  }

                  var2 = "3M\u001b\u0005uE.\u0002W\u0012\\iE-GV\nWeJ'GA\u0011@s\u000b$\bQ^Vu[:\bW\n\u0005rN+\u0003i\u0017Ke\n\u0017!L\u0010LsC/\u0003\u0005\f@aO#\tB^VtY/\u0006H";
                  var4 = "3M\u001b\u0005uE.\u0002W\u0012\\iE-GV\nWeJ'GA\u0011@s\u000b$\bQ^Vu[:\bW\n\u0005rN+\u0003i\u0017Ke\n\u0017!L\u0010LsC/\u0003\u0005\f@aO#\tB^VtY/\u0006H"
                     .length();
                  var1 = '0';
                  var10 = -1;
            }

            var10000 = 106;
            var10001 = var2.substring(++var10, var10 + var1);
            var10002 = 0;
         }
      }
   }

   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] ^ 32);
      }

      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 -> 13;
            case 1 -> 79;
            case 2 -> 20;
            case 3 -> 79;
            case 4 -> 106;
            case 5 -> 65;
            default -> 32;
         });
      }

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

   public static final class TimeoutIOException extends IOException {
      static final long serialVersionUID = 2838001492102031198L;
      private static final String a;

      private TimeoutIOException() {
         super(a);
      }

      static {
         String var10002 = a(45, a("\u000e!W/JF4)<H/D^`"));
         byte var10001 = -1;
         a = var10002;
      }

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

         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 -> 112;
               case 1 -> 120;
               case 2 -> 8;
               case 3 -> 103;
               case 4 -> 6;
               case 5 -> 6;
               default -> 57;
            });
         }

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