home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / sun / net / www / protocol / gopher / GopherClient.class (.txt) next >
Encoding:
Java Class File  |  1979-12-31  |  5.8 KB  |  317 lines

  1. package sun.net.www.protocol.gopher;
  2.  
  3. import java.io.DataInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.PipedInputStream;
  7. import java.io.PipedOutputStream;
  8. import java.io.PrintStream;
  9. import java.net.URL;
  10. import java.net.UnknownHostException;
  11. import java.security.AccessController;
  12. import sun.net.NetworkClient;
  13. import sun.net.www.MessageHeader;
  14. import sun.net.www.URLConnection;
  15. import sun.security.action.GetBooleanAction;
  16. import sun.security.action.GetIntegerAction;
  17. import sun.security.action.GetPropertyAction;
  18.  
  19. public class GopherClient extends NetworkClient implements Runnable {
  20.    public static boolean useGopherProxy;
  21.    public static String gopherProxyHost;
  22.    public static int gopherProxyPort;
  23.    // $FF: renamed from: os java.io.PipedOutputStream
  24.    PipedOutputStream field_0;
  25.    // $FF: renamed from: u java.net.URL
  26.    URL field_1;
  27.    int gtype;
  28.    String gkey;
  29.    URLConnection connection;
  30.  
  31.    GopherClient(URLConnection var1) {
  32.       this.connection = var1;
  33.    }
  34.  
  35.    public static boolean getUseGopherProxy() {
  36.       return (Boolean)AccessController.doPrivileged(new GetBooleanAction("gopherProxySet"));
  37.    }
  38.  
  39.    public static String getGopherProxyHost() {
  40.       String var0 = (String)AccessController.doPrivileged(new GetPropertyAction("gopherProxyHost"));
  41.       if ("".equals(var0)) {
  42.          var0 = null;
  43.       }
  44.  
  45.       return var0;
  46.    }
  47.  
  48.    public static int getGopherProxyPort() {
  49.       return (Integer)AccessController.doPrivileged(new GetIntegerAction("gopherProxyPort", 80));
  50.    }
  51.  
  52.    InputStream openStream(URL var1) throws IOException {
  53.       this.field_1 = var1;
  54.       this.field_0 = this.field_0;
  55.       int var2 = 0;
  56.       String var3 = var1.getFile();
  57.       int var4 = var3.length();
  58.  
  59.       char var5;
  60.       for(var5 = 49; var2 < var4 && (var5 = var3.charAt(var2)) == '/'; ++var2) {
  61.       }
  62.  
  63.       this.gtype = var5 == 47 ? 49 : var5;
  64.       if (var2 < var4) {
  65.          ++var2;
  66.       }
  67.  
  68.       this.gkey = var3.substring(var2);
  69.  
  70.       try {
  71.          ((NetworkClient)this).openServer(var1.getHost(), var1.getPort() <= 0 ? 70 : var1.getPort());
  72.       } catch (UnknownHostException var8) {
  73.          ((NetworkClient)this).openServer("sun-barr.ebay.sun.com", 3666);
  74.          super.serverOutput.print(var1.getHost() + " " + (var1.getPort() <= 0 ? 70 : var1.getPort()) + "\n");
  75.          super.serverOutput.flush();
  76.          var2 = 0;
  77.  
  78.          while((var5 = super.serverInput.read()) >= 0) {
  79.             if (var5 == 10) {
  80.                ++var2;
  81.                if (var2 >= 2) {
  82.                   break;
  83.                }
  84.             }
  85.          }
  86.  
  87.          if (var5 < 0) {
  88.             ((NetworkClient)this).closeServer();
  89.             throw new UnknownHostException(var1.getHost());
  90.          }
  91.       }
  92.  
  93.       MessageHeader var6 = new MessageHeader();
  94.       switch (this.gtype) {
  95.          case 48:
  96.          case 55:
  97.             var6.add("content-type", "text/plain");
  98.             break;
  99.          case 49:
  100.             var6.add("content-type", "text/html");
  101.             break;
  102.          case 73:
  103.          case 103:
  104.             var6.add("content-type", "image/gif");
  105.             break;
  106.          default:
  107.             var6.add("content-type", "content/unknown");
  108.       }
  109.  
  110.       if (this.gtype != 55) {
  111.          super.serverOutput.print(this.decodePercent(this.gkey) + "\r\n");
  112.          super.serverOutput.flush();
  113.       } else if ((var2 = this.gkey.indexOf(63)) >= 0) {
  114.          super.serverOutput.print(this.decodePercent(this.gkey.substring(0, var2) + "\t" + this.gkey.substring(var2 + 1) + "\r\n"));
  115.          super.serverOutput.flush();
  116.          var6.add("content-type", "text/html");
  117.       } else {
  118.          var6.add("content-type", "text/html");
  119.       }
  120.  
  121.       this.connection.setProperties(var6);
  122.       if (var6.findValue("content-type") == "text/html") {
  123.          this.field_0 = new PipedOutputStream();
  124.          PipedInputStream var7 = new PipedInputStream();
  125.          var7.connect(this.field_0);
  126.          (new Thread(this)).start();
  127.          return var7;
  128.       } else {
  129.          return new GopherInputStream(this, super.serverInput);
  130.       }
  131.    }
  132.  
  133.    private String decodePercent(String var1) {
  134.       if (var1 != null && var1.indexOf(37) >= 0) {
  135.          int var2 = var1.length();
  136.          char[] var3 = new char[var2];
  137.          int var4 = 0;
  138.  
  139.          for(int var5 = 0; var5 < var2; ++var5) {
  140.             int var6 = var1.charAt(var5);
  141.             if (var6 == 37 && var5 + 2 < var2) {
  142.                int var7 = var1.charAt(var5 + 1);
  143.                int var8 = var1.charAt(var5 + 2);
  144.                if (48 <= var7 && var7 <= 57) {
  145.                   var7 -= 48;
  146.                } else if (97 <= var7 && var7 <= 102) {
  147.                   var7 = var7 - 97 + 10;
  148.                } else if (65 <= var7 && var7 <= 70) {
  149.                   var7 = var7 - 65 + 10;
  150.                } else {
  151.                   var7 = -1;
  152.                }
  153.  
  154.                if (48 <= var8 && var8 <= 57) {
  155.                   var8 -= 48;
  156.                } else if (97 <= var8 && var8 <= 102) {
  157.                   var8 = var8 - 97 + 10;
  158.                } else if (65 <= var8 && var8 <= 70) {
  159.                   var8 = var8 - 65 + 10;
  160.                } else {
  161.                   var8 = -1;
  162.                }
  163.  
  164.                if (var7 >= 0 && var8 >= 0) {
  165.                   var6 = var7 << 4 | var8;
  166.                   var5 += 2;
  167.                }
  168.             }
  169.  
  170.             var3[var4++] = (char)var6;
  171.          }
  172.  
  173.          return new String(var3, 0, var4);
  174.       } else {
  175.          return var1;
  176.       }
  177.    }
  178.  
  179.    private String encodePercent(String var1) {
  180.       if (var1 == null) {
  181.          return var1;
  182.       } else {
  183.          int var2 = var1.length();
  184.          char[] var3 = null;
  185.          int var4 = 0;
  186.  
  187.          for(int var5 = 0; var5 < var2; ++var5) {
  188.             char var6 = var1.charAt(var5);
  189.             if (var6 > ' ' && var6 != '"' && var6 != '%') {
  190.                if (var3 != null) {
  191.                   if (var4 >= var3.length) {
  192.                      char[] var10 = new char[var4 + 10];
  193.                      System.arraycopy(var3, 0, var10, 0, var4);
  194.                      var3 = var10;
  195.                   }
  196.  
  197.                   var3[var4] = (char)var6;
  198.                }
  199.  
  200.                ++var4;
  201.             } else {
  202.                if (var3 == null) {
  203.                   var3 = var1.toCharArray();
  204.                }
  205.  
  206.                if (var4 + 3 >= var3.length) {
  207.                   char[] var7 = new char[var4 + 10];
  208.                   System.arraycopy(var3, 0, var7, 0, var4);
  209.                   var3 = var7;
  210.                }
  211.  
  212.                var3[var4] = '%';
  213.                int var8 = var6 >> 4 & 15;
  214.                var3[var4 + 1] = var8 < 10 ? (char)(48 + var8) : (char)(55 + var8);
  215.                var8 = var6 & 15;
  216.                var3[var4 + 2] = var8 < 10 ? (char)(48 + var8) : (char)(55 + var8);
  217.                var4 += 3;
  218.             }
  219.          }
  220.  
  221.          return var3 == null ? var1 : new String(var3, 0, var4);
  222.       }
  223.    }
  224.  
  225.    public void run() {
  226.       int var1 = -1;
  227.  
  228.       try {
  229.          if (this.gtype == 55 && (var1 = this.gkey.indexOf(63)) < 0) {
  230.             PrintStream var27 = new PrintStream(this.field_0);
  231.             var27.print("<html><head><title>Searchable Gopher Index</title></head>\n<body><h1>Searchable Gopher Index</h1><isindex>\n</body></html>\n");
  232.          } else if (this.gtype != 49 && this.gtype != 55) {
  233.             byte[] var26 = new byte[2048];
  234.  
  235.             int var29;
  236.             try {
  237.                while((var29 = super.serverInput.read(var26)) >= 0) {
  238.                   this.field_0.write(var26, 0, var29);
  239.                }
  240.             } catch (Exception var23) {
  241.             }
  242.          } else {
  243.             PrintStream var2 = new PrintStream(this.field_0);
  244.             Object var3 = null;
  245.             String var28;
  246.             if (this.gtype == 55) {
  247.                var28 = "Results of searching for \"" + this.gkey.substring(var1 + 1) + "\" on " + this.field_1.getHost();
  248.             } else {
  249.                var28 = "Gopher directory " + this.gkey + " from " + this.field_1.getHost();
  250.             }
  251.  
  252.             var2.print("<html><head><title>");
  253.             var2.print(var28);
  254.             var2.print("</title></head>\n<body>\n<H1>");
  255.             var2.print(var28);
  256.             var2.print("</h1><dl compact>\n");
  257.             DataInputStream var4 = new DataInputStream(super.serverInput);
  258.  
  259.             String var5;
  260.             while((var5 = var4.readLine()) != null) {
  261.                int var6;
  262.                for(var6 = var5.length(); var6 > 0 && var5.charAt(var6 - 1) <= ' '; --var6) {
  263.                }
  264.  
  265.                if (var6 > 0) {
  266.                   char var7 = var5.charAt(0);
  267.                   int var8 = var5.indexOf(9);
  268.                   int var9 = var8 > 0 ? var5.indexOf(9, var8 + 1) : -1;
  269.                   int var10 = var9 > 0 ? var5.indexOf(9, var9 + 1) : -1;
  270.                   if (var10 >= 0) {
  271.                      String var11 = var10 + 1 < var6 ? ":" + var5.substring(var10 + 1, var6) : "";
  272.                      String var12 = var9 + 1 < var10 ? var5.substring(var9 + 1, var10) : this.field_1.getHost();
  273.                      var2.print("<dt><a href=\"gopher://" + var12 + var11 + "/" + var5.substring(0, 1) + this.encodePercent(var5.substring(var8 + 1, var9)) + "\">\n");
  274.                      var2.print("<img align=middle border=0 width=25 height=32 src=");
  275.                      switch (var7) {
  276.                         case '0':
  277.                            var2.print(System.getProperty("java.net.ftp.imagepath.text"));
  278.                            break;
  279.                         case '1':
  280.                            var2.print(System.getProperty("java.net.ftp.imagepath.directory"));
  281.                            break;
  282.                         case 'g':
  283.                            var2.print(System.getProperty("java.net.ftp.imagepath.gif"));
  284.                            break;
  285.                         default:
  286.                            var2.print(System.getProperty("java.net.ftp.imagepath.file"));
  287.                      }
  288.  
  289.                      var2.print(".gif align=middle><dd>\n");
  290.                      var2.print(var5.substring(1, var8) + "</a>\n");
  291.                   }
  292.                }
  293.             }
  294.  
  295.             var2.print("</dl></body>\n");
  296.             var2.close();
  297.          }
  298.       } catch (IOException var24) {
  299.       } finally {
  300.          try {
  301.             ((NetworkClient)this).closeServer();
  302.             this.field_0.close();
  303.          } catch (IOException var22) {
  304.          }
  305.  
  306.       }
  307.  
  308.    }
  309.  
  310.    static {
  311.       Boolean var0 = (Boolean)AccessController.doPrivileged(new GetBooleanAction("gopherProxySet"));
  312.       useGopherProxy = var0;
  313.       gopherProxyHost = (String)AccessController.doPrivileged(new GetPropertyAction("gopherProxyHost"));
  314.       gopherProxyPort = (Integer)AccessController.doPrivileged(new GetIntegerAction("gopherProxyPort", 80));
  315.    }
  316. }
  317.