Thu, 31 Aug 2017 18:10:36 +0800
merge
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 */
26 package com.sun.corba.se.impl.legacy.connection;
28 import java.net.ServerSocket;
29 import java.util.ArrayList;
30 import java.util.Collection;
31 import java.util.Iterator;
33 import org.omg.CORBA.INITIALIZE;
34 import org.omg.CORBA.INTERNAL;
35 import org.omg.CORBA.CompletionStatus;
37 import com.sun.corba.se.pept.transport.Acceptor;
38 import com.sun.corba.se.pept.transport.ByteBufferPool;
39 import com.sun.corba.se.pept.transport.ContactInfo;
40 import com.sun.corba.se.pept.transport.Selector;
42 import com.sun.corba.se.spi.ior.IOR;
43 import com.sun.corba.se.spi.ior.iiop.IIOPProfile ;
44 import com.sun.corba.se.spi.ior.ObjectKeyTemplate;
45 import com.sun.corba.se.spi.ior.ObjectId ;
46 import com.sun.corba.se.spi.orb.ORB;
47 import com.sun.corba.se.spi.transport.CorbaTransportManager;
48 import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketEndPointInfo;
49 import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager;
50 import com.sun.corba.se.spi.transport.SocketOrChannelAcceptor;
51 import com.sun.corba.se.spi.logging.CORBALogDomains;
53 import com.sun.corba.se.impl.encoding.EncapsOutputStream;
54 import com.sun.corba.se.impl.legacy.connection.SocketFactoryAcceptorImpl;
55 import com.sun.corba.se.impl.legacy.connection.USLPort;
56 import com.sun.corba.se.impl.orbutil.ORBUtility;
57 import com.sun.corba.se.impl.transport.SocketOrChannelAcceptorImpl;
58 import com.sun.corba.se.impl.logging.ORBUtilSystemException;
60 public class LegacyServerSocketManagerImpl
61 implements
62 LegacyServerSocketManager
63 {
64 protected ORB orb;
65 private ORBUtilSystemException wrapper ;
67 public LegacyServerSocketManagerImpl(ORB orb)
68 {
69 this.orb = orb;
70 wrapper = ORBUtilSystemException.get( orb,
71 CORBALogDomains.RPC_TRANSPORT ) ;
72 }
74 ////////////////////////////////////////////////////
75 //
76 // LegacyServerSocketManager
77 //
79 // Only used in ServerManagerImpl.
80 public int legacyGetTransientServerPort(String type)
81 {
82 return legacyGetServerPort(type, false);
83 }
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 }
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 }
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 }
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 }
140 ////////////////////////////////////////////////////
141 //
142 // Implementation.
143 //
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 }
161 private Iterator getAcceptorIterator()
162 {
163 Collection acceptors =
164 orb.getCorbaTransportManager().getAcceptors(null, null);
165 if (acceptors != null) {
166 return acceptors.iterator();
167 }
169 throw wrapper.getServerPortCalledBeforeEndpointsInitialized() ;
170 }
172 private LegacyServerSocketEndPointInfo cast(Object o)
173 {
174 if (o instanceof LegacyServerSocketEndPointInfo) {
175 return (LegacyServerSocketEndPointInfo) o;
176 }
177 return null;
178 }
180 protected void dprint(String msg)
181 {
182 ORBUtility.dprint("LegacyServerSocketManagerImpl", msg);
183 }
184 }
186 // End of file.