1 /*
   2  * Copyright (c) 2002, 2013, 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 
  26 
  27 package com.sun.corba.se.impl.orb ;
  28 
  29 import java.net.URL ;
  30 
  31 import org.omg.CORBA.CompletionStatus ;
  32 import org.omg.PortableInterceptor.ORBInitializer ;
  33 
  34 import com.sun.corba.se.pept.transport.Acceptor;
  35 
  36 import com.sun.corba.se.spi.ior.iiop.GIOPVersion ;
  37 import com.sun.corba.se.spi.logging.CORBALogDomains ;
  38 import com.sun.corba.se.spi.orb.DataCollector ;
  39 import com.sun.corba.se.spi.orb.ORB ;
  40 import com.sun.corba.se.spi.orb.ORBData ;
  41 import com.sun.corba.se.spi.orb.ParserImplTableBase ;
  42 import com.sun.corba.se.spi.orb.StringPair ;
  43 import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory;
  44 import com.sun.corba.se.spi.transport.CorbaTransportManager;
  45 import com.sun.corba.se.spi.transport.IORToSocketInfo;
  46 import com.sun.corba.se.spi.transport.IIOPPrimaryToContactInfo;
  47 import com.sun.corba.se.spi.transport.ReadTimeouts;
  48 
  49 import com.sun.corba.se.impl.encoding.CodeSetComponentInfo ;
  50 import com.sun.corba.se.impl.legacy.connection.USLPort;
  51 import com.sun.corba.se.impl.orbutil.ORBConstants ;
  52 import com.sun.corba.se.impl.logging.ORBUtilSystemException ;
  53 
  54 
  55 public class ORBDataParserImpl extends ParserImplTableBase implements ORBData
  56 {
  57     private ORB orb ;
  58     private ORBUtilSystemException wrapper ;
  59     private String ORBInitialHost ;
  60     private int ORBInitialPort ;
  61     private String ORBServerHost ;
  62     private int ORBServerPort ;
  63     private String listenOnAllInterfaces;
  64     private com.sun.corba.se.spi.legacy.connection.ORBSocketFactory legacySocketFactory ;
  65     private com.sun.corba.se.spi.transport.ORBSocketFactory socketFactory;
  66     private USLPort[] userSpecifiedListenPorts ;
  67     private IORToSocketInfo iorToSocketInfo;
  68     private IIOPPrimaryToContactInfo iiopPrimaryToContactInfo;
  69     private String orbId ;
  70     private boolean orbServerIdPropertySpecified ;
  71     private URL servicesURL ;
  72     private String propertyInitRef ;
  73     private boolean allowLocalOptimization ;
  74     private GIOPVersion giopVersion ;
  75     private int highWaterMark ;
  76     private int lowWaterMark ;
  77     private int numberToReclaim ;
  78     private int giopFragmentSize ;
  79     private int giopBufferSize ;
  80     private int giop11BuffMgr ;
  81     private int giop12BuffMgr ;
  82     private short giopTargetAddressPreference ;
  83     private short giopAddressDisposition ;
  84     private boolean useByteOrderMarkers ;
  85     private boolean useByteOrderMarkersInEncaps ;
  86     private boolean alwaysSendCodeSetCtx ;
  87     private boolean persistentPortInitialized ;
  88     private int persistentServerPort ;
  89     private boolean persistentServerIdInitialized ;
  90     private int persistentServerId ;
  91     private boolean serverIsORBActivated ;
  92     private Class badServerIdHandlerClass ;
  93     private CodeSetComponentInfo.CodeSetComponent charData ;
  94     private CodeSetComponentInfo.CodeSetComponent wcharData ;
  95     private ORBInitializer[] orbInitializers ;
  96     private StringPair[] orbInitialReferences ;
  97     private String defaultInitRef ;
  98     private String[] debugFlags ;
  99     private Acceptor[] acceptors;
 100     private CorbaContactInfoListFactory corbaContactInfoListFactory;
 101     private String acceptorSocketType;
 102     private boolean acceptorSocketUseSelectThreadToWait;
 103     private boolean acceptorSocketUseWorkerThreadForEvent;
 104     private String connectionSocketType;
 105     private boolean connectionSocketUseSelectThreadToWait;
 106     private boolean connectionSocketUseWorkerThreadForEvent;
 107     private ReadTimeouts readTimeouts;
 108     private boolean disableDirectByteBufferUse;
 109     private boolean enableJavaSerialization;
 110     private boolean useRepId;
 111 
 112     // This is not initialized from ParserTable.
 113     private CodeSetComponentInfo codesets ;
 114 
 115 // Public accessor methods ========================================================================
 116 
 117     public String getORBInitialHost()
 118     {
 119         return ORBInitialHost;
 120     }
 121 
 122     public int getORBInitialPort()
 123     {
 124         return ORBInitialPort;
 125     }
 126 
 127     public String getORBServerHost()
 128     {
 129         return ORBServerHost;
 130     }
 131 
 132     public String getListenOnAllInterfaces()
 133     {
 134         return listenOnAllInterfaces;
 135     }
 136 
 137     public int getORBServerPort()
 138     {
 139         return ORBServerPort;
 140     }
 141 
 142     public com.sun.corba.se.spi.legacy.connection.ORBSocketFactory getLegacySocketFactory()
 143     {
 144         return legacySocketFactory;
 145     }
 146 
 147     public com.sun.corba.se.spi.transport.ORBSocketFactory getSocketFactory()
 148     {
 149         return socketFactory;
 150     }
 151 
 152     public USLPort[] getUserSpecifiedListenPorts ()
 153     {
 154         return userSpecifiedListenPorts;
 155     }
 156 
 157     public IORToSocketInfo getIORToSocketInfo()
 158     {
 159         return iorToSocketInfo;
 160     }
 161 
 162     public IIOPPrimaryToContactInfo getIIOPPrimaryToContactInfo()
 163     {
 164         return iiopPrimaryToContactInfo;
 165     }
 166 
 167     public String getORBId()
 168     {
 169         return orbId;
 170     }
 171 
 172     public boolean getORBServerIdPropertySpecified()
 173     {
 174         return orbServerIdPropertySpecified;
 175     }
 176 
 177     public boolean isLocalOptimizationAllowed()
 178     {
 179         return allowLocalOptimization ;
 180     }
 181 
 182     public GIOPVersion getGIOPVersion()
 183     {
 184         return giopVersion;
 185     }
 186 
 187     public int getHighWaterMark()
 188     {
 189         return highWaterMark;
 190     }
 191 
 192     public int getLowWaterMark()
 193     {
 194         return lowWaterMark;
 195     }
 196 
 197     public int getNumberToReclaim()
 198     {
 199         return numberToReclaim;
 200     }
 201 
 202     public int getGIOPFragmentSize()
 203     {
 204         return giopFragmentSize;
 205     }
 206 
 207     public int getGIOPBufferSize()
 208     {
 209         return giopBufferSize;
 210     }
 211 
 212     public int getGIOPBuffMgrStrategy(GIOPVersion gv)
 213     {
 214         if(gv!=null){
 215             if (gv.equals(GIOPVersion.V1_0)) return 0; //Always grow for 1.0
 216             if (gv.equals(GIOPVersion.V1_1)) return giop11BuffMgr;
 217             if (gv.equals(GIOPVersion.V1_2)) return giop12BuffMgr;
 218         }
 219         //If a "faulty" GIOPVersion is passed, it's going to return 0;
 220         return 0;
 221     }
 222 
 223     /**
 224      * @return the GIOP Target Addressing preference of the ORB.
 225      * This ORB by default supports all addressing dispositions unless specified
 226      * otherwise via a java system property ORBConstants.GIOP_TARGET_ADDRESSING
 227      */
 228     public short getGIOPTargetAddressPreference()
 229     {
 230         return giopTargetAddressPreference;
 231     }
 232 
 233     public short getGIOPAddressDisposition()
 234     {
 235         return giopAddressDisposition;
 236     }
 237 
 238     public boolean useByteOrderMarkers()
 239     {
 240         return useByteOrderMarkers;
 241     }
 242 
 243     public boolean useByteOrderMarkersInEncapsulations()
 244     {
 245         return useByteOrderMarkersInEncaps;
 246     }
 247 
 248     public boolean alwaysSendCodeSetServiceContext()
 249     {
 250         return alwaysSendCodeSetCtx;
 251     }
 252 
 253     public boolean getPersistentPortInitialized()
 254     {
 255         return persistentPortInitialized ;
 256     }
 257 
 258     //public void setPersistentServerPort(int sp)
 259     //{
 260         //persistentServerPort = sp;
 261         //persistentPortInitialized = true;
 262     //}
 263 
 264     public int getPersistentServerPort()
 265     {
 266         if ( persistentPortInitialized ) // this is a user-activated server
 267             return persistentServerPort;
 268         else {
 269             throw wrapper.persistentServerportNotSet(
 270                 CompletionStatus.COMPLETED_MAYBE );
 271         }
 272     }
 273 
 274     public boolean getPersistentServerIdInitialized()
 275     {
 276         return persistentServerIdInitialized;
 277     }
 278 
 279     /** Set the persistent-server-id of this server. This id is the same
 280      *  across multiple activations of this server. The id can be set to any
 281      *  integer value other than 0. This id must be set before any persistent
 282      *  objects can be created.
 283      */
 284     //public void setPersistentServerId(int id)
 285     //{
 286         //persistentServerId = id;
 287         //persistentServerIdInitialized = true;
 288     //}
 289 
 290     /** Return the persistent-server-id of this server. This id is the same
 291      *  across multiple activations of this server. This is in contrast to
 292      *  com.sun.corba.se.impl.iiop.ORB.getTransientServerId() which
 293      *  returns a transient id that is guaranteed to be different
 294      *  across multiple activations of
 295      *  this server. The user/environment is required to supply the
 296      *  persistent-server-id every time this server is started, in
 297      *  the ORBServerId parameter, System properties, or other means.
 298      *  The user is also required to ensure that no two persistent servers
 299      *  on the same host have the same server-id.
 300      */
 301     public int getPersistentServerId()
 302     {
 303         if ( persistentServerIdInitialized ) {
 304             return persistentServerId;
 305         } else {
 306             throw wrapper.persistentServeridNotSet(
 307                 CompletionStatus.COMPLETED_MAYBE);
 308         }
 309     }
 310 
 311     public boolean getServerIsORBActivated()
 312     {
 313         return serverIsORBActivated ;
 314     }
 315 
 316     public Class getBadServerIdHandler()
 317     {
 318         return badServerIdHandlerClass ;
 319     }
 320 
 321      /**
 322      * Get the prefered code sets for connections. Should the client send the code set service context on every
 323      * request?
 324      */
 325     public CodeSetComponentInfo getCodeSetComponentInfo()
 326     {
 327         return codesets;
 328     }
 329 
 330     public ORBInitializer[] getORBInitializers()
 331     {
 332         return orbInitializers ;
 333     }
 334 
 335     public StringPair[] getORBInitialReferences()
 336     {
 337         return orbInitialReferences ;
 338     }
 339 
 340     public String getORBDefaultInitialReference()
 341     {
 342         return defaultInitRef ;
 343     }
 344 
 345     public String[] getORBDebugFlags()
 346     {
 347         return debugFlags ;
 348     }
 349 
 350     public Acceptor[] getAcceptors()
 351     {
 352         return acceptors;
 353     }
 354 
 355     public CorbaContactInfoListFactory getCorbaContactInfoListFactory()
 356     {
 357         return corbaContactInfoListFactory;
 358     }
 359 
 360     public String acceptorSocketType()
 361     {
 362         return acceptorSocketType;
 363     }
 364     public boolean acceptorSocketUseSelectThreadToWait()
 365     {
 366         return acceptorSocketUseSelectThreadToWait;
 367     }
 368     public boolean acceptorSocketUseWorkerThreadForEvent()
 369     {
 370         return acceptorSocketUseWorkerThreadForEvent;
 371     }
 372     public String connectionSocketType()
 373     {
 374         return connectionSocketType;
 375     }
 376     public boolean connectionSocketUseSelectThreadToWait()
 377     {
 378         return connectionSocketUseSelectThreadToWait;
 379     }
 380     public boolean connectionSocketUseWorkerThreadForEvent()
 381     {
 382         return connectionSocketUseWorkerThreadForEvent;
 383     }
 384     public boolean isJavaSerializationEnabled()
 385     {
 386         return enableJavaSerialization;
 387     }
 388     public ReadTimeouts getTransportTCPReadTimeouts()
 389     {
 390         return readTimeouts;
 391     }
 392     public boolean disableDirectByteBufferUse()
 393     {
 394         return disableDirectByteBufferUse ;
 395     }
 396     public boolean useRepId()
 397     {
 398         return useRepId;
 399     }
 400 
 401 // Methods for constructing and initializing this object ===========================================
 402 
 403     public ORBDataParserImpl( ORB orb, DataCollector coll )
 404     {
 405         super( ParserTable.get().getParserData() ) ;
 406         this.orb = orb ;
 407         wrapper = ORBUtilSystemException.get( orb, CORBALogDomains.ORB_LIFECYCLE ) ;
 408         init( coll ) ;
 409         complete() ;
 410     }
 411 
 412     public void complete()
 413     {
 414         codesets = new CodeSetComponentInfo(charData, wcharData);
 415     }
 416 }
 417 
 418 // End of file.