FileDocCategorySizeDatePackage
DataSource.javaAPI DocJMF 2.1.1e3557Mon May 12 12:20:54 BST 2003com.sun.media.protocol.https

DataSource

public class DataSource extends DataSource implements SourceCloneable

Fields Summary
private static SecurityManager
securityManager
Constructors Summary
Methods Summary
public javax.media.protocol.DataSourcecreateClone()

	    securityManager = System.getSecurityManager();

	    // IE and Netscape browsers support https
	    // TODO: See if you need to check version # of IE and Netscape
            // to determine if https is supported.
	    // Netscape Browser?
	    boolean netscape = false;
	    boolean ie = false;
	    boolean msjvm = false;

	    String javaVendor =
		System.getProperty("java.vendor", "Sun").toLowerCase();
	    
	    if (javaVendor.indexOf("icrosoft") > 0) { // microsoft JVM
		msjvm = true;
	    }


	    if (securityManager != null) {
		netscape = (securityManager.toString().indexOf("netscape") != -1);
		ie = (securityManager.toString().indexOf("com.ms.security") != -1);
	    }


	    if (ie || msjvm) {
		try {
		    Class clsFactory = 
			Class.forName("com.ms.net.wininet.WininetStreamHandlerFactory");
		    // Note that Class.forName will either work or throw and Exception,
		    // it will not return null.
		    if ( clsFactory != null ) {
			URL.setURLStreamHandlerFactory(
						       (URLStreamHandlerFactory)clsFactory.newInstance());
		    }
		} catch (Throwable t) {
		}
	    } else if (!netscape) {
		// 1) Need JDK1.2 or higher. 2) JSSE should have been installed
	
		if (! JMFSecurityManager.isJDK12() ) {
		    throw new UnsatisfiedLinkError("Fatal Error: DataSource for https protocol needs JDK1.2 or higher VM");
		}
		try {
		    Class sslproviderC = Class.forName("com.sun.net.ssl.internal.ssl.Provider");
		    
		    
		    Object provider = sslproviderC.newInstance();

		    Class securityC = Class.forName("java.security.Security");
		    Class providerC = Class.forName("java.security.Provider");
		    Class systemC = Class.forName("java.lang.System");

		    Method addProviderM = securityC.getMethod("addProvider",
							new Class[] {
			                                  providerC
		                                        });

		    Method setPropertyM = systemC.getMethod("setProperty",
							new Class[] {
			                                  String.class,
			                                  String.class,
		                                        });
		    
		    if ( ( addProviderM != null) && (setPropertyM != null) ) {
			addProviderM.invoke(securityC, new Object[] {provider});
			setPropertyM.invoke(systemC, new Object[] {
                                           "java.protocol.handler.pkgs",
                                           "com.sun.net.ssl.internal.www.protocol"
			                   });
		    }

		} catch (Exception e) {
		    throw new UnsatisfiedLinkError("Fatal Error:Java Secure Socket Extension classes are not present");
		} catch (Error e) {
		    throw new UnsatisfiedLinkError("Fatal Error:Java Secure Socket Extension classes are not present");

		}
	    }
    
	DataSource ds = new com.sun.media.protocol.https.DataSource();
	ds.setLocator(getLocator());
	if (connected) {
	    try {
		ds.connect();
	    } catch (IOException e) {
		return null;
	    }
	}
	return ds;