package mit.rmi ;

public class ServerSocketFactory
implements	java.rmi.server.RMIServerSocketFactory
	,	java.io.Serializable
{
	private static final int ANONYMOUS_PORT = 0 ;
	private static final int MAX_PORTS = 100 ;
	private static javax.net.ServerSocketFactory sslFactory = null ;

	public java.net.ServerSocket createServerSocket( int port )
	throws java.io.IOException
	{
            System.out.println("In createServerSocket(" + port + ") at " + new java.util.Date());
            int ssport = port ;
		Exception exception = null ;
		if( ANONYMOUS_PORT == ssport )
		{
			ssport = 8000 ;
		}
		if( null == sslFactory )
		{
			sslFactory = javax.net.ssl.SSLServerSocketFactory.getDefault() ;
		}
		javax.net.ssl.SSLServerSocket s = null ;
		for( int i = 0 ; MAX_PORTS != i ; i ++ )
		{
			try
			{
				s = ( javax.net.ssl.SSLServerSocket ) sslFactory.createServerSocket( ssport + i ) ;
				s.setEnabledCipherSuites( s.getSupportedCipherSuites() ) ;
				exception = null ;
				break ;
			}
			catch( Exception ex )
			{
				exception = ex ;
			}
		}
		if( null != exception )
		{
			throw new java.io.IOException( exception.toString() ) ;
		}
                System.out.println("out of createServerSocket(" + port + ") at " + new java.util.Date());
		return s ;
	}

	public boolean equals( Object that ) 
	{ 
		return that != null && that.getClass() == this.getClass() ; 
	}

}
