1/* 2 * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.corba.se.impl.legacy.connection; 27 28import java.net.ServerSocket; 29import java.util.ArrayList; 30import java.util.Collection; 31import java.util.Iterator; 32 33import org.omg.CORBA.INITIALIZE; 34import org.omg.CORBA.INTERNAL; 35import org.omg.CORBA.CompletionStatus; 36 37import com.sun.corba.se.pept.transport.Acceptor; 38import com.sun.corba.se.pept.transport.ByteBufferPool; 39import com.sun.corba.se.pept.transport.ContactInfo; 40import com.sun.corba.se.pept.transport.Selector; 41 42import com.sun.corba.se.spi.ior.IOR; 43import com.sun.corba.se.spi.ior.iiop.IIOPProfile ; 44import com.sun.corba.se.spi.ior.ObjectKeyTemplate; 45import com.sun.corba.se.spi.ior.ObjectId ; 46import com.sun.corba.se.spi.orb.ORB; 47import com.sun.corba.se.spi.transport.CorbaTransportManager; 48import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo; 49import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager; 50import com.sun.corba.se.spi.transport.SocketOrChannelAcceptor; 51import com.sun.corba.se.spi.logging.CORBALogDomains; 52 53import com.sun.corba.se.impl.encoding.EncapsOutputStream; 54import com.sun.corba.se.impl.legacy.connection.SocketFactoryAcceptorImpl; 55import com.sun.corba.se.impl.legacy.connection.USLPort; 56import com.sun.corba.se.impl.orbutil.ORBUtility; 57import com.sun.corba.se.impl.transport.SocketOrChannelAcceptorImpl; 58import com.sun.corba.se.impl.logging.ORBUtilSystemException; 59 60public class LegacyServerSocketManagerImpl 61 implements 62 LegacyServerSocketManager 63{ 64 protected ORB orb; 65 private ORBUtilSystemException wrapper ; 66 67 public LegacyServerSocketManagerImpl(ORB orb) 68 { 69 this.orb = orb; 70 wrapper = ORBUtilSystemException.get( orb, 71 CORBALogDomains.RPC_TRANSPORT ) ; 72 } 73 74 //////////////////////////////////////////////////// 75 // 76 // LegacyServerSocketManager 77 // 78 79 // Only used in ServerManagerImpl. 80 public int legacyGetTransientServerPort(String type) 81 { 82 return legacyGetServerPort(type, false); 83 } 84 85 // Only used by POAPolicyMediatorBase. 86 public synchronized int legacyGetPersistentServerPort(String socketType) 87 { 88 if (orb.getORBData().getServerIsORBActivated()) { 89 // this server is activated by orbd 90 return legacyGetServerPort(socketType, true); 91 } else if (orb.getORBData().getPersistentPortInitialized()) { 92 // this is a user-activated server 93 return orb.getORBData().getPersistentServerPort(); 94 } else { 95 throw wrapper.persistentServerportNotSet( 96 CompletionStatus.COMPLETED_MAYBE); 97 } 98 } 99 100 // Only used by PI IORInfoImpl. 101 public synchronized int legacyGetTransientOrPersistentServerPort( 102 String socketType) 103 { 104 return legacyGetServerPort(socketType, 105 orb.getORBData() 106 .getServerIsORBActivated()); 107 } 108 109 // Used in RepositoryImpl, ServerManagerImpl, POAImpl, 110 // POAPolicyMediatorBase, TOAImpl. 111 // To get either default or bootnaming endpoint. 112 public synchronized LegacyServerSocketEndPointInfo legacyGetEndpoint( 113 String name) 114 { 115 Iterator iterator = getAcceptorIterator(); 116 while (iterator.hasNext()) { 117 LegacyServerSocketEndPointInfo endPoint = cast(iterator.next()); 118 if (endPoint != null && name.equals(endPoint.getName())) { 119 return endPoint; 120 } 121 } 122 throw new INTERNAL("No acceptor for: " + name); 123 } 124 125 // Check to see if the given port is equal to any of the ORB Server Ports. 126 // XXX Does this need to change for the multi-homed case? 127 // Used in IIOPProfileImpl, ORBImpl. 128 public boolean legacyIsLocalServerPort(int port) 129 { 130 Iterator iterator = getAcceptorIterator(); 131 while (iterator.hasNext()) { 132 LegacyServerSocketEndPointInfo endPoint = cast(iterator.next()); 133 if (endPoint != null && endPoint.getPort() == port) { 134 return true; 135 } 136 } 137 return false; 138 } 139 140 //////////////////////////////////////////////////// 141 // 142 // Implementation. 143 // 144 145 private int legacyGetServerPort (String socketType, boolean isPersistent) 146 { 147 Iterator endpoints = getAcceptorIterator(); 148 while (endpoints.hasNext()) { 149 LegacyServerSocketEndPointInfo ep = cast(endpoints.next()); 150 if (ep != null && ep.getType().equals(socketType)) { 151 if (isPersistent) { 152 return ep.getLocatorPort(); 153 } else { 154 return ep.getPort(); 155 } 156 } 157 } 158 return -1; 159 } 160 161 private Iterator getAcceptorIterator() 162 { 163 Collection acceptors = 164 orb.getCorbaTransportManager().getAcceptors(null, null); 165 if (acceptors != null) { 166 return acceptors.iterator(); 167 } 168 169 throw wrapper.getServerPortCalledBeforeEndpointsInitialized() ; 170 } 171 172 private LegacyServerSocketEndPointInfo cast(Object o) 173 { 174 if (o instanceof LegacyServerSocketEndPointInfo) { 175 return (LegacyServerSocketEndPointInfo) o; 176 } 177 return null; 178 } 179 180 protected void dprint(String msg) 181 { 182 ORBUtility.dprint("LegacyServerSocketManagerImpl", msg); 183 } 184} 185 186// End of file. 187