/* * @(#)LegacyServerSocketManagerImpl.java 1.94 04/06/21 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.corba.se.impl.legacy.connection; import java.net.ServerSocket; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.omg.CORBA.INITIALIZE; import org.omg.CORBA.INTERNAL; import org.omg.CORBA.CompletionStatus; import com.sun.corba.se.pept.transport.Acceptor; import com.sun.corba.se.pept.transport.ByteBufferPool; import com.sun.corba.se.pept.transport.ContactInfo; import com.sun.corba.se.pept.transport.Selector; import com.sun.corba.se.spi.ior.IOR; import com.sun.corba.se.spi.ior.iiop.IIOPProfile ; import com.sun.corba.se.spi.ior.ObjectKeyTemplate; import com.sun.corba.se.spi.ior.ObjectId ; import com.sun.corba.se.spi.orb.ORB; import com.sun.corba.se.spi.transport.CorbaTransportManager; import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo; import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager; import com.sun.corba.se.spi.transport.SocketOrChannelAcceptor; import com.sun.corba.se.spi.logging.CORBALogDomains; import com.sun.corba.se.impl.encoding.EncapsOutputStream; import com.sun.corba.se.impl.legacy.connection.SocketFactoryAcceptorImpl; import com.sun.corba.se.impl.legacy.connection.USLPort; import com.sun.corba.se.impl.orbutil.ORBUtility; import com.sun.corba.se.impl.transport.SocketOrChannelAcceptorImpl; import com.sun.corba.se.impl.logging.ORBUtilSystemException; public class LegacyServerSocketManagerImpl implements LegacyServerSocketManager { protected ORB orb; private ORBUtilSystemException wrapper ; public LegacyServerSocketManagerImpl(ORB orb) { this.orb = orb; wrapper = ORBUtilSystemException.get( orb, CORBALogDomains.RPC_TRANSPORT ) ; } //////////////////////////////////////////////////// // // LegacyServerSocketManager // // Only used in ServerManagerImpl. public int legacyGetTransientServerPort(String type) { return legacyGetServerPort(type, false); } // Only used by POAPolicyMediatorBase. public synchronized int legacyGetPersistentServerPort(String socketType) { if (orb.getORBData().getServerIsORBActivated()) { // this server is activated by orbd return legacyGetServerPort(socketType, true); } else if (orb.getORBData().getPersistentPortInitialized()) { // this is a user-activated server return orb.getORBData().getPersistentServerPort(); } else { throw wrapper.persistentServerportNotSet( CompletionStatus.COMPLETED_MAYBE); } } // Only used by PI IORInfoImpl. public synchronized int legacyGetTransientOrPersistentServerPort( String socketType) { return legacyGetServerPort(socketType, orb.getORBData() .getServerIsORBActivated()); } // Used in RepositoryImpl, ServerManagerImpl, POAImpl, // POAPolicyMediatorBase, TOAImpl. // To get either default or bootnaming endpoint. public synchronized LegacyServerSocketEndPointInfo legacyGetEndpoint( String name) { Iterator iterator = getAcceptorIterator(); while (iterator.hasNext()) { LegacyServerSocketEndPointInfo endPoint = cast(iterator.next()); if (endPoint != null && name.equals(endPoint.getName())) { return endPoint; } } throw new INTERNAL("No acceptor for: " + name); } // Check to see if the given port is equal to any of the ORB Server Ports. // XXX Does this need to change for the multi-homed case? // Used in IIOPProfileImpl, ORBImpl. public boolean legacyIsLocalServerPort(int port) { Iterator iterator = getAcceptorIterator(); while (iterator.hasNext()) { LegacyServerSocketEndPointInfo endPoint = cast(iterator.next()); if (endPoint != null && endPoint.getPort() == port) { return true; } } return false; } //////////////////////////////////////////////////// // // Implementation. // private int legacyGetServerPort (String socketType, boolean isPersistent) { Iterator endpoints = getAcceptorIterator(); while (endpoints.hasNext()) { LegacyServerSocketEndPointInfo ep = cast(endpoints.next()); if (ep != null && ep.getType().equals(socketType)) { if (isPersistent) { return ep.getLocatorPort(); } else { return ep.getPort(); } } } return -1; } private Iterator getAcceptorIterator() { Collection acceptors = orb.getCorbaTransportManager().getAcceptors(null, null); if (acceptors != null) { return acceptors.iterator(); } throw wrapper.getServerPortCalledBeforeEndpointsInitialized() ; } private LegacyServerSocketEndPointInfo cast(Object o) { if (o instanceof LegacyServerSocketEndPointInfo) { return (LegacyServerSocketEndPointInfo) o; } return null; } protected void dprint(String msg) { ORBUtility.dprint("LegacyServerSocketManagerImpl", msg); } } // End of file.