home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / rmi / transport / proxy / RMIMasterSocketFactory.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  5.5 KB  |  210 lines

  1. package sun.rmi.transport.proxy;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.net.NoRouteToHostException;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.net.UnknownHostException;
  9. import java.rmi.server.LogStream;
  10. import java.rmi.server.RMISocketFactory;
  11. import java.util.Hashtable;
  12. import java.util.Vector;
  13. import sun.rmi.transport.RMIThread;
  14. import sun.rmi.transport.Utils;
  15.  
  16. public class RMIMasterSocketFactory extends RMISocketFactory {
  17.    static int logLevel = LogStream.parseLevel(Utils.getProperty("sun.rmi.transport.proxy.logLevel"));
  18.    private static long connectTimeout = Utils.getLong("sun.rmi.transport.proxy.connectTimeout", 15000L);
  19.    Hashtable successTable = new Hashtable();
  20.    private static final int MaxRememberedHosts = 64;
  21.    private Vector hostList = new Vector(64);
  22.    protected RMISocketFactory initialFactory = new RMIDirectSocketFactory();
  23.    protected Vector altFactoryList = new Vector(2);
  24.  
  25.    public RMIMasterSocketFactory() {
  26.       boolean var1 = false;
  27.  
  28.       try {
  29.          String var2 = System.getProperty("http.proxyHost");
  30.          if (var2 == null) {
  31.             var2 = System.getProperty("proxyHost");
  32.          }
  33.  
  34.          if (!Boolean.getBoolean("java.rmi.server.disableHttp") && var2 != null && var2.length() > 0) {
  35.             var1 = true;
  36.          }
  37.       } catch (Exception var3) {
  38.          var1 = true;
  39.       }
  40.  
  41.       if (var1) {
  42.          this.altFactoryList.addElement(new RMIHttpToPortSocketFactory());
  43.          this.altFactoryList.addElement(new RMIHttpToCGISocketFactory());
  44.       }
  45.  
  46.    }
  47.  
  48.    public Socket createSocket(String var1, int var2) throws IOException {
  49.       if (logLevel >= 10) {
  50.          LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: host: " + var1 + ", port: " + var2);
  51.       }
  52.  
  53.       RMISocketFactory var3 = (RMISocketFactory)this.successTable.get(var1);
  54.       if (var3 != null) {
  55.          if (logLevel >= 10) {
  56.             LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: previously successful factory found: " + var3);
  57.          }
  58.  
  59.          return var3.createSocket(var1, var2);
  60.       } else {
  61.          Object var4 = null;
  62.          Socket var5 = null;
  63.          AsyncConnector var6 = new AsyncConnector(this, this.initialFactory, var1, var2);
  64.          Object var7 = null;
  65.  
  66.          try {
  67.             synchronized(var6){}
  68.  
  69.             try {
  70.                Thread var13 = RMIThread.newThread(var6, "AsyncConnector", true);
  71.                var13.start();
  72.  
  73.                try {
  74.                   var6.wait(connectTimeout);
  75.                } catch (InterruptedException var57) {
  76.                }
  77.  
  78.                var66 = this.checkConnector(var6);
  79.             } catch (Throwable var58) {
  80.                throw var58;
  81.             }
  82.  
  83.             if (var66 == null) {
  84.                throw new NoRouteToHostException("connect timed out: " + var1);
  85.             }
  86.  
  87.             if (logLevel >= 10) {
  88.                LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: direct socket connection successful");
  89.             }
  90.  
  91.             Socket var8 = var66;
  92.             return var8;
  93.          } catch (UnknownHostException var63) {
  94.             var7 = var63;
  95.          } catch (NoRouteToHostException var64) {
  96.             var7 = var64;
  97.          } finally {
  98.             if (var7 != null) {
  99.                if (logLevel >= 10) {
  100.                   LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: direct socket connection failed: " + var7);
  101.                }
  102.  
  103.                int var11 = 0;
  104.  
  105.                while(var11 < this.altFactoryList.size()) {
  106.                   var3 = (RMISocketFactory)this.altFactoryList.elementAt(var11);
  107.  
  108.                   try {
  109.                      if (logLevel >= 10) {
  110.                         LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: trying with factory: " + var3);
  111.                      }
  112.  
  113.                      Socket var12 = var3.createSocket(var1, var2);
  114.                      InputStream var70 = var12.getInputStream();
  115.                      var70.read();
  116.                      var12.close();
  117.                   } catch (IOException var59) {
  118.                      if (logLevel >= 10) {
  119.                         LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: factory failed: " + var59);
  120.                      }
  121.  
  122.                      ++var11;
  123.                      continue;
  124.                   }
  125.  
  126.                   if (logLevel >= 10) {
  127.                      LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: factory succeeded");
  128.                   }
  129.  
  130.                   try {
  131.                      var5 = var3.createSocket(var1, var2);
  132.                   } catch (IOException var55) {
  133.                   }
  134.                   break;
  135.                }
  136.             }
  137.  
  138.          }
  139.  
  140.          Hashtable var9 = this.successTable;
  141.          synchronized(var9) {
  142.             try {
  143.                synchronized(var6){}
  144.  
  145.                try {
  146.                   var67 = this.checkConnector(var6);
  147.                } catch (Throwable var56) {
  148.                   throw var56;
  149.                }
  150.  
  151.                if (var67 != null) {
  152.                   if (var5 != null) {
  153.                      var5.close();
  154.                   }
  155.  
  156.                   Socket var69 = var67;
  157.                   return var69;
  158.                }
  159.  
  160.                var6.notUsed();
  161.             } catch (UnknownHostException var60) {
  162.                var7 = var60;
  163.             } catch (NoRouteToHostException var61) {
  164.                var7 = var61;
  165.             }
  166.  
  167.             if (var5 != null) {
  168.                this.rememberFactory(var1, var3);
  169.                Socket var68 = var5;
  170.                return var68;
  171.             } else {
  172.                throw var7;
  173.             }
  174.          }
  175.       }
  176.    }
  177.  
  178.    void rememberFactory(String var1, RMISocketFactory var2) {
  179.       Hashtable var3 = this.successTable;
  180.       synchronized(var3){}
  181.  
  182.       try {
  183.          while(this.hostList.size() >= 64) {
  184.             this.successTable.remove(this.hostList.elementAt(0));
  185.             this.hostList.removeElementAt(0);
  186.          }
  187.  
  188.          this.hostList.addElement(var1);
  189.          this.successTable.put(var1, var2);
  190.       } catch (Throwable var5) {
  191.          throw var5;
  192.       }
  193.  
  194.    }
  195.  
  196.    Socket checkConnector(AsyncConnector var1) throws IOException {
  197.       IOException var2 = var1.getException();
  198.       if (var2 != null) {
  199.          ((Throwable)var2).fillInStackTrace();
  200.          throw var2;
  201.       } else {
  202.          return var1.getSocket();
  203.       }
  204.    }
  205.  
  206.    public ServerSocket createServerSocket(int var1) throws IOException {
  207.       return new HttpAwareServerSocket(var1);
  208.    }
  209. }
  210.