summaryrefslogtreecommitdiff
path: root/TAO/tao/Profile.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Profile.h')
-rw-r--r--TAO/tao/Profile.h412
1 files changed, 0 insertions, 412 deletions
diff --git a/TAO/tao/Profile.h b/TAO/tao/Profile.h
deleted file mode 100644
index c2de3870424..00000000000
--- a/TAO/tao/Profile.h
+++ /dev/null
@@ -1,412 +0,0 @@
-// -*- C++ -*-
-
-//=============================================================================
-/**
- * @file Profile.h
- *
- * $Id$
- *
- * @author Fred Kuhns <fredk@cs.wustl.edu>
- */
-//=============================================================================
-
-#ifndef TAO_PROFILE_H
-#define TAO_PROFILE_H
-
-#include /**/ "ace/pre.h"
-
-#include "tao/Tagged_Components.h"
-
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
-#include "tao/GIOP_Message_Version.h"
-#include "tao/Refcounted_ObjectKey.h"
-#include "tao/Service_Callbacks.h"
-
-class ACE_Lock;
-class TAO_MProfile;
-class TAO_Stub;
-class TAO_Endpoint;
-class TAO_ORB_Core;
-
-namespace CORBA
-{
- /// Forward declaration of PolicyList
- class PolicyList;
-
- class TypeCode;
- typedef TypeCode *TypeCode_ptr;
-}
-
-/**
- * @class TAO_Profile
- *
- * @brief Defines the Profile interface
- *
- * An abstract base class for representing object location
- * information. This is based on the CORBA IOR definitions.
- */
-class TAO_Export TAO_Profile
-{
-public:
-
- /// Constructor
- TAO_Profile (CORBA::ULong tag,
- TAO_ORB_Core *orb_core,
- const TAO_GIOP_Message_Version &version);
-
- /// If you have a virtual method you need a virtual dtor.
- virtual ~TAO_Profile (void);
-
- /**
- * @name Non virtual methods for the profile classes.
- */
-
- //@{
- /// The tag, each concrete class will have a specific tag value.
- CORBA::ULong tag (void) const;
-
- /// Return a pointer to this profile's version. This object
- /// maintains ownership.
- const TAO_GIOP_Message_Version &version (void) const;
-
- /// Get a pointer to the TAO_ORB_Core.
- TAO_ORB_Core *orb_core (void) const;
-
- /// Increase the reference count by one on this object.
- CORBA::ULong _incr_refcnt (void);
-
- /// Decrement the object's reference count. When this count goes to
- /// 0 this object will be deleted.
- CORBA::ULong _decr_refcnt (void);
-
- /// Keep a pointer to the forwarded profile
- void forward_to (TAO_MProfile *mprofiles);
-
- /// MProfile accessor
- TAO_MProfile* forward_to (void);
-
- /// Access the tagged components, notice that they they could be
- /// empty (or ignored) for non-GIOP protocols (and even for GIOP-1.0)
- const TAO_Tagged_Components& tagged_components (void) const;
- TAO_Tagged_Components& tagged_components (void);
-
- /// Add the given tagged component to the profile.
- void add_tagged_component (const IOP::TaggedComponent &component
- ACE_ENV_ARG_DECL);
-
- /**
- * Return the current addressing mode for this profile.
- * In almost all cases, this is TAO_Target_Specification::Key_Addr.
- */
- CORBA::Short addressing_mode (void) const;
-
- /// @deprecated Return a reference to the Object Key.
- const TAO::ObjectKey &object_key (void) const;
-
- /// Obtain the object key, return 0 if the profile cannot be parsed.
- /// The memory is owned by the caller!
- TAO::ObjectKey *_key (void) const;
- //@}
-
-
- /**
- * @name Template methods that needs to be implemented by the
- * concrete classes. Some of the methods may be overridden only
- * under specila circumstances.
- */
- //@{
- /// Encode this profile in a stream, i.e. marshal it.
- virtual int encode (TAO_OutputCDR &stream) const;
-
- /// Initialize this object using the given CDR octet string.
- virtual int decode (TAO_InputCDR& cdr);
-
- /**
- * This method is used to get the IOP::TaggedProfile. The profile
- * information that is received from the server side would have
- * already been decoded. So this method will just make a
- * IOP::TaggedProfile struct from the existing information and
- * return the reference to that. This method is necessary for GIOP
- * 1.2.
- */
- IOP::TaggedProfile *create_tagged_profile (void);
-
- /// This method sets the client exposed policies, i.e., the ones
- /// propagated in the IOR, for this profile.
- virtual void policies (CORBA::PolicyList *policy_list
- ACE_ENV_ARG_DECL);
-
- /// Accessor for the client exposed policies of this profile.
- //virtual CORBA::PolicyList& policies (ACE_ENV_SINGLE_ARG_DECL);
- virtual void get_policies (CORBA::PolicyList &policy_list
- ACE_ENV_ARG_DECL);
-
- /// Returns true if this profile can specify multicast endpoints.
- virtual int supports_multicast (void) const;
-
- /// Returns true if this profile supports non blocking oneways
- virtual bool supports_non_blocking_oneways (void) const;
-
- /**
- * Set the addressing mode if a remote servant replies with
- * an addressing mode exception. If this profile doesn't
- * support a particular addressing mode, this method needs to
- * be overridden signal the appropriate error.
- *
- * ** RACE CONDITION NOTE **
- *
- * Currently, getting and setting the addressing mode is not
- * protected by a mutex. Theoretically, this could cause a race
- * condition if one thread sends a request, then gets an exception
- * from the remote servant to change the addressing mode, and then
- * another thread sends a different request to the same servant
- * using the wrong addressing mode. The result of this is that
- * we'll get another address change exception. (Annoying, but not
- * that bad.)
- *
- * In practice at the current time, the above theoretical case
- * never happens since the target specification always uses the
- * object key except for MIOP requests. Remote ORBs can't respond
- * to MIOP requests even to send exceptions, so even in this case,
- * the race condition can't happen.
- *
- * Therefore, for the time being, there is no lock to protect the
- * addressing mode. Given that the addressing mode is checked in
- * the critical path, this decision seems like a good thing.
- */
- virtual void addressing_mode (CORBA::Short addr_mode
- ACE_ENV_ARG_DECL);
-
- /// The object key delimiter.
- virtual char object_key_delimiter (void) const = 0;
-
- /// Initialize this object using the given input string.
- /// Supports URL style of object references
- virtual void parse_string (const char *string
- ACE_ENV_ARG_DECL);
-
- /// Return a string representation for this profile. Client must
- /// deallocate memory. Only one endpoint is included into the
- /// string.
- virtual char* to_string (ACE_ENV_SINGLE_ARG_DECL) = 0;
-
- /**
- * Encodes this profile's endpoints into a tagged component.
- * This is done only if RTCORBA is enabled, since currently this is
- * the only case when we have more than one endpoint per profile.
- */
- virtual int encode_endpoints (void) = 0;
-
- /**
- * Return pointer to this profile's endpoint. If the profile
- * contains more than one endpoint, i.e., a list, the method returns
- * the head of the list.
- */
- virtual TAO_Endpoint *endpoint (void) = 0;
-
- /// Return how many endpoints this profile contains.
- virtual CORBA::ULong endpoint_count (void) const = 0;
-
- /// Verify profile equivalance.
- /**
- * Two profiles are equivalent if their tag, object_key, version
- * and all endpoints are the same.
- *
- * @see do_is_equivalent_i()
- * @see is_equivalent_hook()
- *
- * @return @c true if this profile is equivalent to @c other_profile.
- */
- CORBA::Boolean is_equivalent (const TAO_Profile* other_profile);
-
- /// Return a hash value for this object.
- virtual CORBA::ULong hash (CORBA::ULong max
- ACE_ENV_ARG_DECL) = 0;
- //@}
-
-protected:
-
- /**
- * @name Protected template methods.
- */
- //@{
- /// Decode the protocol specific profile details.
- virtual int decode_profile (TAO_InputCDR &cdr) = 0;
-
- /// Creates an encapsulation of the ProfileBody struct in the @a cdr
- virtual void create_profile_body (TAO_OutputCDR &cdr) const = 0;
-
- /**
- * Helper for <decode>. Decodes endpoints from a tagged component.
- * Decode only if RTCORBA is enabled. Furthermore, we may not find
- * TAO_TAG_ENDPOINTS component, e.g., if we are talking to nonRT
- * version of TAO or some other ORB. This is not an error, and we
- * must proceed. Return 0 on success and -1 on failure.
- */
- virtual int decode_endpoints (void) = 0;
-
- /// Protocol specific implementation of parse_string ()
- virtual void parse_string_i (const char *string
- ACE_ENV_ARG_DECL) = 0;
- //@}
-
- /// To be used by inherited classes
- TAO_Profile (CORBA::ULong tag,
- TAO_ORB_Core *orb_core,
- const TAO::ObjectKey &key,
- const TAO_GIOP_Message_Version &version);
-
- /// Helper method that encodes the endpoints for RTCORBA as
- /// tagged_components.
- void set_tagged_components (TAO_OutputCDR &cdr);
-
- /// Profile equivalence template method invoked on subclasses.
- /**
- * TAO_Profile subclasses must implement this template method so
- * that they can apply their own definition of profile equivalence.
- */
- virtual CORBA::Boolean do_is_equivalent (const TAO_Profile * other) = 0;
-
- /// Allow services to apply their own definition of "equivalence."
- /**
- * This method differs from the @c do_is_equivalent() template
- * method in that it has a default implementation that may or not be
- * applicable to all TAO_Profile subclasses.
- */
- virtual TAO_Service_Callbacks::Profile_Equivalence is_equivalent_hook (
- const TAO_Profile * other);
-
- CORBA::ULong hash_service_i (CORBA::ULong m);
-
-private:
-
- /// This object keeps ownership of this object
- TAO_MProfile *forward_to_i (void);
-
- /// Verify that the current ORB's configuration supports tagged
- /// components in IORs.
- void verify_orb_configuration (ACE_ENV_SINGLE_ARG_DECL);
-
- /// Verify that the given profile supports tagged components,
- /// i.e. is not a GIOP 1.0 profile.
- void verify_profile_version (ACE_ENV_SINGLE_ARG_DECL);
-
- // Profiles should not be copied!
- ACE_UNIMPLEMENTED_FUNC (TAO_Profile (const TAO_Profile&))
- ACE_UNIMPLEMENTED_FUNC (void operator= (const TAO_Profile&))
-
-protected:
-
- /// IIOP version number.
- TAO_GIOP_Message_Version version_;
-
- /// The tagged components
- TAO_Tagged_Components tagged_components_;
-
- /// Flag indicating whether the lazy decoding of the client exposed
- /// policies has taken place.
- CORBA::Boolean are_policies_parsed_;
-
- /// The current addressing mode.
- /// This may be changed if a remote server sends back an address mode
- /// exception.
- CORBA::Short addressing_mode_;
-
- /// Our tagged profile
- IOP::TaggedProfile *tagged_profile_;
-
- /// object_key associated with this profile.
- TAO::Refcounted_ObjectKey *ref_object_key_;
-
-private:
- /// IOP protocol tag.
- CORBA::ULong tag_;
-
- /// Pointer to the ORB core
- TAO_ORB_Core *orb_core_;
-
- /// The TAO_MProfile which contains the profiles for the forwarded
- /// object.
- TAO_MProfile* forward_to_;
-
- /// Mutex to protect reference count.
- ACE_Lock *refcount_lock_;
-
- /// Number of outstanding references to this object.
- CORBA::ULong refcount_;
-};
-
-// A helper class to handle the various kinds of octet sequences used
-// inside the ORB.
-
-typedef TAO_Unbounded_Sequence<CORBA::Octet> TAO_opaque;
-
-TAO_Export CORBA::Boolean
-operator<< (TAO_OutputCDR&, const TAO_opaque&);
-
-TAO_Export CORBA::Boolean
-operator>> (TAO_InputCDR&, TAO_opaque&);
-
-/**
- * @class TAO_Unknown_Profile
- *
- * @brief A TAO_Profile class to handle foreign profiles.
- *
- * The CORBA spec implies that ORBs must be prepared to save and
- * pass around profiles for protocols it does not recognize. It is
- * not mandatory to *use* those profiles but they shouldn't be
- * dropped.
- * This class stores the information required to marshal and
- * demarshal an unknown profile, but simply returns an error if
- * any of the TAO internal methods are invoked.
- */
-class TAO_Export TAO_Unknown_Profile : public TAO_Profile
-{
-public:
- /// Create the profile
- TAO_Unknown_Profile (CORBA::ULong tag,
- TAO_ORB_Core *orb_core);
-
- // = The TAO_Profile methods look above
- virtual void parse_string (const char *string
- ACE_ENV_ARG_DECL);
- virtual char object_key_delimiter (void) const;
- virtual char* to_string (ACE_ENV_SINGLE_ARG_DECL);
- virtual int decode (TAO_InputCDR& cdr);
- virtual int encode (TAO_OutputCDR &stream) const;
- virtual int encode_endpoints (void);
- virtual const TAO::ObjectKey &object_key (void) const;
- virtual TAO::ObjectKey *_key (void) const;
- virtual TAO_Endpoint *endpoint (void);
- virtual CORBA::ULong endpoint_count (void) const;
- virtual CORBA::ULong hash (CORBA::ULong max
- ACE_ENV_ARG_DECL);
-
- virtual int decode_profile (TAO_InputCDR &cdr);
- virtual int decode_endpoints (void);
-
-protected:
-
- virtual CORBA::Boolean do_is_equivalent (const TAO_Profile* other_profile);
- virtual TAO_Service_Callbacks::Profile_Equivalence is_equivalent_hook (
- const TAO_Profile* other_profile);
-
-private:
- virtual void create_profile_body (TAO_OutputCDR &encap) const;
-
- virtual void parse_string_i (const char *string
- ACE_ENV_ARG_DECL);
-private:
- TAO_opaque body_;
-};
-
-#if defined (__ACE_INLINE__)
-# include "Profile.i"
-#endif /* __ACE_INLINE__ */
-
-#include /**/ "ace/post.h"
-
-#endif /* TAO_PROFILE_H */