home *** CD-ROM | disk | FTP | other *** search
- package sun.rmi.transport.proxy;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.NoRouteToHostException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.rmi.server.LogStream;
- import java.rmi.server.RMISocketFactory;
- import java.util.Hashtable;
- import java.util.Vector;
- import sun.rmi.transport.RMIThread;
- import sun.rmi.transport.Utils;
-
- public class RMIMasterSocketFactory extends RMISocketFactory {
- static int logLevel = LogStream.parseLevel(Utils.getProperty("sun.rmi.transport.proxy.logLevel"));
- private static long connectTimeout = Utils.getLong("sun.rmi.transport.proxy.connectTimeout", 15000L);
- Hashtable successTable = new Hashtable();
- private static final int MaxRememberedHosts = 64;
- private Vector hostList = new Vector(64);
- protected RMISocketFactory initialFactory = new RMIDirectSocketFactory();
- protected Vector altFactoryList = new Vector(2);
-
- public RMIMasterSocketFactory() {
- boolean var1 = false;
-
- try {
- String var2 = System.getProperty("http.proxyHost");
- if (var2 == null) {
- var2 = System.getProperty("proxyHost");
- }
-
- if (!Boolean.getBoolean("java.rmi.server.disableHttp") && var2 != null && var2.length() > 0) {
- var1 = true;
- }
- } catch (Exception var3) {
- var1 = true;
- }
-
- if (var1) {
- this.altFactoryList.addElement(new RMIHttpToPortSocketFactory());
- this.altFactoryList.addElement(new RMIHttpToCGISocketFactory());
- }
-
- }
-
- public Socket createSocket(String var1, int var2) throws IOException {
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: host: " + var1 + ", port: " + var2);
- }
-
- RMISocketFactory var3 = (RMISocketFactory)this.successTable.get(var1);
- if (var3 != null) {
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: previously successful factory found: " + var3);
- }
-
- return var3.createSocket(var1, var2);
- } else {
- Object var4 = null;
- Socket var5 = null;
- AsyncConnector var6 = new AsyncConnector(this, this.initialFactory, var1, var2);
- Object var7 = null;
-
- try {
- synchronized(var6){}
-
- try {
- Thread var13 = RMIThread.newThread(var6, "AsyncConnector", true);
- var13.start();
-
- try {
- var6.wait(connectTimeout);
- } catch (InterruptedException var57) {
- }
-
- var66 = this.checkConnector(var6);
- } catch (Throwable var58) {
- throw var58;
- }
-
- if (var66 == null) {
- throw new NoRouteToHostException("connect timed out: " + var1);
- }
-
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: direct socket connection successful");
- }
-
- Socket var8 = var66;
- return var8;
- } catch (UnknownHostException var63) {
- var7 = var63;
- } catch (NoRouteToHostException var64) {
- var7 = var64;
- } finally {
- if (var7 != null) {
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: direct socket connection failed: " + var7);
- }
-
- int var11 = 0;
-
- while(var11 < this.altFactoryList.size()) {
- var3 = (RMISocketFactory)this.altFactoryList.elementAt(var11);
-
- try {
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: trying with factory: " + var3);
- }
-
- Socket var12 = var3.createSocket(var1, var2);
- InputStream var70 = var12.getInputStream();
- var70.read();
- var12.close();
- } catch (IOException var59) {
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: factory failed: " + var59);
- }
-
- ++var11;
- continue;
- }
-
- if (logLevel >= 10) {
- LogStream.log("transport").println("RMIMasterSocketFactory.createSocket: factory succeeded");
- }
-
- try {
- var5 = var3.createSocket(var1, var2);
- } catch (IOException var55) {
- }
- break;
- }
- }
-
- }
-
- Hashtable var9 = this.successTable;
- synchronized(var9) {
- try {
- synchronized(var6){}
-
- try {
- var67 = this.checkConnector(var6);
- } catch (Throwable var56) {
- throw var56;
- }
-
- if (var67 != null) {
- if (var5 != null) {
- var5.close();
- }
-
- Socket var69 = var67;
- return var69;
- }
-
- var6.notUsed();
- } catch (UnknownHostException var60) {
- var7 = var60;
- } catch (NoRouteToHostException var61) {
- var7 = var61;
- }
-
- if (var5 != null) {
- this.rememberFactory(var1, var3);
- Socket var68 = var5;
- return var68;
- } else {
- throw var7;
- }
- }
- }
- }
-
- void rememberFactory(String var1, RMISocketFactory var2) {
- Hashtable var3 = this.successTable;
- synchronized(var3){}
-
- try {
- while(this.hostList.size() >= 64) {
- this.successTable.remove(this.hostList.elementAt(0));
- this.hostList.removeElementAt(0);
- }
-
- this.hostList.addElement(var1);
- this.successTable.put(var1, var2);
- } catch (Throwable var5) {
- throw var5;
- }
-
- }
-
- Socket checkConnector(AsyncConnector var1) throws IOException {
- IOException var2 = var1.getException();
- if (var2 != null) {
- ((Throwable)var2).fillInStackTrace();
- throw var2;
- } else {
- return var1.getSocket();
- }
- }
-
- public ServerSocket createServerSocket(int var1) throws IOException {
- return new HttpAwareServerSocket(var1);
- }
- }
-